Hello Racketeers. Summary: Why does check-expect only work at the top level?
I often find myself writing a few versions of the same function, to show students different ways of doing things, or to experiment with the performance of different approaches. As a trivial example, consider: ; Check whether one number divides evenly into another. ; The modulo form is common, but the other form might be easier to understand. ; I'd like to check which one is faster. On my laptop the divides-modulo function is nearly ; twice as fast as the divides-divide function. (define (divides-modulo? d n) (= (modulo n d) 0)) (define (divides-divide? d n) (integer? (/ n d))) (define (divides? d n) (divides-modulo? d n)) I'd like to test that the two divides? functions work the same by writing a test harness that takes a divides? function and tries it out on a bunch of values with check-expect. For instance: (define (check-divides d?) (check-expect (d? 4 16) true) (check-expect (d? 4 17) false)) But when I run it I get: . check-expect: found a test that is not at the top level in: (check-expect (d? 4 16) true) I've read http://docs.racket-lang.org/test-engine/index.html, which says: "Each check form may only occur at the top-level; results are collected and reported by the test function." ... but it doesn't say *why* this rule. Is it just to keep things simple for students, or is there a deep reason for this limitation? In slightly related news, I can't parse the following, in part because of what seems to be an accidentally repeated part of the text: (check-member-of (test any/c) (expected any/c) ...) Accepts at least two value-producing expressions. Structurally compares the first value to each value subsequent value specified. Thanks, John _________________________________________________ For list-related administrative tasks: http://lists.racket-lang.org/listinfo/users

