Meta-test suite
Donovan Kolbly
(09 Mar 2005 17:54 UTC)
|
Re: Meta-test suite
Per Bothner
(09 Mar 2005 19:19 UTC)
|
Re: Meta-test suite
Donovan Kolbly
(09 Mar 2005 20:19 UTC)
|
Re: Meta-test suite
Per Bothner
(09 Mar 2005 20:39 UTC)
|
Re: Meta-test suite
Donovan Kolbly
(09 Mar 2005 21:21 UTC)
|
Re: Meta-test suite
Per Bothner
(09 Mar 2005 21:39 UTC)
|
Counting [was Re: Meta-test suite] Donovan Kolbly (10 Mar 2005 15:02 UTC)
|
Re: Meta-test suite
Per Bothner
(09 Mar 2005 20:41 UTC)
|
Re: Meta-test suite
Donovan Kolbly
(09 Mar 2005 20:54 UTC)
|
On Wed, 9 Mar 2005, Per Bothner wrote: > Donovan Kolbly wrote: > > So that, suppose: > > > > (test-begin "a") > > (test-begin "b") > > (test-assert "x" #t) > > > > then in an on-test hook executing for the test-assert, we have: > > > > (test-runner-test-name runner) ==> "x" > > (test-runner-group-path runner) ==> ("a" "b") > > Yes. I've added `test-runner-group-path' to my implementation and some tests for it. > > I do think we should have call-back routins for test-begin/test-end [...] In consistency with the other callbacks in the spec, I'd guess you imagine something like `test-runner-on-test-{begin,end}[!]'. Other ideas? You could make test-group have a seperate callback, or define it in terms of begin/end. > > Furthermore, note that the tests within an > > explicit test group may be skipped using test-skip, but this is not true > > for tests within an implicit test group. > > > > [I think it's wierd that you can't skip an implicit test group, just for > > symmetry. Although I can't see implementing it so that all the forms are > > skipped, it might make sense to actually skip *tests* inside a skippable > > implicit group.] > > I'm inclined to agree. I don't think the reference implementation does > it this way, but it should be difficult to fix. > > For test-match-nth, should be count both the test-group/test-begin *and* > (assuming the test-group/test-begin is not skipped) the tests in it? > > (test-skip 2) ;; Define this to mean skipping the 2nd following test. > (test-begin "a") > (test-assert "x1") > (test-assert "x2") > (test-end "a") > (test-assert "x3") > > Should we skip "x2" or "x3"? I.e. do we count 1 for "a" as a unit, or 1 > for "a" and 1 each for "x1"..."x3". The latter might be a little strange, > but perhaps more convenient - and easier to implement, since we can use > a single global counter. I could see implementing it either way; I think it would be a matter of whether you check the "are-we-in-a-skipped-implicit-group?" flag before or after you call to check the specifiers in the current skip list. I don't have a good intuition as to the use of test-match-nth -- is this something you've used elsewhere before? In the absence of prior art, I'd suggest consistency with the use of test-group. In other words, I'd like to preserve as much as possible the similarity between (test-begin "a") ... (test-end "a") and (test-group "a" ...) And clarify in the spec that the only reason they aren't equivalent (i.e., (1) the evaluation of non-test forms in the implicit-group case, and (2) the execution of the test-end in case of an exception) is to preserve the sanity of the implementor. In that case, we'd skip "x3", since all of "a" would count as the 1st. > > > For the purposes of test counting as checked by test-end, a test group (of > > either variety) counts as a single test. > > I'm open to discussion on this: perhaps it should count as a single test > *if it is skipped*. I think I'm getting confused by the multiple ways of counting. So, to clarify, there are three places that counting happens: (1) the counting of (usually) test cases, as reported by `test-runner-*-count'. (2) the counting of substructures, as checked by `test-end' with the count option (3) the counting of skip candidates, as checked by the stateful predicate `test-match-nth'. The RScheme implementation notwithstanding, I'm thinking the following makes sense: (2) and (3) should be unified and (1) should be clarified to count only test cases and never test groups. Furthermore, (3) does *not* involve short-circuited evaluation, and we should introduce a new accessor, `test-runner-count-in-group' which returns the position (1,2,3...) of the current test case in it's group. Then test-match-nth looks more like: (define (test-match-nth n #optional (count default: 1)) (let ((i (test-runner-count-in-group (test-runner-current)))) (and (>= i n) (<= i (+ n count -1))))) [Although some tweak is necessary to suspend the processing during subgroups; you only want the skip to match at the same structural level. Maybe it should be `test-runner-count-in-group-path' and return the path of positions.] This approach implies that test groups (explicit or implicit) should always count at one structural element and never appear in (test-runner-skip-count). -- -- Donovan Kolbly ( xxxxxx@rscheme.org ( http://www.rscheme.org/~donovan/