summaryrefslogtreecommitdiff
path: root/tests/std/test_string_utf8.zc
diff options
context:
space:
mode:
authorZuhaitz Méndez Fernández de Aránguiz <zuhaitz@debian>2026-01-23 00:50:18 +0000
committerZuhaitz Méndez Fernández de Aránguiz <zuhaitz@debian>2026-01-23 00:50:18 +0000
commit8cb7089b2eb09d40d9497cea40d088d94676a8c6 (patch)
treed4a2a33fe35807abc0cdeeb0be93edcbe75a4996 /tests/std/test_string_utf8.zc
parent3a4a72a38675893c3a1854d05c72b957a6bd9364 (diff)
More docs, check 'docs/std'.
Diffstat (limited to 'tests/std/test_string_utf8.zc')
-rw-r--r--tests/std/test_string_utf8.zc56
1 files changed, 56 insertions, 0 deletions
diff --git a/tests/std/test_string_utf8.zc b/tests/std/test_string_utf8.zc
new file mode 100644
index 0000000..a4d2095
--- /dev/null
+++ b/tests/std/test_string_utf8.zc
@@ -0,0 +1,56 @@
+import "std/string.zc"
+
+test "utf8_basic_ascii" {
+ var s = String::from("Hello");
+
+ if (s.utf8_len() != 5) {
+ println "ASCII Len failed";
+ exit(1);
+ }
+
+ var h = s.utf8_at(0);
+ var t1 = String::from("H");
+ if (!h.eq(&t1)) {
+ println "ASCII At failed";
+ exit(1);
+ }
+
+ var sub = s.utf8_substr(1, 4);
+ var t2 = String::from("ello");
+ if (!sub.eq(&t2)) {
+ println "ASCII Substr failed";
+ exit(1);
+ }
+}
+
+test "utf8_multibyte" {
+ // "Hey 🌎!" - "Hey " (4) + 🌎 (1) + "!" (1) = 6 chars
+ // Bytes: H(1) e(1) y(1) (1) 🌎(4) !(1) = 9 bytes?
+ // 🌎 is approx F0 9F 8C 8D (4 bytes)
+
+ var s = String::from("Hey 🌎!");
+
+ if (s.length() != 9) {
+ println "Byte length unexpected: {s.length()}";
+ exit(1);
+ }
+
+ if (s.utf8_len() != 6) {
+ println "UTF8 Len failed. Got {s.utf8_len()}, expected 6";
+ exit(1);
+ }
+
+ var globe = s.utf8_at(4);
+ var t3 = String::from("🌎");
+ if (!globe.eq(&t3)) {
+ println "UTF8 At failed";
+ exit(1);
+ }
+
+ var sub = s.utf8_substr(4, 2); // "🌎!"
+ var t4 = String::from("🌎!");
+ if (!sub.eq(&t4)) {
+ println "UTF8 Substr failed";
+ exit(1);
+ }
+} \ No newline at end of file