blob: c8d0b8077f777f05f8570f1871c317e447cd5652 (
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
48
49
50
51
|
(.module:
[lux #*
data/text/format
[abstract/monad (#+ do)]
["r" math/random (#+ Random)]
["_" test (#+ Test)]
[data
["." text ("#@." equivalence)]]]
{1
["." /]})
(def: #export test
Test
(<| (_.context (%name (name-of /._)))
(do r.monad
[bit r.bit
nat r.nat
int r.int
rev r.rev
above (:: @ map (i/% +100) r.int)
below (:: @ map (i/% +100) r.int)
#let [frac (|> below
(i// +100)
.int-to-frac
(f/+ (.int-to-frac above))
(f/* -1.0))]
text (r.ascii 10)
short (r.ascii/alpha 10)
module (r.ascii/alpha 10)
#let [name [module short]]]
(`` ($_ _.and
(~~ (template [<desc> <code> <text>]
[(let [code <code>]
(_.test (format "Can produce " <desc> " code node.")
(and (text@= <text> (/.to-text code))
(:: /.equivalence = code code))))]
["bit" (/.bit bit) (%b bit)]
["nat" (/.nat nat) (%n nat)]
["int" (/.int int) (%i int)]
["rev" (/.rev rev) (%r rev)]
["frac" (/.frac frac) (%f frac)]
["text" (/.text text) (%t text)]
["local-ltag" (/.local-tag short) (format "#" short)]
["lag" (/.tag [module short]) (format "#" (%name name))]
["local-identifier" (/.local-identifier short) short]
["identifier" (/.identifier [module short]) (%name name)]
["form" (/.form (list (/.bit bit) (/.int int))) (format "(" (%b bit) " " (%i int) ")")]
["tuple" (/.tuple (list (/.bit bit) (/.int int))) (format "[" (%b bit) " " (%i int) "]")]
["record" (/.record (list [(/.bit bit) (/.int int)])) (format "{" (%b bit) " " (%i int) "}")]
)))))))
|