diff options
Diffstat (limited to 'tests/domain_test.c')
| -rw-r--r-- | tests/domain_test.c | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/tests/domain_test.c b/tests/domain_test.c new file mode 100644 index 0000000..d50e4bd --- /dev/null +++ b/tests/domain_test.c @@ -0,0 +1,71 @@ +#include "domain/message.h" +#include "domain/search.h" + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +static int failures; +#define CHECK(value) \ + do \ + { \ + if (!(value)) \ + { \ + fprintf(stderr, "CHECK failed at line %d: %s\n", __LINE__, #value); \ + failures++; \ + } \ + } \ + while (0) + +int +main(void) +{ + tiny_role_t role; + tiny_memory_tier_t tier; + const char valid_utf8[] = "\xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e"; + const char invalid_utf8[] = "\xc0\xaf"; + tiny_message_t original, copy; + tiny_search_index_t *search; + size_t *candidates = NULL, candidate_count = 0; + + CHECK(tiny_role_parse("user", &role) && role == TINY_ROLE_USER); + CHECK(!tiny_role_parse("tool", &role)); + CHECK(tiny_tier_parse("discard", &tier) && tier == TINY_TIER_DISCARD); + CHECK(!tiny_tier_parse("archive", &tier)); + CHECK(tiny_utf8_valid(valid_utf8, strlen(valid_utf8))); + CHECK(!tiny_utf8_valid(invalid_utf8, sizeof(invalid_utf8) - 1)); + CHECK(tiny_message_id_valid("01ARZ3NDEKTSV4RRFFQ69G5FAV")); + CHECK(!tiny_message_id_valid("81ARZ3NDEKTSV4RRFFQ69G5FAV")); + CHECK(!tiny_message_id_valid("01ARZ3NDEKTSV4RRFFQ69G5FAI")); + + tiny_message_init(&original); + tiny_message_init(©); + original.session_id = _strdup("session"); + original.content = _strdup("content"); + original.role = TINY_ROLE_ASSISTANT; + strcpy_s(original.message_id, sizeof(original.message_id), "01ARZ3NDEKTSV4RRFFQ69G5FAV"); + CHECK(tiny_message_copy(©, &original) == 0); + CHECK(copy.session_id != original.session_id); + CHECK(strcmp(copy.content, "content") == 0); + search = tiny_search_index_create(); + CHECK(search != NULL); + free(original.content); + original.content = _strdup("Curry and coffee"); + original.metadata.tags = calloc(1, sizeof(char *)); + original.metadata.tags[0] = _strdup("設計メモ"); + original.metadata.tag_count = 1; + CHECK(tiny_search_index_add(search, &original, 7)); + CHECK(tiny_search_index_candidates(search, "CURRY", &candidates, &candidate_count)); + CHECK(candidate_count == 1 && candidates[0] == 7); + CHECK(tiny_search_score("curry", &original) > 1.0); + free(candidates); + candidates = NULL; + CHECK(tiny_search_index_candidates(search, "設計", &candidates, &candidate_count)); + CHECK(candidate_count == 1 && candidates[0] == 7); + CHECK(tiny_search_score("設計", &original) > 0.0); + free(candidates); + tiny_search_index_free(search); + tiny_message_free(&original); + tiny_message_free(©); + return failures == 0 ? 0 : 1; +} |
