language-Modula2-0.1: examples/Modula-2_Libraries/PMOS/sources/tests/realtest.mod
MODULE RealTest;
(********************************************************)
(* *)
(* Test of real I/O using windows. *)
(* *)
(* Programmer: P. Moylan *)
(* Last edited: 10 October 1992 *)
(* Status: *)
(* Was working with FTL - see below - but still *)
(* bugs in the TopSpeed version, possibly to do *)
(* with LongTrunc but maybe because of an E *)
(* format problem. *)
(* *)
(* Working, still running various tests. *)
(* I have noticed the following faults: *)
(* 1. Precision error: 123.456E7 is converted *)
(* to 1234599... *)
(* 2. 0.1E-8 is written as 0E-8 when the field *)
(* size is 4 or 5. I haven't yet decided *)
(* whether to call this an error. *)
(* *)
(********************************************************)
FROM Trace IMPORT
(* proc *) NYI, Pause, TraceOn;
FROM Conversions IMPORT
(* proc *) StringToLongReal;
FROM RealIO IMPORT
(* proc *) WriteLongReal, ReadLongReal;
FROM Windows IMPORT
(* type *) Window, Colour, FrameType, DividerType,
(* proc *) OpenWindow, CloseWindow, WriteLn, WriteString;
(********************************************************************)
PROCEDURE StringTest (w: Window);
(* Check that procedure StringToReal works. *)
PROCEDURE Test (TestString: ARRAY OF CHAR);
VAR value: LONGREAL;
BEGIN
value := StringToLongReal (TestString);
WriteString (w, TestString); WriteString (w, " = ");
WriteLongReal (w, value, 10); WriteLn (w);
END Test;
BEGIN
WriteString (w, "Now testing StringToLongReal."); WriteLn (w);
Test ("123.456");
Test ("50000000000");
Test ("0.00009999");
Test (" .00009999");
Test (" .000099999");
Test ("000.001");
Test ("0");
Test ("123");
Test ("123.456E7");
Test ("123.456E-7");
END StringTest;
(********************************************************************)
PROCEDURE InputTest (w: Window);
VAR result: LONGREAL;
BEGIN
WriteString (w, "Now testing ReadLongReal."); WriteLn (w);
REPEAT
result := ReadLongReal (w); WriteString (w, " = ");
WriteLongReal (w, result, 10); WriteLn (w);
UNTIL result = 0.0;
Pause;
END InputTest;
(********************************************************************)
PROCEDURE OutputTest (w: Window);
VAR x: LONGREAL;
j: CARDINAL;
BEGIN
WriteString (w, " 0.0 = "); WriteLongReal (w, 0.0, 8); WriteLn(w);
WriteString (w, " 1.0 = "); WriteLongReal (w, 1.0, 8); WriteLn(w);
WriteString (w, " 10.0 = "); WriteLongReal (w, 10.0, 8); WriteLn(w);
WriteString (w, " 1.005 = "); WriteLongReal (w, 1.005, 8); WriteLn(w);
WriteString (w, "1.0052 = "); WriteLongReal (w, 1.0052, 8); WriteLn(w);
Pause;
WriteString (w, "1.1 = "); WriteLongReal (w, 1.1, 8); WriteLn(w);
WriteString (w, "1.5 = "); WriteLongReal (w, 1.5, 8); WriteLn(w);
Pause;
x := 3.14159265;
FOR j := 12 TO 1 BY -1 DO
WriteLongReal (w, x, j); WriteLn(w); Pause;
END (*FOR*);
FOR j := 14 TO 1 BY -1 DO
WriteLongReal (w, 12345678.0, j);
WriteLn (w);
Pause;
WriteLongReal (w, 0.0000000012345, j); WriteLn (w);
Pause;
END (*FOR*);
END OutputTest;
(********************************************************************)
PROCEDURE RunTheTest;
VAR w: Window;
BEGIN
OpenWindow (w, black, white, 10, 20, 0, 40, simpleframe, nodivider);
OutputTest (w);
StringTest (w);
InputTest (w);
Pause;
CloseWindow (w);
END RunTheTest;
(********************************************************************)
BEGIN
(* TraceOn (0, 10, 5, 40); *)
RunTheTest;
END RealTest.