diff options
Diffstat (limited to 'tests/general/checkfpc.icn')
-rw-r--r-- | tests/general/checkfpc.icn | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/tests/general/checkfpc.icn b/tests/general/checkfpc.icn new file mode 100644 index 0000000..947c4fe --- /dev/null +++ b/tests/general/checkfpc.icn @@ -0,0 +1,127 @@ +procedure main() + write("This test of floating-point arithmetic is likely to show") + write("differences from platform to platform because of differences") + write("in floating-point precision and details of the routines that") + write("convert floating-point numbers to strings. If the values") + write("produced in local tests are approximately the same in magnitude") + write("as shown in the standard results, there's nothing to worry about.") + write("In addition, some platforms may show 0.0 as \"-0.0\". You can") + write("ignore this if you wish.") + p1() + p2() + p3() +end + +procedure p1() + write("every 1 to 10 do write(?0) ----> ",(every 1 to 10 do write(Image(?0))) | "none") + write("every i := 1 to 50 do write(real(repl(\"0\",i) || \"2.\")) ----> ",Image(every i := 1 to 50 do write(real(repl("0",i) || "2."))) | "none") + write("every i := 1 to 30 do write(integer(repl(\"0\",i) || \"2\")) ----> ",Image(every i := 1 to 30 do write(integer(repl("0",i) || "2"))) | "none") + write("2.0 ~=== +2.0 ----> ",Image(2.0 ~=== +2.0) | "none") + write("abs(3.0) ----> ",Image(abs(3.0)) | "none") + write("Image(2e13) ----> ",Image(Image(2e13)) | "none") + write("Image(0.0006) ----> ",Image(Image(0.0006)) | "none") + write("Image(2.0) ----> ",Image(Image(2.0)) | "none") + write("integer(2.0) ----> ",Image(integer(2.0)) | "none") + write("integer(2.7) ----> ",Image(integer(2.7)) | "none") + write("integer(\".\") ----> ",Image(integer(".")) | "none") + write("integer(\".3\") ----> ",Image(integer(".3")) | "none") + write("integer(\"0.3\") ----> ",Image(integer("0.3")) | "none") + write("integer(\" . 3\") ----> ",Image(integer(" . 3")) | "none") + write("integer(\"e2\") ----> ",Image(integer("e2")) | "none") + write("integer(\"3e500\") ----> ",Image(integer("3e500")) | "none") + write("numeric(2.0) ----> ",Image(numeric(2.0)) | "none") + write("numeric(2.7) ----> ",Image(numeric(2.7)) | "none") + write("numeric(\".\") ----> ",Image(numeric(".")) | "none") + write("numeric(\".3\") ----> ",Image(numeric(".3")) | "none") + write("numeric(\"0.3\") ----> ",Image(numeric("0.3")) | "none") +end + +procedure p2() + write("numeric(\" . 3\") ----> ",Image(numeric(" . 3")) | "none") + write("numeric(\"e2\") ----> ",Image(numeric("e2")) | "none") + write("numeric(\"3e500\") ----> ",Image(numeric("3e500")) | "none") + write("real(2) ----> ",Image(real(2)) | "none") + write("real(2.0) ----> ",Image(real(2.0)) | "none") + write("real(2.7) ----> ",Image(real(2.7)) | "none") + write("real(\"2\") ----> ",Image(real("2")) | "none") + write("real(\" 2\") ----> ",Image(real(" 2")) | "none") + write("real(\"2 \") ----> ",Image(real("2 ")) | "none") + write("real(\"+2\") ----> ",Image(real("+2")) | "none") + write("real(\"-2\") ----> ",Image(real("-2")) | "none") + write("real(\"- 2\") ----> ",Image(real("- 2")) | "none") + write("real(\" - 2 \") ----> ",Image(real(" - 2 ")) | "none") + write("real(\"\") ----> ",Image(real("")) | "none") + write("real(\"--2\") ----> ",Image(real("--2")) | "none") + write("real(\" \") ----> ",Image(real(" ")) | "none") + write("real(\"-\") ----> ",Image(real("-")) | "none") + write("real(\"+\") ----> ",Image(real("+")) | "none") + write("real(\".\") ----> ",Image(real(".")) | "none") + write("real(\".3\") ----> ",Image(real(".3")) | "none") + write("real(\"0.3\") ----> ",Image(real("0.3")) | "none") + write("real(\" . 3\") ----> ",Image(real(" . 3")) | "none") + write("real(\"e2\") ----> ",Image(real("e2")) | "none") + write("real(\"3e500\") ----> ",Image(real("3e500")) | "none") + write("real(\"7r4\") ----> ",Image(real("7r4")) | "none") + write("real(\"4r7\") ----> ",Image(real("4r7")) | "none") + write("real(\"4r 7\") ----> ",Image(real("4r 7")) | "none") + write("real(\"7r 4\") ----> ",Image(real("7r 4")) | "none") + write("real(\"16rff\") ----> ",Image(real("16rff")) | "none") + write("real(\"36rcat\") ----> ",Image(real("36rcat")) | "none") + write("real(\"36Rcat\") ----> ",Image(real("36Rcat")) | "none") + write("real(\"36rCAT\") ----> ",Image(real("36rCAT")) | "none") + write("real(\"1r1\") ----> ",Image(real("1r1")) | "none") + write("real(\"2r0\") ----> ",Image(real("2r0")) | "none") + write("real(\"22222222222222222222222222222\") ----> ",Image(real("22222222222222222222222222222")) | "none") + write("numeric(2.0) ----> ",Image(numeric(2.0)) | "none") + write("numeric(2.7) ----> ",Image(numeric(2.7)) | "none") + write("numeric(0.3) ----> ",Image(numeric(0.3)) | "none") + write("numeric(e2) ----> ",Image(numeric(e2)) | "none") + write("36. ^ 9 ----> ",Image(36. ^ 9) | "none") + write("36 ^ 9. ----> ",Image(36 ^ 9.) | "none") + write("36. ^ 9. ----> ",Image(36. ^ 9.) | "none") + write("-36. ^ 9 ----> ",Image(-36. ^ 9) | "none") + write("-36. ^ -9 ----> ",Image(-36. ^ -9) | "none") + write((every i := 1 to 37 do write(Image(real(repl("2",i) || ".")))) | "failed") + write((every i := 1 to 37 do write(Image(real(repl("2",i) || ".2")))) | "failed") + write((every i := 1 to 37 do write(Image((repl("2",i) || ".2") + 1))) | "failed") + write("2.0 === +2.0 ----> ",Image(2.0 === +2.0) | "none") + write("?30.0 ----> ",Image(?30.0) | "none") +end + +procedure p3() + write("copy(1.0) ----> ",Image(copy(1.0)) | "none") + write("trim(3.14159,58) ----> ",Image(trim(3.14159,58)) | "none") + write("Image(2e13) ----> ",Image(Image(2e13)) | "none") + write("Image(0.0006) ----> ",Image(Image(0.0006)) | "none") +end +procedure Image(x) + local head, tail, exp, span + + span := 9 + + if type(x) ~== "real" then return image(x) + else { + x ? { + if head := tab(upto('e')) + then { + tail := tab(0) + head ? return (tab(span | 0) || tail) + } + else { + head := tab(span - 1 | 0) + # + # if head is too small to include the ".", go to floating point + # format. + # + if exp := *tab(upto('.')) then + head ? return move(1) || "." || move(span - 3) || + "e+" || (span - 3 + exp) + else { + if head[-1] == "." then + head ||:= (move(1) | "0") + return head + } + } + } + } +end |