diff options
| author | Zuhaitz Méndez Fernández de Aránguiz <zuhaitz@debian> | 2026-01-23 00:50:18 +0000 |
|---|---|---|
| committer | Zuhaitz Méndez Fernández de Aránguiz <zuhaitz@debian> | 2026-01-23 00:50:18 +0000 |
| commit | 8cb7089b2eb09d40d9497cea40d088d94676a8c6 (patch) | |
| tree | d4a2a33fe35807abc0cdeeb0be93edcbe75a4996 /tests/std | |
| parent | 3a4a72a38675893c3a1854d05c72b957a6bd9364 (diff) | |
More docs, check 'docs/std'.
Diffstat (limited to 'tests/std')
| -rw-r--r-- | tests/std/test_map_iter.zc | 32 | ||||
| -rw-r--r-- | tests/std/test_string_split.zc | 57 | ||||
| -rw-r--r-- | tests/std/test_string_utf8.zc | 56 |
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 |
