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