summaryrefslogtreecommitdiff
path: root/asl/strings/string_view_tests.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'asl/strings/string_view_tests.cpp')
-rw-r--r--asl/strings/string_view_tests.cpp117
1 files changed, 117 insertions, 0 deletions
diff --git a/asl/strings/string_view_tests.cpp b/asl/strings/string_view_tests.cpp
new file mode 100644
index 0000000..a357186
--- /dev/null
+++ b/asl/strings/string_view_tests.cpp
@@ -0,0 +1,117 @@
+#include "asl/strings/string_view.hpp"
+#include "asl/testing/testing.hpp"
+
+static_assert(asl::trivially_destructible<asl::string_view>);
+static_assert(asl::trivially_copy_constructible<asl::string_view>);
+
+ASL_TEST(default)
+{
+ asl::string_view s1;
+ ASL_TEST_EXPECT(s1.is_empty());
+
+ asl::string_view s2 = nullptr;
+ ASL_TEST_EXPECT(s2.is_empty());
+}
+
+ASL_TEST(from_literal)
+{
+ asl::string_view s1 = "Hello"_sv;
+ ASL_TEST_ASSERT(s1.size() == 5);
+ ASL_TEST_EXPECT(asl::memcmp(s1.data(), "Hello", 5) == 0);
+
+ asl::string_view s2 = ""_sv;
+ ASL_TEST_EXPECT(s2.is_empty());
+}
+
+ASL_TEST(from_zstr)
+{
+ const char* s1 = "";
+ const char* s2 = "abc";
+ const char* s3 = "abc\0def";
+
+ auto sv1 = asl::string_view::from_zstr(s1);
+ auto sv2 = asl::string_view::from_zstr(s2);
+ auto sv3 = asl::string_view::from_zstr(s3);
+
+ ASL_TEST_ASSERT(sv1.size() == 0);
+ ASL_TEST_ASSERT(sv2.size() == 3);
+ ASL_TEST_ASSERT(sv3.size() == 3);
+
+ ASL_TEST_ASSERT(sv2 == "abc"_sv);
+ ASL_TEST_ASSERT(sv3 == "abc"_sv);
+}
+
+ASL_TEST(substr1)
+{
+ asl::string_view s1 = "abcd";
+
+ asl::string_view s2 = s1.substr(0);
+ ASL_TEST_ASSERT(s2.size() == 4);
+ ASL_TEST_EXPECT(asl::memcmp(s2.data(), "abcd", 4) == 0);
+
+ s2 = s1.substr(2);
+ ASL_TEST_ASSERT(s2.size() == 2);
+ ASL_TEST_EXPECT(asl::memcmp(s2.data(), "cd", 2) == 0);
+
+ s2 = s1.substr(4);
+ ASL_TEST_ASSERT(s2.size() == 0);
+}
+
+ASL_TEST(substr2)
+{
+ asl::string_view s1 = "abcd";
+
+ asl::string_view s2 = s1.substr(0, 4);
+ ASL_TEST_ASSERT(s2.size() == 4);
+ ASL_TEST_EXPECT(asl::memcmp(s2.data(), "abcd", 4) == 0);
+
+ s2 = s1.substr(1, 2);
+ ASL_TEST_ASSERT(s2.size() == 2);
+ ASL_TEST_EXPECT(asl::memcmp(s2.data(), "bc", 2) == 0);
+
+ s2 = s1.substr(4, 0);
+ ASL_TEST_ASSERT(s2.size() == 0);
+
+ s2 = s1.substr(1, 0);
+ ASL_TEST_ASSERT(s2.size() == 0);
+}
+
+ASL_TEST(first)
+{
+ asl::string_view s1 = "abcd";
+
+ asl::string_view s2 = s1.first(0);
+ ASL_TEST_ASSERT(s2.size() == 0);
+
+ s2 = s1.first(2);
+ ASL_TEST_ASSERT(s2.size() == 2);
+ ASL_TEST_EXPECT(asl::memcmp(s2.data(), "ab", 2) == 0);
+
+ s2 = s1.first(4);
+ ASL_TEST_ASSERT(s2.size() == 4);
+ ASL_TEST_EXPECT(asl::memcmp(s2.data(), "abcd", 4) == 0);
+}
+
+ASL_TEST(last)
+{
+ asl::string_view s1 = "abcd";
+
+ asl::string_view s2 = s1.last(0);
+ ASL_TEST_ASSERT(s2.size() == 0);
+
+ s2 = s1.last(2);
+ ASL_TEST_ASSERT(s2.size() == 2);
+ ASL_TEST_EXPECT(asl::memcmp(s2.data(), "cd", 2) == 0);
+
+ s2 = s1.last(4);
+ ASL_TEST_ASSERT(s2.size() == 4);
+ ASL_TEST_EXPECT(asl::memcmp(s2.data(), "abcd", 4) == 0);
+}
+
+ASL_TEST(equal)
+{
+ ASL_TEST_EXPECT("abc"_sv == "abc"_sv);
+ ASL_TEST_EXPECT(""_sv == ""_sv);
+ ASL_TEST_EXPECT("abc"_sv != "ab"_sv);
+ ASL_TEST_EXPECT("abc"_sv != "abd"_sv);
+}