diff options
Diffstat (limited to 'tests/general/cset.icn')
-rw-r--r-- | tests/general/cset.icn | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/tests/general/cset.icn b/tests/general/cset.icn new file mode 100644 index 0000000..dce1685 --- /dev/null +++ b/tests/general/cset.icn @@ -0,0 +1,85 @@ +#SRC: JCON + +# test csets and character conversions + +procedure main() + local a, c, i, n, s, cs, ct, x, y + + x := 'a1b2c3' + write("x: ", x); + write("*x: ", *x) + every writes("!x: " | !x | "\n"); + write("?z: ", ?'z') + write("?empty: ", ?'', " (OOPS)") # should fail + write() + + kw("digits", &digits) + kw("lcase", &lcase) + kw("ucase", &ucase) + kw("letters", &letters) + write(" &ascii: ", *&ascii, " elements") + write() + + write (" x y ", + " x++y y++x x--y y--x x**y y**x ~~x") + + every x := ( 'a1b2c3' | "a1b2c3" | 1234 | 12.34 | '') & + y := ( 'xyzabc' | "xyzabc" | 3456 | 34.56 | "@ 90") do { + write( + right(image(x),8), right(image(y),9), + right(x++y, 13), right(y++x, 13), + right(x--y, 7), right(y--x, 7), + right(x**y, 7), right(y**x, 7), + right(~~x, 7)) + } + + # various tests involving chars with the sign bit set + + # test conversion of int to char (string) and back + write() + every i := 0 to 255 by 15 do { + s := "" + c := char(i) + s ||:= c + n := ord(c) + cs := cset(c) + write(right(i, 3), right(image(c), 8), right(image(s), 8), right(n, 5), + right(image(cs), 8)) + } + + # test more and stranger conversions + write() + a := [0, 15.71, "32rU", "16r2D", "60", "8r113", "90", "105", "120", "8r207", + "16r96", "16ra5", "16rB4", "16rc3", "16rD2", "16re1", "16rf0", "16rfF"] + every s := !a do { + c := char(s) + n := ord(c) + write(right(image(s), 8), right(image(c), 8), right(n, 5)) + } + + # test conversion of string to int and back + write() + a := ["\x00", "\x0F", "\x1e", "-", "<", "\113", "Z", "i", "x", "\x87", + "\x96", "\xa5", "\xB4", "\xc3", "\xD2", "\xe1", "\xf0", "\xfF"] + every s := !a do { + n := ord(s) + c := char(n) + write(right(image(s), 6), right(n, 5), right(image(c), 8)) + } + + # test conversion of cset to string and int + write() + a := ['\x00', '\x0F', '\x1e', '-', '<', '\113', 'Z', 'i', 'x', '\x87', + '\x96', '\xa5', '\xB4', '\xc3', '\xD2', '\xe1', '\xf0', '\xfF'] + every cs := !a do { + s := string(cs) + n := ord(cs) + write(right(image(cs), 6), right(image(s), 8), right(n, 5)) + } +end + +procedure kw(label, value) + write(right("&" || label, 10), ": '", value, "'") + return +end + |