#include "src/string/strrchr.h"
#include "utils/UnitTest/Test.h"
TEST(LlvmLibcStrRChrTest, FindsFirstCharacter) {
const char *src = "abcde";
ASSERT_STREQ(__llvm_libc::strrchr(src, 'a'), "abcde");
ASSERT_STREQ(src, "abcde");
}
TEST(LlvmLibcStrRChrTest, FindsMiddleCharacter) {
const char *src = "abcde";
ASSERT_STREQ(__llvm_libc::strrchr(src, 'c'), "cde");
ASSERT_STREQ(src, "abcde");
}
TEST(LlvmLibcStrRChrTest, FindsLastCharacterThatIsNotNullTerminator) {
const char *src = "abcde";
ASSERT_STREQ(__llvm_libc::strrchr(src, 'e'), "e");
ASSERT_STREQ(src, "abcde");
}
TEST(LlvmLibcStrRChrTest, FindsNullTerminator) {
const char *src = "abcde";
ASSERT_STREQ(__llvm_libc::strrchr(src, '\0'), "");
ASSERT_STREQ(src, "abcde");
}
TEST(LlvmLibcStrRChrTest, FindsLastBehindFirstNullTerminator) {
const char src[6] = {'a', 'a', '\0', 'b', '\0', 'c'};
ASSERT_STREQ(__llvm_libc::strrchr(src, 'b'), nullptr);
ASSERT_STREQ(__llvm_libc::strrchr(src, 'c'), nullptr);
ASSERT_STREQ(__llvm_libc::strrchr(src, 'a'), "a");
}
TEST(LlvmLibcStrRChrTest, CharacterNotWithinStringShouldReturnNullptr) {
ASSERT_STREQ(__llvm_libc::strrchr("123?", 'z'), nullptr);
}
TEST(LlvmLibcStrRChrTest, ShouldFindLastOfDuplicates) {
ASSERT_STREQ(__llvm_libc::strrchr("abc1def1ghi", '1'), "1ghi");
const char *dups = "XXXXX";
ASSERT_STREQ(__llvm_libc::strrchr(dups, 'X'), "X");
}
TEST(LlvmLibcStrRChrTest, EmptyStringShouldOnlyMatchNullTerminator) {
ASSERT_STREQ(__llvm_libc::strrchr("", '\0'), "");
ASSERT_STREQ(__llvm_libc::strrchr("", 'A'), nullptr);
ASSERT_STREQ(__llvm_libc::strrchr("", '2'), nullptr);
ASSERT_STREQ(__llvm_libc::strrchr("", '*'), nullptr);
}