105e1612cScgyurgyik //===-- Unittests for strcmp ----------------------------------------------===//
205e1612cScgyurgyik //
305e1612cScgyurgyik // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
405e1612cScgyurgyik // See https://llvm.org/LICENSE.txt for license information.
505e1612cScgyurgyik // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
605e1612cScgyurgyik //
705e1612cScgyurgyik //===----------------------------------------------------------------------===//
805e1612cScgyurgyik
905e1612cScgyurgyik #include "src/string/strcmp.h"
1005e1612cScgyurgyik #include "utils/UnitTest/Test.h"
1105e1612cScgyurgyik
TEST(LlvmLibcStrCmpTest,EmptyStringsShouldReturnZero)12*1df0dbfcSMichael Jones TEST(LlvmLibcStrCmpTest, EmptyStringsShouldReturnZero) {
1305e1612cScgyurgyik const char *s1 = "";
1405e1612cScgyurgyik const char *s2 = "";
1505e1612cScgyurgyik int result = __llvm_libc::strcmp(s1, s2);
1605e1612cScgyurgyik ASSERT_EQ(result, 0);
1705e1612cScgyurgyik
1805e1612cScgyurgyik // Verify operands reversed.
1905e1612cScgyurgyik result = __llvm_libc::strcmp(s2, s1);
2005e1612cScgyurgyik ASSERT_EQ(result, 0);
2105e1612cScgyurgyik }
2205e1612cScgyurgyik
TEST(LlvmLibcStrCmpTest,EmptyStringShouldNotEqualNonEmptyString)23*1df0dbfcSMichael Jones TEST(LlvmLibcStrCmpTest, EmptyStringShouldNotEqualNonEmptyString) {
2405e1612cScgyurgyik const char *empty = "";
2505e1612cScgyurgyik const char *s2 = "abc";
2605e1612cScgyurgyik int result = __llvm_libc::strcmp(empty, s2);
2705e1612cScgyurgyik // This should be '\0' - 'a' = -97
2805e1612cScgyurgyik ASSERT_EQ(result, -97);
2905e1612cScgyurgyik
3005e1612cScgyurgyik // Similar case if empty string is second argument.
3105e1612cScgyurgyik const char *s3 = "123";
3205e1612cScgyurgyik result = __llvm_libc::strcmp(s3, empty);
3305e1612cScgyurgyik // This should be '1' - '\0' = 49
3405e1612cScgyurgyik ASSERT_EQ(result, 49);
3505e1612cScgyurgyik }
3605e1612cScgyurgyik
TEST(LlvmLibcStrCmpTest,EqualStringsShouldReturnZero)37*1df0dbfcSMichael Jones TEST(LlvmLibcStrCmpTest, EqualStringsShouldReturnZero) {
3805e1612cScgyurgyik const char *s1 = "abc";
3905e1612cScgyurgyik const char *s2 = "abc";
4005e1612cScgyurgyik int result = __llvm_libc::strcmp(s1, s2);
4105e1612cScgyurgyik ASSERT_EQ(result, 0);
4205e1612cScgyurgyik
4305e1612cScgyurgyik // Verify operands reversed.
4405e1612cScgyurgyik result = __llvm_libc::strcmp(s2, s1);
4505e1612cScgyurgyik ASSERT_EQ(result, 0);
4605e1612cScgyurgyik }
4705e1612cScgyurgyik
TEST(LlvmLibcStrCmpTest,ShouldReturnResultOfFirstDifference)48*1df0dbfcSMichael Jones TEST(LlvmLibcStrCmpTest, ShouldReturnResultOfFirstDifference) {
4905e1612cScgyurgyik const char *s1 = "___B42__";
5005e1612cScgyurgyik const char *s2 = "___C55__";
5105e1612cScgyurgyik int result = __llvm_libc::strcmp(s1, s2);
5205e1612cScgyurgyik // This should return 'B' - 'C' = -1.
5305e1612cScgyurgyik ASSERT_EQ(result, -1);
5405e1612cScgyurgyik
5505e1612cScgyurgyik // Verify operands reversed.
5605e1612cScgyurgyik result = __llvm_libc::strcmp(s2, s1);
5705e1612cScgyurgyik // This should return 'C' - 'B' = 1.
5805e1612cScgyurgyik ASSERT_EQ(result, 1);
5905e1612cScgyurgyik }
6005e1612cScgyurgyik
TEST(LlvmLibcStrCmpTest,CapitalizedLetterShouldNotBeEqual)61*1df0dbfcSMichael Jones TEST(LlvmLibcStrCmpTest, CapitalizedLetterShouldNotBeEqual) {
6205e1612cScgyurgyik const char *s1 = "abcd";
6305e1612cScgyurgyik const char *s2 = "abCd";
6405e1612cScgyurgyik int result = __llvm_libc::strcmp(s1, s2);
6505e1612cScgyurgyik // 'c' - 'C' = 32.
6605e1612cScgyurgyik ASSERT_EQ(result, 32);
6705e1612cScgyurgyik
6805e1612cScgyurgyik // Verify operands reversed.
6905e1612cScgyurgyik result = __llvm_libc::strcmp(s2, s1);
7005e1612cScgyurgyik // 'C' - 'c' = -32.
7105e1612cScgyurgyik ASSERT_EQ(result, -32);
7205e1612cScgyurgyik }
7305e1612cScgyurgyik
TEST(LlvmLibcStrCmpTest,UnequalLengthStringsShouldNotReturnZero)74*1df0dbfcSMichael Jones TEST(LlvmLibcStrCmpTest, UnequalLengthStringsShouldNotReturnZero) {
7505e1612cScgyurgyik const char *s1 = "abc";
7605e1612cScgyurgyik const char *s2 = "abcd";
7705e1612cScgyurgyik int result = __llvm_libc::strcmp(s1, s2);
7805e1612cScgyurgyik // '\0' - 'd' = -100.
7905e1612cScgyurgyik ASSERT_EQ(result, -100);
8005e1612cScgyurgyik
8105e1612cScgyurgyik // Verify operands reversed.
8205e1612cScgyurgyik result = __llvm_libc::strcmp(s2, s1);
8305e1612cScgyurgyik // 'd' - '\0' = 100.
8405e1612cScgyurgyik ASSERT_EQ(result, 100);
8505e1612cScgyurgyik }
8605e1612cScgyurgyik
TEST(LlvmLibcStrCmpTest,StringArgumentSwapChangesSign)87*1df0dbfcSMichael Jones TEST(LlvmLibcStrCmpTest, StringArgumentSwapChangesSign) {
8805e1612cScgyurgyik const char *a = "a";
8905e1612cScgyurgyik const char *b = "b";
9005e1612cScgyurgyik int result = __llvm_libc::strcmp(b, a);
9105e1612cScgyurgyik // 'b' - 'a' = 1.
9205e1612cScgyurgyik ASSERT_EQ(result, 1);
9305e1612cScgyurgyik
9405e1612cScgyurgyik result = __llvm_libc::strcmp(a, b);
9505e1612cScgyurgyik // 'a' - 'b' = -1.
9605e1612cScgyurgyik ASSERT_EQ(result, -1);
9705e1612cScgyurgyik }
98