| //===----------------------------------------------------------------------===// |
| // |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| // See https://llvm.org/LICENSE.txt for license information. |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| // |
| //===----------------------------------------------------------------------===// |
| /// |
| /// \file |
| /// This file contains unit tests for wcscasecmp. |
| /// |
| //===----------------------------------------------------------------------===// |
| |
| #include "src/__support/wctype_utils.h" |
| #include "src/wchar/wcscasecmp.h" |
| #include "test/UnitTest/Test.h" |
| |
| TEST(LlvmLibcWcscasecmpTest, EmptyStrings) { |
| EXPECT_EQ(LIBC_NAMESPACE::wcscasecmp(L"", L""), 0); |
| } |
| |
| TEST(LlvmLibcWcscasecmpTest, EmptyVsNonEmptyStrings) { |
| EXPECT_LT(LIBC_NAMESPACE::wcscasecmp(L"", L"a"), 0); |
| EXPECT_GT(LIBC_NAMESPACE::wcscasecmp(L"a", L""), 0); |
| } |
| |
| TEST(LlvmLibcWcscasecmpTest, Substrings) { |
| EXPECT_GT(LIBC_NAMESPACE::wcscasecmp(L"aβc", L"aβ"), 0); |
| EXPECT_GT(LIBC_NAMESPACE::wcscasecmp(L"aβc", L"a"), 0); |
| EXPECT_GT(LIBC_NAMESPACE::wcscasecmp(L"aβc", L""), 0); |
| |
| EXPECT_LT(LIBC_NAMESPACE::wcscasecmp(L"aβ", L"aβc"), 0); |
| EXPECT_LT(LIBC_NAMESPACE::wcscasecmp(L"a", L"aβc"), 0); |
| EXPECT_LT(LIBC_NAMESPACE::wcscasecmp(L"", L"aβc"), 0); |
| } |
| |
| TEST(LlvmLibcWcscasecmpTest, MatchingStringsIgnoreCase) { |
| EXPECT_EQ(LIBC_NAMESPACE::wcscasecmp(L"abc", L"abc"), 0); |
| |
| EXPECT_EQ(LIBC_NAMESPACE::wcscasecmp(L"Abc", L"abc"), 0); |
| EXPECT_EQ(LIBC_NAMESPACE::wcscasecmp(L"aBc", L"abc"), 0); |
| EXPECT_EQ(LIBC_NAMESPACE::wcscasecmp(L"abC", L"abc"), 0); |
| EXPECT_EQ(LIBC_NAMESPACE::wcscasecmp(L"ABC", L"abc"), 0); |
| |
| EXPECT_EQ(LIBC_NAMESPACE::wcscasecmp(L"abc", L"Abc"), 0); |
| EXPECT_EQ(LIBC_NAMESPACE::wcscasecmp(L"abc", L"aBc"), 0); |
| EXPECT_EQ(LIBC_NAMESPACE::wcscasecmp(L"abc", L"abC"), 0); |
| EXPECT_EQ(LIBC_NAMESPACE::wcscasecmp(L"abc", L"ABC"), 0); |
| |
| #if LIBC_CONF_WCTYPE_MODE == LIBC_WCTYPE_MODE_UTF8 |
| EXPECT_EQ(LIBC_NAMESPACE::wcscasecmp(L"Βγδ", L"βγδ"), 0); |
| EXPECT_EQ(LIBC_NAMESPACE::wcscasecmp(L"βΓδ", L"βγδ"), 0); |
| EXPECT_EQ(LIBC_NAMESPACE::wcscasecmp(L"βγΔ", L"βγδ"), 0); |
| EXPECT_EQ(LIBC_NAMESPACE::wcscasecmp(L"ΒΓΔ", L"βγδ"), 0); |
| |
| EXPECT_EQ(LIBC_NAMESPACE::wcscasecmp(L"βγδ", L"Βγδ"), 0); |
| EXPECT_EQ(LIBC_NAMESPACE::wcscasecmp(L"βγδ", L"βΓδ"), 0); |
| EXPECT_EQ(LIBC_NAMESPACE::wcscasecmp(L"βγδ", L"βγΔ"), 0); |
| EXPECT_EQ(LIBC_NAMESPACE::wcscasecmp(L"βγδ", L"ΒΓΔ"), 0); |
| #endif // LIBC_CONF_WCTYPE_MODE == LIBC_WCTYPE_MODE_UTF8 |
| } |
| |
| TEST(LlvmLibcWcscasecmpTest, NonMatchingStrings) { |
| EXPECT_GT(LIBC_NAMESPACE::wcscasecmp(L"Δbc", L"abc"), 0); |
| EXPECT_GT(LIBC_NAMESPACE::wcscasecmp(L"aΔc", L"abc"), 0); |
| EXPECT_GT(LIBC_NAMESPACE::wcscasecmp(L"abΔ", L"abc"), 0); |
| |
| EXPECT_LT(LIBC_NAMESPACE::wcscasecmp(L"abc", L"Δbc"), 0); |
| EXPECT_LT(LIBC_NAMESPACE::wcscasecmp(L"abc", L"aΔc"), 0); |
| EXPECT_LT(LIBC_NAMESPACE::wcscasecmp(L"abc", L"abΔ"), 0); |
| } |
| |
| #if defined(LIBC_ADD_NULL_CHECKS) |
| |
| TEST(LlvmLibcWcscasecmpTest, CrashOnNullPtr) { |
| EXPECT_DEATH([] { LIBC_NAMESPACE::wcscasecmp(L"hello", nullptr); }, |
| WITH_SIGNAL(-1)); |
| EXPECT_DEATH([] { LIBC_NAMESPACE::wcscasecmp(nullptr, L"hello"); }, |
| WITH_SIGNAL(-1)); |
| } |
| |
| #endif // LIBC_ADD_NULL_CHECKS |