diff options
author | Eduardo Julian | 2021-12-25 22:05:54 -0400 |
---|---|---|
committer | Eduardo Julian | 2021-12-25 22:05:54 -0400 |
commit | 00d92539208da86557e592a8c8df03d3b08e6b40 (patch) | |
tree | a71cc9e5f41c230f07956301263a710689e9dc85 /stdlib/source/test | |
parent | 63b45e09c5f5ceb59a48ed05cdc2d2c6cb038a7b (diff) |
Dusting off the pure-Lux JVM compiler machinery. [Part 2]
Diffstat (limited to 'stdlib/source/test')
-rw-r--r-- | stdlib/source/test/lux.lux | 4 | ||||
-rw-r--r-- | stdlib/source/test/lux/data/collection/array.lux | 71 | ||||
-rw-r--r-- | stdlib/source/test/lux/tool.lux | 21 | ||||
-rw-r--r-- | stdlib/source/test/lux/tool/compiler/arity.lux | 29 |
4 files changed, 89 insertions, 36 deletions
diff --git a/stdlib/source/test/lux.lux b/stdlib/source/test/lux.lux index c200a0316..86ed33be3 100644 --- a/stdlib/source/test/lux.lux +++ b/stdlib/source/test/lux.lux @@ -56,7 +56,7 @@ ["[1][0]" target] ["[1][0]" test] ["[1][0]" time] - ... ["[1][0]" tool] ... TODO: Update & expand tests for this + ["[1][0]" tool] ["[1][0]" type] ["[1][0]" world] ["[1][0]" ffi] @@ -97,7 +97,7 @@ /target.test /test.test /time.test - ... /tool.test + /tool.test /type.test /world.test /ffi.test diff --git a/stdlib/source/test/lux/data/collection/array.lux b/stdlib/source/test/lux/data/collection/array.lux index d9e3f01c2..2eca1688b 100644 --- a/stdlib/source/test/lux/data/collection/array.lux +++ b/stdlib/source/test/lux/data/collection/array.lux @@ -1,27 +1,28 @@ (.using - [library - [lux "*" - ["_" test {"+" Test}] - [abstract - [monad {"+" do}] - [\\specification - ["$[0]" equivalence] - ["$[0]" monoid] - ["$[0]" mix] - ["$[0]" functor {"+" Injection}]]] - [control - ["[0]" maybe]] - [data - ["[0]" bit] - [collection - ["[0]" list] - ["[0]" set]]] - [math - ["[0]" random {"+" Random}] - [number - ["n" nat]]]]] - [\\library - ["[0]" / {"+" Array}]]) + [library + [lux "*" + ["_" test {"+" Test}] + [abstract + [monad {"+" do}] + [\\specification + ["$[0]" equivalence] + ["$[0]" monoid] + ["$[0]" mix] + ["$[0]" functor {"+" Injection}]]] + [control + ["[0]" maybe]] + [data + ["[0]" bit] + ["[0]" text ("[1]#[0]" equivalence)] + [collection + ["[0]" list] + ["[0]" set]]] + [math + ["[0]" random {"+" Random}] + [number + ["n" nat]]]]] + [\\library + ["[0]" / {"+" Array}]]) (def: injection (Injection Array) @@ -29,7 +30,7 @@ (def: bounded_size (Random Nat) - (# random.monad each (|>> (n.% 100) (n.+ 1)) + (# random.monad each (|>> (n.% 20) ++) random.nat)) (def: structures @@ -54,8 +55,28 @@ base random.nat shift random.nat .let [expected (n.+ base shift)] - the_array (random.array size random.nat)] + the_array (random.array size random.nat) + evens (random.array size (random.only n.even? random.nat))] ($_ _.and + (let [(^open "/#[0]") /.functor + choose (: (-> Nat (Maybe Text)) + (function (_ value) + (if (n.even? value) + {.#Some (# n.decimal encoded value)} + {.#None})))] + (_.cover [/.one] + (case [(|> evens + (/#each (# n.decimal encoded)) + (/.read! 0)) + (/.one choose evens)] + [{.#Some expected} {.#Some actual}] + (text#= expected actual) + + [{.#None} {.#None}] + true + + _ + false))) (_.cover [/.example] (# (maybe.equivalence n.equivalence) = (/.example n.even? the_array) diff --git a/stdlib/source/test/lux/tool.lux b/stdlib/source/test/lux/tool.lux index 3a9f547cd..5a7509b99 100644 --- a/stdlib/source/test/lux/tool.lux +++ b/stdlib/source/test/lux/tool.lux @@ -4,17 +4,20 @@ ["_" test {"+" Test}]]] ["[0]" / "_" [compiler - [language - [lux - ["[1][0]" syntax] - [phase - ["[1][0]" analysis] - ["[1][0]" synthesis]]]]]]) + ["[1][0]" arity] + ... [language + ... [lux + ... ["[1][0]" syntax] + ... [phase + ... ["[1][0]" analysis] + ... ["[1][0]" synthesis]]]] + ]]) (def: .public test Test ($_ _.and - /syntax.test - /analysis.test - /synthesis.test + /arity.test + ... /syntax.test + ... /analysis.test + ... /synthesis.test )) diff --git a/stdlib/source/test/lux/tool/compiler/arity.lux b/stdlib/source/test/lux/tool/compiler/arity.lux new file mode 100644 index 000000000..0e9f3f25d --- /dev/null +++ b/stdlib/source/test/lux/tool/compiler/arity.lux @@ -0,0 +1,29 @@ +(.using + [library + [lux "*" + ["_" test {"+" Test}] + [abstract + [monad {"+" do}]] + [data + ["[0]" bit ("[1]#[0]" equivalence)]] + [math + ["[0]" random {"+" Random}] + [number + ["n" nat]]]]] + [\\library + ["[0]" /]]) + +(def: .public test + Test + (<| (_.covering /._) + (_.for [/.Arity]) + (do [! random.monad] + [arity (# ! each (n.% 3) random.nat)] + ($_ _.and + (_.cover [/.nullary?] + (bit#= (n.= 0 arity) (/.nullary? arity))) + (_.cover [/.unary?] + (bit#= (n.= 1 arity) (/.unary? arity))) + (_.cover [/.multiary?] + (bit#= (n.>= 2 arity) (/.multiary? arity))) + )))) |