File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -180,6 +180,21 @@ Example:
180180 `(Test.print-test-results %name)
181181 `(do %@(with-test-internal name forms))))))
182182
183+ (doc subtest "allows grouping tests within a larger test suite.
184+
185+ Example:
186+ ```
187+ (deftest test
188+ (subtest test \"Arithmetic\"
189+ (assert-equal test 4 (+ 2 2) \"2 + 2 = 4\")))
190+ ```")
191+ (defmacro subtest [parent descr :rest forms]
192+ `(do
193+ (IO.println &(str* ">>> Subtest: " %descr))
194+ %@(with-test-internal parent forms)
195+ (IO.println &(str* "<<< Finished Subtest: " %descr "\n"))
196+ @(the (Ref Test.State) %parent)))
197+
183198(defmacro deftest [name :rest forms]
184199 `(defn main []
185200 (let [%name &(Test.State.init 0 0)]
Original file line number Diff line number Diff line change 1+ ;; This file verifies the 'subtest' macro functionality in core/Test.carp
2+ ;; 'subtest' allows grouping related assertions together with a label,
3+ ;; providing better organization and hierarchical output within a single deftest.
4+
5+ (load-and-use Test)
6+
7+ (deftest multiple-suites
8+ ;; 'subtest' takes the parent suite name, a description, and the test forms.
9+ ;; It correctly chains the parent state, ensuring that failures in a subtest
10+ ;; are counted in the final results of the parent suite.
11+
12+ (subtest multiple-suites "Arithmetic Operations"
13+ (assert-equal multiple-suites 4 (+ 2 2) "2 + 2 = 4")
14+ (assert-equal multiple-suites 10 (* 2 5) "2 * 5 = 10")
15+ (assert-equal multiple-suites 0 (- 5 5) "5 - 5 = 0"))
16+
17+ (subtest multiple-suites "Boolean Logic"
18+ (assert-true multiple-suites true "true is true")
19+ (assert-false multiple-suites false "false is false"))
20+
21+ (subtest multiple-suites "Reference Equality"
22+ (let [s @"hello"]
23+ (assert-ref-equal multiple-suites s @&s "string is ref-equal to itself")))
24+ )
25+
26+ ;; The output should show:
27+ ;; 1. The start and end of each subtest.
28+ ;; 2. Individual assertion results.
29+ ;; 3. Final aggregated results (7 passed, 1 failed in this case).
You can’t perform that action at this time.
0 commit comments