From 002ee0418195afccd1a1b500a36cc5b2adc44791 Mon Sep 17 00:00:00 2001 From: Eduardo Julian Date: Tue, 16 Jan 2018 22:33:38 -0400 Subject: - Added sub-structural types (for synchronous IO and asynchronous Promise). --- stdlib/test/test/lux/type/resource.lux | 46 ++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 stdlib/test/test/lux/type/resource.lux (limited to 'stdlib/test') diff --git a/stdlib/test/test/lux/type/resource.lux b/stdlib/test/test/lux/type/resource.lux new file mode 100644 index 000000000..3681a7ce1 --- /dev/null +++ b/stdlib/test/test/lux/type/resource.lux @@ -0,0 +1,46 @@ +(.module: + lux + (lux (control (monad [indexed #+ do])) + [macro] + (type [resource #+ Res]) + [io]) + lux/test) + +(context: "Sub-structural typing." + ($_ seq + (test "Can produce and consume keys in an ordered manner." + (<| (n/= (n/+ +123 +456)) + io.run + resource.sync + (do resource.IxMonad + [res|left (resource.ordered +123) + res|right (resource.ordered +456) + right (resource.read res|right) + left (resource.read res|left)] + (wrap (n/+ left right))))) + + (test "Can exchange commutative keys." + (<| (n/= (n/+ +123 +456)) + io.run + resource.sync + (do resource.IxMonad + [res|left (resource.commutative +123) + res|right (resource.commutative +456) + _ (resource.exchange [+1 +0]) + left (resource.read res|left) + right (resource.read res|right)] + (wrap (n/+ left right))))) + + (test "Can group and un-group keys." + (<| (n/= (n/+ +123 +456)) + io.run + resource.sync + (do resource.IxMonad + [res|left (resource.commutative +123) + res|right (resource.commutative +456) + _ (resource.group +2) + _ (resource.un-group +2) + right (resource.read res|right) + left (resource.read res|left)] + (wrap (n/+ left right))))) + )) -- cgit v1.2.3