#lang racket (provide drop to-energy)
(module+ test
(require rackunit)
(define ε 1e-10))
(define (drop t)
(* 1/2 9.8 t t))
(module+ test
(define-test-suite test1
(check-= (drop 0) 0 ε)
(check-= (drop 10) 490 ε)))
(define (to-energy m)
(* m (expt 299792458.0 2)))
(module+ test
(define-test-suite test2
(check-= (to-energy 0) 0 ε)
(check-= (to-energy 1) 9e+16 1e+15)))
(module+ test
(time (run-test (make-test-suite "both" (list test1 test2)))))
-- Matthias
On Aug 8, 2012, at 5:50 PM, Joe Gilray wrote:
> Sorry Matthias, but I don't understand the mechanics. I've read the guide,
> but I don't see how to do what I'd like without timing outside of the module.
>
> To be clear, what do I add to the following file (from the docs) in order to
> time the duration of all the four checks combined?
>
> #lang racket
> (module+ test
> (require rackunit)
> (define ε 1e-10))
>
> (provide drop
> to-energy)
>
> (define (drop t)
> (* 1/2 9.8 t t))
>
> (module+ test
> (check-= (drop 0) 0 ε)
> (check-= (drop 10) 490 ε))
>
> (define (to-energy m)
> (* m (expt 299792458.0 2)))
>
> (module+ test
> (check-= (to-energy 0) 0 ε)
> (check-= (to-energy 1) 9e+16 1e+15))
>
> I know that running the file in DrRacket will run the tests, but I'd like to
> time them.
>
> Thanks (again!),
> -Joe
>
> On Wed, Aug 8, 2012 at 1:46 PM, Matthias Felleisen <[email protected]>
> wrote:
>
> The submodules are woven together so wrapping (test) with (time ...) should
> work fine.
>
>
> On Aug 8, 2012, at 4:18 PM, Joe Gilray wrote:
>
>> Thanks Matthias,
>>
>> Is there an easy way to "internally" time the duration of all tests? with
>> test-engine I could use (time (test)), with all the tests in a test
>> submodule do I have to do the timing externally? I.e "TimeThis raco test
>> myfile.rkt"?
>>
>> -Joe
>>
>> On Wed, Aug 8, 2012 at 6:31 AM, Matthias Felleisen <[email protected]>
>> wrote:
>>
>> This first example shows how to use module+ test with test-engine:
>>
>> #lang racket
>>
>> (module+ test
>> (require test-engine/racket-tests))
>>
>> ;; Int -> Int
>> ;; adds 2 to n
>>
>> (module+ test ;; setting up examples before you define the function
>> (check-expect (add2 3) 4)
>> (check-expect (add2 3) 5))
>>
>> (define (add2 n)
>> (+ n 3))
>>
>> (module+ test
>> (test)) ;; calling this function controls when you run the 'test suite'
>>
>> All you need to know is that drracket requires submodules named test when
>> you run the program, though this default can be changed via the language
>> preference (see submodules to run, drop down menu). At the command line,
>> racket test foo.rkt will require the test submodules but otherwise they are
>> not run.
>>
>> ;; ---
>>
>> This second example translates the first to rackunit:
>>
>> #lang racket
>>
>> (module+ test
>> (require rackunit))
>>
>> ;; Int -> Int
>> ;; adds 2 to n
>>
>> (module+ test
>> (check-equal? (add2 3) 4)
>> (check-equal? (add2 3) 5))
>>
>> (define (add2 n)
>> (+ n 2))
>>
>> The tests are always run when you require the test submodule (see above).
>>
>> ;; ---
>>
>> With rackunit, you can also define test-suites (see docs, especially
>> define/provide-test-suite. You compose these test suites, provide them, and
>> run them if and when you wish by loading the proper module.
>>
>> Please search for an earlier post of mine where I explain a specific
>> arrangement of separate modules to make all of this convenient.
>>
>> With submodules, you can stick these test suites into submodules and require
>> those in some global test module.
>>
>> -- Matthias
>>
>>
>>
>>
>>
>> On Aug 7, 2012, at 10:31 PM, Joe Gilray wrote:
>>
>>> Hi Matthias,
>>>
>>> I will take you up on your offer of an example... thanks!
>>>
>>> I've read about test-suite and test-case, but I'm not sure of the best way
>>> to test each utility in a file.
>>>
>>> Ideally the tests would be grouped with the functions:
>>>
>>> (define f1 ...)
>>> (module+ test
>>> (test-equal? "f1-tests" (f1 1 2) 1)
>>> (test-equal? "f1-tests" (f1 3 4) 4))
>>>
>>> (define f2 ...)
>>> (module+ test
>>> (test-equal? "f2-tests" (f2 1 2) 1)
>>> (test-equal? "f2-tests" (f2 3 4) 4))
>>>
>>> etc.
>>>
>>> I believe that the above scheme would work and run every time the enclosing
>>> file/module is run... right?
>>>
>>> What if I want to control when all the tests are run? Can I somehow build
>>> a trigger to fire off all the tests? From the docs it looks like this is
>>> the purpose of test-suite, but I don't know the mechanics when the test
>>> cases are spread out in the file... maybe that isn't allowed and I will
>>> need to group the tests?
>>>
>>> Thanks again,
>>> -Joe
>>>
>>> On Tue, Aug 7, 2012 at 6:00 PM, Matthias Felleisen <[email protected]>
>>> wrote:
>>>
>>> On Aug 7, 2012, at 8:24 PM, Joe Gilray wrote:
>>>
>>> > Now that 5.3 is out, I've been reading about submodules and their support
>>> > for testing. In the past I used test-engine/racket-tests for testing.
>>> >
>>> > Can someone please give me a rundown of when to use rackunit and
>>> > advantages/disadvantages of test-engine and rackunit?
>>>
>>> -- test-engine provides test support for the teaching languages of DrRacket.
>>> -- rackunit is for 'adult' programmers, meaning programmers who have
>>> outgrown teaching languages.
>>>
>>> You can still use test-engine in plain #lang racket, and you could use
>>> rackunit in teaching languages.
>>>
>>> You can also use both with submodules especially (module+ test ...). Holler
>>> if you need examples -- Matthias
>>>
>>>
>>>
>>>
>>>
>>
>>
>
>
smime.p7s
Description: S/MIME cryptographic signature
____________________ Racket Users list: http://lists.racket-lang.org/users

