Files
YYCCommonplace/testbench/yycc/string/op.cpp

97 lines
2.6 KiB
C++
Raw Normal View History

2025-06-20 23:38:34 +08:00
#include <gtest/gtest.h>
#include <yycc.hpp>
#include <yycc/string/op.hpp>
#include <yycc/rust/prelude.hpp>
2025-06-22 17:14:49 +08:00
2025-06-20 23:38:34 +08:00
#define OP ::yycc::string::op
using namespace std::literals::string_view_literals;
2025-06-20 23:38:34 +08:00
namespace yycctest::string::op {
TEST(StringOp, Printf) {
auto rv = OP::printf(u8"%s == %s", u8"Hello World", u8"Hello, world");
EXPECT_EQ(rv, u8"Hello World == Hello, world");
2025-06-20 23:38:34 +08:00
}
TEST(StringOp, Replace) {
2025-06-22 17:14:49 +08:00
// Normal case
{
auto rv = OP::replace(u8"aabbcc", u8"bb", u8"dd");
EXPECT_EQ(rv, u8"aaddcc");
2025-06-22 17:14:49 +08:00
}
// No matched expected string
{
auto rv = OP::replace(u8"aabbcc", u8"zz", u8"yy");
EXPECT_EQ(rv, u8"aabbcc");
2025-06-22 17:14:49 +08:00
}
// Empty expected string
{
auto rv = OP::replace(u8"aabbcc", std::u8string_view(), u8"zz");
EXPECT_EQ(rv, u8"aabbcc");
2025-06-22 17:14:49 +08:00
}
// Empty replace string
{
auto rv = OP::replace(u8"aaaabbaa", u8"aa", u8"");
EXPECT_EQ(rv, u8"bb");
2025-06-22 17:14:49 +08:00
}
// Nested replacing
{
auto rv = OP::replace(u8"aaxcc", u8"x", u8"yx");
EXPECT_EQ(rv, u8"aayxcc");
2025-06-22 17:14:49 +08:00
}
// Empty source string
{
auto rv = OP::replace(std::u8string_view(), u8"", u8"xy");
EXPECT_EQ(rv, u8"");
2025-06-22 17:14:49 +08:00
}
2025-06-20 23:38:34 +08:00
}
TEST(StringOp, Lower) {
auto rv = OP::to_lower(u8"LOWER");
EXPECT_EQ(rv, u8"lower");
2025-06-20 23:38:34 +08:00
}
TEST(StringOp, Upper) {
auto rv = OP::to_upper(u8"upper");
EXPECT_EQ(rv, u8"UPPER");
2025-06-20 23:38:34 +08:00
}
TEST(StringOp, Join) {
std::vector<std::u8string_view> datas{u8""sv, u8"1"sv, u8"2"sv, u8""sv};
auto rv = OP::join(datas.begin(), datas.end(), u8", ");
EXPECT_EQ(rv, u8", 1, 2, ");
2025-06-20 23:38:34 +08:00
}
TEST(StringOp, Split) {
2025-06-22 17:14:49 +08:00
// Normal
{
auto rv = OP::split(u8", 1, 2, ", u8", ");
2025-06-22 17:14:49 +08:00
ASSERT_EQ(rv.size(), 4u);
EXPECT_EQ(rv[0], u8"");
EXPECT_EQ(rv[1], u8"1");
EXPECT_EQ(rv[2], u8"2");
EXPECT_EQ(rv[3], u8"");
2025-06-22 17:14:49 +08:00
}
// No matched delimiter
{
auto rv = OP::split(u8"test", u8"-");
2025-06-22 17:14:49 +08:00
ASSERT_EQ(rv.size(), 1u);
EXPECT_EQ(rv[0], u8"test");
2025-06-22 17:14:49 +08:00
}
// Empty delimiter
{
auto rv = OP::split(u8"test", std::u8string_view());
2025-06-22 17:14:49 +08:00
ASSERT_EQ(rv.size(), 1u);
EXPECT_EQ(rv[0], u8"test");
2025-06-22 17:14:49 +08:00
}
// Empty source string
{
auto rv = OP::split(std::u8string_view(), u8"");
2025-06-22 17:14:49 +08:00
ASSERT_EQ(rv.size(), 1u);
EXPECT_TRUE(rv[0].empty());
}
2025-06-20 23:38:34 +08:00
}
2025-06-22 17:14:49 +08:00
} // namespace yycctest::string::op