cvs commit: hugs98/src/unix configure configure.in hugs98/tests
.cvsignore runstdtest testScript.in hugs98/tests/demos
Loaded.output hugs98/tests/libs Addr.input Addr.output FixIO.input
FixIO.lhs FixIO.output HugsLibs.output Loaded.output ...
Alastair Reid
reid@glass.cse.ogi.edu
Sat, 7 Apr 2001 12:09:24 -0700
reid 2001/04/07 12:09:24 PDT
Modified files:
src/unix configure configure.in
Added files:
tests .cvsignore runstdtest testScript.in
tests/demos Loaded.output
tests/libs Addr.input Addr.output FixIO.input
FixIO.lhs FixIO.output HugsLibs.output
Loaded.output complex1.input
complex1.output intTest.hs intTest.input
intTest.output list1.hs list1.input
list1.output system1.hs system1.input
system1.output
tests/misc DictHW.hs T1.hs T4.hs T6.hs gc.hs
gc1.input gc1.output gc2.input gc2.output
ioerror1.hs ioerror1.input
ioerror1.output ioerror2.hs
ioerror2.input ioerror2.output
iohandle.hs iohandle.input
iohandle.output iohandle.tst mutvars.hs
mutvars.input mutvars.output mvar.hs
mvar.input mvar.output ptrEq.hs
ptrEq.input ptrEq.output refs.hs
refs.input refs.output runst.hs
testDebug.hs testcvar.hs unwritable.tst
tests/rts arith.hs arith.input arith.output
array1.input array1.output array2.hs
array2.input array2.output arrayEx.hs
arrayEx.input arrayEx.output arrayt.hs
bignums.hs bignums.input bignums.output
catch.hs catch.input catch.output
catch2.hs catch2.output enum.hs
enum.input enum.output enum.output1
enum.output2 infix.hs infix.input
infix.output maxint.hs maxint.input
maxint.output ord.hs ord.input ord.output
print.hs print.input print1.output
print2.output read.hs read.input
read.output testlist.hs testlist.input
testlist.output
tests/static Loaded.output T1.hs T2.hs T2.output T3.hs
T3.output T6.hs T7.hs export1.hs
export1.output mod1.hs mod1.output
mod10.hs mod10.output mod11.hs
mod11.output mod12.hs mod12.output
mod13.hs mod13.output mod14.hs
mod14.output mod15.hs mod15.output
mod16.hs mod16.output mod17.hs
mod17.output mod18.hs mod18.output
mod19.hs mod19.output mod2.hs mod2.output
mod20.hs mod20.output mod21.hs
mod21.output mod22.hs mod22.output
mod23.hs mod23.output mod24.hs
mod24.output mod25.hs mod25.output
mod26.hs mod26.output mod27.hs
mod27.output mod28.hs mod28.output
mod29.hs mod29.output mod3.hs mod3.output
mod30.hs mod30.output mod31.hs
mod31.output mod32.hs mod32.output
mod33.hs mod33.output mod34.hs
mod34.output mod35.hs mod35.output
mod36.hs mod36.output mod37.hs
mod37.output mod38.hs mod38.output
mod39.hs mod39.output mod4.hs mod4.output
mod40.hs mod40.output mod41.hs
mod41.output mod42.hs mod42.output
mod43.hs mod43.output mod44.hs
mod44.output mod45.hs mod45.output
mod46.hs mod46.output mod47.hs
mod47.output mod48.hs mod48.output
mod49.hs mod49.output mod5.hs mod5.output
mod50.hs mod50.output mod51.hs
mod51.output mod52.hs mod52.output
mod53.hs mod53.output mod54.hs
mod54.output mod55.hs mod55.output
mod56.hs mod56.output mod57.hs
mod57.output mod58.hs mod58.output
mod59.hs mod59.output mod6.hs mod6.output
mod60.hs mod60.output mod61.hs
mod61.output mod62.hs mod62.output
mod63.hs mod63.output mod64.hs
mod64.output mod65.hs mod65.output
mod66.hs mod66.output mod67.hs
mod67.output mod68.hs mod68.output
mod69.hs mod69.output mod7.hs mod7.output
mod70.hs mod70.output mod71.hs
mod71.output mod72.hs mod72.output
mod73.hs mod73.output mod74.hs
mod74.output mod75.hs mod75.output
mod76.hs mod76.output mod77.hs
mod77.output mod78.hs mod78.output
mod79.hs mod79.output mod8.hs mod8.output
mod80.hs mod80.output mod81.hs
mod81.output mod82.hs mod82.output
mod83.hs mod83.output mod84.hs
mod84.output mod85.hs mod85.output
mod86.hs mod86.output mod87.hs
mod87.output mod88.hs mod88.output
mod89.hs mod89.output mod9.hs mod9.output
mod90.hs mod90.output mod91.hs
mod91.output mod92.hs mod92.output
mod93.hs mod93.output mod94.hs
mod94.output mod95.hs mod95.output
mod96.hs mod96.output mod97.hs
mod97.output mod98.hs mod98.output
qual1.hs qual1.output qual2.hs
qual2.output qual3.hs qual3.output
qual4.hs qual4.output qual5.hs
qual5.output syntax.hs syntax.output
tests/tcheck DictHW.input DictHW.output DictHW1.hs
DictHW2.hs TyErr.hs TyErr.output dicts.hs
dicts.input dicts.output monad.hs
monad.output ty1.hs ty1.output ty2.hs
ty2.output types.hs types.output
Log:
Added the old testsuite from the Yale releases.
Beats me why this was deleted from the OGI release. What were they thinking?
To run tests:
cd hugs98/src/unix
./configure
cd ..
make hugs
cd ../tests
sh ./testScript static tcheck rts libs demos
Once you get bored of seeing all the successful tests (yahoo!), you can
use this to restrict output to the failures:
sh ./testScript static tcheck rts libs demos | grep -v '^--'
[If I remember correctly, configuring with readline doesn't work.
Also note that you have to rerun configure to build tests/testScript.]
About the test harness
~~~~~~~~~~~~~~~~~~~~~~
The test harness is very portable. It even runs on Windows though you
have to install perl and cygwin to be able to run the tests.
The core of the test harness is the program runstdtest - a hacked up
version of a similar script from the GHC distro. This runs Hugs over
some input and compares the output against a file containing the
"correct" output.
Hugs generates a bunch of noise (banners, list of modules being
loaded, etc.) before generating the interesting part of the output so
we tell runstdtest to ignore the first N lines of output using the
-s<N> flag. If you change the length of the banner or the module
structure you will have to change all these -s flags (this is a bit
tedious - better solutions welcome).
About the test suite
~~~~~~~~~~~~~~~~~~~~
The testsuite itself is a little out of date. There was a time when
it checked every single error in static.c but this is probably not
true now. In particular, there are no tests which check the +98
errors.
I have updated the sample output files to match current output except
in cases where it wasn't clear if the current output was an error or
intended behaviour. Here's a list of the potential errors that may
need to be fixed.
----------------------------------------------------------------
Hugs used to detect an error in static/mod39.hs and no longer does.
I don't know if this is kosher.
./../src/hugs +q -pHugs: static/mod39.hs < /dev/null
expected stdout not matched by reality
*** static/mod39.output Fri Apr 6 18:05:40 2001
--- /tmp/runtest14605.3 Sat Apr 7 12:18:34 2001
***************
*** 1,2 ****
! ERROR static/mod39.hs:3 - Illegal constraints on class variable "a" in type of member function "f"
Hugs:[Leaving Hugs]
--- 1,6 ----
!
! Hugs session for:
! ../lib/Prelude.hs
! static/mod39.hs
! Type :? for help
Hugs:[Leaving Hugs]
----------------------------------------------------------------
Parentheses have been added in this error message. I guess that's ok.
./../src/hugs +q -pHugs: static/mod61.hs < /dev/null
expected stdout not matched by reality
*** static/mod61.output Fri Apr 6 18:05:40 2001
--- /tmp/runtest14914.3 Sat Apr 7 12:18:38 2001
***************
*** 1,2 ****
! ERROR static/mod61.hs:3 - Ambiguous use of operator "==" with "=="
Hugs:[Leaving Hugs]
--- 1,2 ----
! ERROR static/mod61.hs:3 - Ambiguous use of operator "(==)" with "(==)"
Hugs:[Leaving Hugs]
----------------------------------------------------------------
Hugs used to report an error in mod75.hs.
This module refers to a local variable by its qualified name.
I'm not sure if this is legal in Haskell'98
./../src/hugs +q -pHugs: static/mod75.hs < /dev/null
expected stdout not matched by reality
*** static/mod75.output Fri Apr 6 18:05:40 2001
--- /tmp/runtest15111.3 Sat Apr 7 12:18:41 2001
***************
*** 1,2 ****
! ERROR static/mod75.hs:3 - Undefined qualified variable "M.f"
Hugs:[Leaving Hugs]
--- 1,6 ----
!
! Hugs session for:
! ../lib/Prelude.hs
! static/mod75.hs
! Type :? for help
Hugs:[Leaving Hugs]
----------------------------------------------------------------
tcheck/DictHW{1,2}.hs and tcheck/DictHW.input check for an old (fixed)
error in the manipulation of dictHw when a module compilation aborts
due to a type error. I'm a little surprised by the change in the
error message. It doesn't look like unresolved top-level overloading
to me. It looks like Int not being an instance of Fractional.
./../src/hugs -w +q -pHugs: < tcheck/DictHW.input
expected stdout not matched by reality
*** tcheck/DictHW.output Sat Apr 7 12:05:25 2001
--- /tmp/runtest15588.3 Sat Apr 7 12:18:49 2001
***************
*** 1,3 ****
Hugs:Hugs:Reading file "DictHW.hs":
! ERROR DictHW.hs:4 - Int is not an instance of class "Fractional"
Hugs:Hugs:Reading file "DictHW.hs":
--- 1,6 ----
Hugs:Hugs:Reading file "DictHW.hs":
! ERROR DictHW.hs:4 - Unresolved top-level overloading
! *** Binding : g
! *** Outstanding context : Fractional Int
!
Hugs:Hugs:Reading file "DictHW.hs":
----------------------------------------------------------------
If you use "show" to print data constructors, you get the expected
output: True, False, Just 42, etc. But if you use the builtin printer
('hugs -u' or in error messages), the constructors are prefixed by the
name of the type: Bool_True, Bool_False, Maybe_Just 42, etc.
Is this better? Do we want this behaviour in both the generic printer
and in error messages? Do we care?
./../src/hugs +q -pHugs: -u rts/print.hs < rts/print.input
expected stdout not matched by reality
*** rts/print1.output Fri Oct 10 14:45:19 1997
--- /tmp/runtest15633.3 Sat Apr 7 12:18:51 2001
***************
*** 60,63 ****
Hugs:[1]
! Hugs:True
! Hugs:False
Hugs:('a','b')
--- 60,63 ----
Hugs:[1]
! Hugs:Bool_True
! Hugs:Bool_False
Hugs:('a','b')
***************
*** 67,72 ****
! Hugs:R 1
! Hugs:L 'a'
! Hugs:J True
! Hugs:N
Hugs:[Leaving Hugs]
--- 67,72 ----
! Hugs:E_R 1
! Hugs:E_L 'a'
! Hugs:M_J Bool_True
! Hugs:M_N
Hugs:[Leaving Hugs]
--!!! Testing top level printer (note that this doesn't necessarily test show)
./../src/hugs +q -pHugs: -u -f rts/print.hs < rts/print.input
expected stdout not matched by reality
*** rts/print2.output Tue Apr 21 16:20:03 1998
--- /tmp/runtest15648.3 Sat Apr 7 12:18:52 2001
***************
*** 39,42 ****
Hugs:[1]
! Hugs:True
! Hugs:False
Hugs:('a','b')
--- 39,42 ----
Hugs:[1]
! Hugs:Bool_True
! Hugs:Bool_False
Hugs:('a','b')
***************
*** 44,49 ****
Hugs:(1,{error "foo"},3)
! Hugs:R 1
! Hugs:L 'a'
! Hugs:J True
! Hugs:N
Hugs:[Leaving Hugs]
--- 44,49 ----
Hugs:(1,{error "foo"},3)
! Hugs:E_R 1
! Hugs:E_L 'a'
! Hugs:M_J Bool_True
! Hugs:M_N
Hugs:[Leaving Hugs]
--!!! Testing top level printer (note that this doesn't necessarily test show)
./../src/hugs +q -pHugs: -u rts/enum.hs < rts/enum.input
expected stdout not matched by reality
*** rts/enum.output1 Fri Apr 6 20:16:12 2001
--- /tmp/runtest15663.3 Sat Apr 7 12:18:53 2001
***************
*** 9,14 ****
Hugs:
! Program error: {_ToEnum C1 (-1)}
Hugs:
! Program error: {_ToEnum C1 7}
--- 9,14 ----
Hugs:
! Program error: {_ToEnum T_C1 (-1)}
Hugs:
! Program error: {_ToEnum T_C1 7}
***************
*** 17,22 ****
Hugs:
! Program error: {_ToEnum C1 7}
Hugs:
! Program error: {_ToEnum C1 (-1)}
--- 17,22 ----
Hugs:
! Program error: {_ToEnum T_C1 7}
Hugs:
! Program error: {_ToEnum T_C1 (-1)}
--!!! Testing Enum
./../src/hugs +q -pHugs: -u rts/infix.hs < rts/infix.input
expected stdout not matched by reality
*** rts/infix.output Fri Oct 10 14:43:41 1997
--- /tmp/runtest15678.3 Sat Apr 7 12:18:53 2001
***************
*** 1,2 ****
! Hugs:Scale (Note :+: Note)
Hugs:"Scale (Note :+: Note)"
--- 1,2 ----
! Hugs:Music_Scale (Music_Note Music_:+: Music_Note)
Hugs:"Scale (Note :+: Note)"
--!!! Testing the printing of infix constructors
./../src/hugs +q -pHugs: +u rts/enum.hs < rts/enum.input
expected stdout not matched by reality
*** rts/enum.output2 Fri Apr 6 20:15:15 2001
--- /tmp/runtest15693.3 Sat Apr 7 12:18:54 2001
***************
*** 9,14 ****
Hugs:"
! Program error: {_ToEnum C1 (-1)}
Hugs:"
! Program error: {_ToEnum C1 7}
--- 9,14 ----
Hugs:"
! Program error: {_ToEnum T_C1 (-1)}
Hugs:"
! Program error: {_ToEnum T_C1 7}
***************
*** 17,22 ****
Hugs:"
! Program error: {_ToEnum C1 7}
Hugs:"
! Program error: {_ToEnum C1 (-1)}
--- 17,22 ----
Hugs:"
! Program error: {_ToEnum T_C1 7}
Hugs:"
! Program error: {_ToEnum T_C1 (-1)}
Revision Changes Path
1.7 +4 -4 hugs98/src/unix/configure
1.7 +3 -3 hugs98/src/unix/configure.in