aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/library/lux/test/tally.lux
diff options
context:
space:
mode:
Diffstat (limited to 'stdlib/source/library/lux/test/tally.lux')
-rw-r--r--stdlib/source/library/lux/test/tally.lux45
1 files changed, 45 insertions, 0 deletions
diff --git a/stdlib/source/library/lux/test/tally.lux b/stdlib/source/library/lux/test/tally.lux
new file mode 100644
index 000000000..afbab607a
--- /dev/null
+++ b/stdlib/source/library/lux/test/tally.lux
@@ -0,0 +1,45 @@
+(.require
+ [library
+ [lux (.except 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]
+ )