<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div><br></div><div>The submodules are woven together so wrapping (test) with (time ...) should work fine. </div><div><br></div><br><div><div>On Aug 8, 2012, at 4:18 PM, Joe Gilray wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite">Thanks Matthias,<div><br></div><div>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"?</div>
<div><br></div><div>-Joe<br><br><div class="gmail_quote">On Wed, Aug 8, 2012 at 6:31 AM, Matthias Felleisen <span dir="ltr"><<a href="mailto:matthias@ccs.neu.edu" target="_blank">matthias@ccs.neu.edu</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><div><br></div><div>This first example shows how to use module+ test with test-engine: </div>
<div><br></div><div><div>#lang racket</div><div><br></div><div>(module+ test </div><div> (require test-engine/racket-tests))</div><div><br></div><div>;; Int -> Int </div><div>;; adds 2 to n</div><div><br></div><div>(module+ test ;; setting up examples before you define the function </div>
<div> (check-expect (add2 3) 4)</div><div> (check-expect (add2 3) 5))</div><div><br></div><div>(define (add2 n)</div><div> (+ n 3))</div><div><br></div><div>(module+ test</div><div> (test)) ;; calling this function controls when you run the 'test suite'</div>
</div><div><br></div><div>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. </div>
<div><br></div><div>;; --- </div><div><br></div><div>This second example translates the first to rackunit: </div><div><br></div><div><div>#lang racket</div><div><br></div><div>(module+ test </div><div> (require rackunit))</div>
<div><br></div><div>;; Int -> Int </div><div>;; adds 2 to n</div><div><br></div><div>(module+ test</div><div> (check-equal? (add2 3) 4)</div><div> (check-equal? (add2 3) 5))</div><div><br></div><div>(define (add2 n)</div>
<div> (+ n 2))</div><div><br></div><div>The tests are always run when you require the test submodule (see above). </div><div><br></div><div>;; --- </div><div><br></div><div>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. </div>
<div><br></div><div>Please search for an earlier post of mine where I explain a specific arrangement of separate modules to make all of this convenient. </div><div><br></div><div>With submodules, you can stick these test suites into submodules and require those in some global test module. </div>
<span class="HOEnZb"><font color="#888888"><div><br></div><div>-- Matthias</div><div><br></div><div> </div></font></span></div><div><div class="h5"><div><br></div><div><br></div><div><br></div><div><div>On Aug 7, 2012, at 10:31 PM, Joe Gilray wrote:</div>
<br><blockquote type="cite">Hi Matthias,<div><br></div><div>I will take you up on your offer of an example... thanks!</div><div><br></div><div>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.</div>
<div><br></div><div>Ideally the tests would be grouped with the functions:</div><div><br></div><div>(define f1 ...)</div><div>(module+ test </div><div> (test-equal? "f1-tests" (f1 1 2) 1)</div><div> (test-equal? "f1-tests" (f1 3 4) 4))</div>
<div><br></div><div><div>(define f2 ...)</div><div>(module+ test </div><div> (test-equal? "f2-tests" (f2 1 2) 1)</div><div> (test-equal? "f2-tests" (f2 3 4) 4))</div></div><div><br></div><div>etc.</div>
<div><br></div><div>I believe that the above scheme would work and run every time the enclosing file/module is run... right?</div><div><br></div><div>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?</div>
<div><br></div><div>Thanks again,</div><div>-Joe<br><br><div class="gmail_quote">On Tue, Aug 7, 2012 at 6:00 PM, Matthias Felleisen <span dir="ltr"><<a href="mailto:matthias@ccs.neu.edu" target="_blank">matthias@ccs.neu.edu</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><br>
On Aug 7, 2012, at 8:24 PM, Joe Gilray wrote:<br>
<br>
> 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.<br>
><br>
> Can someone please give me a rundown of when to use rackunit and advantages/disadvantages of test-engine and rackunit?<br>
<br>
</div>-- test-engine provides test support for the teaching languages of DrRacket.<br>
-- rackunit is for 'adult' programmers, meaning programmers who have outgrown teaching languages.<br>
<br>
You can still use test-engine in plain #lang racket, and you could use rackunit in teaching languages.<br>
<br>
You can also use both with submodules especially (module+ test ...). Holler if you need examples -- Matthias<br>
<br>
<br>
<br>
<br>
</blockquote></div><br></div>
</blockquote></div><br></div></div></div></blockquote></div><br></div>
</blockquote></div><br></body></html>