From 1651d847ba70ee36171f3809a25bece325fd5715 Mon Sep 17 00:00:00 2001 From: Eduardo Julian Date: Sat, 2 Dec 2017 12:49:25 -0400 Subject: - Added context-sensitive macro-expansion by means of "lux in-module", and removed all the (now unnecessary) #hidden tags. - Fixed a bug when loading the imports from the cache. - Added special notation for context-sensitive macro-expansion. --- stdlib/test/test/lux/concurrency/promise.lux | 2 +- stdlib/test/test/lux/data/number/ratio.lux | 5 ++++- stdlib/test/tests.lux | 4 +++- 3 files changed, 8 insertions(+), 3 deletions(-) (limited to 'stdlib/test') diff --git a/stdlib/test/test/lux/concurrency/promise.lux b/stdlib/test/test/lux/concurrency/promise.lux index 3be2f03b5..37ba6f2e1 100644 --- a/stdlib/test/test/lux/concurrency/promise.lux +++ b/stdlib/test/test/lux/concurrency/promise.lux @@ -56,7 +56,7 @@ (test "Cannot re-resolve a resolved promise." (and (not (io.run (&.resolve false (&/wrap true)))) - (io.run (&.resolve true (&.promise Bool))))) + (io.run (&.resolve true (: (&.Promise Bool) (&.promise #.None)))))) (wrap (do &.Monad [?none (&.time-out +100 (&.delay +200 true)) diff --git a/stdlib/test/test/lux/data/number/ratio.lux b/stdlib/test/test/lux/data/number/ratio.lux index 93081cd14..73e43e6c5 100644 --- a/stdlib/test/test/lux/data/number/ratio.lux +++ b/stdlib/test/test/lux/data/number/ratio.lux @@ -32,7 +32,10 @@ (&.ratio +0 denom2))) (test "All ratios are built normalized." - (|> sample &.normalize (&.r/= sample))) + (|> sample + &.normalize + ("lux in-module" "lux/data/number/ratio") + (&.r/= sample))) )))) (context: "Arithmetic" diff --git a/stdlib/test/tests.lux b/stdlib/test/tests.lux index 2efff3c71..ad43cadfe 100644 --- a/stdlib/test/tests.lux +++ b/stdlib/test/tests.lux @@ -74,7 +74,8 @@ (world ["_." blob] ["_." file] (net ["_." tcp] - ["_." udp])))) + ["_." udp])) + )) (lux (control [contract] [concatenative]) (concurrency [space]) @@ -88,6 +89,7 @@ (coll (tree ["tree_." parser]))) (math [random]) [macro] + (macro (poly [json])) (type [unit]) [world/env] [world/console]) -- cgit v1.3.1 From c72e120e8c2c300411c0cb07ecb3b6bc32e0cb24 Mon Sep 17 00:00:00 2001 From: Eduardo Julian Date: Sat, 2 Dec 2017 14:32:23 -0400 Subject: - Added some ~! to some macros to stop them from imposing dependencies. - Added some code to "lux.type" so it can handle "lux in-module". --- stdlib/source/lux.lux | 6 ++++ stdlib/source/lux/cli.lux | 8 ++--- stdlib/source/lux/test.lux | 78 ++++++++++++++++++++++++---------------------- stdlib/test/test/lux.lux | 1 - stdlib/test/tests.lux | 5 +-- 5 files changed, 52 insertions(+), 46 deletions(-) (limited to 'stdlib/test') diff --git a/stdlib/source/lux.lux b/stdlib/source/lux.lux index d7b4164e2..ebac83f40 100644 --- a/stdlib/source/lux.lux +++ b/stdlib/source/lux.lux @@ -2598,6 +2598,12 @@ [_ (#Tuple members)] (` (& (~+ (list/map walk-type members)))) + [_ (#Form (#Cons [_ (#Text "lux in-module")] + (#Cons [_ (#Text module)] + (#Cons type' + #Nil))))] + (` ("lux in-module" (~ (text$ module)) (~ (walk-type type')))) + [_ (#Form (#Cons type-fn args))] (list/fold ("lux check" (-> Code Code Code) (function' [arg type-fn] (` (#.Apply (~ arg) (~ type-fn))))) diff --git a/stdlib/source/lux/cli.lux b/stdlib/source/lux/cli.lux index 5a3672a39..b0f1285fa 100644 --- a/stdlib/source/lux/cli.lux +++ b/stdlib/source/lux/cli.lux @@ -121,14 +121,14 @@ (case args (#Raw args) (wrap (list (` ("lux program" (~ (code.symbol ["" args])) - (do io.Monad - [] - (~ body)))))) + ((~! do) (~! io.Monad) + [] + (~ body)))))) (#Parsed args) (with-gensyms [g!args g!_ g!output g!message] (wrap (list (` ("lux program" (~ g!args) - (case ((: (..CLI (io.IO Unit)) + (case ((: (~! (..CLI (io.IO Unit))) ((~! do) (~! p.Monad) [(~+ (|> args (list/map (function [[binding parser]] diff --git a/stdlib/source/lux/test.lux b/stdlib/source/lux/test.lux index 864dadfb0..b755299cd 100644 --- a/stdlib/source/lux/test.lux +++ b/stdlib/source/lux/test.lux @@ -5,7 +5,7 @@ [code]) (control [monad #+ do Monad] ["p" parser]) - (concurrency [promise #+ Promise Monad]) + (concurrency [promise #+ Promise]) (data (coll [list "list/" Monad Fold]) [product] [maybe] @@ -50,15 +50,15 @@ (def: #export (fail message) (All [a] (-> Text Test)) (|> [failure (format " [Error] " message)] - (:: Monad wrap) + (:: promise.Monad wrap) (:: r.Monad wrap))) (def: #export (assert message condition) {#.doc "Check that a condition is true, and fail with the given message otherwise."} (-> Text Bool (Promise [Counters Text])) (if condition - (:: Monad wrap [success (format "[Success] " message)]) - (:: Monad wrap [failure (format " [Error] " message)]))) + (:: promise.Monad wrap [success (format "[Success] " message)]) + (:: promise.Monad wrap [failure (format " [Error] " message)]))) (def: #export (test message condition) {#.doc "Check that a condition is true, and fail with the given message otherwise."} @@ -67,7 +67,7 @@ (def: (run' tests) (-> (List [Text (IO Test) Text]) (Promise Counters)) - (do Monad + (do promise.Monad [test-runs (|> tests (list/map (: (-> [Text (IO Test) Text] (Promise Counters)) (function [[module test description]] @@ -111,7 +111,7 @@ [seed r.nat] (function [prng] (let [[prng' instance] (r.run (r.pcg-32 [pcg-32-magic-inc seed]) test)] - [prng' (do Monad + [prng' (do promise.Monad [[counters documentation] instance] (if (failed? counters) (wrap [counters (format "Failed with this seed: " (%n seed) "\n" documentation)]) @@ -185,13 +185,16 @@ (with-gensyms [g!context g!test g!error] (wrap (list (` (def: #export (~ g!context) {#..test ((~! code.text) (~ description))} - (IO Test) - (io (case ("lux try" [(io (do (~! r.Monad) [] (~ test)))]) - (#.Right (~ g!test)) - (~ g!test) + (~! (IO Test)) + ((~! io) (case ("lux try" ((~! io) ((~! do) + (~! r.Monad) + [] + (~ test)))) + (#.Right (~ g!test)) + (~ g!test) - (#.Left (~ g!error)) - (..fail (~ g!error)))))))))) + (#.Left (~ g!error)) + (..fail (~ g!error)))))))))) (def: (exported-tests module-name) (-> Text (Meta (List [Text Text Text]))) @@ -225,30 +228,31 @@ tests) num-tests (list.size tests+) groups (list.split-all promise.concurrency-level tests+)]] - (wrap (list (` (: (IO Unit) - (io (exec (do Monad - [(~' #let) [(~ g!total-successes) +0 - (~ g!total-failures) +0] - (~+ (list/join (list/map (function [group] - (list (` [(~ g!successes) (~ g!failures)]) (` ((~! run') (list (~+ group)))) - (' #let) (` [(~ g!total-successes) (n/+ (~ g!successes) (~ g!total-successes)) - (~ g!total-failures) (n/+ (~ g!failures) (~ g!total-failures))]))) - groups)))] - (exec (let [(~ g!text/compose) (:: (~! text.Monoid) (~' compose))] - (log! ($_ (~ g!text/compose) - "Test-suite finished." - "\n" - ((~! %i) (nat-to-int (~ g!total-successes))) - " out of " - ((~! %i) (nat-to-int (n/+ (~ g!total-failures) - (~ g!total-successes)))) - " tests passed." - "\n" - ((~! %i) (nat-to-int (~ g!total-failures))) " tests failed."))) - (promise.future (if (n/> +0 (~ g!total-failures)) - (~! ..die) - (~! ..exit))))) - []))))))))) + (wrap (list (` (: (~! (IO Unit)) + ((~! io) (exec ((~! do) (~! promise.Monad) + [(~' #let) [(~ g!total-successes) +0 + (~ g!total-failures) +0] + (~+ (list/join (list/map (function [group] + (list (` [(~ g!successes) (~ g!failures)]) (` ((~! run') (list (~+ group)))) + (' #let) (` [(~ g!total-successes) (n/+ (~ g!successes) (~ g!total-successes)) + (~ g!total-failures) (n/+ (~ g!failures) (~ g!total-failures))]))) + groups)))] + (exec (let [(~ g!text/compose) (:: (~! text.Monoid) (~' compose))] + (log! ($_ (~ g!text/compose) + "Test-suite finished." + "\n" + ((~! %i) (nat-to-int (~ g!total-successes))) + " out of " + ((~! %i) (nat-to-int (n/+ (~ g!total-failures) + (~ g!total-successes)))) + " tests passed." + "\n" + ((~! %i) (nat-to-int (~ g!total-failures))) " tests failed."))) + ((~! promise.future) + (if (n/> +0 (~ g!total-failures)) + (~! ..die) + (~! ..exit))))) + []))))))))) (def: #export (seq left right) {#.doc "Sequencing combinator."} @@ -256,7 +260,7 @@ (do r.Monad [left left right right] - (wrap (do Monad + (wrap (do promise.Monad [[l-counter l-documentation] left [r-counter r-documentation] right] (wrap [(add-counters l-counter r-counter) diff --git a/stdlib/test/test/lux.lux b/stdlib/test/test/lux.lux index 8bd3a1ee5..f5c5fd2f1 100644 --- a/stdlib/test/test/lux.lux +++ b/stdlib/test/test/lux.lux @@ -2,7 +2,6 @@ lux lux/test (lux (control ["M" monad #+ do Monad]) - [io] [math] ["r" math/random] (data [maybe] diff --git a/stdlib/test/tests.lux b/stdlib/test/tests.lux index ad43cadfe..9a0fedbb8 100644 --- a/stdlib/test/tests.lux +++ b/stdlib/test/tests.lux @@ -1,9 +1,6 @@ (.module: lux - (lux (control monad) - [io] - (concurrency [promise]) - [cli #+ program:] + (lux [cli #+ program:] [test]) (test ["_." lux] (lux ["_." cli] -- cgit v1.3.1