blob: 4b5d77925bdcec24cabacaa3d35224db6de8a869 [file] [log] [blame]
(* Copyright (C) 2009 Free Software Foundation, Inc. *)
(* This file is part of GNU Modula-2.
GNU Modula-2 is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free
Software Foundation; either version 2, or (at your option) any later
version.
GNU Modula-2 is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License along
with gm2; see the file COPYING. If not, write to the Free Software
Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *)
MODULE sigfig ;
FROM DynamicStrings IMPORT String, EqualArray, KillString, InitString,
PushAllocation, PopAllocation ;
FROM StringConvert IMPORT ToSigFig ;
FROM StrIO IMPORT WriteString, WriteLn ;
FROM NumberIO IMPORT WriteCard ;
FROM FIO IMPORT StdOut, FlushBuffer ;
FROM SFIO IMPORT WriteS ;
FROM libc IMPORT exit ;
TYPE
tests = RECORD
n : CARDINAL ;
i, o: ARRAY [0..maxString] OF CHAR ;
END ;
sigfigArray = ARRAY [0..6] OF tests ;
CONST
maxString = 80 ;
VAR
j: CARDINAL ;
t,
s: String ;
a: sigfigArray ;
e: INTEGER ;
BEGIN
a := sigfigArray{tests{ 3, "12.3456789" , "12.3"},
tests{ 4, "12.3456789" , "12.35"},
tests{ 5, "12.3456789" , "12.346"},
tests{ 6, "12.3456789" , "12.3457"},
tests{ 3, "19.99" , "20.0"},
tests{ 3, "99.999" , "100"},
tests{ 3, "99.999" , "100"}} ;
e := 0 ;
FOR j := 0 TO HIGH(a) DO
PushAllocation ;
WITH a[j] DO
t := InitString(i) ;
s := ToSigFig(t, n) ;
IF EqualArray(s, o)
THEN
WriteString(' passed ')
ELSE
WriteString('**failed**')
END ;
WriteString(' ToSigFig(') ;
WriteString(i) ; WriteString(', ') ; WriteCard(n, 0) ; WriteString(') -> ') ;
IF EqualArray(s, o)
THEN
WriteString(o)
ELSE
e := 1 ; (* failure code *)
s := WriteS(StdOut, s) ; WriteString(' (it should be: ') ;
WriteString(o) ; WriteString(')')
END ;
WriteLn ;
s := KillString(s)
END ;
PopAllocation(TRUE)
END ;
WriteLn ;
WriteString('The sigfig tests: ') ;
IF e=0
THEN
WriteString('passed')
ELSE
WriteString('failed')
END ;
WriteLn ;
FlushBuffer(StdOut) ;
exit(e)
END sigfig.