test: add testbench for string module

This commit is contained in:
2025-06-22 17:14:49 +08:00
parent df3b602110
commit ab8d74efe6
8 changed files with 211 additions and 97 deletions

View File

@ -3,6 +3,8 @@
#include <yycc/string/op.hpp>
#include <yycc/string/reinterpret.hpp>
#include <yycc/prelude/core.hpp>
#define OP ::yycc::string::op
namespace yycctest::string::op {
@ -13,7 +15,36 @@ namespace yycctest::string::op {
}
TEST(StringOp, Replace) {
// Normal case
{
auto rv = OP::replace(YYCC_U8("aabbcc"), YYCC_U8("bb"), YYCC_U8("dd"));
EXPECT_EQ(rv, YYCC_U8("aaddcc"));
}
// No matched expected string
{
auto rv = OP::replace(YYCC_U8("aabbcc"), YYCC_U8("zz"), YYCC_U8("yy"));
EXPECT_EQ(rv, YYCC_U8("aabbcc"));
}
// Empty expected string
{
auto rv = OP::replace(YYCC_U8("aabbcc"), u8string_view(), YYCC_U8("zz"));
EXPECT_EQ(rv, YYCC_U8("aabbcc"));
}
// Empty replace string
{
auto rv = OP::replace(YYCC_U8("aaaabbaa"), YYCC_U8("aa"), YYCC_U8(""));
EXPECT_EQ(rv, YYCC_U8("bb"));
}
// Nested replacing
{
auto rv = OP::replace(YYCC_U8("aaxcc"), YYCC_U8("x"), YYCC_U8("yx"));
EXPECT_EQ(rv, YYCC_U8("aayxcc"));
}
// Empty source string
{
auto rv = OP::replace(u8string_view(), YYCC_U8(""), YYCC_U8("xy"));
EXPECT_EQ(rv, YYCC_U8(""));
}
}
TEST(StringOp, Lower) {
@ -27,11 +58,39 @@ namespace yycctest::string::op {
}
TEST(StringOp, Join) {
std::vector<u8string> datas{YYCC_U8(""), YYCC_U8("1"), YYCC_U8("2"), YYCC_U8("")};
auto rv = OP::join(datas.begin(), datas.end(), YYCC_U8(", "));
EXPECT_EQ(rv, YYCC_U8(", 1, 2, "));
}
TEST(StringOp, Split) {
// Normal
{
auto rv = OP::split(YYCC_U8(", 1, 2, "), YYCC_U8(", "));
ASSERT_EQ(rv.size(), 4u);
EXPECT_EQ(rv[0], YYCC_U8(""));
EXPECT_EQ(rv[1], YYCC_U8("1"));
EXPECT_EQ(rv[2], YYCC_U8("2"));
EXPECT_EQ(rv[3], YYCC_U8(""));
}
// No matched delimiter
{
auto rv = OP::split(YYCC_U8("test"), YYCC_U8("-"));
ASSERT_EQ(rv.size(), 1u);
EXPECT_EQ(rv[0], YYCC_U8("test"));
}
// Empty delimiter
{
auto rv = OP::split(YYCC_U8("test"), u8string_view());
ASSERT_EQ(rv.size(), 1u);
EXPECT_EQ(rv[0], YYCC_U8("test"));
}
// Empty source string
{
auto rv = OP::split(u8string_view(), YYCC_U8(""));
ASSERT_EQ(rv.size(), 1u);
EXPECT_TRUE(rv[0].empty());
}
}
}
} // namespace yycctest::string::op