Improved Out.Real* layout and build type independence.

This commit is contained in:
David Brown 2016-10-12 11:12:08 +01:00
parent 1a3364269e
commit f0a68cf6f9
8 changed files with 456 additions and 210 deletions

View file

@ -1,11 +1,39 @@
--- Testing with Oberon 2 variable model ---
Real number hex representation.
1.0D0: 3FF0000000000000
1.1D0: 3FF199999999999A
2.1D0: 4000CCCCCCCCCCCD
-1.1D0: BFF199999999999A
1.1D3: 4091300000000000
1.1D-3: 3F5205BC01A36E2F
1.2345678987654321D3: 40934A45874103D8
0.0: 0000000000000000
0.000123D0: 3F201F31F46ED246
1/0.0: 7FF0000000000000
-1/0.0: FFF0000000000000
0.0/0.0: FFF8000000000000
1.0E0: 3F800000
1.1E0: 3F8CCCCD
2.1E0: 40066666
-1.1E0: BF8CCCCD
1.1E3: 44898000
1.1E-3: 3A902DE0
1.2345678987654321E3: 449A522C
0.0: 00000000
0.000123E0: 3900F990
1/0.0: 7F800000
-1/0.0: FF800000
0.0/0.0: FFC00000
Out module tests.
SIZE(INTEGER) = 2
Testing LONGREAL.
1 2 3
123456789012345678901234567890
1 2 3 4
1234567890123456789012345678901234567890
1.0D0: 1.0D+000
1.1D0: 1.1D+000
2.1D0: 2.1D+000
@ -17,9 +45,10 @@ Testing LONGREAL.
0.000123D0: 1.23D-004
1/0.0: Infinity
-1/0.0: -Infinity
0.0/0.0: -NaN
1 2 3
123456789012345678901234567890
1 2 3 4
1234567890123456789012345678901234567890
1.0D0: 1.00000D+000
1.1D0: 1.10000D+000
2.1D0: 2.10000D+000
@ -31,27 +60,29 @@ Testing LONGREAL.
0.000123D0: 1.23000D-004
1/0.0: Infinity
-1/0.0: -Infinity
0.0/0.0: -NaN
1 2 3
123456789012345678901234567890
1.0D0: 1.000000000000000D+000
1.1D0: 1.100000000000000D+000
2.1D0: 2.100000000000000D+000
-1.1D0: -1.100000000000000D+000
1.1D3: 1.100000000000000D+003
1.1D-3: 1.100000000000000D-003
1.2345678987654321D3: 1.234567898765430D+003
0.0: 0.000000000000000D+000
0.000123D0: 1.230000000000000D-004
1/0.0: Infinity
-1/0.0: -Infinity
1 2 3 4
1234567890123456789012345678901234567890
1.0D0: 1.0000000000000000D+000
1.1D0: 1.1000000000000000D+000
2.1D0: 2.1000000000000000D+000
-1.1D0: -1.1000000000000000D+000
1.1D3: 1.1000000000000000D+003
1.1D-3: 1.1000000000000000D-003
1.2345678987654321D3: 1.2345678987654300D+003
0.0: 0.0000000000000000D+000
0.000123D0: 1.2300000000000000D-004
1/0.0: Infinity
-1/0.0: -Infinity
0.0/0.0: -NaN
Testing REAL.
1 2 3
123456789012345678901234567890
1 2 3 4
1234567890123456789012345678901234567890
1.0E0: 1.0E+00
1.1E0: 1.1E+00
2.1E0: 2.1E+00
@ -63,6 +94,7 @@ Testing REAL.
0.000123E0: 1.23E-04
1/0.0: Infinity
-1/0.0: -Infinity
0.0/0.0: -NaN
1 2 3
123456789012345678901234567890
@ -77,31 +109,61 @@ Testing REAL.
0.000123E0: 1.230000E-04
1/0.0: Infinity
-1/0.0: -Infinity
0.0/0.0: -NaN
1 2 3
123456789012345678901234567890
1.0E0: 1.000000E+00
1.1E0: 1.100000E+00
2.1E0: 2.100000E+00
-1.1E0: -1.100000E+00
1.1E3: 1.100000E+03
1.1E-3: 1.100000E-03
1.2345678987654321E3: 1.234568E+03
0.0: 0.000000E+00
0.000123E0: 1.230000E-04
1/0.0: Infinity
-1/0.0: -Infinity
1 2 3 4
1234567890123456789012345678901234567890
1.0E0: 1.00000000E+00
1.1E0: 1.10000002E+00
2.1E0: 2.09999990E+00
-1.1E0: -1.10000002E+00
1.1E3: 1.10000000E+03
1.1E-3: 1.09999999E-03
1.2345678987654321E3: 1.23456787E+03
0.0: 0.00000000E+00
0.000123E0: 1.23000005E-04
1/0.0: Infinity
-1/0.0: -Infinity
0.0/0.0: -NaN
--- Testing with Component Pascal variable model ---
Real number hex representation.
1.0D0: 3FF0000000000000
1.1D0: 3FF199999999999A
2.1D0: 4000CCCCCCCCCCCD
-1.1D0: BFF199999999999A
1.1D3: 4091300000000000
1.1D-3: 3F5205BC01A36E2F
1.2345678987654321D3: 40934A45874103D8
0.0: 0000000000000000
0.000123D0: 3F201F31F46ED246
1/0.0: 7FF0000000000000
-1/0.0: FFF0000000000000
0.0/0.0: FFF8000000000000
1.0E0: 3F800000
1.1E0: 3F8CCCCD
2.1E0: 40066666
-1.1E0: BF8CCCCD
1.1E3: 44898000
1.1E-3: 3A902DE0
1.2345678987654321E3: 449A522C
0.0: 00000000
0.000123E0: 3900F990
1/0.0: 7F800000
-1/0.0: FF800000
0.0/0.0: FFC00000
Out module tests.
SIZE(INTEGER) = 4
Testing LONGREAL.
1 2 3
123456789012345678901234567890
1 2 3 4
1234567890123456789012345678901234567890
1.0D0: 1.0D+000
1.1D0: 1.1D+000
2.1D0: 2.1D+000
@ -113,9 +175,10 @@ Testing LONGREAL.
0.000123D0: 1.23D-004
1/0.0: Infinity
-1/0.0: -Infinity
0.0/0.0: -NaN
1 2 3
123456789012345678901234567890
1 2 3 4
1234567890123456789012345678901234567890
1.0D0: 1.00000D+000
1.1D0: 1.10000D+000
2.1D0: 2.10000D+000
@ -127,27 +190,29 @@ Testing LONGREAL.
0.000123D0: 1.23000D-004
1/0.0: Infinity
-1/0.0: -Infinity
0.0/0.0: -NaN
1 2 3
123456789012345678901234567890
1.0D0: 1.000000000000000D+000
1.1D0: 1.100000000000000D+000
2.1D0: 2.100000000000000D+000
-1.1D0: -1.100000000000000D+000
1.1D3: 1.100000000000000D+003
1.1D-3: 1.100000000000000D-003
1.2345678987654321D3: 1.234567898765430D+003
0.0: 0.000000000000000D+000
0.000123D0: 1.230000000000000D-004
1/0.0: Infinity
-1/0.0: -Infinity
1 2 3 4
1234567890123456789012345678901234567890
1.0D0: 1.0000000000000000D+000
1.1D0: 1.1000000000000000D+000
2.1D0: 2.1000000000000000D+000
-1.1D0: -1.1000000000000000D+000
1.1D3: 1.1000000000000000D+003
1.1D-3: 1.1000000000000000D-003
1.2345678987654321D3: 1.2345678987654300D+003
0.0: 0.0000000000000000D+000
0.000123D0: 1.2300000000000000D-004
1/0.0: Infinity
-1/0.0: -Infinity
0.0/0.0: -NaN
Testing REAL.
1 2 3
123456789012345678901234567890
1 2 3 4
1234567890123456789012345678901234567890
1.0E0: 1.0E+00
1.1E0: 1.1E+00
2.1E0: 2.1E+00
@ -159,6 +224,7 @@ Testing REAL.
0.000123E0: 1.23E-04
1/0.0: Infinity
-1/0.0: -Infinity
0.0/0.0: -NaN
1 2 3
123456789012345678901234567890
@ -173,18 +239,20 @@ Testing REAL.
0.000123E0: 1.230000E-04
1/0.0: Infinity
-1/0.0: -Infinity
0.0/0.0: -NaN
1 2 3
123456789012345678901234567890
1.0E0: 1.000000E+00
1.1E0: 1.100000E+00
2.1E0: 2.100000E+00
-1.1E0: -1.100000E+00
1.1E3: 1.100000E+03
1.1E-3: 1.100000E-03
1.2345678987654321E3: 1.234568E+03
0.0: 0.000000E+00
0.000123E0: 1.230000E-04
1/0.0: Infinity
-1/0.0: -Infinity
1 2 3 4
1234567890123456789012345678901234567890
1.0E0: 1.00000000E+00
1.1E0: 1.10000002E+00
2.1E0: 2.09999990E+00
-1.1E0: -1.10000002E+00
1.1E3: 1.10000000E+03
1.1E-3: 1.09999999E-03
1.2345678987654321E3: 1.23456787E+03
0.0: 0.00000000E+00
0.000123E0: 1.23000005E-04
1/0.0: Infinity
-1/0.0: -Infinity
0.0/0.0: -NaN

View file

@ -1,23 +1,75 @@
MODULE outtest;
IMPORT Out;
IMPORT Out, SYSTEM;
VAR
r: REAL;
lr: LONGREAL;
cw: SYSTEM.INT16;
PROCEDURE wc(c: CHAR); BEGIN Out.Char(c) END wc;
PROCEDURE ws(s: ARRAY OF CHAR); BEGIN Out.String(s) END ws;
PROCEDURE wi(i: HUGEINT); BEGIN Out.Int(i,1) END wi;
PROCEDURE wl; BEGIN Out.Ln END wl;
PROCEDURE wh(VAR h: ARRAY OF SYSTEM.BYTE);
VAR i: INTEGER; b: SYSTEM.INT8;
BEGIN
i := SHORT(LEN(h));
WHILE i > 0 DO
DEC(i); b := SYSTEM.VAL(SYSTEM.INT8, h[i]);
IF b DIV 16 MOD 16 < 10 THEN wc(CHR(b DIV 16 MOD 16 + 48)) ELSE wc(CHR(b DIV 16 MOD 16 + 55)) END;
IF b MOD 16 < 10 THEN wc(CHR(b MOD 16 + 48)) ELSE wc(CHR(b MOD 16 + 55)) END;
END
END wh;
(*
PROCEDURE -GetFpcw() '__asm__ __volatile__ ("fnstcw %0" : "=m" (outtest_cw))';
*)
BEGIN
(*
ws("Floating point control word: "); GetFpcw; wh(cw); wl;
wl;
*)
ws("Real number hex representation."); wl;
lr := 1.0D0; ws(" 1.0D0: "); wh(lr); wl;
lr := 1.1D0; ws(" 1.1D0: "); wh(lr); wl;
lr := 2.1D0; ws(" 2.1D0: "); wh(lr); wl;
lr := -1.1D0; ws("-1.1D0: "); wh(lr); wl;
lr := 1.1D3; ws(" 1.1D3: "); wh(lr); wl;
lr := 1.1D-3; ws(" 1.1D-3: "); wh(lr); wl;
lr := 1.2345678987654321D3; ws(" 1.2345678987654321D3: "); wh(lr); wl;
lr := 0.0; ws(" 0.0: "); wh(lr); wl;
lr := 0.000123D0; ws(" 0.000123D0: "); wh(lr); wl;
lr := 0.0; lr := 1/lr; ws(" 1/0.0: "); wh(lr); wl;
lr := 0.0; lr := -1/lr; ws("-1/0.0: "); wh(lr); wl;
lr := 0.0; lr := 0.0D0/lr; ws(" 0.0/0.0: "); wh(lr); wl;
wl;
r := 1.0E0; ws(" 1.0E0: "); wh(r); wl;
r := 1.1E0; ws(" 1.1E0: "); wh(r); wl;
r := 2.1E0; ws(" 2.1E0: "); wh(r); wl;
r := -1.1E0; ws("-1.1E0: "); wh(r); wl;
r := 1.1E3; ws(" 1.1E3: "); wh(r); wl;
r := 1.1E-3; ws(" 1.1E-3: "); wh(r); wl;
r := 1.2345678987654321E3; ws(" 1.2345678987654321E3: "); wh(r); wl;
r := 0.0; ws(" 0.0: "); wh(r); wl;
r := 0.000123E0; ws(" 0.000123E0: "); wh(r); wl;
r := 0.0; r := 1/r; ws(" 1/0.0: "); wh(r); wl;
r := 0.0; r := -1/r; ws("-1/0.0: "); wh(r); wl;
r := 0.0; r := 0.0E0/r; ws(" 0.0/0.0: "); wh(r); wl;
wl; wl;
ws("Out module tests."); wl;
ws("SIZE(INTEGER) = "); wi(SIZE(INTEGER)); wl; wl;
ws("Testing LONGREAL."); wl; wl;
ws(" 1 2 3"); wl;
ws(" 123456789012345678901234567890"); wl;
ws(" 1 2 3 4"); wl;
ws(" 1234567890123456789012345678901234567890"); wl;
ws(" 1.0D0: "); Out.LongReal( 1.0D0, 1); wl;
ws(" 1.1D0: "); Out.LongReal( 1.1D0, 1); wl;
ws(" 2.1D0: "); Out.LongReal( 2.1D0, 1); wl;
@ -31,9 +83,11 @@ BEGIN
ws(" 1/0.0: "); Out.LongReal(lr, 1); wl;
lr := 0.0; lr := -1/lr;
ws("-1/0.0: "); Out.LongReal(lr, 1); wl;
lr := 0.0; lr := 0.0D0/lr;
ws(" 0.0/0.0: "); Out.LongReal(lr, 1); wl;
wl;
ws(" 1 2 3"); wl;
ws(" 123456789012345678901234567890"); wl;
ws(" 1 2 3 4"); wl;
ws(" 1234567890123456789012345678901234567890"); wl;
ws(" 1.0D0: "); Out.LongReal( 1.0D0, 12); wl;
ws(" 1.1D0: "); Out.LongReal( 1.1D0, 12); wl;
ws(" 2.1D0: "); Out.LongReal( 2.1D0, 12); wl;
@ -47,28 +101,32 @@ BEGIN
ws(" 1/0.0: "); Out.LongReal(lr, 12); wl;
lr := 0.0; lr := -1/lr;
ws("-1/0.0: "); Out.LongReal(lr, 12); wl;
lr := 0.0; lr := 0.0D0/lr;
ws(" 0.0/0.0: "); Out.LongReal(lr, 12); wl;
wl;
ws(" 1 2 3"); wl;
ws(" 123456789012345678901234567890"); wl;
ws(" 1.0D0: "); Out.LongReal( 1.0D0, 30); wl;
ws(" 1.1D0: "); Out.LongReal( 1.1D0, 30); wl;
ws(" 2.1D0: "); Out.LongReal( 2.1D0, 30); wl;
ws("-1.1D0: "); Out.LongReal(-1.1D0, 30); wl;
ws(" 1.1D3: "); Out.LongReal( 1.1D3, 30); wl;
ws(" 1.1D-3: "); Out.LongReal( 1.1D-3, 30); wl;
ws(" 1.2345678987654321D3: "); Out.LongReal( 1.2345678987654321D3, 30); wl;
ws(" 0.0: "); Out.LongReal(0.0, 30); wl;
ws(" 0.000123D0: "); Out.LongReal(0.000123D0, 30); wl;
ws(" 1 2 3 4"); wl;
ws(" 1234567890123456789012345678901234567890"); wl;
ws(" 1.0D0: "); Out.LongReal( 1.0D0, 40); wl;
ws(" 1.1D0: "); Out.LongReal( 1.1D0, 40); wl;
ws(" 2.1D0: "); Out.LongReal( 2.1D0, 40); wl;
ws("-1.1D0: "); Out.LongReal(-1.1D0, 40); wl;
ws(" 1.1D3: "); Out.LongReal( 1.1D3, 40); wl;
ws(" 1.1D-3: "); Out.LongReal( 1.1D-3, 40); wl;
ws(" 1.2345678987654321D3: "); Out.LongReal( 1.2345678987654321D3, 40); wl;
ws(" 0.0: "); Out.LongReal(0.0, 40); wl;
ws(" 0.000123D0: "); Out.LongReal(0.000123D0, 40); wl;
lr := 0.0; lr := 1/lr;
ws(" 1/0.0: "); Out.LongReal(lr, 30); wl;
ws(" 1/0.0: "); Out.LongReal(lr, 40); wl;
lr := 0.0; lr := -1/lr;
ws("-1/0.0: "); Out.LongReal(lr, 30); wl;
ws("-1/0.0: "); Out.LongReal(lr, 40); wl;
lr := 0.0; lr := 0.0D0/lr;
ws(" 0.0/0.0: "); Out.LongReal(lr, 40); wl;
wl; wl; wl;
ws("Testing REAL."); wl; wl;
ws(" 1 2 3"); wl;
ws(" 123456789012345678901234567890"); wl;
ws(" 1 2 3 4"); wl;
ws(" 1234567890123456789012345678901234567890"); wl;
ws(" 1.0E0: "); Out.Real( 1.0E0, 1); wl;
ws(" 1.1E0: "); Out.Real( 1.1E0, 1); wl;
ws(" 2.1E0: "); Out.Real( 2.1E0, 1); wl;
@ -82,6 +140,8 @@ BEGIN
ws(" 1/0.0: "); Out.Real(r, 1); wl;
r := 0.0; r := -1/r;
ws("-1/0.0: "); Out.Real(r, 1); wl;
r := 0.0; r := 0.0E0/r;
ws(" 0.0/0.0: "); Out.Real(r, 1); wl;
wl;
ws(" 1 2 3"); wl;
ws(" 123456789012345678901234567890"); wl;
@ -98,22 +158,26 @@ BEGIN
ws(" 1/0.0: "); Out.Real(r, 12); wl;
r := 0.0; r := -1/r;
ws("-1/0.0: "); Out.Real(r, 12); wl;
r := 0.0; r := 0.0E0/r;
ws(" 0.0/0.0: "); Out.Real(r, 12); wl;
wl;
ws(" 1 2 3"); wl;
ws(" 123456789012345678901234567890"); wl;
ws(" 1.0E0: "); Out.Real( 1.0E0, 30); wl;
ws(" 1.1E0: "); Out.Real( 1.1E0, 30); wl;
ws(" 2.1E0: "); Out.Real( 2.1E0, 30); wl;
ws("-1.1E0: "); Out.Real(-1.1E0, 30); wl;
ws(" 1.1E3: "); Out.Real( 1.1E3, 30); wl;
ws(" 1.1E-3: "); Out.Real( 1.1E-3, 30); wl;
ws(" 1.2345678987654321E3: "); Out.Real( 1.2345678987654321E3, 30); wl;
ws(" 0.0: "); Out.Real(0.0, 30); wl;
ws(" 0.000123E0: "); Out.Real(0.000123E0, 30); wl;
ws(" 1 2 3 4"); wl;
ws(" 1234567890123456789012345678901234567890"); wl;
ws(" 1.0E0: "); Out.Real( 1.0E0, 40); wl;
ws(" 1.1E0: "); Out.Real( 1.1E0, 40); wl;
ws(" 2.1E0: "); Out.Real( 2.1E0, 40); wl;
ws("-1.1E0: "); Out.Real(-1.1E0, 40); wl;
ws(" 1.1E3: "); Out.Real( 1.1E3, 40); wl;
ws(" 1.1E-3: "); Out.Real( 1.1E-3, 40); wl;
ws(" 1.2345678987654321E3: "); Out.Real( 1.2345678987654321E3, 40); wl;
ws(" 0.0: "); Out.Real(0.0, 40); wl;
ws(" 0.000123E0: "); Out.Real(0.000123E0, 40); wl;
r := 0.0; r := 1/r;
ws(" 1/0.0: "); Out.Real(r, 30); wl;
ws(" 1/0.0: "); Out.Real(r, 40); wl;
r := 0.0; r := -1/r;
ws("-1/0.0: "); Out.Real(r, 30); wl;
ws("-1/0.0: "); Out.Real(r, 40); wl;
r := 0.0; r := 0.0E0/r;
ws(" 0.0/0.0: "); Out.Real(r, 40); wl;
wl;
END outtest.