aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/test/lux/control
diff options
context:
space:
mode:
Diffstat (limited to 'stdlib/source/test/lux/control')
-rw-r--r--stdlib/source/test/lux/control/cli.lux75
-rw-r--r--stdlib/source/test/lux/control/concurrency/actor.lux8
-rw-r--r--stdlib/source/test/lux/control/concurrency/atom.lux5
-rw-r--r--stdlib/source/test/lux/control/concurrency/frp.lux10
-rw-r--r--stdlib/source/test/lux/control/concurrency/promise.lux4
-rw-r--r--stdlib/source/test/lux/control/concurrency/semaphore.lux2
-rw-r--r--stdlib/source/test/lux/control/concurrency/stm.lux14
-rw-r--r--stdlib/source/test/lux/control/io.lux42
-rw-r--r--stdlib/source/test/lux/control/reader.lux7
-rw-r--r--stdlib/source/test/lux/control/region.lux8
-rw-r--r--stdlib/source/test/lux/control/state.lux4
-rw-r--r--stdlib/source/test/lux/control/writer.lux3
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)