The dictionary thread ran in imthread's own proc, so a lookup could only start once the engine blocked, and it was a trie probe anyway; the emoji and Hanja searches already called dictlookup directly. The request/result channels, sequence numbers, staleness checks and the second draw per Japanese key are gone; dictqjp fills the candidates in place. Emit.dict and Lang.dictq only ever triggered lookups for Vietnamese, which has no dictionary. dictlookup(Lang*, key, out, max) returns the count. The Hanja lookup no longer pre-checks for a single syllable; a reading either has an entry or it does not.
81 lines
1.9 KiB
C
81 lines
1.9 KiB
C
#include "test.h"
|
|
|
|
void
|
|
dictionary_candidates(struct ct *t)
|
|
{
|
|
char many[512], 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, &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, &key, kouho, Maxkouho);
|
|
if(CT_EQ_INT(t, Maxkouho, n)){
|
|
checkstr(t, "first capped candidate", "c00", &kouho[0]);
|
|
checkstr(t, "last capped candidate", "c31", &kouho[31]);
|
|
}
|
|
CT_EQ_INT(t, 3, dictlookup(lang, &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, &key, kouho, Maxkouho));
|
|
key = mkstr("missing");
|
|
CT_EQ_INT(t, 0, dictlookup(lang, &key, kouho, Maxkouho));
|
|
CT_EQ_INT(t, 0, dictlookup(getlang(LangKO), &key, kouho, Maxkouho));
|
|
trieclose(lang->dict);
|
|
lang->dict = saved;
|
|
}
|
|
|
|
void
|
|
dictionary_emoji_identity(struct ct *t)
|
|
{
|
|
Str kouho[Maxkouho], key;
|
|
Trie *saved;
|
|
Lang *lang;
|
|
|
|
lang = getlang(LangEMOJI);
|
|
saved = lang->dict;
|
|
lang->dict = trienew();
|
|
trieput(lang->dict, "é", strlen("é"), "é", strlen("é"));
|
|
key = mkstr("é");
|
|
if(CT_EQ_INT(t, 1, dictlookup(lang, &key, kouho, Maxkouho)))
|
|
checkstr(t, "emoji identity candidate", "é", &kouho[0]);
|
|
trieclose(lang->dict);
|
|
lang->dict = saved;
|
|
}
|