Skip to content

Commit 5f78df4

Browse files
committed
Fix different length string comparison
1 parent 93fb6c9 commit 5f78df4

File tree

2 files changed

+16
-12
lines changed

2 files changed

+16
-12
lines changed

src/scratch/string_functions.cpp

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -61,17 +61,14 @@ extern "C"
6161

6262
inline int string_compare_raw_case_sensitive_inline(const char16_t *str1, size_t n1, const char16_t *str2, size_t n2)
6363
{
64-
if (n1 != n2)
65-
return n1 < n2 ? -1 : 1;
66-
6764
const size_t min_len = std::min(n1, n2);
6865

6966
for (size_t i = 0; i < min_len; i++) {
7067
if (str1[i] != str2[i])
7168
return str1[i] - str2[i];
7269
}
7370

74-
return 0;
71+
return n1 < n2 ? -1 : (n1 > n2 ? 1 : 0);
7572
}
7673

7774
int string_compare_raw_case_sensitive(const char16_t *str1, size_t n1, const char16_t *str2, size_t n2)
@@ -86,9 +83,6 @@ extern "C"
8683

8784
inline int string_compare_raw_case_insensitive_inline(const char16_t *str1, size_t n1, const char16_t *str2, size_t n2)
8885
{
89-
if (n1 != n2)
90-
return n1 < n2 ? -1 : 1;
91-
9286
const size_t min_len = std::min(n1, n2);
9387
std::u32string cp1_str, cp2_str;
9488
char32_t cp1, cp2;
@@ -104,7 +98,7 @@ extern "C"
10498
return cp1 - cp2;
10599
}
106100

107-
return 0;
101+
return n1 < n2 ? -1 : (n1 > n2 ? 1 : 0);
108102
}
109103

110104
int string_compare_raw_case_insensitive(const char16_t *str1, size_t n1, const char16_t *str2, size_t n2)

test/scratch_classes/string_functions_test.cpp

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,11 @@ TEST(StringFunctionsTest, CompareCaseSensitive)
145145
ASSERT_LT(string_compare_case_sensitive(&str1, &str2), 0);
146146
ASSERT_LT(string_compare_raw_case_sensitive(str1.data, str1.size, str2.data, str2.size), 0);
147147

148+
string_assign_cstring(&str1, "Infinity");
149+
string_assign_cstring(&str2, "NaN");
150+
ASSERT_LT(string_compare_case_sensitive(&str1, &str2), 0);
151+
ASSERT_LT(string_compare_raw_case_sensitive(str1.data, str1.size, str2.data, str2.size), 0);
152+
148153
string_assign_cstring(&str1, "ábčď");
149154
string_assign_cstring(&str2, "ábčď");
150155
ASSERT_EQ(string_compare_case_sensitive(&str1, &str2), 0);
@@ -202,13 +207,13 @@ TEST(StringFunctionsTest, CompareCaseInsensitive)
202207

203208
string_assign_cstring(&str1, "Lorem ipsum");
204209
string_assign_cstring(&str2, "dolor sit amet");
205-
ASSERT_LT(string_compare_case_insensitive(&str1, &str2), 0);
206-
ASSERT_LT(string_compare_raw_case_insensitive(str1.data, str1.size, str2.data, str2.size), 0);
210+
ASSERT_GT(string_compare_case_insensitive(&str1, &str2), 0);
211+
ASSERT_GT(string_compare_raw_case_insensitive(str1.data, str1.size, str2.data, str2.size), 0);
207212

208213
string_assign_cstring(&str1, "dolor sit amet");
209214
string_assign_cstring(&str2, "Lorem ipsum");
210-
ASSERT_GT(string_compare_case_insensitive(&str1, &str2), 0);
211-
ASSERT_GT(string_compare_raw_case_insensitive(str1.data, str1.size, str2.data, str2.size), 0);
215+
ASSERT_LT(string_compare_case_insensitive(&str1, &str2), 0);
216+
ASSERT_LT(string_compare_raw_case_insensitive(str1.data, str1.size, str2.data, str2.size), 0);
212217

213218
string_assign_cstring(&str1, "Hello");
214219
string_assign_cstring(&str2, "Hello world");
@@ -225,6 +230,11 @@ TEST(StringFunctionsTest, CompareCaseInsensitive)
225230
ASSERT_LT(string_compare_case_insensitive(&str1, &str2), 0);
226231
ASSERT_LT(string_compare_raw_case_insensitive(str1.data, str1.size, str2.data, str2.size), 0);
227232

233+
string_assign_cstring(&str1, "Infinity");
234+
string_assign_cstring(&str2, "NaN");
235+
ASSERT_LT(string_compare_case_insensitive(&str1, &str2), 0);
236+
ASSERT_LT(string_compare_raw_case_insensitive(str1.data, str1.size, str2.data, str2.size), 0);
237+
228238
string_assign_cstring(&str1, "ábčď");
229239
string_assign_cstring(&str2, "ábčď");
230240
ASSERT_EQ(string_compare_case_insensitive(&str1, &str2), 0);

0 commit comments

Comments
 (0)