1//===-- Unittests for wmemcmp ---------------------------------------------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9#include "hdr/types/size_t.h"
10#include "hdr/types/wchar_t.h"
11#include "src/wchar/wmemcmp.h"
12#include "test/UnitTest/Test.h"
13
14TEST(LlvmLibcWMemcmpTest, CmpZeroByte) {
15 // Comparing zero bytes should result in 0.
16 const wchar_t *lhs = L"ab";
17 const wchar_t *rhs = L"yz";
18 EXPECT_EQ(LIBC_NAMESPACE::wmemcmp(lhs, rhs, 0), 0);
19}
20
21TEST(LlvmLibcWMemcmpTest, LhsRhsAreTheSame) {
22 // Comparing strings of equal value should result in 0.
23 const wchar_t *lhs = L"ab";
24 const wchar_t *rhs = L"ab";
25 EXPECT_EQ(LIBC_NAMESPACE::wmemcmp(lhs, rhs, 2), 0);
26}
27
28TEST(LlvmLibcWMemcmpTest, LhsBeforeRhsLexically) {
29 // z after b, should result in a value less than 0.
30 const wchar_t *lhs = L"ab";
31 const wchar_t *rhs = L"az";
32 EXPECT_LT(LIBC_NAMESPACE::wmemcmp(lhs, rhs, 2), 0);
33}
34
35TEST(LlvmLibcWMemcmpTest, LhsAfterRhsLexically) {
36 // z after b, should result in a value greater than 0.
37 const wchar_t *lhs = L"az";
38 const wchar_t *rhs = L"ab";
39 EXPECT_GT(LIBC_NAMESPACE::wmemcmp(lhs, rhs, 2), 0);
40}
41
42TEST(LlvmLibcWMemcmpTest, CompareToEmpty) {
43 // lhs is nonempty, should result in a value greater than 0.
44 const wchar_t *lhs = L"az";
45 const wchar_t *rhs = L"";
46 EXPECT_GT(LIBC_NAMESPACE::wmemcmp(lhs, rhs, 1), 0);
47}
48
49TEST(LlvmLibcWMemcmpTest, LhsAfterRhsLexicallyLong) {
50 // b after a, should result in a value greater than 0.
51 const wchar_t *lhs = L"aaaaaaaaaaaaab";
52 const wchar_t *rhs = L"aaaaaaaaaaaaaa";
53 EXPECT_GT(LIBC_NAMESPACE::wmemcmp(lhs, rhs, 15), 0);
54}
55
56TEST(LlvmLibcWMemcmpTest, RhsAfterLhsLexicallyLong) {
57 // b after a, should result in a value less than 0.
58 const wchar_t *lhs = L"aaaaaaaaaaaaaa";
59 const wchar_t *rhs = L"aaaaaaaaaaaaab";
60 EXPECT_LT(LIBC_NAMESPACE::wmemcmp(lhs, rhs, 15), 0);
61}
62
63TEST(LlvmLibcWMemcmpTest, LhsRhsAreTheSameLong) {
64 // Comparing strings of equal value should result in 0.
65 const wchar_t *lhs = L"aaaaaaaaaaaaaa";
66 const wchar_t *rhs = L"aaaaaaaaaaaaaa";
67 EXPECT_EQ(LIBC_NAMESPACE::wmemcmp(lhs, rhs, 15), 0);
68}
69
70#if defined(LIBC_ADD_NULL_CHECKS) && !defined(LIBC_HAS_SANITIZER)
71TEST(LlvmLibcWMemcmpTest, NullptrCrash) {
72 // Passing in a nullptr should crash the program.
73 EXPECT_DEATH([] { LIBC_NAMESPACE::wmemcmp(L"aaaaaaaaaaaaaa", nullptr, 15); },
74 WITH_SIGNAL(-1));
75 EXPECT_DEATH([] { LIBC_NAMESPACE::wmemcmp(nullptr, L"aaaaaaaaaaaaaa", 15); },
76 WITH_SIGNAL(-1));
77}
78#endif // LIBC_HAS_ADDRESS_SANITIZER
79

source code of libc/test/src/wchar/wmemcmp_test.cpp