1af68c3b8SCheng Wang //===-- Unittests for memcmp ----------------------------------------------===//
2af68c3b8SCheng Wang //
3af68c3b8SCheng Wang // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4af68c3b8SCheng Wang // See https://llvm.org/LICENSE.txt for license information.
5af68c3b8SCheng Wang // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6af68c3b8SCheng Wang //
7af68c3b8SCheng Wang //===----------------------------------------------------------------------===//
8af68c3b8SCheng Wang 
9af68c3b8SCheng Wang #include "src/string/memcmp.h"
10af68c3b8SCheng Wang #include "utils/UnitTest/Test.h"
11*366805eaSAndre Vieira #include <cstring>
12af68c3b8SCheng Wang 
131df0dbfcSMichael Jones TEST(LlvmLibcMemcmpTest, CmpZeroByte) {
14af68c3b8SCheng Wang   const char *lhs = "ab";
15af68c3b8SCheng Wang   const char *rhs = "bc";
16af68c3b8SCheng Wang   EXPECT_EQ(__llvm_libc::memcmp(lhs, rhs, 0), 0);
17af68c3b8SCheng Wang }
18af68c3b8SCheng Wang 
191df0dbfcSMichael Jones TEST(LlvmLibcMemcmpTest, LhsRhsAreTheSame) {
20af68c3b8SCheng Wang   const char *lhs = "ab";
21af68c3b8SCheng Wang   const char *rhs = "ab";
22af68c3b8SCheng Wang   EXPECT_EQ(__llvm_libc::memcmp(lhs, rhs, 2), 0);
23af68c3b8SCheng Wang }
24af68c3b8SCheng Wang 
251df0dbfcSMichael Jones TEST(LlvmLibcMemcmpTest, LhsBeforeRhsLexically) {
26af68c3b8SCheng Wang   const char *lhs = "ab";
27af68c3b8SCheng Wang   const char *rhs = "ac";
28af68c3b8SCheng Wang   EXPECT_EQ(__llvm_libc::memcmp(lhs, rhs, 2), -1);
29af68c3b8SCheng Wang }
30af68c3b8SCheng Wang 
311df0dbfcSMichael Jones TEST(LlvmLibcMemcmpTest, LhsAfterRhsLexically) {
32af68c3b8SCheng Wang   const char *lhs = "ac";
33af68c3b8SCheng Wang   const char *rhs = "ab";
34af68c3b8SCheng Wang   EXPECT_EQ(__llvm_libc::memcmp(lhs, rhs, 2), 1);
35af68c3b8SCheng Wang }
36*366805eaSAndre Vieira 
37*366805eaSAndre Vieira TEST(LlvmLibcMemcmpTest, Sweep) {
38*366805eaSAndre Vieira   static constexpr size_t kMaxSize = 1024;
39*366805eaSAndre Vieira   char lhs[kMaxSize];
40*366805eaSAndre Vieira   char rhs[kMaxSize];
41*366805eaSAndre Vieira 
42*366805eaSAndre Vieira   memset(lhs, 'a', sizeof(lhs));
43*366805eaSAndre Vieira   memset(rhs, 'a', sizeof(rhs));
44*366805eaSAndre Vieira   for (int i = 0; i < kMaxSize; ++i)
45*366805eaSAndre Vieira     EXPECT_EQ(__llvm_libc::memcmp(lhs, rhs, i), 0);
46*366805eaSAndre Vieira 
47*366805eaSAndre Vieira   memset(lhs, 'a', sizeof(lhs));
48*366805eaSAndre Vieira   memset(rhs, 'a', sizeof(rhs));
49*366805eaSAndre Vieira   for (int i = 0; i < kMaxSize; ++i) {
50*366805eaSAndre Vieira     rhs[i] = 'b';
51*366805eaSAndre Vieira     EXPECT_EQ(__llvm_libc::memcmp(lhs, rhs, kMaxSize), -1);
52*366805eaSAndre Vieira     rhs[i] = 'a';
53*366805eaSAndre Vieira   }
54*366805eaSAndre Vieira }
55