You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
97 lines
2.8 KiB
97 lines
2.8 KiB
From c3e5d75f9c8a60af42646319fcca832d5f1a55d4 Mon Sep 17 00:00:00 2001 |
|
From: TJ Saunders <tj@castaglia.org> |
|
Date: Sun, 21 May 2017 13:44:23 -0700 |
|
Subject: [PATCH] Merge pull request #513 from pghmcfc/similars |
|
|
|
Fix pr_str_get_similars |
|
--- |
|
src/str.c | 4 ++-- |
|
tests/api/str.c | 36 +++++++++++++++++++----------------- |
|
2 files changed, 21 insertions(+), 19 deletions(-) |
|
|
|
diff --git a/src/str.c b/src/str.c |
|
index eeed096ef..0a59f2379 100644 |
|
--- a/src/str.c |
|
+++ b/src/str.c |
|
@@ -725,11 +725,11 @@ static int distance_cmp(const void *a, const void *b) { |
|
const char *s1, *s2; |
|
int distance1, distance2; |
|
|
|
- cand1 = a; |
|
+ cand1 = * (const struct candidate **) a; |
|
s1 = cand1->s; |
|
distance1 = cand1->distance; |
|
|
|
- cand2 = b; |
|
+ cand2 = * (const struct candidate **) b; |
|
s2 = cand2->s; |
|
distance2 = cand2->distance; |
|
|
|
diff --git a/tests/api/str.c b/tests/api/str.c |
|
index 7c6e11000..9dce95820 100644 |
|
--- a/tests/api/str.c |
|
+++ b/tests/api/str.c |
|
@@ -1469,25 +1469,23 @@ START_TEST (similars_test) { |
|
mark_point(); |
|
similars = (const char **) res->elts; |
|
|
|
- /* Note: We see different results here due to (I think) different |
|
- * qsort(3) implementations. |
|
+ /* |
|
+ * Note: expected distances are as follows: |
|
+ * |
|
+ * Candidate Case-Sensitive Case-Insensitive |
|
+ * fools 0 0 |
|
+ * odd 5 5 |
|
+ * bar 5 5 |
|
+ * FOO 5 0 |
|
*/ |
|
|
|
- expected = "FOO"; |
|
- if (strcmp(similars[0], expected) != 0) { |
|
- expected = "fools"; |
|
- } |
|
+ expected = "fools"; |
|
|
|
fail_unless(strcmp(similars[0], expected) == 0, |
|
"Expected similar '%s', got '%s'", expected, similars[0]); |
|
|
|
- expected = "fools"; |
|
- if (strcmp(similars[1], expected) != 0) { |
|
- expected = "FOO"; |
|
- } |
|
- |
|
- fail_unless(strcmp(similars[1], expected) == 0, |
|
- "Expected similar '%s', got '%s'", expected, similars[1]); |
|
+ fail_unless(strcmp(similars[1], expected) != 0, |
|
+ "Unexpectedly got similar '%s'", similars[1]); |
|
|
|
mark_point(); |
|
res = pr_str_get_similars(p, s, candidates, 0, PR_STR_FL_IGNORE_CASE); |
|
@@ -1499,18 +1497,22 @@ START_TEST (similars_test) { |
|
mark_point(); |
|
similars = (const char **) res->elts; |
|
|
|
+ /* |
|
+ * similars[0] and similars[1] should be "FOO" and "fools", but |
|
+ * not necessarily in that order |
|
+ */ |
|
expected = "FOO"; |
|
if (strcmp(similars[0], expected) != 0) { |
|
- expected = "fools"; |
|
+ expected = similars[0]; |
|
+ similars[0] = similars[1]; |
|
+ similars[1] = expected; |
|
+ expected = "FOO"; |
|
} |
|
|
|
fail_unless(strcmp(similars[0], expected) == 0, |
|
"Expected similar '%s', got '%s'", expected, similars[0]); |
|
|
|
expected = "fools"; |
|
- if (strcmp(similars[1], expected) != 0) { |
|
- expected = "FOO"; |
|
- } |
|
|
|
fail_unless(strcmp(similars[1], expected) == 0, |
|
"Expected similar '%s', got '%s'", expected, similars[1]);
|
|
|