diff options
Diffstat (limited to 'stdlib/test')
-rw-r--r-- | stdlib/test/test/lux/codata/cont.lux | 45 | ||||
-rw-r--r-- | stdlib/test/tests.lux | 11 |
2 files changed, 51 insertions, 5 deletions
diff --git a/stdlib/test/test/lux/codata/cont.lux b/stdlib/test/test/lux/codata/cont.lux new file mode 100644 index 000000000..7e2daa823 --- /dev/null +++ b/stdlib/test/test/lux/codata/cont.lux @@ -0,0 +1,45 @@ +## Copyright (c) Eduardo Julian. All rights reserved. +## This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. +## If a copy of the MPL was not distributed with this file, +## You can obtain one at http://mozilla.org/MPL/2.0/. + +(;module: + lux + (lux (codata [io]) + (control monad) + (data [text "Text/" Monoid<Text>] + text/format + [number] + [product]) + (codata function + ["&" cont]) + (math ["R" random]) + pipe) + lux/test) + +(test: "Continuations" + [sample R;nat + #let [(^open "&/") &;Monad<Cont>]] + ($_ seq + (assert "Can run continuations to compute their values." + (n.= sample (&;run (&;@lazy sample)))) + + (assert "Can use functor." + (n.= (n.inc sample) (&;run (&/map n.inc (&;@lazy sample))))) + + (assert "Can use applicative." + (n.= (n.inc sample) (&;run (&/apply (&/wrap n.inc) (&/wrap sample))))) + + (assert "Can use monad." + (n.= (n.inc sample) (&;run (do &;Monad<Cont> + [func (wrap n.inc) + arg (wrap sample)] + (wrap (func arg)))))) + + (assert "Can access current continuation." + (n.= (n.dec sample) (&;run (do &;Monad<Cont> + [func (wrap n.inc) + _ (&;call/cc (lambda [k] (k (n.dec sample)))) + arg (wrap sample)] + (wrap (func arg)))))) + )) diff --git a/stdlib/test/tests.lux b/stdlib/test/tests.lux index ef94dca90..85cce3d9f 100644 --- a/stdlib/test/tests.lux +++ b/stdlib/test/tests.lux @@ -17,14 +17,16 @@ ["_;" lexer] ["_;" regex] (codata ["_;" io] - [env] - [state] - (struct [stream])) + ["_;" env] + ["_;" state] + ["_;" cont] + (struct ["_;" stream])) (concurrency [actor] ["_;" atom] [frp] ["_;" promise] [stm]) + (data [bit] [bool] [char] @@ -65,8 +67,7 @@ ## (control [effect]) ) ) - ## (lux (codata [cont]) - ## (macro [poly] + ## (lux (macro [poly] ## (poly ["poly_;" eq] ## ["poly_;" text-encoder] ## ["poly_;" functor]))) |