summaryrefslogtreecommitdiff
path: root/tests/general/cset.icn
diff options
context:
space:
mode:
Diffstat (limited to 'tests/general/cset.icn')
-rw-r--r--tests/general/cset.icn85
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
+