diff options
Diffstat (limited to 'tests/main.c')
-rw-r--r-- | tests/main.c | 80 |
1 files changed, 29 insertions, 51 deletions
diff --git a/tests/main.c b/tests/main.c index 94f2d32..9b1e40a 100644 --- a/tests/main.c +++ b/tests/main.c @@ -8,6 +8,7 @@ #include <stdlib.h> #include <unistd.h> +static int num_threads = 0; static int num_successful_tests = 0; static int num_tests_run = 0; @@ -26,7 +27,7 @@ static CHECK_RESULT int test_hash_map() { unsigned char i; return_if_error(scoped_allocator_init(&scoped_allocator)); - cleanup_if_error(hash_map_init(&hash_map, &scoped_allocator, sizeof(int), hash_compare_string, amal_hash_string)); + cleanup_if_error(hash_map_init(&hash_map, &scoped_allocator, sizeof(int), hash_map_compare_string, amal_hash_string)); value = 34; return_if_error(hash_map_insert(&hash_map, create_buffer_view("hello", 5), &value)); @@ -131,48 +132,29 @@ static CHECK_RESULT int get_thread_count_env_var(int *thread_count) { } static void test_load(const char *filepath) { - amal_compiler compiler; amal_compiler_options options; + amal_program program; char *full_path; int result; - int num_threads; - - result = get_thread_count_env_var(&num_threads); - if(result != 0) - num_threads = 0; - - if(num_threads < 0) { - amal_log_error("Environment variable THREADS contains invalid number for threads. THREADS has to be at least 0 (0 = use the number of available threads on the system)"); - exit(1); - } amal_compiler_options_init(&options); options.num_threads = num_threads; ++num_tests_run; full_path = get_full_path(filepath); - /* - options.error_callback = error_callback; - ErrorUnexpectedData data; - data.filepath = get_full_path(filepath); - options.error_callback_userdata = &data; - */ - - result = amal_compiler_init(&compiler, &options); - if(result != AMAL_COMPILER_OK) { - fprintf(stderr, "Failed to initialize compiler to test %s, error code: %d\n", full_path, result); - FAIL_TEST(full_path); - } - result = amal_compiler_load_file(&compiler, filepath); + amal_program_init(&program); + result = amal_compiler_load_file(&options, &program, filepath); if(result != AMAL_COMPILER_OK) { fprintf(stderr, "Failed to load file %s, result: %d\n", full_path, result); FAIL_TEST(full_path); } - if(amal_compiler_deinit(&compiler) != 0) { - fprintf(stderr, "Failed to deinitialize compiler for test %s\n", full_path); + result = amal_program_run(&program); + if(result != 0) { + fprintf(stderr, "Failed to run the program %s, result: %d\n", full_path, result); FAIL_TEST(full_path); } + amal_program_deinit(&program); fprintf(stderr, "Test succeeded as expected: %s\n", full_path); ++num_successful_tests; @@ -180,20 +162,10 @@ static void test_load(const char *filepath) { } static void test_load_error(const char *filepath, const char *expected_error) { - amal_compiler compiler; amal_compiler_options options; + amal_program program; ErrorExpectedData expected_data; int result; - int num_threads; - - result = get_thread_count_env_var(&num_threads); - if(result != 0) - num_threads = 0; - - if(num_threads < 0) { - amal_log_error("Environment variable THREADS contains invalid number for threads. THREADS has to be at least 0 (0 = use the number of available threads on the system)"); - exit(1); - } amal_compiler_options_init(&options); options.num_threads = num_threads; @@ -205,22 +177,13 @@ static void test_load_error(const char *filepath, const char *expected_error) { expected_data.got_expected_error = bool_false; options.error_callback_userdata = &expected_data; - result = amal_compiler_init(&compiler, &options); - if(result != AMAL_COMPILER_OK) { - fprintf(stderr, "Failed to initialize compiler, error code: %d\n", result); - FAIL_TEST(expected_data.filepath); - } - - result = amal_compiler_load_file(&compiler, filepath); + amal_program_init(&program); + result = amal_compiler_load_file(&options, &program, filepath); if(result == AMAL_COMPILER_OK) { fprintf(stderr, "Expected to fail loading file\n"); FAIL_TEST(expected_data.filepath); } - - if(amal_compiler_deinit(&compiler) != 0) { - fprintf(stderr, "Failed to deinitialize compiler.\n"); - FAIL_TEST(expected_data.filepath); - } + amal_program_deinit(&program); if(!expected_data.got_expected_error) { fprintf(stderr, "Didn't get expected error message:\n%s\n", expected_error); @@ -235,17 +198,30 @@ static void test_load_error(const char *filepath, const char *expected_error) { /* TODO: Restrict variables in global scope to const */ int main(int argc, char **argv) { + int result; + result = get_thread_count_env_var(&num_threads); + if(result != 0) + num_threads = 0; + + if(num_threads < 0) { + amal_log_error("Environment variable THREADS contains invalid number for threads. THREADS has to be at least 0 (0 = use the number of available threads on the system)"); + exit(1); + } + return_if_error(test_hash_map()); /* Run all tests */ if(argc == 1) { test_load("tests/main.amal"); + test_load("tests/utf8bom.amal"); + test_load("tests/bytecode.amal"); + test_load_error("tests/errors/duplicate_declaration.amal", "2:7: error: Variable with the name main was declared twice in the same scope\n" "const main = fn {}\n" " ^\n"); test_load_error("tests/errors/pub_in_closure.amal", - "2:5: error: Only declarations in structs can be public\n" + "2:5: error: Only declarations in global structs can be public\n" " pub const num = 45;\n" " ^\n"); test_load_error("tests/errors/closure_no_lhs.amal", @@ -262,10 +238,12 @@ int main(int argc, char **argv) { fprintf(stderr, "##### %d/%d tests succeeded #####\n", num_successful_tests, num_tests_run); } else { fprintf(stderr, "usage: test [test-file-path]\n"); + fprintf(stderr, "If you run test without any files then all tests will run.\n"); fprintf(stderr, "examples:\n"); fprintf(stderr, " test\n"); fprintf(stderr, " test tests/main.amal\n"); exit(1); } + return 0; }
\ No newline at end of file |