From 82c955d5777ecb87b53bafcc658683d5a76e9a3c Mon Sep 17 00:00:00 2001 From: Eduardo Julian Date: Mon, 3 Apr 2017 18:18:34 -0400 Subject: - Implemented Int encoding/decoding in the standard library. - Moved some type-constructors for building functor types into the lux/control/functor module. - Renamed Ord to Order. - Renamed Env to Reader. --- stdlib/test/test/lux/codata/env.lux | 38 -------------- stdlib/test/test/lux/codata/reader.lux | 38 ++++++++++++++ stdlib/test/test/lux/data/char.lux | 6 +-- stdlib/test/test/lux/data/coll/ordered.lux | 10 ++-- stdlib/test/test/lux/data/number.lux | 82 +++++++++++++++--------------- stdlib/test/test/lux/data/text.lux | 2 +- stdlib/test/tests.lux | 2 +- 7 files changed, 89 insertions(+), 89 deletions(-) delete mode 100644 stdlib/test/test/lux/codata/env.lux create mode 100644 stdlib/test/test/lux/codata/reader.lux (limited to 'stdlib/test') diff --git a/stdlib/test/test/lux/codata/env.lux b/stdlib/test/test/lux/codata/env.lux deleted file mode 100644 index bac90d3b0..000000000 --- a/stdlib/test/test/lux/codata/env.lux +++ /dev/null @@ -1,38 +0,0 @@ -(;module: - lux - (lux [io] - (control monad) - (data [text "Text/" Monoid] - text/format - [number]) - (codata function - ["&" env]) - pipe) - lux/test) - -(test: "Envs" - ($_ seq - (assert "" (i.= 123 (&;run 123 &;ask))) - (assert "" (i.= 246 (&;run 123 (&;local (i.* 2) &;ask)))) - (assert "" (i.= 134 (&;run 123 (:: &;Functor map i.inc (i.+ 10))))) - (assert "" (i.= 10 (&;run 123 (:: &;Applicative wrap 10)))) - (assert "" (i.= 30 (&;run 123 (let [(^open "&/") &;Applicative] - (&/apply (&/wrap (i.+ 10)) (&/wrap 20)))))) - (assert "" (i.= 30 (&;run 123 (do &;Monad - [f (wrap i.+) - x (wrap 10) - y (wrap 20)] - (wrap (f x y)))))))) - -(test: "Monad transformer" - (let [(^open "io/") io;Monad] - (assert "Can add env functionality to any monad." - (|> (do (&;EnvT io;Monad) - [a (&;lift-env (io/wrap 123)) - b (wrap 456)] - (wrap (i.+ a b))) - (&;run "") - io;run - (case> 579 true - _ false))) - )) diff --git a/stdlib/test/test/lux/codata/reader.lux b/stdlib/test/test/lux/codata/reader.lux new file mode 100644 index 000000000..021ee1ab9 --- /dev/null +++ b/stdlib/test/test/lux/codata/reader.lux @@ -0,0 +1,38 @@ +(;module: + lux + (lux [io] + (control monad) + (data [text "Text/" Monoid] + text/format + [number]) + (codata function + ["&" reader]) + pipe) + lux/test) + +(test: "Readers" + ($_ seq + (assert "" (i.= 123 (&;run 123 &;ask))) + (assert "" (i.= 246 (&;run 123 (&;local (i.* 2) &;ask)))) + (assert "" (i.= 134 (&;run 123 (:: &;Functor map i.inc (i.+ 10))))) + (assert "" (i.= 10 (&;run 123 (:: &;Applicative wrap 10)))) + (assert "" (i.= 30 (&;run 123 (let [(^open "&/") &;Applicative] + (&/apply (&/wrap (i.+ 10)) (&/wrap 20)))))) + (assert "" (i.= 30 (&;run 123 (do &;Monad + [f (wrap i.+) + x (wrap 10) + y (wrap 20)] + (wrap (f x y)))))))) + +(test: "Monad transformer" + (let [(^open "io/") io;Monad] + (assert "Can add reader functionality to any monad." + (|> (do (&;ReaderT io;Monad) + [a (&;lift-reader (io/wrap 123)) + b (wrap 456)] + (wrap (i.+ a b))) + (&;run "") + io;run + (case> 579 true + _ false))) + )) diff --git a/stdlib/test/test/lux/data/char.lux b/stdlib/test/test/lux/data/char.lux index 6b7175de7..5025a1283 100644 --- a/stdlib/test/test/lux/data/char.lux +++ b/stdlib/test/test/lux/data/char.lux @@ -33,9 +33,9 @@ (:: Eq = value)))) (assert "Characters have an ordering relationship." - (if (:: Ord < other value) - (:: Ord > value other) - (:: Ord >= other value))) + (if (:: Order < other value) + (:: Order > value other) + (:: Order >= other value))) )) (test: "Special cases" diff --git a/stdlib/test/test/lux/data/coll/ordered.lux b/stdlib/test/test/lux/data/coll/ordered.lux index 213a568c1..ffc2bf309 100644 --- a/stdlib/test/test/lux/data/coll/ordered.lux +++ b/stdlib/test/test/lux/data/coll/ordered.lux @@ -20,9 +20,9 @@ [sizeL gen-nat sizeR gen-nat setL (|> (R;set number;Hash sizeL gen-nat) - (:: @ map (|>. S;to-list (&;from-list number;Ord)))) + (:: @ map (|>. S;to-list (&;from-list number;Order)))) setR (|> (R;set number;Hash sizeR gen-nat) - (:: @ map (|>. S;to-list (&;from-list number;Ord)))) + (:: @ map (|>. S;to-list (&;from-list number;Order)))) #let [(^open "&/") &;Eq]] ($_ seq (assert "I can query the size of a set." @@ -30,7 +30,7 @@ (assert "Converting sets to/from lists can't change their values." (|> setL - &;to-list (&;from-list number;Ord) + &;to-list (&;from-list number;Order) (&/= setL))) (assert "Order is preserved." @@ -51,11 +51,11 @@ (assert "Union with the empty set leaves a set unchanged." (&/= setL - (&;union (&;new number;Ord) + (&;union (&;new number;Order) setL))) (assert "Intersection with the empty set results in the empty set." - (let [empty-set (&;new number;Ord)] + (let [empty-set (&;new number;Order)] (&/= empty-set (&;intersection empty-set setL)))) diff --git a/stdlib/test/test/lux/data/number.lux b/stdlib/test/test/lux/data/number.lux index 8424c82a3..ad89649ba 100644 --- a/stdlib/test/test/lux/data/number.lux +++ b/stdlib/test/test/lux/data/number.lux @@ -9,26 +9,26 @@ pipe) lux/test) -(do-template [category rand-gen ] - [(test: (format "[" category "] " "Eq & Ord") +(do-template [category rand-gen ] + [(test: (format "[" category "] " "Eq & Order") [x rand-gen y rand-gen] (assert "" (and (:: = x x) (or (:: = x y) - (:: < y x) - (:: > y x)))))] + (:: < y x) + (:: > y x)))))] - ["Nat" R;nat Eq Ord] - ["Int" R;int Eq Ord] - ["Real" R;real Eq Ord] - ["Deg" R;deg Eq Ord] + ["Nat" R;nat Eq Order] + ["Int" R;int Eq Order] + ["Real" R;real Eq Order] + ["Deg" R;deg Eq Order] ) -(do-template [category rand-gen ] +(do-template [category rand-gen ] [(test: (format "[" category "] " "Number") [x rand-gen #let [(^open) - (^open) ]] + (^open) ]] (assert "" (and (>= x (abs x)) ## abs(0.0) == 0.0 && negate(abs(0.0)) == -0.0 (or (Text/= "Real" category) @@ -40,16 +40,16 @@ (abs x)))))))] ## ["Nat" R;nat Number] - ["Int" R;int Number Ord] - ["Real" R;real Number Ord] - ["Deg" R;deg Number Ord] + ["Int" R;int Number Order] + ["Real" R;real Number Order] + ["Deg" R;deg Number Order] ) -(do-template [category rand-gen ] +(do-template [category rand-gen ] [(test: (format "[" category "] " "Enum") [x rand-gen] (assert "" (let [(^open) - (^open) ] + (^open) ] (and (> x (:: succ x)) (< x @@ -61,52 +61,52 @@ (|> x (:: succ) (:: pred))) ))))] - ["Nat" R;nat Enum Number Ord] - ["Int" R;int Enum Number Ord] + ["Nat" R;nat Enum Number Order] + ["Int" R;int Enum Number Order] ) -(do-template [category rand-gen ] +(do-template [category rand-gen ] [(test: (format "[" category "] " "Interval") [x (|> rand-gen (R;filter )) #let [(^open) - (^open) ]] + (^open) ]] (assert "" (and (<= x (:: bottom)) (>= x (:: top)))))] - ["Nat" R;nat Number Ord Interval (lambda [_] true)] - ["Int" R;int Number Ord Interval (lambda [_] true)] + ["Nat" R;nat Number Order Interval (lambda [_] true)] + ["Int" R;int Number Order Interval (lambda [_] true)] ## Both min and max values will be positive (thus, greater than zero) - ["Real" R;real Number Ord Interval (r.> 0.0)] - ["Deg" R;deg Number Ord Interval (lambda [_] true)] + ["Real" R;real Number Order Interval (r.> 0.0)] + ["Deg" R;deg Number Order Interval (lambda [_] true)] ) -(do-template [category rand-gen ] +(do-template [category rand-gen ] [(test: (format "[" category "] " "Monoid") [x (|> rand-gen (:: @ map (|>. (:: abs) )) (R;filter )) #let [(^open) - (^open) + (^open) (^open) ]] (assert "Appending to unit doesn't change the value." (and (= x (append unit x)) (= x (append x unit)) (= unit (append unit unit)))))] - ["Nat/Add" R;nat Number Ord Add@Monoid (n.% +1000) (lambda [_] true)] - ["Nat/Mul" R;nat Number Ord Mul@Monoid (n.% +1000) (lambda [_] true)] - ["Nat/Min" R;nat Number Ord Min@Monoid (n.% +1000) (lambda [_] true)] - ["Nat/Max" R;nat Number Ord Max@Monoid (n.% +1000) (lambda [_] true)] - ["Int/Add" R;int Number Ord Add@Monoid (i.% 1000) (lambda [_] true)] - ["Int/Mul" R;int Number Ord Mul@Monoid (i.% 1000) (lambda [_] true)] - ["Int/Min" R;int Number Ord Min@Monoid (i.% 1000) (lambda [_] true)] - ["Int/Max" R;int Number Ord Max@Monoid (i.% 1000) (lambda [_] true)] - ["Real/Add" R;real Number Ord Add@Monoid (r.% 1000.0) (r.> 0.0)] - ["Real/Mul" R;real Number Ord Mul@Monoid (r.% 1000.0) (r.> 0.0)] - ["Real/Min" R;real Number Ord Min@Monoid (r.% 1000.0) (r.> 0.0)] - ["Real/Max" R;real Number Ord Max@Monoid (r.% 1000.0) (r.> 0.0)] - ["Deg/Add" R;deg Number Ord Add@Monoid (d.% .125) (lambda [_] true)] - ## ["Deg/Mul" R;deg Number Ord Mul@Monoid (d.% .125) (lambda [_] true)] - ["Deg/Min" R;deg Number Ord Min@Monoid (d.% .125) (lambda [_] true)] - ["Deg/Max" R;deg Number Ord Max@Monoid (d.% .125) (lambda [_] true)] + ["Nat/Add" R;nat Number Order Add@Monoid (n.% +1000) (lambda [_] true)] + ["Nat/Mul" R;nat Number Order Mul@Monoid (n.% +1000) (lambda [_] true)] + ["Nat/Min" R;nat Number Order Min@Monoid (n.% +1000) (lambda [_] true)] + ["Nat/Max" R;nat Number Order Max@Monoid (n.% +1000) (lambda [_] true)] + ["Int/Add" R;int Number Order Add@Monoid (i.% 1000) (lambda [_] true)] + ["Int/Mul" R;int Number Order Mul@Monoid (i.% 1000) (lambda [_] true)] + ["Int/Min" R;int Number Order Min@Monoid (i.% 1000) (lambda [_] true)] + ["Int/Max" R;int Number Order Max@Monoid (i.% 1000) (lambda [_] true)] + ["Real/Add" R;real Number Order Add@Monoid (r.% 1000.0) (r.> 0.0)] + ["Real/Mul" R;real Number Order Mul@Monoid (r.% 1000.0) (r.> 0.0)] + ["Real/Min" R;real Number Order Min@Monoid (r.% 1000.0) (r.> 0.0)] + ["Real/Max" R;real Number Order Max@Monoid (r.% 1000.0) (r.> 0.0)] + ["Deg/Add" R;deg Number Order Add@Monoid (d.% .125) (lambda [_] true)] + ## ["Deg/Mul" R;deg Number Order Mul@Monoid (d.% .125) (lambda [_] true)] + ["Deg/Min" R;deg Number Order Min@Monoid (d.% .125) (lambda [_] true)] + ["Deg/Max" R;deg Number Order Max@Monoid (d.% .125) (lambda [_] true)] ) (do-template [ ] diff --git a/stdlib/test/test/lux/data/text.lux b/stdlib/test/test/lux/data/text.lux index 72e633847..ce72cd520 100644 --- a/stdlib/test/test/lux/data/text.lux +++ b/stdlib/test/test/lux/data/text.lux @@ -127,7 +127,7 @@ ))) (test: "Structures" - (let [(^open "&/") &;Ord] + (let [(^open "&/") &;Order] ($_ seq (assert "" (&/< "bcd" "abc")) (assert "" (not (&/< "abc" "abc"))) diff --git a/stdlib/test/tests.lux b/stdlib/test/tests.lux index 2a7615dac..53a003756 100644 --- a/stdlib/test/tests.lux +++ b/stdlib/test/tests.lux @@ -13,7 +13,7 @@ ["_;" lexer] (lexer ["_;" regex]) (codata ["_;" cont] - ["_;" env] + ["_;" reader] ["_;" state] ["_;" thunk] (coll ["_;" stream])) -- cgit v1.2.3