diff options
Diffstat (limited to 'stdlib/source/test/lux/control')
-rw-r--r-- | stdlib/source/test/lux/control/cli.lux | 75 | ||||
-rw-r--r-- | stdlib/source/test/lux/control/concurrency/actor.lux | 8 | ||||
-rw-r--r-- | stdlib/source/test/lux/control/concurrency/atom.lux | 5 | ||||
-rw-r--r-- | stdlib/source/test/lux/control/concurrency/frp.lux | 10 | ||||
-rw-r--r-- | stdlib/source/test/lux/control/concurrency/promise.lux | 4 | ||||
-rw-r--r-- | stdlib/source/test/lux/control/concurrency/semaphore.lux | 2 | ||||
-rw-r--r-- | stdlib/source/test/lux/control/concurrency/stm.lux | 14 | ||||
-rw-r--r-- | stdlib/source/test/lux/control/io.lux | 42 | ||||
-rw-r--r-- | stdlib/source/test/lux/control/reader.lux | 7 | ||||
-rw-r--r-- | stdlib/source/test/lux/control/region.lux | 8 | ||||
-rw-r--r-- | stdlib/source/test/lux/control/state.lux | 4 | ||||
-rw-r--r-- | stdlib/source/test/lux/control/writer.lux | 3 |
12 files changed, 151 insertions, 31 deletions
diff --git a/stdlib/source/test/lux/control/cli.lux b/stdlib/source/test/lux/control/cli.lux new file mode 100644 index 000000000..ff7a3abb3 --- /dev/null +++ b/stdlib/source/test/lux/control/cli.lux @@ -0,0 +1,75 @@ +(.module: + [lux #* + data/text/format + ["M" abstract/monad (#+ Monad do)] + ["_" test (#+ Test)] + ["r" math/random] + [control + pipe + ["p" parser]] + [data + ["." error] + [number + ["." nat ("#;." decimal)]] + ["." text ("#;." equivalence)] + [collection + ["." list]]]] + {1 + ["." /]}) + +(def: #export test + Test + (<| (_.context (%name (name-of /.CLI))) + (do r.monad + [num-args (|> r.nat (:: @ map (n/% 10))) + #let [gen-arg (:: @ map nat;encode r.nat)] + yes gen-arg + #let [gen-ignore (r.filter (|>> (text;= yes) not) + (r.unicode 5))] + no gen-ignore + pre-ignore (r.list 5 gen-ignore) + post-ignore (r.list 5 gen-ignore)] + ($_ _.and + (_.test "Can read any argument." + (|> (/.run (list yes) /.any) + (case> (#error.Failure _) + #0 + + (#error.Success arg) + (text;= arg yes)))) + (_.test "Can test tokens." + (and (|> (/.run (list yes) (/.this yes)) + (case> (#error.Failure _) + #0 + + (#error.Success _) + #1)) + (|> (/.run (list no) (/.this yes)) + (case> (#error.Failure _) + #1 + + (#error.Success _) + #0)))) + (_.test "Can use custom token parsers." + (|> (/.run (list yes) (/.parse nat;decode)) + (case> (#error.Failure _) + #0 + + (#error.Success parsed) + (text;= (nat;encode parsed) + yes)))) + (_.test "Can query if there are any more inputs." + (and (|> (/.run (list) /.end) + (case> (#error.Success []) #1 _ #0)) + (|> (/.run (list yes) (p.not /.end)) + (case> (#error.Success []) #0 _ #1)))) + (_.test "Can parse CLI input anywhere." + (|> (/.run (list.concat (list pre-ignore (list yes) post-ignore)) + (|> (/.somewhere (/.this yes)) + (p.before (p.some /.any)))) + (case> (#error.Failure _) + #0 + + (#error.Success _) + #1))) + )))) diff --git a/stdlib/source/test/lux/control/concurrency/actor.lux b/stdlib/source/test/lux/control/concurrency/actor.lux index eff4d051d..a39f7b039 100644 --- a/stdlib/source/test/lux/control/concurrency/actor.lux +++ b/stdlib/source/test/lux/control/concurrency/actor.lux @@ -1,12 +1,10 @@ (.module: [lux #* ["_" test (#+ Test)] - ["." io (#+ IO io)] [abstract/monad (#+ do)] [control ["ex" exception] - [concurrency - ["." promise ("#;." monad)]]] + ["." io (#+ IO io)]] [data ["." error] [text @@ -14,7 +12,9 @@ [math ["r" random]]] {1 - ["." / (#+ actor: message:)]}) + ["." / (#+ actor: message:) + [// + ["." promise ("#;." monad)]]]}) (actor: Counter Nat diff --git a/stdlib/source/test/lux/control/concurrency/atom.lux b/stdlib/source/test/lux/control/concurrency/atom.lux index 455f8b00d..63f9ec296 100644 --- a/stdlib/source/test/lux/control/concurrency/atom.lux +++ b/stdlib/source/test/lux/control/concurrency/atom.lux @@ -1,11 +1,12 @@ (.module: [lux #* ["_" test (#+ Test)] - ["." io] [abstract/monad (#+ do)] data/text/format [math - ["r" random]]] + ["r" random]] + [control + ["." io]]] {1 ["." /]}) diff --git a/stdlib/source/test/lux/control/concurrency/frp.lux b/stdlib/source/test/lux/control/concurrency/frp.lux index 7ac79b465..f9cea5737 100644 --- a/stdlib/source/test/lux/control/concurrency/frp.lux +++ b/stdlib/source/test/lux/control/concurrency/frp.lux @@ -1,12 +1,9 @@ (.module: [lux #* ["_" test (#+ Test)] - ["." io (#+ IO io)] [abstract/monad (#+ do)] [control - [concurrency - ["." promise ("#@." monad)] - ["." atom (#+ Atom atom)]]] + ["." io (#+ IO io)]] [data [number ["." nat]] @@ -15,7 +12,10 @@ [math ["r" random]]] {1 - ["." / (#+ Channel)]}) + ["." / (#+ Channel) + [// + ["." promise ("#@." monad)] + ["." atom (#+ Atom atom)]]]}) (def: #export test Test diff --git a/stdlib/source/test/lux/control/concurrency/promise.lux b/stdlib/source/test/lux/control/concurrency/promise.lux index 5a49f26fe..5a4a41adb 100644 --- a/stdlib/source/test/lux/control/concurrency/promise.lux +++ b/stdlib/source/test/lux/control/concurrency/promise.lux @@ -1,10 +1,10 @@ (.module: [lux #* ["_" test (#+ Test)] - ["." io] [abstract/monad (#+ do)] [control - pipe] + pipe + ["." io]] data/text/format [math ["r" random]]] diff --git a/stdlib/source/test/lux/control/concurrency/semaphore.lux b/stdlib/source/test/lux/control/concurrency/semaphore.lux index 40bd81364..369bc8507 100644 --- a/stdlib/source/test/lux/control/concurrency/semaphore.lux +++ b/stdlib/source/test/lux/control/concurrency/semaphore.lux @@ -3,6 +3,7 @@ [abstract ["." monad (#+ do)]] [control + ["." io] [concurrency ["/" semaphore] ["." promise (#+ Promise)] @@ -13,7 +14,6 @@ format] [collection ["." list ("#;." functor)]]] - ["." io] [math ["r" random]]] lux/test) diff --git a/stdlib/source/test/lux/control/concurrency/stm.lux b/stdlib/source/test/lux/control/concurrency/stm.lux index 9e3b9290c..6b9a65a55 100644 --- a/stdlib/source/test/lux/control/concurrency/stm.lux +++ b/stdlib/source/test/lux/control/concurrency/stm.lux @@ -1,14 +1,9 @@ (.module: [lux #* ["_" test (#+ Test)] - ["." io (#+ IO)] ["M" abstract/monad (#+ do Monad)] [control - [concurrency - ["." atom (#+ Atom atom)] - ["." process] - ["." promise] - ["." frp (#+ Channel)]]] + ["." io (#+ IO)]] [data text/format [number @@ -18,7 +13,12 @@ [math ["r" random]]] {1 - ["." /]}) + ["." / + [// + ["." atom (#+ Atom atom)] + ["." process] + ["." promise] + ["." frp (#+ Channel)]]]}) (def: (read! channel) (All [a] (-> (Channel a) (IO (Atom (List a))))) diff --git a/stdlib/source/test/lux/control/io.lux b/stdlib/source/test/lux/control/io.lux new file mode 100644 index 000000000..1a14558b2 --- /dev/null +++ b/stdlib/source/test/lux/control/io.lux @@ -0,0 +1,42 @@ +(.module: + [lux #* + data/text/format + ["_" test (#+ Test)] + ["r" math/random] + [abstract + [monad (#+ do)] + {[0 #test] + [/ + ["$." functor (#+ Injection Comparison)] + ["$." apply] + ["$." monad]]}]] + {1 + ["." / (#+ IO) + [// + ["." function]]]}) + +(def: injection + (Injection IO) + (|>> /.io)) + +(def: comparison + (Comparison IO) + (function (_ == left right) + (== (/.run left) (/.run right)))) + +(def: #export test + Test + (<| (_.context (%name (name-of /.IO))) + (do r.monad + [sample r.nat + exit-code r.int] + ($_ _.and + ($functor.spec ..injection ..comparison /.functor) + ($apply.spec ..injection ..comparison /.apply) + ($monad.spec ..injection ..comparison /.monad) + + (_.test "Can execute computations designated as I/O computations." + (n/= sample (/.run (/.io sample)))) + (_.test "I/O operations won't execute unless they are explicitly run." + (exec (/.exit exit-code) + true)))))) diff --git a/stdlib/source/test/lux/control/reader.lux b/stdlib/source/test/lux/control/reader.lux index aa639ce70..94aacdb5d 100644 --- a/stdlib/source/test/lux/control/reader.lux +++ b/stdlib/source/test/lux/control/reader.lux @@ -1,6 +1,5 @@ (.module: [lux #* - ["." io (#+ IO)] ["_" test (#+ Test)] [abstract [monad (#+ do)] @@ -15,7 +14,9 @@ [math ["r" random]]] {1 - ["." / (#+ Reader)]}) + ["." / (#+ Reader) + [// + ["." io (#+ IO)]]]}) (def: (injection value) (Injection (All [a r] (Reader r a))) @@ -29,7 +30,7 @@ (def: #export test Test - (<| (_.context (%name (name-of /.Reader))) + (<| (_.context (%name (name-of /._))) (do r.monad [sample r.nat factor r.nat] diff --git a/stdlib/source/test/lux/control/region.lux b/stdlib/source/test/lux/control/region.lux index a575e4250..57ed91c1a 100644 --- a/stdlib/source/test/lux/control/region.lux +++ b/stdlib/source/test/lux/control/region.lux @@ -3,9 +3,6 @@ ["_" test (#+ Test)] [abstract ["." monad (#+ do)]] - [control - ["." thread (#+ Thread)] - ["ex" exception (#+ exception:)]] [data ["." error (#+ Error)] [text @@ -15,7 +12,10 @@ [math ["r" random]]] {1 - ["." /]}) + ["." / + [// + ["." thread (#+ Thread)] + ["ex" exception (#+ exception:)]]]}) (exception: oops) diff --git a/stdlib/source/test/lux/control/state.lux b/stdlib/source/test/lux/control/state.lux index 808d5ebb2..96f9e9d34 100644 --- a/stdlib/source/test/lux/control/state.lux +++ b/stdlib/source/test/lux/control/state.lux @@ -1,7 +1,6 @@ (.module: [lux #* ["_" test (#+ Test)] - ["." io] [abstract [monad (#+ do)] {[0 #test] @@ -10,7 +9,8 @@ ["$." apply] ["$." monad]]}] [control - [pipe (#+ let>)]] + [pipe (#+ let>)] + ["." io]] [data ["." product] [text diff --git a/stdlib/source/test/lux/control/writer.lux b/stdlib/source/test/lux/control/writer.lux index 392fc7a4b..a95384fef 100644 --- a/stdlib/source/test/lux/control/writer.lux +++ b/stdlib/source/test/lux/control/writer.lux @@ -1,7 +1,6 @@ (.module: [lux #* ["_" test (#+ Test)] - ["." io] [abstract [equivalence (#+ Equivalence)] [monoid (#+ Monoid)] @@ -11,6 +10,8 @@ ["$." functor (#+ Injection Comparison)] ["$." apply] ["$." monad]]}] + [control + ["." io]] [data ["." product] ["." text ("#;." equivalence) |