#include #include #include "../include/compiler.h" #include "../include/std/hash_map.h" #include "../include/std/hash.h" #include #include #define REQUIRE_EQ_INT(expected, actual) do{\ if((expected) != (actual)) {\ fprintf(stderr, "%s:%d: Assert failed (%s vs %s).\nExpected %d, got %d.\n", __FILE__, __LINE__, #expected, #actual, (expected), (actual));\ exit(1);\ }\ }while(0) static CHECK_RESULT int test_hash_map() { ScopedAllocator scoped_allocator; HashMap hash_map; int value; bool has_key; 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)); value = 34; return_if_error(hash_map_insert(&hash_map, create_buffer_view("hello", 5), &value)); for(i = 0; i < 128; ++i) return_if_error(hash_map_insert(&hash_map, create_buffer_view((const char*)&i, 1), &value)); return_if_error(hash_map_insert(&hash_map, create_buffer_view("hellp", 5), &value)); has_key = hash_map_get(&hash_map, create_buffer_view("hello", 5), &value); if(!has_key) { fprintf(stderr, "Missing value for key \"hello\" in hash map\n"); exit(1); } REQUIRE_EQ_INT(34, value); cleanup: scoped_allocator_deinit(&scoped_allocator); return 0; } int main() { amal_compiler compiler; int result; const char *filepath; filepath = "tests/main.amal"; return_if_error(test_hash_map()); result = amal_compiler_init(&compiler); if(result != AMAL_COMPILER_OK) { fprintf(stderr, "Failed to initialize compiler, error code: %d\n", result); return 1; } result = amal_compiler_load_file(&compiler, create_buffer_view(filepath, strlen(filepath))); if(result != AMAL_COMPILER_OK) { fprintf(stderr, "Failed to load file, error code: %d\n", result); return 1; } return amal_compiler_deinit(&compiler); }