diff options
Diffstat (limited to '')
-rw-r--r-- | stdlib/source/spec/lux/abstract/monoid.lux | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/stdlib/source/spec/lux/abstract/monoid.lux b/stdlib/source/spec/lux/abstract/monoid.lux new file mode 100644 index 000000000..eca057360 --- /dev/null +++ b/stdlib/source/spec/lux/abstract/monoid.lux @@ -0,0 +1,31 @@ +(.module: + [lux #* + ["_" test (#+ Test)] + [abstract + [monad (#+ do)]] + [math + ["." random (#+ Random)]]] + {1 + ["." / + [// + [equivalence (#+ Equivalence)]]]}) + +(def: #export (spec (^open "/@.") (^open "/@.") gen-sample) + (All [a] (-> (Equivalence a) (/.Monoid a) (Random a) Test)) + (do random.monad + [sample gen-sample + left gen-sample + mid gen-sample + right gen-sample] + (<| (_.with-cover [/.Monoid]) + ($_ _.and + (_.test "Left identity." + (/@= sample + (/@compose /@identity sample))) + (_.test "Right identity." + (/@= sample + (/@compose sample /@identity))) + (_.test "Associativity." + (/@= (/@compose left (/@compose mid right)) + (/@compose (/@compose left mid) right))) + )))) |