aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/documentation/lux/test.lux
blob: f6064a13c28846d4515b93b5b4fb515a8072181a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
(.using
 [library
  [lux (.except and for)
   ["$" documentation (.only documentation:)]
   [control
    ["<>" parser
     ["<[0]>" code]]]
   [data
    ["[0]" text (.only \n)
     ["%" \\format (.only format)]]]
   [macro
    ["[0]" template]]]]
 [\\library
  ["[0]" /]])

(documentation: /.Tally
  "A record of successes and failures while executing tests.")

(documentation: /.Assertion
  "An asynchronous operation that yields test results.")

(documentation: /.Test
  "A test that relies on random data generation to thoroughly cover different scenarios.")

(documentation: /.and'
  "Sequencing combinator (for assertions)."
  [(and' left right)])

(documentation: /.and
  "Sequencing combinator."
  [(and left right)])

(documentation: /.context
  "Adds a contextual description to a test's documentation."
  [(context description)])

(documentation: /.failure
  "A failing test, with a given error message.")

(documentation: /.assertion
  "Check that a condition is #1, and fail with the given message otherwise."
  [(assertion message condition)])

(documentation: /.property
  "Check that a condition is #1, and fail with the given message otherwise."
  [(property message condition)])

(documentation: /.lifted
  ""
  [(lifted message random)])

(documentation: /.Seed
  "The seed value used for random testing (if that feature is used).")

(documentation: /.seed
  (format "Execute the given test with a specific seed value."
          \n "This allows you to reproduce a failing test case as many times as you want while debugging.")
  [(seed value test)])

(documentation: /.times
  (format "Allows executing a test several times."
          \n "By doing this, it's possible to thoroughly test code with many different scenarios."
          \n "This assumes that random data generation is being used in tests instead of fixed/constant inputs.")
  [(times amount test)])

(documentation: /.run!
  (format "Executes a test, and exits the program with either a successful or a failing exit code."
          \n "WARNING: This procedure is only meant to be used in (program: ...) forms.")
  [(run! test)])

(documentation: /.coverage'
  (format "Specifies a test as covering one or more definitions."
          \n "Adds to the test tally information to track which definitions have been tested.")
  [(coverage' [definition/0 definition/1 ,,, definition/N]
     (is Bit
         (some "computation")))])

(documentation: /.coverage
  (format "Specifies a test as covering one or more definitions."
          \n "Adds to the test tally information to track which definitions have been tested.")
  [(coverage [definition/0 definition/1 ,,, definition/N]
     (is Bit
         (some "computation")))])

(documentation: /.for
  (format "Specifies a context for tests as covering one or more definitions."
          \n "Adds to the test tally information to track which definitions have been tested.")
  [(for [definition/0 definition/1 ,,, definition/N]
        (is Test
            some_test))])

(documentation: /.covering
  (format "Specifies the module being covered by a test."
          \n "Adds tracking information to the tally to know which exported definitions in the module need to be covered.")
  [(covering .._
             (is Test
                 some_test))])

(documentation: /.in_parallel
  "Executes multiple tests in parallel (if the host platform supports it) to take advantage of multiple cores."
  [(in_parallel tests)])

(.def .public documentation
  (.List $.Module)
  ($.module /._
            "Tools for unit & property-based/generative testing."
            [..Tally
             ..Assertion
             ..Test
             ..and'
             ..and
             ..context
             ..failure
             ..assertion
             ..property
             ..lifted
             ..Seed
             ..seed
             ..times
             ..run!
             ..coverage'
             ..coverage
             ..for
             ..covering
             ..in_parallel
             ($.default /.must_try_test_at_least_once)
             ($.default /.error_during_execution)]
            []))