blob: 41032f0c72d4091fd65a4895e47f5d0073da9059 (
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
(.module:
lux
(lux (control [monad #+ do]
pipe)
(data ["e" error]
[text])
(lang ["//." synthesis])
["r" math/random]
test)
(luxc (lang (translation (jvm [".T_jvm" statement])
## (js [".T_js" statement])
## (lua [".T_lua" statement])
## (ruby [".T_ruby" statement])
## (python [".T_python" statement])
## (r [".T_r" statement])
## (scheme [".T_scheme" statement])
## (common-lisp [".T_common-lisp" statement])
## (php [".T_php" statement])
)))
(test/luxc common))
(def: ident-part
(r.Random Text)
(|> (r.ascii +5)
(r.filter (function (_ sample)
(not (or (text.contains? "/" sample)
(text.contains? "[" sample)
(text.contains? "]" sample)))))))
(def: (definitions-spec define)
(-> Definer Test)
(do r.Monad<Random>
[def-name (r.seq ident-part ident-part)
def-value r.int]
(test "Can refer to definitions."
(|> (define def-name (//synthesis.i64 def-value))
(case> (#e.Success valueT)
(i/= def-value (:! Int valueT))
(#e.Error error)
(exec (log! error)
false))))))
(def: (variables-spec run)
(-> Runner Test)
(do r.Monad<Random>
[register (|> r.nat (:: @ map (n/% +100)))
value r.int]
(test "Can refer to local variables/registers."
(|> (run (//synthesis.branch/let [(//synthesis.i64 value)
register
(//synthesis.variable/local register)]))
(case> (#e.Success outputT)
(i/= value (:! Int outputT))
(#e.Error error)
(exec (log! error)
false))))))
(def: (references-spec run define)
(-> Runner Definer Test)
(seq (definitions-spec define)
(variables-spec run)))
(context: "[JVM] References."
(<| (times +100)
(references-spec run-jvm def-jvm)))
## (context: "[JS] References."
## (<| (times +100)
## (references-spec run-js def-js)))
## (context: "[Lua] References."
## (<| (times +100)
## (references-spec run-lua def-lua)))
## (context: "[Ruby] References."
## (<| (times +100)
## (references-spec run-ruby def-ruby)))
## (context: "[Python] References."
## (<| (times +100)
## (references-spec run-python def-python)))
## (context: "[R] References."
## (<| (times +100)
## (references-spec run-r def-r)))
## (context: "[Scheme] References."
## (<| (times +100)
## (references-spec run-scheme def-scheme)))
## (context: "[Common Lisp] References."
## (<| (times +100)
## (references-spec run-common-lisp def-common-lisp)))
## (context: "[PHP] References."
## (<| (times +100)
## (references-spec run-php def-php)))
|