diff options
Diffstat (limited to '')
-rw-r--r-- | stdlib/source/test/lux.lux | 1 | ||||
-rw-r--r-- | stdlib/source/test/lux/control.lux | 7 | ||||
-rw-r--r-- | stdlib/source/test/lux/control/pipe.lux | 165 |
3 files changed, 109 insertions, 64 deletions
diff --git a/stdlib/source/test/lux.lux b/stdlib/source/test/lux.lux index ef37237ba..08c77a303 100644 --- a/stdlib/source/test/lux.lux +++ b/stdlib/source/test/lux.lux @@ -96,7 +96,6 @@ ["/." jvm]] ["/." control]] ## [control - ## ## [pipe (#+)] ## ## [continuation (#+)] ## ## [reader (#+)] ## ## [writer (#+)] diff --git a/stdlib/source/test/lux/control.lux b/stdlib/source/test/lux/control.lux index 6c2204fbc..79dab5322 100644 --- a/stdlib/source/test/lux/control.lux +++ b/stdlib/source/test/lux/control.lux @@ -3,7 +3,8 @@ ["_" test (#+ Test)]] [/ ["/." exception] - ["/." interval]]) + ["/." interval] + ["/." pipe]]) (def: #export test Test @@ -11,4 +12,6 @@ (<| (_.context "/exception Exception-handling.") /exception.test) (<| (_.context "/interval") - /interval.test))) + /interval.test) + (<| (_.context "/pipe") + /pipe.test))) diff --git a/stdlib/source/test/lux/control/pipe.lux b/stdlib/source/test/lux/control/pipe.lux index aaaa18616..21d7b8b90 100644 --- a/stdlib/source/test/lux/control/pipe.lux +++ b/stdlib/source/test/lux/control/pipe.lux @@ -1,72 +1,115 @@ (.module: [lux #* + ["_" test (#+ Test)] [control - [monad (#+ Monad do)] - pipe] + [monad (#+ do)]] [data ["." identity] [text ("text/." equivalence) format]] [math ["r" random]]] - lux/test) + {1 + /}) -(context: "Pipes" - ($_ seq - (test "Can dismiss previous pipeline results and begin a new line." - (|> +20 - (i/* +3) - (i/+ +4) - (new> +0 inc) - (i/= +1))) - - (test "Can give names to piped values within a pipeline's scope." - (|> +5 - (let> X [(i/+ X X)]) - (i/= +10))) - - (test "Can do branching in pipelines." - (and (|> +5 - (cond> [i/even?] [(i/* +2)] - [i/odd?] [(i/* +3)] - [(new> -1)]) - (i/= +15)) - (|> +4 - (cond> [i/even?] [(i/* +2)] - [i/odd?] [(i/* +3)] - []) - (i/= +8)) - (|> +5 - (cond> [i/even?] [(i/* +2)] - [(new> -1)]) - (i/= -1)))) +(def: #export test + Test + (do r.monad + [sample r.nat] + ($_ _.and + (do @ + [another r.nat] + (_.test "Can dismiss previous pipeline results and begin a new one." + (n/= (inc another) + (|> sample + (n/* 3) + (n/+ 4) + (new> another [inc]))))) + + (_.test "Let-binding" + (n/= (n/+ sample sample) + (|> sample + (let> x [(n/+ x x)])))) + + (_.test "'Conditional' branching." + (text/= (cond (n/= 0 sample) "zero" + (n/even? sample) "even" + "odd") + (|> sample + (cond> [(n/= 0)] [(new> "zero" [])] + [n/even?] [(new> "even" [])] + [(new> "odd" [])])))) - (test "Can loop within pipelines." - (|> +1 - (loop> [(i/< +10)] - [inc]) - (i/= +10))) - - (test "Can use monads within pipelines." - (|> +5 - (do> identity.monad - [(i/* +3)] - [(i/+ +4)] - [inc]) - (i/= +20))) - - (test "Can pattern-match against piped values." - (|> +5 - (case> +0 "zero" - +1 "one" - +2 "two" - +3 "three" - +4 "four" - +5 "five" - +6 "six" - +7 "seven" - +8 "eight" - +9 "nine" - _ "???") - (text/= "five"))) - )) + (_.test "'If' branching." + (text/= (if (n/even? sample) + "even" + "odd") + (|> sample + (if> [n/even?] + [(new> "even" [])] + [(new> "odd" [])])))) + + (_.test "'When' branching." + (n/= (if (n/even? sample) + (n/* 2 sample) + sample) + (|> sample + (when> [n/even?] + [(n/* 2)])))) + + (_.test "Can loop." + (n/= (n/* 10 sample) + (|> sample + (loop> [(n/= (n/* 10 sample)) not] + [(n/+ sample)])))) + + (_.test "Monads." + (n/= (inc (n/+ 4 (n/* 3 sample))) + (|> sample + (do> identity.monad + [(n/* 3)] + [(n/+ 4)] + [inc])))) + + (_.test "Execution." + (n/= (n/* 10 sample) + (|> sample + (exec> [%n (format "sample = ") log!]) + (n/* 10)))) + + (_.test "Tuple." + (let [[left middle right] (|> sample + (tuple> [inc] + [dec] + [%n]))] + (and (n/= (inc sample) left) + (n/= (dec sample) middle) + (text/= (%n sample) right)))) + + (_.test "Pattern-matching." + (text/= (case (n/% 10 sample) + 0 "zero" + 1 "one" + 2 "two" + 3 "three" + 4 "four" + 5 "five" + 6 "six" + 7 "seven" + 8 "eight" + 9 "nine" + _ "???") + (|> sample + (n/% 10) + (case> 0 "zero" + 1 "one" + 2 "two" + 3 "three" + 4 "four" + 5 "five" + 6 "six" + 7 "seven" + 8 "eight" + 9 "nine" + _ "???")))) + ))) |