summaryrefslogtreecommitdiff
path: root/tests/domain_test.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/domain_test.c')
-rw-r--r--tests/domain_test.c71
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(&copy);
+ 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(&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(&copy);
+ return failures == 0 ? 0 : 1;
+}