aboutsummaryrefslogtreecommitdiff
path: root/stdlib/test/test/lux/data/bool.lux
blob: f26c98a4328fcdbc7f41c7c318d165b42df36a73 (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
(;module:
  lux
  (lux (control ["M" monad #+ do Monad])
       [io]
       (data bool)
       ["R" math/random])
  lux/test)

(context: "Boolean operations."
  [value R;bool]
  (test "" (and (not (and value (not value)))
                (or value (not value))

                (not (:: Or@Monoid<Bool> unit))
                (:: Or@Monoid<Bool> append value (not value))
                (:: And@Monoid<Bool> unit)
                (not (:: And@Monoid<Bool> append value (not value)))
                
                (:: Eq<Bool> = value (not (not value)))
                (not (:: Eq<Bool> = value (not value)))

                (not (:: Eq<Bool> = value ((complement id) value)))
                (:: Eq<Bool> = value ((complement not) value))

                (case (|> value
                          (:: Codec<Text,Bool> encode)
                          (:: Codec<Text,Bool> decode))
                  (#;Right dec-value)
                  (:: Eq<Bool> = value dec-value)

                  (#;Left _)
                  false)
                )))