gmio_core: fix bug in gmio_clocale_char_iequals()
This commit is contained in:
parent
28d133dfa0
commit
37dcad8e5e
@ -53,13 +53,87 @@ GMIO_INLINE int gmio_clocale_isspace(char c)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*! Returns non-zero if \p c is an uppercase letter (for C-locale), zero
|
||||||
|
* otherwise */
|
||||||
|
GMIO_INLINE int gmio_clocale_isupper(char c)
|
||||||
|
{
|
||||||
|
#if 0
|
||||||
|
return 65 <= c && c <= 90;
|
||||||
|
#else
|
||||||
|
static const unsigned char upper_chars[] = {
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||||
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
|
||||||
|
};
|
||||||
|
return upper_chars[c];
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
/*! Returns non-zero if \p c is a lowercase letter (for C-locale), zero
|
||||||
|
* otherwise */
|
||||||
|
GMIO_INLINE int gmio_clocale_islower(char c)
|
||||||
|
{
|
||||||
|
#if 0
|
||||||
|
return 97 <= c && c <= 122;
|
||||||
|
#else
|
||||||
|
static const unsigned char lower_chars[] = {
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||||
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
|
||||||
|
};
|
||||||
|
return lower_chars[c];
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
/*! Returns the lowercase letter converted to uppercase */
|
||||||
|
GMIO_INLINE char gmio_clocale_toupper(char c)
|
||||||
|
{
|
||||||
|
if (gmio_clocale_islower(c))
|
||||||
|
return c - 32;
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*! Returns the uppercase letter converted to lowercase */
|
||||||
|
GMIO_INLINE char gmio_clocale_tolower(char c)
|
||||||
|
{
|
||||||
|
if (gmio_clocale_isupper(c))
|
||||||
|
return c + 32;
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
|
||||||
/*! Returns true if \p c1 compare equals to \p c2
|
/*! Returns true if \p c1 compare equals to \p c2
|
||||||
*
|
*
|
||||||
* Comparison is case-insensitive
|
* Comparison is case-insensitive
|
||||||
*/
|
*/
|
||||||
GMIO_INLINE gmio_bool_t gmio_clocale_char_iequals(char c1, char c2)
|
GMIO_INLINE gmio_bool_t gmio_clocale_char_iequals(char c1, char c2)
|
||||||
{
|
{
|
||||||
return c1 == c2 || c1 == (c2 - 32) ? GMIO_TRUE : GMIO_FALSE;
|
return c1 == c2 || (gmio_clocale_toupper(c1) == gmio_clocale_toupper(c2));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*! Returns 0 if \p str1 and \p str2 compare equal, non-zero otherwise
|
/*! Returns 0 if \p str1 and \p str2 compare equal, non-zero otherwise
|
||||||
|
@ -209,8 +209,56 @@ const char* test_internal__string_utils()
|
|||||||
UTEST_ASSERT(gmio_clocale_isspace('\t'));
|
UTEST_ASSERT(gmio_clocale_isspace('\t'));
|
||||||
UTEST_ASSERT(gmio_clocale_isspace('\n'));
|
UTEST_ASSERT(gmio_clocale_isspace('\n'));
|
||||||
UTEST_ASSERT(gmio_clocale_isspace('\r'));
|
UTEST_ASSERT(gmio_clocale_isspace('\r'));
|
||||||
UTEST_ASSERT(!gmio_clocale_isspace('a'));
|
|
||||||
UTEST_ASSERT(!gmio_clocale_isspace('A'));
|
for (char c = 0; c >= 0 && c <= 127; ++c) {
|
||||||
|
if (65 <= c && c <= 90) {
|
||||||
|
UTEST_ASSERT(gmio_clocale_isupper(c));
|
||||||
|
}
|
||||||
|
else if (97 <= c && c <= 122) {
|
||||||
|
UTEST_ASSERT(gmio_clocale_islower(c));
|
||||||
|
}
|
||||||
|
else if (c == 0x20 || (0x09 <= c && c <= 0x0d)) {
|
||||||
|
UTEST_ASSERT(gmio_clocale_isspace(c));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
UTEST_ASSERT(!gmio_clocale_isupper(c));
|
||||||
|
UTEST_ASSERT(!gmio_clocale_islower(c));
|
||||||
|
UTEST_ASSERT(!gmio_clocale_isspace(c));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
UTEST_ASSERT(gmio_clocale_tolower('A') == 'a');
|
||||||
|
UTEST_ASSERT(gmio_clocale_tolower('Z') == 'z');
|
||||||
|
UTEST_ASSERT(gmio_clocale_tolower('(') == '(');
|
||||||
|
UTEST_ASSERT(gmio_clocale_toupper('a') == 'A');
|
||||||
|
UTEST_ASSERT(gmio_clocale_toupper('z') == 'Z');
|
||||||
|
UTEST_ASSERT(gmio_clocale_toupper('(') == '(');
|
||||||
|
|
||||||
|
UTEST_ASSERT(gmio_clocale_char_iequals('a', 'a'));
|
||||||
|
UTEST_ASSERT(gmio_clocale_char_iequals('a', 'A'));
|
||||||
|
UTEST_ASSERT(gmio_clocale_char_iequals('A', 'a'));
|
||||||
|
UTEST_ASSERT(gmio_clocale_char_iequals('{', '{'));
|
||||||
|
UTEST_ASSERT(!gmio_clocale_char_iequals('{', '['));
|
||||||
|
|
||||||
|
UTEST_ASSERT(gmio_stricmp("FACET", "facet") == 0);
|
||||||
|
UTEST_ASSERT(gmio_stricmp("facet", "FACET") == 0);
|
||||||
|
UTEST_ASSERT(gmio_stricmp("facet", "facet") == 0);
|
||||||
|
UTEST_ASSERT(gmio_stricmp("FACET", "FACET") == 0);
|
||||||
|
UTEST_ASSERT(gmio_stricmp("", "") == 0);
|
||||||
|
UTEST_ASSERT(gmio_stricmp("", "facet") != 0);
|
||||||
|
UTEST_ASSERT(gmio_stricmp("facet", "facet_") != 0);
|
||||||
|
UTEST_ASSERT(gmio_stricmp("facet_", "facet") != 0);
|
||||||
|
|
||||||
|
UTEST_ASSERT(gmio_istarts_with("facet", ""));
|
||||||
|
UTEST_ASSERT(gmio_istarts_with("facet", "f"));
|
||||||
|
UTEST_ASSERT(gmio_istarts_with("facet", "fa"));
|
||||||
|
UTEST_ASSERT(gmio_istarts_with("facet", "facet"));
|
||||||
|
UTEST_ASSERT(!gmio_istarts_with("facet", "a"));
|
||||||
|
UTEST_ASSERT(!gmio_istarts_with("facet", " facet"));
|
||||||
|
UTEST_ASSERT(gmio_istarts_with("facet", "F"));
|
||||||
|
UTEST_ASSERT(gmio_istarts_with("FACET", "f"));
|
||||||
|
UTEST_ASSERT(gmio_istarts_with("FACET", "fa"));
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user