var utf8 = use("utf8"); // Test character counting vs byte counting var test1 = "Hello"; log.console("ASCII length test:"); log.console(" Characters:", utf8.length(test1)); log.console(" Bytes:", utf8.byte_length(test1)); log.console(" Match:", utf8.length(test1) == utf8.byte_length(test1) ? "PASS" : "FAIL"); var test2 = "Hello δΈ–η•Œ"; log.console("\nMixed ASCII/Unicode length test:"); log.console(" Characters:", utf8.length(test2)); log.console(" Bytes:", utf8.byte_length(test2)); log.console(" Bytes > Characters:", utf8.byte_length(test2) > utf8.length(test2) ? "PASS" : "FAIL"); // Test codepoints var test3 = "AπŸ˜€B"; var codepoints = utf8.codepoints(test3); log.console("\nCodepoints test:"); log.console(" String:", test3); log.console(" Codepoints:", codepoints); log.console(" A=65:", codepoints[0] == 65 ? "PASS" : "FAIL"); log.console(" πŸ˜€=128512:", codepoints[1] == 128512 ? "PASS" : "FAIL"); log.console(" B=66:", codepoints[2] == 66 ? "PASS" : "FAIL"); // Test from_codepoints var reconstructed = utf8.from_codepoints(codepoints); log.console(" Reconstructed:", reconstructed); log.console(" Match:", test3 == reconstructed ? "PASS" : "FAIL"); // Test encode/decode var test4 = "UTF-8 encoding: δ½ ε₯½δΈ–η•Œ 🌍"; var encoded = utf8.encode(test4); var decoded = utf8.decode(encoded); log.console("\nEncode/decode test:"); log.console(" Original:", test4); log.console(" Decoded:", decoded); log.console(" Match:", test4 == decoded ? "PASS" : "FAIL"); // Test validation log.console("\nValidation tests:"); log.console(" Valid UTF-8:", utf8.validate("Hello δΈ–η•Œ") ? "PASS" : "FAIL"); // Test slicing var test5 = "Hello δΈ–η•Œ!"; log.console("\nSlice tests:"); log.console(" Original:", test5); log.console(" slice(0, 5):", utf8.slice(test5, 0, 5)); log.console(" slice(6, 8):", utf8.slice(test5, 6, 8)); log.console(" slice(-3):", utf8.slice(test5, -3)); log.console(" slice(0, -1):", utf8.slice(test5, 0, -1)); // Test char_at log.console("\nchar_at tests:"); log.console(" char_at(0):", utf8.char_at(test5, 0)); log.console(" char_at(6):", utf8.char_at(test5, 6)); log.console(" char_at(7):", utf8.char_at(test5, 7)); log.console(" char_at(100):", utf8.char_at(test5, 100)); // Test with emoji sequences var test6 = "πŸ‘¨β€πŸ‘©β€πŸ‘§β€πŸ‘¦"; log.console("\nComplex emoji test:"); log.console(" String:", test6); log.console(" Length:", utf8.length(test6)); log.console(" Byte length:", utf8.byte_length(test6)); log.console(" Codepoints:", utf8.codepoints(test6).length); log.console("\nAll tests completed!"); $_.stop()