#include "src/string/strncmp.h"
#include "test/UnitTest/Test.h"
TEST(LlvmLibcStrNCmpTest, EmptyStringsShouldReturnZeroWithSufficientLength) {
const char *s1 = "";
const char *s2 = "";
int result = LIBC_NAMESPACE::strncmp(s1, s2, 1);
ASSERT_EQ(result, 0);
result = LIBC_NAMESPACE::strncmp(s2, s1, 1);
ASSERT_EQ(result, 0);
}
TEST(LlvmLibcStrNCmpTest,
EmptyStringShouldNotEqualNonEmptyStringWithSufficientLength) {
const char *empty = "";
const char *s2 = "abc";
int result = LIBC_NAMESPACE::strncmp(empty, s2, 3);
ASSERT_EQ(result, -97);
const char *s3 = "123";
result = LIBC_NAMESPACE::strncmp(s3, empty, 3);
ASSERT_EQ(result, 49);
}
TEST(LlvmLibcStrNCmpTest, EqualStringsShouldReturnZeroWithSufficientLength) {
const char *s1 = "abc";
const char *s2 = "abc";
int result = LIBC_NAMESPACE::strncmp(s1, s2, 3);
ASSERT_EQ(result, 0);
result = LIBC_NAMESPACE::strncmp(s2, s1, 3);
ASSERT_EQ(result, 0);
}
TEST(LlvmLibcStrNCmpTest,
ShouldReturnResultOfFirstDifferenceWithSufficientLength) {
const char *s1 = "___B42__";
const char *s2 = "___C55__";
int result = LIBC_NAMESPACE::strncmp(s1, s2, 8);
ASSERT_EQ(result, -1);
result = LIBC_NAMESPACE::strncmp(s2, s1, 8);
ASSERT_EQ(result, 1);
}
TEST(LlvmLibcStrNCmpTest,
CapitalizedLetterShouldNotBeEqualWithSufficientLength) {
const char *s1 = "abcd";
const char *s2 = "abCd";
int result = LIBC_NAMESPACE::strncmp(s1, s2, 4);
ASSERT_EQ(result, 32);
result = LIBC_NAMESPACE::strncmp(s2, s1, 4);
ASSERT_EQ(result, -32);
}
TEST(LlvmLibcStrNCmpTest,
UnequalLengthStringsShouldNotReturnZeroWithSufficientLength) {
const char *s1 = "abc";
const char *s2 = "abcd";
int result = LIBC_NAMESPACE::strncmp(s1, s2, 4);
ASSERT_EQ(result, -100);
result = LIBC_NAMESPACE::strncmp(s2, s1, 4);
ASSERT_EQ(result, 100);
}
TEST(LlvmLibcStrNCmpTest, StringArgumentSwapChangesSignWithSufficientLength) {
const char *a = "a";
const char *b = "b";
int result = LIBC_NAMESPACE::strncmp(b, a, 1);
ASSERT_EQ(result, 1);
result = LIBC_NAMESPACE::strncmp(a, b, 1);
ASSERT_EQ(result, -1);
}
TEST(LlvmLibcStrNCmpTest, NonEqualStringsEqualWithLengthZero) {
const char *s1 = "abc";
const char *s2 = "def";
int result = LIBC_NAMESPACE::strncmp(s1, s2, 0);
ASSERT_EQ(result, 0);
result = LIBC_NAMESPACE::strncmp(s2, s1, 0);
ASSERT_EQ(result, 0);
}
TEST(LlvmLibcStrNCmpTest, NonEqualStringsNotEqualWithLengthOne) {
const char *s1 = "abc";
const char *s2 = "def";
int result = LIBC_NAMESPACE::strncmp(s1, s2, 1);
ASSERT_EQ(result, -3);
result = LIBC_NAMESPACE::strncmp(s2, s1, 1);
ASSERT_EQ(result, 3);
}
TEST(LlvmLibcStrNCmpTest, NonEqualStringsEqualWithShorterLength) {
const char *s1 = "___B42__";
const char *s2 = "___C55__";
int result = LIBC_NAMESPACE::strncmp(s1, s2, 3);
ASSERT_EQ(result, 0);
result = LIBC_NAMESPACE::strncmp(s1, s2, 4);
ASSERT_EQ(result, -1);
result = LIBC_NAMESPACE::strncmp(s2, s1, 3);
ASSERT_EQ(result, 0);
result = LIBC_NAMESPACE::strncmp(s2, s1, 4);
ASSERT_EQ(result, 1);
}
TEST(LlvmLibcStrNCmpTest, StringComparisonEndsOnNullByteEvenWithLongerLength) {
const char *s1 = "abc\0def";
const char *s2 = "abc\0abc";
int result = LIBC_NAMESPACE::strncmp(s1, s2, 7);
ASSERT_EQ(result, 0);
result = LIBC_NAMESPACE::strncmp(s2, s1, 7);
ASSERT_EQ(result, 0);
}
TEST(LlvmLibcStrNCmpTest, Case) {
const char *s1 = "aB";
const char *s2 = "ab";
int result = LIBC_NAMESPACE::strncmp(s1, s2, 2);
ASSERT_LT(result, 0);
result = LIBC_NAMESPACE::strncmp(s2, s1, 2);
ASSERT_GT(result, 0);
}