#include "dat.h" #include "fn.h" #include "test.h" void dictionary_candidates(struct ct *t) { char many[8*(Maxkouho+1)], item[8]; char *p; Str kouho[Maxkouho], key; Trie *saved; Lang *lang; int i, n; lang = getlang(LangJP); saved = lang->dict; lang->dict = trienew(); trieput(lang->dict, "かな", strlen("かな"), " 候補1 候補2 ", strlen(" 候補1 候補2 ")); key = mkstr("かな"); n = dictlookup(lang->dict, &key, kouho, Maxkouho); if(CT_EQ_INT(t, 2, n)){ checkstr(t, "candidate 1", "候補1", &kouho[0]); checkstr(t, "candidate 2", "候補2", &kouho[1]); } p = many; for(i = 0; i < Maxkouho+1; i++){ snprint(item, sizeof item, "c%02d", i); if(i > 0) *p++ = ' '; memmove(p, item, strlen(item)); p += strlen(item); } *p = '\0'; trieput(lang->dict, "key", 3, many, strlen(many)); key = mkstr("key"); n = dictlookup(lang->dict, &key, kouho, Maxkouho); if(CT_EQ_INT(t, Maxkouho, n)){ checkstr(t, "first capped candidate", "c00", &kouho[0]); snprint(item, sizeof item, "c%02d", Maxkouho-1); checkstr(t, "last capped candidate", item, &kouho[Maxkouho-1]); } CT_EQ_INT(t, 3, dictlookup(lang->dict, &key, kouho, 3)); trieclose(lang->dict); lang->dict = saved; } void dictionary_misses(struct ct *t) { Str kouho[Maxkouho], key; Trie *saved; Lang *lang; lang = getlang(LangJP); saved = lang->dict; lang->dict = trienew(); key = mkstr(""); CT_EQ_INT(t, 0, dictlookup(lang->dict, &key, kouho, Maxkouho)); key = mkstr("missing"); CT_EQ_INT(t, 0, dictlookup(lang->dict, &key, kouho, Maxkouho)); CT_EQ_INT(t, 0, dictlookup(getlang(LangKO)->dict, &key, kouho, Maxkouho)); trieclose(lang->dict); lang->dict = saved; } void dictionary_prefix(struct ct *t) { Str kouho[Maxkouho], key; Trie *dict; dict = trienew(); trieput(dict, "smile", 5, "A B", 3); trieput(dict, "smiley", 6, "B C", 3); trieput(dict, "sad", 3, "D", 1); key = mkstr("smile"); if(CT_EQ_INT(t, 4, dictprefix(dict, &key, kouho, Maxkouho))){ checkstr(t, "own entry first", "A", &kouho[0]); checkstr(t, "entry below", "C", &kouho[3]); } key = mkstr("s"); CT_EQ_INT(t, 5, dictprefix(dict, &key, kouho, Maxkouho)); CT_EQ_INT(t, 2, dictprefix(dict, &key, kouho, 2)); key = mkstr("x"); CT_EQ_INT(t, 0, dictprefix(dict, &key, kouho, Maxkouho)); trieclose(dict); }