void test_except_boundary(void) { grn::dat::Trie trie; create_trie(&trie); grn::dat::PrefixCursor cursor; cursor.open(trie, grn::dat::String("東京都庁ビル"), 0, 0, grn::dat::UINT32_MAX, grn::dat::EXCEPT_EXACT_MATCH); cppcut_assert_equal(grn::dat::UInt32(1), cursor.next().id()); cppcut_assert_equal(grn::dat::UInt32(3), cursor.next().id()); cppcut_assert_equal(grn::dat::UInt32(5), cursor.next().id()); cppcut_assert_equal(false, cursor.next().is_valid()); cursor.open(trie, grn::dat::String("東京都庁ビル"), std::strlen("東京"), 0, grn::dat::UINT32_MAX, grn::dat::EXCEPT_EXACT_MATCH); cppcut_assert_equal(grn::dat::UInt32(1), cursor.next().id()); cppcut_assert_equal(grn::dat::UInt32(3), cursor.next().id()); cppcut_assert_equal(grn::dat::UInt32(5), cursor.next().id()); cppcut_assert_equal(false, cursor.next().is_valid()); cursor.open(trie, grn::dat::String("東京都庁"), std::strlen("東京"), 0, grn::dat::UINT32_MAX, grn::dat::EXCEPT_EXACT_MATCH); cppcut_assert_equal(grn::dat::UInt32(1), cursor.next().id()); cppcut_assert_equal(grn::dat::UInt32(3), cursor.next().id()); cppcut_assert_equal(false, cursor.next().is_valid()); cursor.open(trie, grn::dat::String("京都府"), 0, 0, grn::dat::UINT32_MAX, grn::dat::EXCEPT_EXACT_MATCH); cppcut_assert_equal(grn::dat::UInt32(2), cursor.next().id()); cppcut_assert_equal(false, cursor.next().is_valid()); }
void test_ascending_cursor(void) { grn::dat::Trie trie; create_trie(&trie); grn::dat::PrefixCursor cursor; cursor.open(trie, grn::dat::String("京都府"), 0, 0, grn::dat::UINT32_MAX, grn::dat::ASCENDING_CURSOR); cppcut_assert_equal(grn::dat::UInt32(2), cursor.next().id()); cppcut_assert_equal(grn::dat::UInt32(4), cursor.next().id()); cppcut_assert_equal(false, cursor.next().is_valid()); cursor.open(trie, grn::dat::String("京都府"), std::strlen("京都"), 0, grn::dat::UINT32_MAX, grn::dat::ASCENDING_CURSOR); cppcut_assert_equal(grn::dat::UInt32(2), cursor.next().id()); cppcut_assert_equal(grn::dat::UInt32(4), cursor.next().id()); cppcut_assert_equal(false, cursor.next().is_valid()); cursor.open(trie, grn::dat::String("京都府"), 0, 1, grn::dat::UINT32_MAX, grn::dat::ASCENDING_CURSOR); cppcut_assert_equal(grn::dat::UInt32(4), cursor.next().id()); cppcut_assert_equal(false, cursor.next().is_valid()); cursor.open(trie, grn::dat::String("京都府"), 0, 0, 1, grn::dat::ASCENDING_CURSOR); cppcut_assert_equal(grn::dat::UInt32(2), cursor.next().id()); cppcut_assert_equal(false, cursor.next().is_valid()); }
void test_descending_cursor(void) { grn::dat::Trie trie; create_trie(&trie); grn::dat::KeyCursor cursor; cursor.open(trie, grn::dat::String(), grn::dat::String(), 0, grn::dat::UINT32_MAX, grn::dat::DESCENDING_CURSOR); cppcut_assert_equal(grn::dat::UInt32(1), cursor.next().id()); cppcut_assert_equal(grn::dat::UInt32(2), cursor.next().id()); cppcut_assert_equal(grn::dat::UInt32(3), cursor.next().id()); cppcut_assert_equal(grn::dat::UInt32(7), cursor.next().id()); cppcut_assert_equal(grn::dat::UInt32(6), cursor.next().id()); cppcut_assert_equal(grn::dat::UInt32(4), cursor.next().id()); cppcut_assert_equal(grn::dat::UInt32(5), cursor.next().id()); cppcut_assert_equal(false, cursor.next().is_valid()); cursor.open(trie, grn::dat::String("Elf"), grn::dat::String("Human"), 0, grn::dat::UINT32_MAX, grn::dat::DESCENDING_CURSOR); cppcut_assert_equal(grn::dat::UInt32(3), cursor.next().id()); cppcut_assert_equal(grn::dat::UInt32(7), cursor.next().id()); cppcut_assert_equal(grn::dat::UInt32(6), cursor.next().id()); cppcut_assert_equal(grn::dat::UInt32(4), cursor.next().id()); cppcut_assert_equal(false, cursor.next().is_valid()); cursor.open(trie, grn::dat::String("Dwarf"), grn::dat::String("Trebor"), 3, 2, grn::dat::DESCENDING_CURSOR); cppcut_assert_equal(grn::dat::UInt32(6), cursor.next().id()); cppcut_assert_equal(grn::dat::UInt32(4), cursor.next().id()); cppcut_assert_equal(false, cursor.next().is_valid()); }
void test_limit(void) { grn::dat::Trie trie; create_trie(&trie); grn::dat::KeyCursor cursor; cursor.open(trie, grn::dat::String("Gnome"), grn::dat::String("Werdna"), 0, grn::dat::UINT32_MAX); cppcut_assert_equal(grn::dat::UInt32(6), cursor.next().id()); cppcut_assert_equal(grn::dat::UInt32(7), cursor.next().id()); cppcut_assert_equal(grn::dat::UInt32(3), cursor.next().id()); cppcut_assert_equal(grn::dat::UInt32(2), cursor.next().id()); cppcut_assert_equal(grn::dat::UInt32(1), cursor.next().id()); cppcut_assert_equal(false, cursor.next().is_valid()); cursor.open(trie, grn::dat::String("Gnome"), grn::dat::String("Werdna"), 0, 3); cppcut_assert_equal(grn::dat::UInt32(6), cursor.next().id()); cppcut_assert_equal(grn::dat::UInt32(7), cursor.next().id()); cppcut_assert_equal(grn::dat::UInt32(3), cursor.next().id()); cppcut_assert_equal(false, cursor.next().is_valid()); cursor.open(trie, grn::dat::String("A"), grn::dat::String("Z"), 3, 2); cppcut_assert_equal(grn::dat::UInt32(7), cursor.next().id()); cppcut_assert_equal(grn::dat::UInt32(3), cursor.next().id()); cppcut_assert_equal(false, cursor.next().is_valid()); cursor.open(trie, grn::dat::String("A"), grn::dat::String("Z"), 0, 0); cppcut_assert_equal(false, cursor.next().is_valid()); }
void test_offset(void) { grn::dat::Trie trie; create_trie(&trie); grn::dat::KeyCursor cursor; cursor.open(trie, grn::dat::String("Hobbit"), grn::dat::String("Trebor"), 0); cppcut_assert_equal(grn::dat::UInt32(7), cursor.next().id()); cppcut_assert_equal(grn::dat::UInt32(3), cursor.next().id()); cppcut_assert_equal(grn::dat::UInt32(2), cursor.next().id()); cppcut_assert_equal(false, cursor.next().is_valid()); cursor.open(trie, grn::dat::String(), grn::dat::String(), 5); cppcut_assert_equal(grn::dat::UInt32(2), cursor.next().id()); cppcut_assert_equal(grn::dat::UInt32(1), cursor.next().id()); cppcut_assert_equal(false, cursor.next().is_valid()); cursor.open(trie, grn::dat::String("Gnome"), grn::dat::String("Trebor"), 2); cppcut_assert_equal(grn::dat::UInt32(3), cursor.next().id()); cppcut_assert_equal(grn::dat::UInt32(2), cursor.next().id()); cppcut_assert_equal(false, cursor.next().is_valid()); cursor.open(trie, grn::dat::String("Gnome"), grn::dat::String("Trebor"), 100); cppcut_assert_equal(false, cursor.next().is_valid()); }
void test_offset(void) { grn::dat::Trie trie; create_trie(&trie); grn::dat::PrefixCursor cursor; cursor.open(trie, grn::dat::String("東京都庁ビル"), 0, 0); cppcut_assert_equal(grn::dat::UInt32(1), cursor.next().id()); cppcut_assert_equal(grn::dat::UInt32(3), cursor.next().id()); cppcut_assert_equal(grn::dat::UInt32(5), cursor.next().id()); cppcut_assert_equal(false, cursor.next().is_valid()); cursor.open(trie, grn::dat::String("東京都庁ビル"), 0, 1); cppcut_assert_equal(grn::dat::UInt32(3), cursor.next().id()); cppcut_assert_equal(grn::dat::UInt32(5), cursor.next().id()); cppcut_assert_equal(false, cursor.next().is_valid()); cursor.open(trie, grn::dat::String("東京都庁ビル"), 0, 2); cppcut_assert_equal(grn::dat::UInt32(5), cursor.next().id()); cppcut_assert_equal(false, cursor.next().is_valid()); cursor.open(trie, grn::dat::String("東京都庁ビル"), 0, 3); cppcut_assert_equal(false, cursor.next().is_valid()); }
void test_null(void) { grn::dat::Trie trie; create_trie(&trie); grn::dat::PrefixCursor cursor; cursor.open(trie, grn::dat::String()); cppcut_assert_equal(false, cursor.next().is_valid()); }
void test_min_max(void) { grn::dat::Trie trie; create_trie(&trie); grn::dat::KeyCursor cursor; cursor.open(trie, grn::dat::String("Gnome"), grn::dat::String("Trebor")); cppcut_assert_equal(grn::dat::UInt32(6), cursor.next().id()); cppcut_assert_equal(grn::dat::UInt32(7), cursor.next().id()); cppcut_assert_equal(grn::dat::UInt32(3), cursor.next().id()); cppcut_assert_equal(grn::dat::UInt32(2), cursor.next().id()); cppcut_assert_equal(false, cursor.next().is_valid()); }
int main() {T=initial(); for(int k=0;k<1000;k++)word_count_all[k]=0; for(int j=0;j<=968;j++){ int flag=0;//for xcode, flag=1;for windows, flag=0; if(flag){ char filename[10]; char entire_add[300]="/Users/aidanfok/Documents/大三下/Data\ Structure/mini\ search\ engine/out/"; memset(filename,0,sizeof(filename)); sprintf(filename,"%d",j); strcat(filename,".txt"); strcat(entire_add, filename); FILE* fp; fp=fopen(entire_add,"r"); create_trie(fp,j); printf("word count of %d file:%d\n",j,word_count_all[j]); fclose(fp);} else { char filename[10]; memset(filename,0,sizeof(filename)); sprintf(filename,"%d",j); strcat(filename,".txt"); FILE* fp; fp=fopen(filename,"r"); create_trie(fp,j); printf("word count of %d file:%d\n",j,word_count_all[j]); fclose(fp); } } T=find_noisy(T); char a[1000]="pluck"; find(a, T); return 0; }
void test_except_boundary(void) { grn::dat::Trie trie; create_trie(&trie); grn::dat::KeyCursor cursor; cursor.open(trie, grn::dat::String(), grn::dat::String(), 0, grn::dat::UINT32_MAX, grn::dat::EXCEPT_LOWER_BOUND | grn::dat::EXCEPT_UPPER_BOUND); cppcut_assert_equal(grn::dat::UInt32(5), cursor.next().id()); cppcut_assert_equal(grn::dat::UInt32(4), cursor.next().id()); cppcut_assert_equal(grn::dat::UInt32(6), cursor.next().id()); cppcut_assert_equal(grn::dat::UInt32(7), cursor.next().id()); cppcut_assert_equal(grn::dat::UInt32(3), cursor.next().id()); cppcut_assert_equal(grn::dat::UInt32(2), cursor.next().id()); cppcut_assert_equal(grn::dat::UInt32(1), cursor.next().id()); cppcut_assert_equal(false, cursor.next().is_valid()); cursor.open(trie, grn::dat::String("Dwarf"), grn::dat::String("Werdna"), 0, grn::dat::UINT32_MAX, grn::dat::EXCEPT_LOWER_BOUND | grn::dat::EXCEPT_UPPER_BOUND); cppcut_assert_equal(grn::dat::UInt32(4), cursor.next().id()); cppcut_assert_equal(grn::dat::UInt32(6), cursor.next().id()); cppcut_assert_equal(grn::dat::UInt32(7), cursor.next().id()); cppcut_assert_equal(grn::dat::UInt32(3), cursor.next().id()); cppcut_assert_equal(grn::dat::UInt32(2), cursor.next().id()); cppcut_assert_equal(false, cursor.next().is_valid()); cursor.open(trie, grn::dat::String("Elf"), grn::dat::String("Trebor"), 2, 100, grn::dat::EXCEPT_LOWER_BOUND); cppcut_assert_equal(grn::dat::UInt32(3), cursor.next().id()); cppcut_assert_equal(grn::dat::UInt32(2), cursor.next().id()); cppcut_assert_equal(false, cursor.next().is_valid()); cursor.open(trie, grn::dat::String("Elf"), grn::dat::String("Trebor"), 2, 100, grn::dat::EXCEPT_UPPER_BOUND); cppcut_assert_equal(grn::dat::UInt32(7), cursor.next().id()); cppcut_assert_equal(grn::dat::UInt32(3), cursor.next().id()); cppcut_assert_equal(false, cursor.next().is_valid()); cursor.open(trie, grn::dat::String("Fighter"), grn::dat::String("Samurai"), 0, grn::dat::UINT32_MAX, grn::dat::EXCEPT_LOWER_BOUND | grn::dat::EXCEPT_UPPER_BOUND); cppcut_assert_equal(grn::dat::UInt32(6), cursor.next().id()); cppcut_assert_equal(grn::dat::UInt32(7), cursor.next().id()); cppcut_assert_equal(grn::dat::UInt32(3), cursor.next().id()); cppcut_assert_equal(false, cursor.next().is_valid()); }
void test_null(void) { grn::dat::Trie trie; create_trie(&trie); grn::dat::KeyCursor cursor; cursor.open(trie, grn::dat::String(), grn::dat::String()); cppcut_assert_equal(grn::dat::UInt32(5), cursor.next().id()); cppcut_assert_equal(grn::dat::UInt32(4), cursor.next().id()); cppcut_assert_equal(grn::dat::UInt32(6), cursor.next().id()); cppcut_assert_equal(grn::dat::UInt32(7), cursor.next().id()); cppcut_assert_equal(grn::dat::UInt32(3), cursor.next().id()); cppcut_assert_equal(grn::dat::UInt32(2), cursor.next().id()); cppcut_assert_equal(grn::dat::UInt32(1), cursor.next().id()); cppcut_assert_equal(false, cursor.next().is_valid()); }
void test_descending_cursor(void) { grn::dat::Trie trie; create_trie(&trie); grn::dat::PrefixCursor cursor; cursor.open(trie, grn::dat::String("東京都庁"), 0, 0, grn::dat::MAX_UINT32, grn::dat::DESCENDING_CURSOR); cppcut_assert_equal(grn::dat::UInt32(5), cursor.next().id()); cppcut_assert_equal(grn::dat::UInt32(3), cursor.next().id()); cppcut_assert_equal(grn::dat::UInt32(1), cursor.next().id()); cppcut_assert_equal(false, cursor.next().is_valid()); cursor.open(trie, grn::dat::String("東京都庁"), std::strlen("東京都"), 0, grn::dat::MAX_UINT32, grn::dat::DESCENDING_CURSOR); cppcut_assert_equal(grn::dat::UInt32(5), cursor.next().id()); cppcut_assert_equal(grn::dat::UInt32(3), cursor.next().id()); cppcut_assert_equal(false, cursor.next().is_valid()); cursor.open(trie, grn::dat::String("東京都庁"), std::strlen("東京都"), 1, grn::dat::MAX_UINT32, grn::dat::DESCENDING_CURSOR); cppcut_assert_equal(grn::dat::UInt32(3), cursor.next().id()); cppcut_assert_equal(false, cursor.next().is_valid()); cursor.open(trie, grn::dat::String("東京都庁"), std::strlen("東京都"), 0, 1, grn::dat::DESCENDING_CURSOR); cppcut_assert_equal(grn::dat::UInt32(5), cursor.next().id()); cppcut_assert_equal(false, cursor.next().is_valid()); cursor.open(trie, grn::dat::String("東京都庁"), 0, 1, grn::dat::MAX_UINT32, grn::dat::DESCENDING_CURSOR); cppcut_assert_equal(grn::dat::UInt32(3), cursor.next().id()); cppcut_assert_equal(grn::dat::UInt32(1), cursor.next().id()); cppcut_assert_equal(false, cursor.next().is_valid()); cursor.open(trie, grn::dat::String("東京都庁"), 0, 0, 2, grn::dat::DESCENDING_CURSOR); cppcut_assert_equal(grn::dat::UInt32(5), cursor.next().id()); cppcut_assert_equal(grn::dat::UInt32(3), cursor.next().id()); cppcut_assert_equal(false, cursor.next().is_valid()); }
void test_max_by_str(void) { grn::dat::Trie trie; create_trie(&trie); grn::dat::KeyCursor cursor; cursor.open(trie, grn::dat::String(), grn::dat::String("Elf")); cppcut_assert_equal(grn::dat::UInt32(5), cursor.next().id()); cppcut_assert_equal(grn::dat::UInt32(4), cursor.next().id()); cppcut_assert_equal(false, cursor.next().is_valid()); cursor.open(trie, grn::dat::String(), grn::dat::String("F")); cppcut_assert_equal(grn::dat::UInt32(5), cursor.next().id()); cppcut_assert_equal(grn::dat::UInt32(4), cursor.next().id()); cppcut_assert_equal(false, cursor.next().is_valid()); cursor.open(trie, grn::dat::String(), grn::dat::String("A")); cppcut_assert_equal(false, cursor.next().is_valid()); }
struct node* insert(struct node* node, int* s) { int ch = *s; if (node == NULL) { node = create_trie(s); } else if (ch < node->ch) { node->left = insert(node->left, s); } else if (ch > node->ch) { node->right = insert(node->right, s); } else if (*(s+1) >= 0 ) { node->mid = insert(node->mid, s+1); } else { // last character. ++node->last; } return node; }
void test_min_length(void) { grn::dat::Trie trie; create_trie(&trie); grn::dat::PrefixCursor cursor; cursor.open(trie, grn::dat::String("東京都庁ビル"), std::strlen("")); cppcut_assert_equal(grn::dat::UInt32(1), cursor.next().id()); cppcut_assert_equal(grn::dat::UInt32(3), cursor.next().id()); cppcut_assert_equal(grn::dat::UInt32(5), cursor.next().id()); cppcut_assert_equal(false, cursor.next().is_valid()); cursor.open(trie, grn::dat::String("東京都庁ビル"), std::strlen("東")); cppcut_assert_equal(grn::dat::UInt32(1), cursor.next().id()); cppcut_assert_equal(grn::dat::UInt32(3), cursor.next().id()); cppcut_assert_equal(grn::dat::UInt32(5), cursor.next().id()); cppcut_assert_equal(false, cursor.next().is_valid()); cursor.open(trie, grn::dat::String("東京都庁ビル"), std::strlen("東京")); cppcut_assert_equal(grn::dat::UInt32(1), cursor.next().id()); cppcut_assert_equal(grn::dat::UInt32(3), cursor.next().id()); cppcut_assert_equal(grn::dat::UInt32(5), cursor.next().id()); cppcut_assert_equal(false, cursor.next().is_valid()); cursor.open(trie, grn::dat::String("東京都庁ビル"), std::strlen("東京都")); cppcut_assert_equal(grn::dat::UInt32(3), cursor.next().id()); cppcut_assert_equal(grn::dat::UInt32(5), cursor.next().id()); cppcut_assert_equal(false, cursor.next().is_valid()); cursor.open(trie, grn::dat::String("東京都庁ビル"), std::strlen("東京都庁")); cppcut_assert_equal(grn::dat::UInt32(5), cursor.next().id()); cppcut_assert_equal(false, cursor.next().is_valid()); cursor.open(trie, grn::dat::String("東京都庁ビル"), std::strlen("東京都庁ビル")); cppcut_assert_equal(false, cursor.next().is_valid()); }
void test_str(void) { grn::dat::Trie trie; create_trie(&trie); grn::dat::PrefixCursor cursor; cursor.open(trie, grn::dat::String("京都")); cppcut_assert_equal(grn::dat::UInt32(2), cursor.next().id()); cppcut_assert_equal(false, cursor.next().is_valid()); cursor.open(trie, grn::dat::String("京都府")); cppcut_assert_equal(grn::dat::UInt32(2), cursor.next().id()); cppcut_assert_equal(grn::dat::UInt32(4), cursor.next().id()); cppcut_assert_equal(false, cursor.next().is_valid()); cursor.open(trie, grn::dat::String("東京")); cppcut_assert_equal(grn::dat::UInt32(1), cursor.next().id()); cppcut_assert_equal(false, cursor.next().is_valid()); cursor.open(trie, grn::dat::String("東京都")); cppcut_assert_equal(grn::dat::UInt32(1), cursor.next().id()); cppcut_assert_equal(grn::dat::UInt32(3), cursor.next().id()); cppcut_assert_equal(false, cursor.next().is_valid()); cursor.open(trie, grn::dat::String("東京都庁")); cppcut_assert_equal(grn::dat::UInt32(1), cursor.next().id()); cppcut_assert_equal(grn::dat::UInt32(3), cursor.next().id()); cppcut_assert_equal(grn::dat::UInt32(5), cursor.next().id()); cppcut_assert_equal(false, cursor.next().is_valid()); cursor.open(trie, grn::dat::String("東京都議会")); cppcut_assert_equal(grn::dat::UInt32(1), cursor.next().id()); cppcut_assert_equal(grn::dat::UInt32(3), cursor.next().id()); cppcut_assert_equal(false, cursor.next().is_valid()); }
void test_datrie_states() { int states1[2] = {1, 1}; int states2[3] = {1, 1, 2}; int states3[3] = {1, 1, 4}; int states4[2] = {2, 3}; int states5[2] = {2, 5}; int states6[3] = {2, 5, 4}; int states7[2] = {3, 4}; int fs1[2] = {1, 1}; int fs2[3] = {1, 1, 2}; int fs3[3] = {1, 1, 4}; int fs4[2] = {2, 3}; int fs5[2] = {2, 5}; int fs6[3] = {2, 5, 4}; int fs7[2] = {3, 4}; int fs8[1] = {1}; int fs9[3] = {1, 2, 3}; int fs10[3] = {1, 1, 3}; int r; struct tstate_s tstate; struct trie_s* trie; struct datrie_s* datrie; struct trie_state_s* state_list; struct stateslot_s stateslot; trie = create_trie(wordimage); /* add states */ tstate.states = states1; tstate.statecount = 2; tstate.userdata.freq = 7; r = add_states(trie, &tstate); CHECK("check add states1", r > 0); tstate.states = states2; tstate.statecount = 3; tstate.userdata.freq = 6; r = add_states(trie, &tstate); CHECK("check add states2", r > 0); tstate.states = states3; tstate.statecount = 3; tstate.userdata.freq = 5; r = add_states(trie, &tstate); CHECK("check add states3", r > 0); tstate.states = states4; tstate.statecount = 2; tstate.userdata.freq = 4; r = add_states(trie, &tstate); CHECK("check add states4", r > 0); tstate.states = states5; tstate.statecount = 2; tstate.userdata.freq = 3; r = add_states(trie, &tstate); CHECK("check add states5", r > 0); tstate.states = states6; tstate.statecount = 3; tstate.userdata.freq = 2; r = add_states(trie, &tstate); CHECK("check add states6", r > 0); tstate.states = states7; tstate.statecount = 2; tstate.userdata.freq = 1; r = add_states(trie, &tstate); CHECK("check add states7", r > 0); trie_out_text(trie, NULL); datrie = create_datrie(wordimage, NULL, get_userdata_count(trie), 1, 0); state_list = get_sort_state_list(trie); build_state_list(datrie, state_list); /* find state */ stateslot.s = 1; stateslot.userdata.freq = 0; r = dat_find_state(datrie, &stateslot, 1); CHECK("check find state=1", r == 1 && stateslot.userdata.freq == 0); r = dat_find_state(datrie, &stateslot, 1); CHECK("check find state=1", r == 2 && stateslot.userdata.freq == 7); r = dat_find_state(datrie, &stateslot, 4); CHECK("check find state=4", r == 2 && stateslot.userdata.freq == 5); /* find states */ tstate.states = fs1; tstate.statecount = 2; tstate.userdata.freq = 0; r = dat_find_states(datrie, &tstate); CHECK("check find states1", r == 2 && tstate.userdata.freq == 7); tstate.states = fs2; tstate.statecount = 3; tstate.userdata.freq = 0; r = dat_find_states(datrie, &tstate); CHECK("check find states2", r == 2 && tstate.userdata.freq == 6); tstate.states = fs3; tstate.statecount = 3; tstate.userdata.freq = 0; r = dat_find_states(datrie, &tstate); CHECK("check find states3", r == 2 && tstate.userdata.freq == 5); tstate.states = fs4; tstate.statecount = 2; tstate.userdata.freq = 0; r = dat_find_states(datrie, &tstate); CHECK("check find states4", r == 2 && tstate.userdata.freq == 4); tstate.states = fs5; tstate.statecount = 2; tstate.userdata.freq = 0; r = dat_find_states(datrie, &tstate); CHECK("check find states5", r == 2 && tstate.userdata.freq == 3); tstate.states = fs6; tstate.statecount = 3; tstate.userdata.freq = 0; r = dat_find_states(datrie, &tstate); CHECK("check find states6", r == 2 && tstate.userdata.freq == 2); tstate.states = fs7; tstate.statecount = 2; tstate.userdata.freq = 0; r = dat_find_states(datrie, &tstate); CHECK("check find states7", r == 2 && tstate.userdata.freq == 1); tstate.states = fs8; tstate.statecount = 1; tstate.userdata.freq = 0; r = dat_find_states(datrie, &tstate); CHECK("check find states8", r == 1 && tstate.userdata.freq == 0); tstate.states = fs9; tstate.statecount = 3; tstate.userdata.freq = 0; r = dat_find_states(datrie, &tstate); CHECK("check find states9", r == 0 && tstate.userdata.freq == 0); tstate.states = fs10; tstate.statecount = 3; tstate.userdata.freq = 0; r = dat_find_states(datrie, &tstate); CHECK("check find states10", r == 0 && tstate.userdata.freq == 0); clear_datrie(datrie); clear_trie(trie); }
void test_trie_tree_states() { int states1[5] = {1, 2, 3, 4, 5}; int states2[4] = {3, 6, 8, 7}; int states3[5] = {1, 2, 5, 8, 9}; int states4[5] = {3, 7, 9, 2, 5}; int fs1[5] = {1, 2, 3, 4, 5}; int fs2[6] = {1, 2, 3, 4, 5, 7}; int fs3[3] = {1, 2, 5}; int fs4[4] = {1, 2, 3, 4}; int fs5[5] = {1, 2, 5, 8, 7}; int fs6[5] = {3, 7, 9, 2, 5}; int r; struct tstate_s tstate; struct trie_s* trie; trie = create_trie(wordimage); /* add states */ tstate.states = states1; tstate.statecount = 5; tstate.userdata.freq = 4; tstate.userdata.POS = 10; r = add_states(trie, &tstate); CHECK("check add states1", r > 0); tstate.states = states2; tstate.statecount = 4; tstate.userdata.freq = 3; r = add_states(trie, &tstate); CHECK("check add states2", r > 0); tstate.states = states3; tstate.statecount = 5; tstate.userdata.freq = 2; r = add_states(trie, &tstate); CHECK("check add states3", r > 0); tstate.states = states4; tstate.statecount = 5; tstate.userdata.freq = 1; r = add_states(trie, &tstate); CHECK("check add states4", r > 0); /* find states */ tstate.states = fs1; tstate.statecount = 5; tstate.userdata.freq = 0; r = find_states(trie, &tstate); CHECK("check find fs1", r == 1 && tstate.userdata.freq == 4 && tstate.userdata.POS == 10); tstate.states = fs2; tstate.statecount = 6; tstate.userdata.freq = 0; r = find_states(trie, &tstate); CHECK("check find fs2", r == 0 && tstate.userdata.freq == 0); tstate.states = fs3; tstate.statecount = 3; tstate.userdata.freq = 0; r = find_states(trie, &tstate); CHECK("check find fs3", r == 1 && tstate.userdata.freq == 0); tstate.states = fs4; tstate.statecount = 4; tstate.userdata.freq = 0; r = find_states(trie, &tstate); CHECK("check find fs4", r == 1 && tstate.userdata.freq == 0); tstate.states = fs5; tstate.statecount = 5; tstate.userdata.freq = 0; r = find_states(trie, &tstate); CHECK("check find fs5", r == 0 && tstate.userdata.freq == 0); tstate.states = fs6; tstate.statecount = 5; tstate.userdata.freq = 0; r = find_states(trie, &tstate); CHECK("check find fs5", r == 1 && tstate.userdata.freq == 1); /* trie tree sort */ struct trie_state_s* sortlist = get_sort_state_list(trie); r = sortlist->nscount; CHECK("sort result 8", r == 16); sortlist = sortlist->sortnext; r = sortlist->nscount; CHECK("sort result 7", r == 7); sortlist = sortlist->sortnext; r = sortlist->nscount; CHECK("sort result 7", r == 7); sortlist = sortlist->sortnext; r = sortlist->nscount; CHECK("sort result 6", r == 6); sortlist = sortlist->sortnext; r = sortlist->nscount; CHECK("sort result 3", r == 3); sortlist = sortlist->sortnext; r = sortlist->nscount; CHECK("sort result 2", r == 2); sortlist = sortlist->sortnext; r = sortlist->nscount; CHECK("sort result 2", r == 2); sortlist = sortlist->sortnext; r = sortlist->nscount; CHECK("sort result 2", r == 2); sortlist = sortlist->sortnext; r = sortlist->nscount; CHECK("sort result 2", r == 2); sortlist = sortlist->sortnext; r = sortlist->nscount; CHECK("sort result 1", r == 1); sortlist = sortlist->sortnext; r = sortlist->nscount; CHECK("sort result 1", r == 1); sortlist = sortlist->sortnext; r = sortlist->nscount; CHECK("sort result 1", r == 1); sortlist = sortlist->sortnext; r = sortlist->nscount; CHECK("sort result 1", r == 1); sortlist = sortlist->sortnext; r = sortlist->nscount; CHECK("sort result 0", r == 0); sortlist = sortlist->sortnext; r = sortlist->nscount; CHECK("sort result 0", r == 0); sortlist = sortlist->sortnext; r = sortlist->nscount; CHECK("sort result 0", r == 0); sortlist = sortlist->sortnext; r = sortlist->nscount; CHECK("sort result 0", r == 0); clear_trie(trie); }
int main(int argc, char * argv[]) { struct a_table translator; FILE * dict = 0, * in = 0, * out = 0; LOG("This is a debug version!"); if (argc == 1) { printf("Changes a text using a dictionary by replacing each occurrence of a word in the dictionary with the proper image word.\n" "Syntaxis: replacer dict input output\n" "dict is a text file with word pairs\n" "input is the file to be changed\n" "output is the result file.\n"); return 0; } if (argc != 4) { printf("Invalid argumets! Extected 3, provided: %d.\n", argc - 1); return 1; } dict = fopen(argv[1], "r"); if (dict == 0) { printf("Unable to open the dict file. Argument value is %s.\n", argv[1]); return 1; } /* initialize the allocator */ mem_init(); /* initialize the table */ a_create_n(&translator, INIT_SIZE); /* step1: create a trie */ create_trie(&translator, dict); fclose(dict); /* step2: create the full automaton */ add_fail_links(&translator); in = fopen(argv[2], "rb"); if (in == 0) { printf("Unable to open the input file. Argument value is %s.\n", argv[2]); fclose(dict); a_free(&translator); mem_fin(); return 1; } out = fopen(argv[3], "wb"); if (out == 0) { printf("Unable to open the output file. Argument value is %s.\n", argv[3]); fclose(in); fclose(dict); a_free(&translator); mem_fin(); return 1; } /* finally we are going to use the automaton */ travers(&translator, in, out); fclose(in); fclose(out); /* finalize the table */ a_free(&translator); /* finalize the allocator */ mem_fin(); }