summaryrefslogtreecommitdiff
path: root/tests/std
diff options
context:
space:
mode:
Diffstat (limited to 'tests/std')
-rw-r--r--tests/std/test_map_iter.zc32
-rw-r--r--tests/std/test_string_split.zc57
-rw-r--r--tests/std/test_string_utf8.zc56
3 files changed, 145 insertions, 0 deletions
diff --git a/tests/std/test_map_iter.zc b/tests/std/test_map_iter.zc
new file mode 100644
index 0000000..efce356
--- /dev/null
+++ b/tests/std/test_map_iter.zc
@@ -0,0 +1,32 @@
+import "std/map.zc"
+import "std/string.zc"
+
+test "map_iterator" {
+ var m = Map<int>::new();
+
+ m.put("one", 1);
+ m.put("two", 2);
+ m.put("three", 3);
+
+ var count = 0;
+ var sum = 0;
+
+ for entry in m {
+ count = count + 1;
+ sum = sum + entry.val;
+
+ println "Key: {entry.key}, Val: {entry.val}";
+ }
+
+ if (count != 3) {
+ println "Map iterator count failed: {count}";
+ exit(1);
+ }
+
+ if (sum != 6) {
+ println "Map iterator sum failed: {sum}";
+ exit(1);
+ }
+
+ m.free();
+}
diff --git a/tests/std/test_string_split.zc b/tests/std/test_string_split.zc
new file mode 100644
index 0000000..496dbd1
--- /dev/null
+++ b/tests/std/test_string_split.zc
@@ -0,0 +1,57 @@
+import "std/string.zc"
+
+test "string_split_basic" {
+ var s = String::from("a,b,c");
+ var parts = s.split(',');
+
+ if (parts.length() != 3) {
+ println "Split length fail: {parts.length()}";
+ exit(1);
+ }
+
+ var p0 = parts.get(0);
+ var t0 = String::from("a");
+ if (!p0.eq(&t0)) exit(1);
+
+ var p1 = parts.get(1);
+ var t1 = String::from("b");
+ if (!p1.eq(&t1)) exit(1);
+
+ var p2 = parts.get(2);
+ var t2 = String::from("c");
+ if (!p2.eq(&t2)) exit(1);
+
+ for p in &parts {
+ p.free();
+ }
+ parts.free();
+}
+
+test "string_split_edge" {
+ var s = String::from("hello");
+ var parts = s.split(' '); // Not found
+
+ if (parts.length() != 1) {
+ println "Split edge 1 failed";
+ exit(1);
+ }
+
+ var p0 = parts.get(0);
+ if (!p0.eq(&s)) exit(1);
+
+ p0.free();
+ parts.free();
+
+ var s2 = String::from("a,,b");
+ var parts2 = s2.split(',');
+ if (parts2.length() != 3) {
+ println "Split edge 2 failed: {parts2.length()}";
+ exit(1);
+ }
+
+ var empty = parts2.get(1);
+ if (!empty.is_empty()) exit(1);
+
+ for p in &parts2 { p.free(); }
+ parts2.free();
+}
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