[racket] suspicious timing in running test program

From: Marco Maggi (marco.maggi-ipsu at poste.it)
Date: Tue Jul 12 03:08:23 EDT 2011


  I  am using  "plt-r6rs" from  Racket 5.1.1  (compiled with
default  options) on a  i686-pc-linux-gnu; when  running the
tests   of    Nausicaa/Scheme[1]   revision   0.2d10,   with
precompiled libraries, I  get some suspicious timing.  First
I run  a test file[2]  which uses some techniques  in macros
and I get:

$ make rtest file=vectors-xvectors

===> test file ../tests/test-vectors-xvectors.sps with Racket

*** testing xvectors

; *** checks *** : 86 correct, 0 failed.
real 69.83
user 65.20
sys 4.68

fine; then  I run another  test file[3] which uses  the same
techniques in  macros, but it enters a  neverending loop and
when I am tired of waiting I kill the process and get:

$ make rtest file=arrays

===> test file ../tests/test-arrays.sps with Racket

^Cuser break
Command exited with non-zero status 1
real 1782.68
user 63.65
sys 1711.13
make: *** [rtest] Error 1

notice the big "sys" time  portion; while CPU usage is 100%,
if  there is memory  usage increase  it is  too small  to be
displayed by "top".  Around line 437 of this test file there
is a LET form starting with:

  (let (((array <array>)

and a bit of investigation leads me to think Racket enters a
long loop trying to expand  this LET form which has a number
of "tagged" bindings not present in my other test files.

  This LET  is in truth a LET/WITH-CLASS  syntax[4] which in
turn is expanded  in an R6RS's LET with  a nested WITH-CLASS
form[5], which in the end  is expanded in a series of nested
LET-SYNTAX  forms  each  defining  a  set  of  syntaxes  and
identifier syntaxes  for each tagged  binding.  If I  am not
mistaken,  while  expanding  this WITH-CLASS  syntax  Racket
takes bigger and bigger "sys" breaks.

  The code  looks correct to me;  other R6RS implementations
can run the test without problems:

$make ptest vtest mtest file=arrays

===> test file ../tests/test-arrays.sps with Petite Chez

*** testing multidimensional arrays

; *** checks *** : 222 correct, 0 failed.
real 6.90
user 6.34
sys 0.12

===> test file ../tests/test-arrays.sps with Vicare

*** testing multidimensional arrays

; *** checks *** : 222 correct, 0 failed.
real 23.52
user 22.94
sys 0.37

===> test file ../tests/test-arrays.sps with Mosh

*** testing multidimensional arrays

; *** checks *** : 222 correct, 0 failed.
real 104.61
user 21.70
sys 82.55

  This problem may  be in the same category  of another[6] I
already reported.  I look forward to the new Racket release.


[1] <http://github.com/marcomaggi/nausicaa/downloads>
[2] <https://github.com/marcomaggi/nausicaa/blob/devel/scheme/tests/test-vectors-xvectors.sps>
[3] <https://github.com/marcomaggi/nausicaa/blob/devel/scheme/tests/test-arrays.sps>
[4] Line 165 of <https://github.com/marcomaggi/nausicaa/blob/devel/scheme/src/libraries/nausicaa/language/classes/binding-constructs.sls>
[5] Line 1332 of <https://github.com/marcomaggi/nausicaa/blob/devel/scheme/src/libraries/nausicaa/language/classes/core.sls>
[6] <http://www.mail-archive.com/users@racket-lang.org/msg05765.html>
Marco Maggi

Posted on the users mailing list.