diff --git a/src/openrct2/util/Util.cpp b/src/openrct2/util/Util.cpp index 52c3aeb0a1..46726c5fa1 100644 --- a/src/openrct2/util/Util.cpp +++ b/src/openrct2/util/Util.cpp @@ -333,8 +333,8 @@ int32_t strlogicalcmp(const char* s1, const char* s2) return -1; else if (!(isdigit(*s1) && isdigit(*s2))) { - if (*s1 != *s2) - return (int)*s1 - (int)*s2; + if (tolower(*s1) != tolower(*s2)) + return tolower(*s1) - tolower(*s2); else (++s1, ++s2); } diff --git a/test/tests/StringTest.cpp b/test/tests/StringTest.cpp index b4ea572316..3f381ba70c 100644 --- a/test/tests/StringTest.cpp +++ b/test/tests/StringTest.cpp @@ -151,7 +151,23 @@ TEST_F(StringTest, ToUpper_Japanese) TEST_F(StringTest, strlogicalcmp) { - auto res1 = strlogicalcmp("foo1", "foo1_2"); - auto res2 = strlogicalcmp("foo1_2", "foo1"); - ASSERT_NE(res1, res2); + auto res_logical_1 = strlogicalcmp("foo1", "foo1_2"); + auto res_logical_2 = strlogicalcmp("foo1_2", "foo1"); + auto res_1 = strcmp("foo1", "foo1_2"); + auto res_2 = strcmp("foo1_2", "foo1"); + // We only care if sign is correct, actual values might not be. + EXPECT_GE(res_1 * res_logical_1, 1); + EXPECT_GE(res_2 * res_logical_2, 1); + EXPECT_NE(res_logical_1, res_logical_2); + + EXPECT_GT(strlogicalcmp("foo12", "foo1"), 0); + EXPECT_LT(strlogicalcmp("foo12", "foo13"), 0); + EXPECT_EQ(strlogicalcmp("foo13", "foo13"), 0); + + EXPECT_EQ(strlogicalcmp("foo13", "FOO13"), 0); + + EXPECT_LT(strlogicalcmp("A", "b"), 0); + EXPECT_LT(strlogicalcmp("a", "B"), 0); + EXPECT_GT(strlogicalcmp("B", "a"), 0); + EXPECT_GT(strlogicalcmp("b", "A"), 0); }