4
9
Fork
You've already forked libchewing
3

Implement has_userphrase with chewing_userphrase_lookup #96

Open
opened 2013年10月02日 12:22:54 +02:00 by czchen · 1 comment

has_userphrase is used to do userphrase test. After chewing_userphrase_lookup is implemented, has_userphrase shall use chewing_userphrase_lookup instead of libchewing internal functions.

`has_userphrase` is used to do userphrase test. After `chewing_userphrase_lookup` is implemented, `has_userphrase` shall use `chewing_userphrase_lookup` instead of libchewing internal functions.
ShengYenPeng commented 2016年05月15日 18:54:32 +02:00 (Migrated from github.com)
Copy link

Hi @czchen

I traced the test-userphrase.c

the functiontest_userphrase_auto_learn use has_userphrase in this way:
pass the NULL pointer in compare phrase field

ok(has_userphrase(ctx, bopomofo_1, NULL) == 0, "`%s' shall not be in userphrase", bopomofo_2);
ok(has_userphrase(ctx, bopomofo_2, NULL) == 0, "`%s' shall not be in userphrase", bopomofo_2);
ok(has_userphrase(ctx, bopomofo_1, NULL) == 1, "`%s' shall be in userphrase", bopomofo_2);
ok(has_userphrase(ctx, bopomofo_2, NULL) == 1, "`%s' shall be in userphrase", bopomofo_2);

and the function test_userphrase_auto_learn_with_symbol use has_userphrase in same way:

ok(has_userphrase(ctx, bopomofo_1, NULL) == 0, "`%s' shall not be in userphrase", bopomofo_1);
ok(has_userphrase(ctx, bopomofo_2, NULL) == 0, "`%s' shall not be in userphrase", bopomofo_2);
ok(has_userphrase(ctx, bopomofo_3, NULL) == 0, "`%s' shall not be in userphrase", bopomofo_3);
ok(has_userphrase(ctx, bopomofo_1, NULL) == 1, "`%s' shall be in userphrase", bopomofo_1);
ok(has_userphrase(ctx, bopomofo_2, NULL) == 1, "`%s' shall be in userphrase", bopomofo_2);
ok(has_userphrase(ctx, bopomofo_3, NULL) == 0, "`%s' shall not be in userphrase", bopomofo_3);

However, the chewing_userphrase_lookup has different return value with internal_has_userphrase:

the chewing_userphrase_lookup wiil return 0

 if (!ctx || !phrase_buf || !bopomofo_buf) {
 return 0;
 }

the internal_has_userphrase will return 1

 for (userphrase = UserGetPhraseFirst(ctx->data, phone);
 userphrase != NULL; userphrase = UserGetPhraseNext(ctx->data, phone)) {
 if (phrase == NULL || strcmp(userphrase->wordSeq, phrase) == 0) {
 ret = 1;
 goto end;
 }

this will make make check failed if I Implement has_userphrase with chewing_userphrase_lookup.

should the chewing_userphrase_lookup return 1 when the phrase_buf is NULL
and the user_phrase_data = UserGetPhraseFirst(pgdata, phone_buf) is not NULL ?

Hi @czchen I traced the test-userphrase.c the function`test_userphrase_auto_learn` use `has_userphrase` in this way: pass the NULL pointer in compare phrase field ``` ok(has_userphrase(ctx, bopomofo_1, NULL) == 0, "`%s' shall not be in userphrase", bopomofo_2); ok(has_userphrase(ctx, bopomofo_2, NULL) == 0, "`%s' shall not be in userphrase", bopomofo_2); ok(has_userphrase(ctx, bopomofo_1, NULL) == 1, "`%s' shall be in userphrase", bopomofo_2); ok(has_userphrase(ctx, bopomofo_2, NULL) == 1, "`%s' shall be in userphrase", bopomofo_2); ``` and the function `test_userphrase_auto_learn_with_symbol` use `has_userphrase` in same way: ``` ok(has_userphrase(ctx, bopomofo_1, NULL) == 0, "`%s' shall not be in userphrase", bopomofo_1); ok(has_userphrase(ctx, bopomofo_2, NULL) == 0, "`%s' shall not be in userphrase", bopomofo_2); ok(has_userphrase(ctx, bopomofo_3, NULL) == 0, "`%s' shall not be in userphrase", bopomofo_3); ok(has_userphrase(ctx, bopomofo_1, NULL) == 1, "`%s' shall be in userphrase", bopomofo_1); ok(has_userphrase(ctx, bopomofo_2, NULL) == 1, "`%s' shall be in userphrase", bopomofo_2); ok(has_userphrase(ctx, bopomofo_3, NULL) == 0, "`%s' shall not be in userphrase", bopomofo_3); ``` However, the `chewing_userphrase_lookup` has different return value with `internal_has_userphrase`: the `chewing_userphrase_lookup` wiil return 0 ``` if (!ctx || !phrase_buf || !bopomofo_buf) { return 0; } ``` the `internal_has_userphrase` will return 1 ``` for (userphrase = UserGetPhraseFirst(ctx->data, phone); userphrase != NULL; userphrase = UserGetPhraseNext(ctx->data, phone)) { if (phrase == NULL || strcmp(userphrase->wordSeq, phrase) == 0) { ret = 1; goto end; } ``` this will make `make check` failed if I Implement has_userphrase with chewing_userphrase_lookup. should the `chewing_userphrase_lookup` return 1 when the phrase_buf is NULL and the `user_phrase_data = UserGetPhraseFirst(pgdata, phone_buf)` is not NULL ?
Sign in to join this conversation.
No Branch/Tag specified
master
release/0.13.x
push-qlrtqulwmpmp
push-wtuvoynpwosl
release/0.10.x
release/0.8.x
optimize-conversion
refactor-trie-loader
v0.13.0
v0.12.0
v0.12.0-alpha.1
v0.11.0
v0.11.0-alpha.1
v0.10.3
v0.10.2
v0.10.1
v0.10.0
v0.9.1
v0.9.0
v0.9.0-rc.3
v0.9.0-rc.2
v0.9.0-rc.1
v0.8.5
v0.8.4
v0.8.3
v0.8.2
v0.8.1
v0.8.0
v0.8.0-rc.4
v0.8.0-rc.3
v0.8.0-rc.2
v0.8.0-rc.1
v0.7.0
v0.7.0-rc.2
v0.7.0-rc.1
v0.6.0
v0.6.0-rc.2
v0.6.0-rc.1
v0.5.1
v0.5.0
v0.4.0
v0.3.5
v0.3.4
v0.3.3
v0.3.2
v0.3.1
v0.3.0
v0.2.7
v0.2.6
v0.2.5
v0.2.4
Labels
Clear labels
dictionary
duplicate
fixed
0.11.0

Archived

fixed
0.13.0
refactoring

Archived

rewrite in rust
Might be fixed by the rust rewrite
thirdparty
arch
aarch64
系統架構是 Aarch64
arch
x86_64
系統架構是 x86_64
cannot reproduce
無法重現問題 Cannot reproduce the issue
contribution welcome
歡迎來幫忙 Contributions are very welcome, get started here
duplicate
重複的問題回報 This issue or pull request already exists
good first issue
適合新手 Interested in contributing? Get started here.
help wanted
需要高手相助 Need some help
invalid
回報的問題無效 Something is wrong
kind
bug
有東西不正常運作 Something is not working
kind
doc
加強文件說明 Enhance documentation
kind
enhancement
新功能 New feature
kind
mega issue
同一個問題回報中包含多個問題 Multiple issues reported
kind
question
只是問問題 Asking a question
needinfo
需要更多資訊 More information is needed
os
apple
作業系統是 MacOS 或 iOS
os
linux
作業系統是 GNU Linux
os
windows
作業系統是 Windows
to be determined
還未被說服有需求 Can't decide whether this is needed
upstream
跟上游軟體相關 Related to an upstream repository, already reported there
wontfix
我們決定不處理 Won't be fixed
Milestone
Clear milestone
No items
No milestone
Projects
Clear projects
No items
No project
Assignees
Clear assignees
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
chewing/libchewing#96
Reference in a new issue
chewing/libchewing
No description provided.
Delete branch "%!s()"

Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?