diff options
Diffstat (limited to 'tests/general/coerce.icn')
-rw-r--r-- | tests/general/coerce.icn | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/tests/general/coerce.icn b/tests/general/coerce.icn new file mode 100644 index 0000000..8b9ecbe --- /dev/null +++ b/tests/general/coerce.icn @@ -0,0 +1,67 @@ +#SRC: JCON + +# check coercion of operator arguments +# uses string invocation of operations + + +procedure main() + local i, r, c, s + + i := 1 + r := 2 + c := '3' + s := "9" + + every unop(!"+-*!/\\", i, r, c, s) + + write() + every binop(!"+-*/%^<=>" | "<<" | "==" | ">>" , i, r, c, s) + binop("[]", i, r, '12345', "67890") + every binop("++" | "--" | "**", 12, .23, 'x1', "x2") + + write() + every toby(2.3 | '20' | "2", 17.5 | '71' | "17", 3.1 | '30' | "3.2") + + write() + every writes(" ", ~~(1257787 | 3.14159 | "arizona") | "\n") + every writes(" ", ((123456 | 678.901 | 'tucson') ? move(5)) | "\n") + +end + + +procedure toby(i, j, k) + local n, s + s := image(i) || " to " || image(j) || " by " || image(k) || ":" + writes(left(s, 24)) + every n := i to j by k do + writes(" ", n) + write() +end + + +procedure unop(o, i, r, c, s) + write(left(o || "x", 7), + right(o(i) | "---", 6), + right(o(r) | "---", 6), + right(o(c) | "---", 6), + right(o(s) | "---", 6)) + return +end + + +procedure binop(o, i, r, c, s) + write("x ", left(o || " y", 5), + right(o(i, r) | "---", 6), + right(o(i, c) | "---", 6), + right(o(i, s) | "---", 6), + right(o(r, i) | "---", 6), + right(o(r, c) | "---", 6), + right(o(r, s) | "---", 6), + right(o(c, i) | "---", 6), + right(o(c, r) | "---", 6), + right(o(c, s) | "---", 6), + right(o(s, i) | "---", 6), + right(o(s, r) | "---", 6), + right(o(s, c) | "---", 6)) + return +end |