aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/library/lux/test/tally.lux
blob: 7c587d6884ecfa2dbd6dd4155ee4a761dbf2b975 (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
(.require
 [library
  [lux (.except #expected and)
   [data
    [collection
     ["[0]" set (.only Set)]]]
   [math
    [number
     ["n" nat]]]
   [meta
    ["[0]" symbol]]]]
 [//
  ["[0]" coverage (.only Coverage)]])

(type .public Tally
  (Record
   [#successes Nat
    #failures Nat
    #expected Coverage
    #actual Coverage]))

(def .public (and parameter subject)
  (-> Tally Tally Tally)
  [#successes (n.+ (the #successes parameter) (the #successes subject))
   #failures (n.+ (the #failures parameter) (the #failures subject))
   #expected (set.union (the #expected parameter)
                        (the #expected subject))
   #actual (set.union (the #actual parameter)
                      (the #actual subject))])

(def .public empty
  Tally
  [#successes 0
   #failures 0
   #expected (set.empty symbol.hash)
   #actual (set.empty symbol.hash)])

(with_template [<name> <category>]
  [(def .public <name>
     Tally
     (revised <category> .++ ..empty))]

  [success #successes]
  [failure #failures]
  )