|
#include "test_utils.h"
|
|
#include "../runtime/methodcache.h"
|
|
|
|
UnittestTestResult_t* test_create_destroy(void) {
|
|
UNITTEST_BEGIN_TEST("TestMethodCache", "test_create_destroy");
|
|
|
|
MethodCache_t* cache = rava_methodcache_create();
|
|
UNITTEST_ASSERT_NOT_NULL(_unittest_result, cache, "cache should not be NULL");
|
|
rava_methodcache_destroy(cache);
|
|
|
|
UNITTEST_END_TEST();
|
|
}
|
|
|
|
UnittestTestResult_t* test_insert_lookup(void) {
|
|
UNITTEST_BEGIN_TEST("TestMethodCache", "test_insert_lookup");
|
|
|
|
MethodCache_t* cache = rava_methodcache_create();
|
|
UNITTEST_ASSERT_NOT_NULL(_unittest_result, cache, "cache should not be NULL");
|
|
|
|
int dummy_method = 42;
|
|
RavaMethod_t* method = (RavaMethod_t*)&dummy_method;
|
|
|
|
rava_methodcache_insert(cache, "TestClass", "testMethod", method);
|
|
|
|
RavaMethod_t* found = rava_methodcache_lookup(cache, "TestClass", "testMethod");
|
|
UNITTEST_ASSERT_TRUE(_unittest_result, found == method, "found method should match inserted");
|
|
|
|
rava_methodcache_destroy(cache);
|
|
|
|
UNITTEST_END_TEST();
|
|
}
|
|
|
|
UnittestTestResult_t* test_lookup_miss(void) {
|
|
UNITTEST_BEGIN_TEST("TestMethodCache", "test_lookup_miss");
|
|
|
|
MethodCache_t* cache = rava_methodcache_create();
|
|
UNITTEST_ASSERT_NOT_NULL(_unittest_result, cache, "cache should not be NULL");
|
|
|
|
RavaMethod_t* found = rava_methodcache_lookup(cache, "NonExistent", "method");
|
|
UNITTEST_ASSERT_NULL(_unittest_result, found, "lookup miss should return NULL");
|
|
|
|
rava_methodcache_destroy(cache);
|
|
|
|
UNITTEST_END_TEST();
|
|
}
|
|
|
|
UnittestTestResult_t* test_multiple_methods(void) {
|
|
UNITTEST_BEGIN_TEST("TestMethodCache", "test_multiple_methods");
|
|
|
|
MethodCache_t* cache = rava_methodcache_create();
|
|
UNITTEST_ASSERT_NOT_NULL(_unittest_result, cache, "cache should not be NULL");
|
|
|
|
int m1 = 1, m2 = 2;
|
|
RavaMethod_t* method1 = (RavaMethod_t*)&m1;
|
|
RavaMethod_t* method2 = (RavaMethod_t*)&m2;
|
|
|
|
rava_methodcache_insert(cache, "TestClass", "methodA", method1);
|
|
RavaMethod_t* found1 = rava_methodcache_lookup(cache, "TestClass", "methodA");
|
|
UNITTEST_ASSERT_TRUE(_unittest_result, found1 == method1, "found1 should match method1");
|
|
|
|
rava_methodcache_insert(cache, "OtherClass", "methodB", method2);
|
|
RavaMethod_t* found2 = rava_methodcache_lookup(cache, "OtherClass", "methodB");
|
|
UNITTEST_ASSERT_TRUE(_unittest_result, found2 == method2, "found2 should match method2");
|
|
|
|
rava_methodcache_destroy(cache);
|
|
|
|
UNITTEST_END_TEST();
|
|
}
|
|
|
|
UnittestTestResult_t* test_clear(void) {
|
|
UNITTEST_BEGIN_TEST("TestMethodCache", "test_clear");
|
|
|
|
MethodCache_t* cache = rava_methodcache_create();
|
|
UNITTEST_ASSERT_NOT_NULL(_unittest_result, cache, "cache should not be NULL");
|
|
|
|
int dummy = 42;
|
|
RavaMethod_t* method = (RavaMethod_t*)&dummy;
|
|
|
|
rava_methodcache_insert(cache, "TestClass", "testMethod", method);
|
|
UNITTEST_ASSERT_TRUE(_unittest_result, rava_methodcache_lookup(cache, "TestClass", "testMethod") == method, "should find method before clear");
|
|
|
|
rava_methodcache_clear(cache);
|
|
UNITTEST_ASSERT_NULL(_unittest_result, rava_methodcache_lookup(cache, "TestClass", "testMethod"), "should not find method after clear");
|
|
|
|
rava_methodcache_destroy(cache);
|
|
|
|
UNITTEST_END_TEST();
|
|
}
|
|
|
|
UnittestTestResult_t* test_null_params(void) {
|
|
UNITTEST_BEGIN_TEST("TestMethodCache", "test_null_params");
|
|
|
|
MethodCache_t* cache = rava_methodcache_create();
|
|
|
|
rava_methodcache_insert(NULL, "Class", "method", NULL);
|
|
rava_methodcache_insert(cache, NULL, "method", NULL);
|
|
rava_methodcache_insert(cache, "Class", NULL, NULL);
|
|
|
|
UNITTEST_ASSERT_NULL(_unittest_result, rava_methodcache_lookup(NULL, "Class", "method"), "NULL cache should return NULL");
|
|
UNITTEST_ASSERT_NULL(_unittest_result, rava_methodcache_lookup(cache, NULL, "method"), "NULL class should return NULL");
|
|
UNITTEST_ASSERT_NULL(_unittest_result, rava_methodcache_lookup(cache, "Class", NULL), "NULL method should return NULL");
|
|
|
|
rava_methodcache_destroy(cache);
|
|
|
|
UNITTEST_END_TEST();
|
|
}
|
|
|
|
UnittestTestResult_t* test_hash_function(void) {
|
|
UNITTEST_BEGIN_TEST("TestMethodCache", "test_hash_function");
|
|
|
|
uint32_t h1 = rava_methodcache_hash("hello");
|
|
uint32_t h2 = rava_methodcache_hash("hello");
|
|
uint32_t h3 = rava_methodcache_hash("world");
|
|
|
|
UNITTEST_ASSERT_EQUAL(_unittest_result, h1, h2, "same string should produce same hash");
|
|
UNITTEST_ASSERT_TRUE(_unittest_result, h1 != h3, "different strings should produce different hashes");
|
|
UNITTEST_ASSERT_TRUE(_unittest_result, h1 != 0, "hash should not be 0");
|
|
UNITTEST_ASSERT_TRUE(_unittest_result, h3 != 0, "hash should not be 0");
|
|
|
|
UNITTEST_END_TEST();
|
|
}
|
|
|
|
int main(int argc, char **argv) {
|
|
UnittestConfig_t *config = unittest_config_create();
|
|
config->verbosity = 2;
|
|
|
|
if (argc > 1 && strcmp(argv[1], "--json") == 0) {
|
|
config->output_format = UNITTEST_FORMAT_JSON;
|
|
config->use_colors = false;
|
|
}
|
|
|
|
UnittestTestSuite_t *suite = unittest_test_suite_create("Method Cache Tests");
|
|
|
|
UnittestTestCase_t *tc = unittest_test_case_create("TestMethodCache");
|
|
unittest_test_case_add_result(tc, test_create_destroy());
|
|
unittest_test_case_add_result(tc, test_insert_lookup());
|
|
unittest_test_case_add_result(tc, test_lookup_miss());
|
|
unittest_test_case_add_result(tc, test_multiple_methods());
|
|
unittest_test_case_add_result(tc, test_clear());
|
|
unittest_test_case_add_result(tc, test_null_params());
|
|
unittest_test_case_add_result(tc, test_hash_function());
|
|
unittest_test_suite_add_test_case(suite, tc);
|
|
|
|
unittest_generate_report(suite, config);
|
|
|
|
int failures = suite->total_failed + suite->total_errors;
|
|
unittest_test_suite_destroy(suite);
|
|
unittest_config_destroy(config);
|
|
|
|
return failures > 0 ? 1 : 0;
|
|
}
|