From 6ac189e71eec22607bb09fbd49ac2939229d4134 Mon Sep 17 00:00:00 2001 From: keqingmoe Date: Wed, 19 Mar 2025 15:08:38 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=20test/string.cpp?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/string.cpp | 171 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 171 insertions(+) create mode 100644 test/string.cpp diff --git a/test/string.cpp b/test/string.cpp new file mode 100644 index 0000000..eca5b33 --- /dev/null +++ b/test/string.cpp @@ -0,0 +1,171 @@ +import std; +import kqm.str; + +using namespace std::literals; + + +#define TEST(x) \ + do { \ + std::println("Test: {}", #x); \ + x(); \ + std::println(); \ + } while (0) + +auto fmt(char32_t ch) +{ + auto buf = std::array{}; + auto len = kqm::utf::utf32_to_utf8(ch, buf.data()); + return std::string{buf.data(), len}; +} + +auto test_default_ctor() +{ + auto s = kqm::string{}; + std::println("default ctor: {:?}", s); +} + +auto test_std_sv_ctor() +{ + auto s = kqm::string{"sv"sv}; + std::println("from std::sv: {:?}", s); +} + +auto test_range_ctor() +{ + auto chs = std::vector{U'r', U'a', U'n', U'g', U'e'}; + auto s = kqm::string{chs.begin(), chs.end()}; + std::println("from range: {:?}", s); +} + +auto test_sv_ctor() +{ + auto s = kqm::string{"test"sv}; + std::println("from kqm::sv: {:?}", s); +} + +auto test_move_ctor() +{ + auto s = kqm::string{"short string"}; + auto s2 = std::move(s); + std::println("move: {:?} -> {:?}", s, s2); + + s = kqm::string{"large capacity"}; + s.reserve(32); + s2 = std::move(s); + std::println("move: {:?} -> {:?}", s, s2); +} + +auto test_front() +{ + auto s = kqm::string{"string"}; + auto ch = s.front(); + std::println("{:?}.front() == U's' is {}", s, ch == U's'); +} + +auto test_back() +{ + auto s = kqm::string{"string"}; + auto ch = s.back(); + std::println("{:?}.back() == U'g' is {}", s, ch == U'g'); +} + +auto test_range() +{ + auto s = kqm::string{"string"}; + std::print("{} ->", s); + for (auto ch : s) { + std::print(" {:?}", fmt(ch)); + } + std::println(); +} + +auto test_reverse_range() +{ + auto s = kqm::string{"string"}; + std::print("{} | reverse ->", s); + for (auto ch : s | std::views::reverse) { + std::print(" {:?}", fmt(ch)); + } + std::println(); +} + +auto test_clear() +{ + auto s = kqm::string{"string"}; + auto old_siz = s.size_bytes(); + s.clear(); + std::println("size_bytes(): {} -> {}", old_siz, s.size_bytes()); +} + +auto test_append() +{ + auto s = kqm::string{"string"}; + std::println(" {:?}", s); + s.append(U';'); + std::println("-> {:?}", s); + s.append(" append"sv); + std::println("-> {:?}", s); + s.append(kqm::string_view{" a"}); + std::println("-> {:?}", s); + s.append(kqm::string{" new"}); + std::println("-> {:?}", s); + s += " section"sv; + std::println("-> {:?}", s); +} + +auto test_replace() +{ + auto s = kqm::string{}; + auto first = kqm::string::iterator{}; + auto last = kqm::string::iterator{}; + auto init = [&] { + s = kqm::string{"AAABBBCCC"}; + first = std::next(s.begin(), 3); + last = std::next(first, 3); + }; + init(); + std::println(" {:?}", s); + s.replace(first, last, U'D'); + std::println("-> {:?}", s); + init(); + s.replace(first, last, "DD"sv); + std::println("-> {:?}", s); + init(); + s.replace(first, last, kqm::string_view{"DDDD"}); + std::println("-> {:?}", s); +} + +auto test_assign() +{ + auto s = kqm::string{"string"}; + std::println(" {:?}", s); + s.assign(U's'); + std::println("-> {:?}", s); + s.assign("std::sv"sv); + std::println("-> {:?}", s); + s.assign(kqm::string_view{"sv"}); + std::println("-> {:?}", s); + s.assign(kqm::string{"str"}); + std::println("-> {:?}", s); + s += "eq"sv; + std::println("-> {:?}", s); +} + +auto main() -> int +{ + TEST(test_default_ctor); + TEST(test_std_sv_ctor); + TEST(test_range_ctor); + TEST(test_sv_ctor); + TEST(test_move_ctor); + + TEST(test_front); + TEST(test_back); + TEST(test_range); + TEST(test_reverse_range); + + TEST(test_clear); + TEST(test_append); + TEST(test_replace); + TEST(test_assign); +}