Making testsuite faster - threaded testsuite runs

Simon Marlow simonmarhaskell at gmail.com
Wed Aug 23 05:19:38 EDT 2006


Great idea.  Please go ahead and commit.

Cheers,
	Simon

Esa Ilari Vuokko wrote:
> Here's revised patch.  It fixes a bookkeepping issue and doesn't skip
> few tests that previous does (it sets up TestOptions in main thread
> instead of race between main thread and test-specific thread.)
> 
> Best regards,
> --Esa
> 
> Esa Ilari Vuokko wrote:
> 
>>Hi
>>
>>I found testsuite painfully slow to run, so I came up with following solution:
>>Add threads-support, so that multiple tests are ran at once.  I have tested
>>this with make fast THREADS=3, (on Hyperthreaded machine), and got no
>>additional regressions.  The time (real) to run dropped from about 9min50sec
>>to 7min40sec.
>>
>>I realize this might not be the right time to apply as release is so near.
>>I'd appreciate comments whetever I should resubmit after RC or Release.
>>Any feedback on implementation, bugs or other problems is also welcome.
>>
>>The idea is to run many test() simultaneously.  This only applies within one
>>all.T-file, and when after all.T we wait until tests in it are ran, then move
>>next one.  It never spawns more than n+1 threads, but it spawns threads for
>>skipped tests as well.  We also get new attribute, nothreads, which will run
>>test alone.  If set on all.T-level, all tests are ran one after another.
>>
>>The implementation is a bit crude, and there's obvious refactoring to be done,
>>but I wanted the initial implementation to be as straightforward as possible.
>>
>>This also, I think, requires python 2.4.
>>
>>Tue Aug 22 02:04:56 FLE Standard Time 2006  Esa Ilari Vuokko <ei at vuokko.info>
>>  * Driver: Add THREADS-support
>>
>>Tue Aug 22 02:08:31 FLE Standard Time 2006  Esa Ilari Vuokko <ei at vuokko.info>
>>  * Fix some THREADED-caused fails
>>
>>Fixes simply add nothreads-attribute.
>>
>>Best regards,
>>--Esa
> 
> 
> 
> ------------------------------------------------------------------------
> 
> 
> New patches:
> 
> [Fix some THREADED-caused fails
> Esa Ilari Vuokko <ei at vuokko.info>**20060821230831] {
> hunk ./tests/ghc-regress/cabal/all.T 1
> -setTestOpts(only_compiler_types(['ghc']))
> +setTestOpts(compose(nothreads,only_compiler_types(['ghc'])))
> hunk ./tests/ghc-regress/driver/all.T 1
> -setTestOpts(only_compiler_types(['ghc']))
> +setTestOpts(compose(nothreads, only_compiler_types(['ghc'])))
> }
> 
> [Driver: Add THREADS-support
> Esa Ilari Vuokko <ei at vuokko.info>**20060822213145] {
> hunk ./driver/runtests.py 13
> +import threading
> hunk ./driver/runtests.py 20
> -global testopts
> -testopts = getTestOpts()
> +global testopts_local
> +testopts_local.x = TestOptions()
> hunk ./driver/runtests.py 35
> +  "threads=",           # threads to run simultaneously
> hunk ./driver/runtests.py 65
> +
> +    if opt == '--threads':
> +        config.threads = int(arg)
> hunk ./driver/runtests.py 88
> +        t.running_threads=0
> hunk ./driver/runtests.py 90
> +        t.thread_pool.acquire()
> +        while t.running_threads>0:
> +            t.thread_pool.wait()
> +        t.thread_pool.release()
> hunk ./driver/runtests.py 97
> -
> +        
> hunk ./driver/testlib.py 12
> +import threading
> +import thread
> hunk ./driver/testlib.py 78
> +        
> +        # threads
> +        self.threads = 1
> hunk ./driver/testlib.py 108
> +       
> +       self.lock = threading.Lock()
> +       self.thread_pool = threading.Condition(self.lock)
> +       self.running_threads = 0
> hunk ./driver/testlib.py 158
> -
> +       # should we run this test alone, ie disable THREADS
> +       self.nothreads = 0
> hunk ./driver/testlib.py 177
> -global testopts
> -testopts = TestOptions()
> +global testopts_local
> +testopts_local = threading.local()
> hunk ./driver/testlib.py 181
> -    return testopts
> +    return testopts_local.x
> hunk ./driver/testlib.py 183
> -def resetTestOpts():
> -    global testopts
> -    testopts = copy.copy(thisdir_testopts)
> +def setLocalTestOpts(opts):
> +    global testopts_local
> +    testopts_local.x=opts
> hunk ./driver/testlib.py 311
> +# ---
> +def nothreads(opts):
> +    opts.nothreads=1
> +
> hunk ./driver/testlib.py 345
> -def test( name, setup, func, args ):
> -    t.total_tests = t.total_tests + 1
> +def test ( name, setup, func, args):
> +    return test_common(0,name,setup,func,args)
> {
> hunk ./driver/testlib.py 348
> -    # Reset the test-local options to the options for this "set"
> +def test_alone (name, setup, func, args):
> +    return test_common(1,name,setup,func,args)
> +
> +def test_common (ser, name, setup, func, args):
> +    n = 1
> hunk ./driver/testlib.py 354
> +    setup(getTestOpts())
> +    if ser or getTestOpts().nothreads:
> +        n = config.threads
> +
> +    ok = 0
> +    t.thread_pool.acquire()
> +    try:
> +        while config.threads<(t.running_threads+n):
> +            t.thread_pool.wait()
> +        t.running_threads = t.running_threads+n
> +        ok=1
> +        t.thread_pool.release()
> +        thread.start_new_thread(test_common_thread, (n, name, setup, func, args))
> +    except:
> +        if not ok:
> +            t.thread_pool.release()
> +
> +def test_common_thread(n, name, setup, func, args):
> +    t.lock.acquire()
> +    try:
> +        test_common_work(name,setup,func,args)
> +    finally:
> +        t.lock.release()
> +        t.thread_pool.acquire()
> +        t.running_threads = t.running_threads - n
> +        t.thread_pool.notify()
> +        t.thread_pool.release()
> +            
> }
> hunk ./driver/testlib.py 353
> -    resetTestOpts()
> -    setup(getTestOpts())
> -    if ser or getTestOpts().nothreads:
> +    opts = copy.copy(thisdir_testopts)
> +    setup(opts)
> +    if ser or opts.nothreads:
> hunk ./driver/testlib.py 366
> -        thread.start_new_thread(test_common_thread, (n, name, setup, func, args))
> +        thread.start_new_thread(test_common_thread, (n, name, opts, func, args))
> hunk ./driver/testlib.py 371
> -def test_common_thread(n, name, setup, func, args):
> +def test_common_thread(n, name, opts, func, args):
> hunk ./driver/testlib.py 374
> -        test_common_work(name,setup,func,args)
> +        test_common_work(name,opts,func,args)
> hunk ./driver/testlib.py 383
> -    # Set our test-local options
> -    setup(testopts)
> hunk ./driver/testlib.py 384
> +def test_common_work (name, opts, func, args):
> +    t.total_tests = t.total_tests+1
> +    setLocalTestOpts(opts)
> hunk ./driver/testlib.py 403
> -        not testopts.skip \
> +        not getTestOpts().skip \
> hunk ./driver/testlib.py 405
> -        and (testopts.only_ways == [] or way in testopts.only_ways) \
> -        and way not in testopts.omit_ways
> +        and (getTestOpts().only_ways == [] or way in getTestOpts().only_ways) \
> +        and way not in getTestOpts().omit_ways
> hunk ./driver/testlib.py 437
> -    if testopts.cleanup != '':
> +    if getTestOpts().cleanup != '':
> hunk ./driver/testlib.py 448
> -        result = apply(func, [name,way] + args)
> +        t.lock.release()
> +        try:
> +            result = apply(func, [name,way] + args)
> +        finally:
> +            t.lock.acquire()
> hunk ./driver/testlib.py 454
> -        if testopts.expect != 'pass' and testopts.expect != 'fail' or \
> +        if getTestOpts().expect != 'pass' and getTestOpts().expect != 'fail' or \
> hunk ./driver/testlib.py 459
> -            if testopts.expect == 'pass' \
> -               and way not in testopts.expect_fail_for:
> +            if getTestOpts().expect == 'pass' \
> +               and way not in getTestOpts().expect_fail_for:
> hunk ./driver/testlib.py 474
> -            if testopts.expect == 'pass' \
> -               and way not in testopts.expect_fail_for:
> +            if getTestOpts().expect == 'pass' \
> +               and way not in getTestOpts().expect_fail_for:
> hunk ./driver/testlib.py 538
> -    testopts.stdin = script
> +    getTestOpts().stdin = script
> hunk ./driver/testlib.py 608
> -        return simple_run( name, way, './'+name, testopts.extra_run_opts, 0 )
> +        return simple_run( name, way, './'+name, getTestOpts().extra_run_opts, 0 )
> hunk ./driver/testlib.py 625
> -    return simple_run( name, way, './'+name, testopts.extra_run_opts, 0 )
> +    return simple_run( name, way, './'+name, getTestOpts().extra_run_opts, 0 )
> hunk ./driver/testlib.py 642
> -    return simple_run( name, way, './'+name, testopts.extra_run_opts, 1 )
> +    return simple_run( name, way, './'+name, getTestOpts().extra_run_opts, 1 )
> hunk ./driver/testlib.py 662
> -    elif testopts.compile_to_hc:
> +    elif getTestOpts().compile_to_hc:
> hunk ./driver/testlib.py 674
> -          + testopts.extra_hc_opts + ' ' \
> +          + getTestOpts().extra_hc_opts + ' ' \
> hunk ./driver/testlib.py 697
> -   if testopts.stdin != '':
> -       use_stdin = testopts.stdin
> +   if getTestOpts().stdin != '':
> +       use_stdin = getTestOpts().stdin
> hunk ./driver/testlib.py 726
> -   if exit_code != testopts.exit_code:
> -       print 'Wrong exit code (expected', testopts.exit_code, ', actual', exit_code, ')'
> +   if exit_code != getTestOpts().exit_code:
> +       print 'Wrong exit code (expected', getTestOpts().exit_code, ', actual', exit_code, ')'
> hunk ./driver/testlib.py 772
> -        script.write(':set args ' + testopts.extra_run_opts + '\n')
> +        script.write(':set args ' + getTestOpts().extra_run_opts + '\n')
> hunk ./driver/testlib.py 785
> -    if testopts.stdin != '':
> -        stdin_file = in_testdir(testopts.stdin)
> +    if getTestOpts().stdin != '':
> +        stdin_file = in_testdir(getTestOpts().stdin)
> hunk ./driver/testlib.py 802
> -          + testopts.extra_hc_opts + ' ' \
> +          + getTestOpts().extra_hc_opts + ' ' \
> hunk ./driver/testlib.py 811
> -    if exit_code != testopts.exit_code:
> -        print 'Wrong exit code (expected', testopts.exit_code, ', actual', exit_code, ')'
> +    if exit_code != getTestOpts().exit_code:
> +        print 'Wrong exit code (expected', getTestOpts().exit_code, ', actual', exit_code, ')'
> hunk ./driver/testlib.py 885
> -          + testopts.extra_hc_opts \
> +          + getTestOpts().extra_hc_opts \
> hunk ./driver/testlib.py 915
> -          + testopts.extra_hc_opts + ' ' \
> +          + getTestOpts().extra_hc_opts + ' ' \
> hunk ./driver/testlib.py 934
> -    return simple_run ( name, way, './'+name, testopts.extra_run_opts, 0 )
> +    return simple_run ( name, way, './'+name, getTestOpts().extra_run_opts, 0 )
> hunk ./mk/test.mk 16
> +#       THREADS         -- run n tests at once
> hunk ./mk/test.mk 78
> +
> +ifneq "$(THREADS)" ""
> +RUNTEST_OPTS += --thread=$(THREADS)
> +endif
> }
> 
> Context:
> 
> [Update output (remove "In the call...")
> simonpj at microsoft.com**20060818161412] 
> [Update output
> simonpj at microsoft.com**20060818155640] 
> [Add test for tagToEnum#
> simonpj at microsoft.com**20060816203023] 
> [Two more tests
> simonpj at microsoft.com**20060815080606] 
> [Update expected output
> simonpj at microsoft.com**20060814090354] 
> [Add flag to test
> simonpj at microsoft.com**20060811142744] 
> [More upated output
> simonpj at microsoft.com**20060811133858] 
> [More updated output
> simonpj at microsoft.com**20060811133233] 
> [Update test outpuot
> simonpj at microsoft.com**20060811131132] 
> [Remove typecheck.testeq1.run.stdout 
> simonpj at microsoft.com**20060811125001] 
> [Comments in Makefile
> simonpj at microsoft.com**20060811123001] 
> [This test now compiles without errors
> Simon Marlow <simonmar at microsoft.com>**20060811102354] 
> [accept output
> Simon Marlow <simonmar at microsoft.com>**20060811101931] 
> [base-1.0 ==> base-2.0
> Simon Marlow <simonmar at microsoft.com>**20060811101925] 
> [base-1.0 ==> base-2.0
> Simon Marlow <simonmar at microsoft.com>**20060811101619] 
> [accept output
> Simon Marlow <simonmar at microsoft.com>**20060811101428] 
> [update FFI syntax
> Simon Marlow <simonmar at microsoft.com>**20060811100321] 
> [expect fail for threaded2 way, fork isn't supported in SMP mode (yet)
> Simon Marlow <simonmar at microsoft.com>**20060811100315] 
> [fix FFI syntax
> Simon Marlow <simonmar at microsoft.com>**20060811095918] 
> [accept output
> Simon Marlow <simonmar at microsoft.com>**20060811095501] 
> [Fix some Array.bounds calls to Array.getBounds
> Esa Ilari Vuokko <ei at vuokko.info>**20060809220653] 
> [Add tests for incomplete-pattern warnings
> simonpj at microsoft.com**20060808144017] 
> [Lazy patterns can't be unboxed (Trac 845)
> simonpj at microsoft.com**20060808135821] 
> [Test error message (Trac 844)
> simonpj at microsoft.com**20060808133927] 
> [Add tc206; edit a couple of others
> simonpj at microsoft.com**20060808091517] 
> [Add test for overlapping pattern warnings for lazy patterns
> simonpj at microsoft.com**20060727154926] 
> [Add a test for infix type constructors
> simonpj at microsoft.com**20060727154247] 
> [Add test for unboxed fields in GADT record selectors
> kevind at bu.edu**20060802125121] 
> [add new cabal test
> Simon Marlow <simonmar at microsoft.com>**20060727140657] 
> [test fixes and new tests for package support
> Simon Marlow <simonmar at microsoft.com>**20060727140436] 
> [accept output (improved error messages due to PrintUnqual changes)
> Simon Marlow <simonmar at microsoft.com>**20060727140124] 
> [accept output
> Simon Marlow <simonmar at microsoft.com>**20060727134921] 
> [add test for Ix bug
> Simon Marlow <simonmar at microsoft.com>**20060721100303] 
> [document stage=2, and clean up a little.
> Simon Marlow <simonmar at microsoft.com>**20060710153547] 
> [remove unused imports
> Simon Marlow <simonmar at microsoft.com>**20060616105302] 
> [Test Trac bug #795
> simonpj at microsoft.com**20060703151859] 
> [encorporate rest of property checks for Data.ByteString
> Don Stewart <dons at cse.unsw.edu.au>**20060702093816] 
> [Add regress tests for fusion rules. Makes sure they fire, and rewrite to correct result
> Don Stewart <dons at cse.unsw.edu.au>**20060702090703] 
> [Add model-based tests for ByteString.Lazy<=>ByteString<=>Data.list
> Don Stewart <dons at cse.unsw.edu.au>**20060702055523] 
> [Accept output change
> simonpj at microsoft.com**20060626111936] 
> [Add test for infix function definitions
> simonpj at microsoft.com**20060519103259] 
> [Test for pattern type sigs in do-notation
> simonpj at microsoft.com**20060504142058] 
> [add test from #799
> Simon Marlow <simonmar at microsoft.com>**20060623094712] 
> [omit conc039 for threaded2
> Simon Marlow <simonmar at microsoft.com>**20060622092716] 
> [robustify the test a little
> Simon Marlow <simonmar at microsoft.com>**20060622092148] 
> [omit conc036 for GHCi
> Simon Marlow <simonmar at microsoft.com>**20060622091811] 
> [add a prof/TH test
> Simon Marlow <simonmar at microsoft.com>**20060622090109] 
> [accept output
> Simon Marlow <simonmar at microsoft.com>**20060622085217] 
> [re-enable various tests with -threaded that now work
> Simon Marlow <simonmar at microsoft.com>**20060614144922] 
> [fix this test to work propertly with -threaded
> Simon Marlow <simonmar at microsoft.com>**20060614144256] 
> [Fix this test to work properly with -threaded
> Simon Marlow <simonmar at microsoft.com>**20060614144219] 
> [test for NCG bug
> Simon Marlow <simonmar at microsoft.com>**20060606112614] 
> [accept output
> Simon Marlow <simonmar at microsoft.com>**20060601123936
>  NOTE: I made a slight tweak to Alex to improve the lexical error messages,
>  to get correct output for these tests you need an updated Alex from darcs.
> ] 
> [disable ffi016 for GHCi
> Simon Marlow <simonmar at microsoft.com>**20060530095146] 
> [first attempt at being boring
> Ashley Yakeley <ashley at semantic.org>**20060526070327] 
> [Update expected output
> Don Stewart <dons at cse.unsw.edu.au>**20060525071135] 
> [update expected output. tougher replicate test.
> Don Stewart <dons at cse.unsw.edu.au>**20060517020540] 
> [accept output
> Simon Marlow <simonmar at microsoft.com>**20060508073357] 
> [More QC tests. Update output
> Don Stewart <dons at cse.unsw.edu.au>**20060507042341] 
> [More QC properties. Update output
> Don Stewart <dons at cse.unsw.edu.au>**20060506043305] 
> [Add test for newtypes in FFI
> simonpj at microsoft.com**20060426183636
>  
>  The standard FFI says that newtypes are automatically unwrapped in
>  argument and result types.  This test checks that it also happens
>  for newtype-wrapping of the IO monad itself, a recent change to
>  GHC.
>  
> ] 
> [And add QC test for group/groupBy
> Don Stewart <dons at cse.unsw.edu.au>**20060501065658] 
> [More QC properties, for fold{lr}1. Update expected output
> Don Stewart <dons at cse.unsw.edu.au>**20060430084252] 
> [Import Data.ByteString regression tests
> Don Stewart <dons at cse.unsw.edu.au>**20060428122838] 
> [avoid running out of stack
> Simon Marlow <simonmar at microsoft.com>**20060428083855] 
> [test Bool arguments too
> Simon Marlow <simonmar at microsoft.com>**20060418144834] 
> [Test for foralls to the right of =>
> simonpj at microsoft.com**20060418125116] 
> [Test for error recovery in TH
> simonpj at microsoft.com**20060414120213] 
> [forgot to add this file
> Simon Marlow <simonmar at microsoft.com>**20060413080300] 
> [Add a test for SpecConstr + GADTs
> simonpj at microsoft.com**20060412153402] 
> [Memo-function test
> simonpj at microsoft.com**20060410164304
>  
>  Checks that preInlineUnconditionally isn't to eager!
>  (If it is, this test goes exponential.)
>  
> ] 
> [add a test for a division bug in the NCG
> Simon Marlow <simonmar at microsoft.com>**20060412144627] 
> [Add test for newtype deriving (thanks to Ross)
> simonpj at microsoft.com**20060402215709] 
> [update for new source tree layout
> Simon Marlow <simonmar at microsoft.com>**20060410091202] 
> [add a test for a blackhole GC bug
> Simon Marlow <simonmar at microsoft.com>**20060407101628] 
> [the "threaded" way was renamed to "threaded1"/"threaded2"
> Simon Marlow <simonmar at microsoft.com>**20060407101619] 
> [Track the GHC source tree reorganisation
> Simon Marlow <simonmar at microsoft.com>**20060407041720] 
> [omit asm ways for this test on x86
> Simon Marlow <simonmar at microsoft.com>**20060407080546] 
> [avoid running out of stack for non-optimised ways
> Simon Marlow <simonmar at microsoft.com>**20060407080032] 
> [add test for ForeignPtrEnv
> Simon Marlow <simonmar at microsoft.com>**20060405160129] 
> [omit ffi007 and ffi008 for GHCi (see comment for details)
> Simon Marlow <simonmar at microsoft.com>**20060405133421] 
> [fix tests for Windows
> Simon Marlow <simonmar at microsoft.com>**20060404153133] 
> [unnecessary mingw-specific output
> Simon Marlow <simonmar at microsoft.com>**20060404150047] 
> [windows output
> Simon Marlow <simonmar at microsoft.com>**20060404145525] 
> [crummy fix for Windows
> Simon Marlow <simonmar at microsoft.com>**20060404145128] 
> [fix the expect_fail_if_windows macro
> Simon Marlow <simonmar at microsoft.com>**20060404144611] 
> [Add scoped tyvar test
> simonpj at microsoft.com**20060327123134] 
> [attempt to work around restrictions with fork() & pthreads
> Simon Marlow <simonmar at microsoft.com>**20060323134034
>  In the child process, call exec() directly instead of using
>  System.Cmd.system, which involves another fork()/exec() and a
>  non-blocking wait.  The problem is that in a forked child of a
>  threaded process, it isn't safe to do much except exec() according to
>  POSIX.  In fact calling pthread_create() in the child causes the
>  pthread library to fail with an error on FreeBSD.
> ] 
> [accept output (better error locations)
> Simon Marlow <simonmar at microsoft.com>**20060323102719] 
> [fix to previous
> Simon Marlow <simonmar at microsoft.com>**20060323102523] 
> [fcntl-FreeBSD
> stolz at i2.informatik.rwth-aachen.de**20060321165137
>  Expect failure of queryfdoption01 on FreeBSD (6/7): /dev/null                                                                                                   
>  can't be  switched to non-blocking i/o, so fcntl() will throw an error.
>  Unfortunately this went to the old CVS first.
> ] 
> [fix for GHCi tests that raise exceptions or exit
> Simon Marlow <simonmar at microsoft.com>**20060320124648
>  We need to call GHC.TopHandler.runIOFastExit instead of
>  GHC.TopHandler.runIO.  Recent fixes to the shutdown code have meant
>  that when a thread invokes shutdownHaskellAndExit(), other main
>  threads get a chance to exit (as they should), but this means that we
>  might have a race between the child thread trying to exit the program
>  and the main thread doing the same.  In the case of GHCi, if we're
>  running an interpreted computation that needs to exit (as some tests
>  do), then we really want this child thread to exit the program rather
>  than the main thread.
> ] 
> [sort the keys when outputting the summary
> Simon Marlow <simonmar at microsoft.com>**20060320114811] 
> [fix a regex that was too slow
> Simon Marlow <simonmar at microsoft.com>**20060316163903] 
> [ignore ".exe" in program output, for Windows
> Simon Marlow <simonmar at microsoft.com>**20060316155440] 
> [fix for Win32
> Simon Marlow <simonmar at microsoft.com>**20060316154734] 
> [remove some dead code
> Simon Marlow <simonmar at microsoft.com>**20060315114645] 
> [Tidy up the testsuite output by combinding failures for multiple ways
> Simon Marlow <simonmar at microsoft.com>**20060315112501
>  
>  Before:
>     tc056(normal)
>     tc056(opt)
>     tc056(optasm)
>     tc056(prof)
>     tc056(profasm)
>     tc056(unreg)
>  
>  After:
>     tc056(normal,opt,optasm,prof,profasm,unreg)
> ] 
> [patch up this test again
> Simon Marlow <simonmar at microsoft.com>**20060314151844] 
> [process003 doesn't work with GHCi, omit it
> Simon Marlow <simonmar at microsoft.com>**20060314151657] 
> [fix clean target
> Simon Marlow <simonmar at microsoft.com>**20060314124525] 
> [add test for #713
> Simon Marlow <simonmar at microsoft.com>**20060314121232] 
> [Require -fallow-undecidable-instances
> simonpj at microsoft.com**20060223141727] 
> [Test for deprecated constructors
> simonpj at microsoft.com**20060223141701] 
> [Update output
> simonpj at microsoft.com**20060223135107] 
> [Update output and add -fallow-undecidable-instances where necesssary
> simonpj at microsoft.com**20060223133629] 
> [Add -fallow-undecidable-instances to reflect more accurate termination test in fundeps
> simonpj at microsoft.com**20060223133113] 
> [Remove dependence on haskell98 package in expected output
> simonpj at microsoft.com**20060223130208] 
> [Accept output
> simonpj at microsoft.com**20060223125845] 
> [Add expected output for rn049
> simonpj at microsoft.com**20060223124018] 
> [Accept (slightly mysterious) output formatting changes
> simonpj at microsoft.com**20060223123611] 
> [Update output
> simonpj at microsoft.com**20060223123516] 
> [Update output (TH no longer depends on haskell98 package)
> simonpj at microsoft.com**20060223123331] 
> [Add a fundep loop test
> simonpj at microsoft.com**20060222101347] 
> [add expected output for x86_64
> Simon Marlow <simonmar at microsoft.com>**20060223121322] 
> [accept output
> Simon Marlow <simonmar at microsoft.com>**20060210151137] 
> [remove smp way, replace threaded with threaded1/threaded2
> Simon Marlow <simonmar at microsoft.com>**20060210123325
>  
>  threaded1 = -threaded -debug
>  threaded2 = -O -threaded, and +RTS -N2 -RTS at runtime
> ] 
> [Add test for bug 685
> simonpj at microsoft.com**20060208160511] 
> [Add test from Markus Lauer
> simonpj at microsoft.com**20060206084209] 
> ["s" is in GhcRTSWays now
> Simon Marlow <simonmar at microsoft.com>**20060208150646] 
> [allow setting stage=N variable to select compiler in the testsuite
> Simon Marlow <simonmar at microsoft.com>**20060208140219] 
> [Eta expand gzip test to match new higher-rank-type story
> simonpj at microsoft.com**20060202131654] 
> [Fix GADT tests
> simonpj at microsoft.com**20060202130236] 
> [New GADT desugaring test
> simonpj at microsoft.com**20060202124603] 
> [Remove package lang reqt
> simonpj at microsoft.com**20060202102030] 
> [Update to track improvements in typechecker
> simonpj at microsoft.com**20060201171451] 
> [Update to track new scoped-tyvar story
> simonpj at microsoft.com**20060201171415] 
> [Eta expansion and scoped type variables in generic code
> simonpj at microsoft.com**20060201171238
>  
>  The new story on higher-rank types requires a few functions to be
>  eta-expanded.  And the new scoped-type-variable story also forces
>  a few changes.
>  
> ] 
> [Add CPR test
> simonpj at microsoft.com**20060131164801] 
> [remove old docs
> Simon Marlow <simonmar at microsoft.com>**20060201163734] 
> [add test for bug #661
> Simon Marlow <simonmar at microsoft.com>**20060201130720] 
> [fix recently-introduced breakage in 'make accept'
> Simon Marlow <simonmar at microsoft.com>**20060201115729] 
> [Add a higher-kinded test
> simonpj at microsoft.com**20060131123016] 
> [Add fundep test
> simonpj at microsoft.com**20060131115806] 
> [Module import test
> simonpj at microsoft.com**20060131115404] 
> [Wibble
> simonpj at microsoft.com**20060125140817] 
> [Add test for bogus unusued-import message
> simonpj at microsoft.com**20060125090704] 
> [[project @ 2006-01-19 09:47:11 by simonmar]
> simonmar**20060119094711
>  Test tryPutMVar on empty MVars too
> ] 
> [[project @ 2006-01-18 16:31:10 by simonmar]
> simonmar**20060118163112
>  Add a fast version of the testsuite
>  
>  The idea is to have a way to run as much of the testsuite as possible
>  in a short time, so that we'll run it more often (such as just before
>  checking in a change, for example).  'make fast' tries for good
>  coverage without using too many cycles.  Currently it takes about 4
>  minutes on a fast machine with an optimised GHC build; I think this
>  might still be a little on the slow side.
>  
>  When you say 'make fast' in testsuite/tests/ghc-regress, we run each
>  test only one way, and all of the long-running tests are omitted.
>  Also, to get the runtime down further, I arbitrarily omitted many of
>  the should_run tests (because these tend to take a lot longer than
>  should_compile or should_fail tests).  I tried to keep a
>  representative few in each category.
> ] 
> [[project @ 2006-01-18 15:25:45 by simonpj]
> simonpj**20060118152545
>  Add test for data con in class sig
> ] 
> [[project @ 2006-01-12 16:10:41 by simonmar]
> simonmar**20060112161041
>  Add test from ticket #488
> ] 
> [[project @ 2006-01-12 16:03:21 by simonmar]
> simonmar**20060112160321
>  add test from ticket #441
> ] 
> [[project @ 2006-01-10 14:39:50 by simonmar]
> simonmar**20060110143950
>  accept output
> ] 
> [[project @ 2006-01-10 14:11:53 by simonmar]
> simonmar**20060110141153
>  comment update
> ] 
> [[project @ 2006-01-10 14:11:24 by simonmar]
> simonmar**20060110141124
>  recode this file in UTF-8 from Latin-1
> ] 
> [[project @ 2006-01-10 13:41:48 by simonmar]
> simonmar**20060110134148
>  accept output (improved lexer error messages)
> ] 
> [[project @ 2006-01-09 12:49:28 by simonmar]
> simonmar**20060109124928
>  Add test case that causes a core-lint failure (cut down from
>  Encoding.hs in HEAD).
> ] 
> [[project @ 2006-01-09 10:29:44 by simonmar]
> simonmar**20060109102944
>  add a cmm lint failure
> ] 
> [[project @ 2006-01-09 10:27:33 by simonmar]
> simonmar**20060109102733
>  Add -dcmm-lint when compiling
> ] 
> [[project @ 2006-01-06 16:34:56 by simonmar]
> simonmar**20060106163456
>  Unicode source tests
> ] 
> [[project @ 2006-01-06 16:15:19 by simonpj]
> simonpj**20060106161519
>  Add another synonym-performance test (but comment it out of the test file; too slow!)
> ] 
> [[project @ 2006-01-06 16:14:45 by simonpj]
> simonpj**20060106161445
>  Better type signature for higher-rank
> ] 
> [[project @ 2006-01-06 16:12:42 by simonpj]
> simonpj**20060106161242
>  Add tests for boxy types
> ] 
> [[project @ 2006-01-06 16:08:57 by simonpj]
> simonpj**20060106160857
>  Add GADT tests
> ] 
> [[project @ 2006-01-06 16:03:25 by simonpj]
> simonpj**20060106160325
>  Cosmetic
> ] 
> [[project @ 2006-01-05 13:08:14 by simonpj]
> simonpj**20060105130814
>  Add a nasty multiple-instantiation test
> ] 
> [[project @ 2006-01-05 10:06:30 by simonpj]
> simonpj**20060105100630
>  Add test for newtype existential
> ] 
> [[project @ 2006-01-05 09:16:28 by simonmar]
> simonmar**20060105091628
>  Add test for "scavenge_stack" bug fixed in rev 1.16 of Exception.cmm
> ] 
> [[project @ 2006-01-04 11:50:44 by simonpj]
> simonpj**20060104115044
>  Add test for data con returning wrong type
> ] 
> [[project @ 2006-01-02 19:36:50 by jpbernardy]
> jpbernardy**20060102193650
>  minor cleanups
> ] 
> [[project @ 2006-01-01 21:46:31 by jpbernardy]
> jpbernardy**20060101214631
>  More tests for:
>    * Sets
>    * Non-structural equality
>    * Left-Bias
>    * Performance
> ] 
> [[project @ 2005-12-26 19:54:32 by jpbernardy]
> jpbernardy**20051226195432
>  Infrastructure for testing Data structures.
>   + some tests
> ] 
> [[project @ 2005-12-19 09:47:49 by simonpj]
> simonpj**20051219094749
>  Add test for trailing parens in GADT signatures
> ] 
> [[project @ 2005-12-16 16:03:02 by simonpj]
> simonpj**20051216160302
>  Add deriving for infix constructors
> ] 
> [[project @ 2005-12-16 14:56:50 by simonpj]
> simonpj**20051216145650
>  Add repeated-type-variable tests for instance constexts
> ] 
> [[project @ 2005-12-16 10:54:50 by simonmar]
> simonmar**20051216105450
>  TimeExts has gone away
> ] 
> [[project @ 2005-12-16 10:53:24 by simonmar]
> simonmar**20051216105324
>  update to not use hslibs
> ] 
> [[project @ 2005-12-16 10:50:31 by simonmar]
> simonmar**20051216105031
>  -package lang isn't required.
> ] 
> [[project @ 2005-12-16 10:46:05 by simonmar]
> simonmar**20051216104605
>  Now that we aren't building hslibs, keep the memo tests alive by
>  bringing Memo.hs into the testsuite.  These tests are a useful
>  shakedown for StableNames.
> ] 
> [[project @ 2005-12-13 16:04:25 by simonmar]
> simonmar**20051213160425
>  Add nested atomically test
> ] 
> [[project @ 2005-12-13 16:04:09 by simonmar]
> simonmar**20051213160409
>  fix comments
> ] 
> [[project @ 2005-12-09 19:17:57 by simonpj]
> simonpj**20051209191757
>  add output file
> ] 
> [[project @ 2005-12-09 19:16:58 by simonpj]
> simonpj**20051209191658
>  A minor, probably redundant, test
> ] 
> [[project @ 2005-12-05 11:43:51 by simonmar]
> simonmar**20051205114351
>  add newTVarIO test
> ] 
> [[project @ 2005-12-05 10:08:53 by simonpj]
> simonpj**20051205100853
>  Add an expected-failure test
> ] 
> [[project @ 2005-12-05 09:13:07 by simonpj]
> simonpj**20051205091307
>  Update expected output
> ] 
> [[project @ 2005-12-05 09:08:51 by simonpj]
> simonpj**20051205090851
>  Fix test
> ] 
> [[project @ 2005-12-02 10:56:34 by simonmar]
> simonmar**20051202105634
>  add this test that I had lying around
> ] 
> [[project @ 2005-12-02 10:54:05 by simonmar]
> simonmar**20051202105405
>  conc053 only works in threaded & smp ways at the moment.
> ] 
> [[project @ 2005-12-02 10:51:15 by simonmar]
> simonmar**20051202105115
>  accept output
> ] 
> [[project @ 2005-12-01 08:54:57 by simonpj]
> simonpj**20051201085457
>  Another GADT test
> ] 
> [[project @ 2005-11-30 14:17:35 by simonpj]
> simonpj**20051130141735
>  Add mkName test
> ] 
> [[project @ 2005-11-30 12:25:20 by simonmar]
> simonmar**20051130122520
>  Add test for Control.Concurrent.STM.registerDelay
> ] 
> [TAG Last rev before making ghc-6-4 branch
> John Goerzen <jgoerzen at complete.org>**20051128164635] 
> [TAG Initial conversion from CVS complete
> John Goerzen <jgoerzen at complete.org>**20051128163910] 
> Patch bundle hash:
> 7062a6b3f72e22c44261547e2b0cf61e037c29f1
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> Cvs-ghc mailing list
> Cvs-ghc at haskell.org
> http://www.haskell.org/mailman/listinfo/cvs-ghc



More information about the Cvs-ghc mailing list