Commit 055f63df authored by Chris Müller's avatar Chris Müller
Browse files

Add first unittests for cherry

parent 9c6045d1
...@@ -15,4 +15,5 @@ include_directories(include) ...@@ -15,4 +15,5 @@ include_directories(include)
add_subdirectory(crystal) add_subdirectory(crystal)
add_subdirectory(runtime) add_subdirectory(runtime)
add_subdirectory(source) add_subdirectory(source)
add_subdirectory(test)
set(TEST_SOURCES
lex.c
main.c)
add_executable(cherry-testsuite ${TEST_SOURCES})
target_link_libraries(cherry-testsuite crystal cherry-core)
/*
* Cherry programming language
* Copyright (C) 2013 Christoph Mueller
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <crystal/unittest.h>
#include <cherry/parser.h>
#include <stdio.h>
#include <string.h>
static void test_lex_fixnum(const_pointer data)
{
byte_t* fixnum = "0 0xFF 0xFF_FF 1_000 0777 0b0001 0b0001_1111";
struct CyContext* c = cy_context_repl_new(fixnum);
assert(cy_lex(c) == TOK_DEC);
assert(strcmp(cy_token_string(c), "0") == 0);
assert(cy_lex(c) == TOK_HEX);
assert(strcmp(cy_token_string(c), "0xFF") == 0);
assert(cy_lex(c) == TOK_HEX);
assert(strcmp(cy_token_string(c), "0xFFFF") == 0);
assert(cy_lex(c) == TOK_DEC);
assert(strcmp(cy_token_string(c), "1000") == 0);
assert(cy_lex(c) == TOK_OCT);
assert(strcmp(cy_token_string(c), "0777") == 0);
assert(cy_lex(c) == TOK_BIN);
assert(strcmp(cy_token_string(c), "0b0001") == 0);
assert(cy_lex(c) == TOK_BIN);
assert(strcmp(cy_token_string(c), "0b00011111") == 0);
cy_context_free(c);
}
static void test_lex_float(const_pointer data)
{
byte_t* fixnum = "1.0 4e+1 5e-10 1.0e20";
struct CyContext* c = cy_context_repl_new(fixnum);
assert(cy_lex(c) == TOK_FLOAT);
assert(strcmp(cy_token_string(c), "1.0") == 0);
assert(cy_lex(c) == TOK_FLOAT);
assert(strcmp(cy_token_string(c), "4e+1") == 0);
assert(cy_lex(c) == TOK_FLOAT);
assert(strcmp(cy_token_string(c), "5e-10") == 0);
assert(cy_lex(c) == TOK_FLOAT);
assert(strcmp(cy_token_string(c), "1.0e20") == 0);
cy_context_free(c);
}
void test_suite_lex()
{
cry_unittest_run("org.cherry.parser/lex_fixnum", test_lex_fixnum, 0, 100);
cry_unittest_run("org.cherry.parser/lex_float", test_lex_float, 0, 100);
}
/*
* Cherry programming language
* Copyright (C) 2013 Christoph Mueller
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <crystal/unittest.h>
void test_suite_lex();
int main(int argc, char** argv)
{
cry_unittest_initialize(argc, argv);
test_suite_lex();
cry_unittest_finalize();
return EXIT_SUCCESS;
}
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment