blob: 20bfccb07d5af17f4402fde57be8eb304dc650bf (
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
|
(.using
[library
[lux "*"
["_" test (.only Test)]
[abstract
[monad (.only do)]]
[control
["[0]" maybe]
["[0]" try ("[1]#[0]" functor)]
[parser
["<[0]>" code]]]
[macro
["[0]" code ("[1]#[0]" equivalence)]]
[math
["[0]" random (.only Random)]
[number
["n" nat]]]]]
[\\library
["[0]" /]])
(def: export
(Random [(Maybe Code) Nat])
(all random.and
(|> random.bit
(# random.monad each code.bit)
random.maybe)
random.nat))
(def: .public test
Test
(<| (_.covering /._)
(do random.monad
[[expected_export_policy expected_un_exported] ..export]
(_.coverage [/.parser /.default_policy]
(|> (case expected_export_policy
{.#Some expected_export_policy}
(list expected_export_policy (code.nat expected_un_exported))
{.#None}
(list (code.nat expected_un_exported)))
(<code>.result (/.parser <code>.nat))
(try#each (function (_ [actual_export_policy actual_un_exported])
(|> expected_export_policy
(maybe.else /.default_policy)
(code#= actual_export_policy)
(and (n.= expected_un_exported actual_un_exported)))))
(try.else false))))))
|