diff options
Diffstat (limited to '')
37 files changed, 336 insertions, 164 deletions
diff --git a/stdlib/source/library/lux/data/any.lux b/stdlib/source/library/lux/data/any.lux new file mode 100644 index 000000000..1e5c6591f --- /dev/null +++ b/stdlib/source/library/lux/data/any.lux @@ -0,0 +1,25 @@ +(.require + [library + [lux (.except) + [abstract + [equivalence (.only Equivalence)] + [hash (.only Hash)]]]]) + +(def .public any + Any + []) + +(def .public equivalence + (Equivalence Any) + (implementation + (def (= _ _) + true))) + +(def .public hash + (Hash Any) + (implementation + (def equivalence + ..equivalence) + + (def (hash _) + 1))) diff --git a/stdlib/source/library/lux/meta/compiler/language/lux/phase/translation/jvm.lux b/stdlib/source/library/lux/meta/compiler/language/lux/phase/translation/jvm.lux index 770614d0c..a3ca297a4 100644 --- a/stdlib/source/library/lux/meta/compiler/language/lux/phase/translation/jvm.lux +++ b/stdlib/source/library/lux/meta/compiler/language/lux/phase/translation/jvm.lux @@ -55,7 +55,8 @@ it)))) (def .public (translate extender lux) - (-> extension.Extender Lux Phase) + (-> extension.Extender Lux + Phase) (function (phase archive synthesis) (when synthesis (^.with_template [<tag> <translator>] diff --git a/stdlib/source/library/lux/meta/compiler/language/lux/phase/translation/jvm/runtime.lux b/stdlib/source/library/lux/meta/compiler/language/lux/phase/translation/jvm/runtime.lux index b0273f3f3..297504638 100644 --- a/stdlib/source/library/lux/meta/compiler/language/lux/phase/translation/jvm/runtime.lux +++ b/stdlib/source/library/lux/meta/compiler/language/lux/phase/translation/jvm/runtime.lux @@ -57,7 +57,6 @@ [reference [variable (.only Register)]] [meta - [io (.only lux_context)] [archive (.only Output Archive) ["[0]" artifact] ["[0]" registry (.only Registry)] @@ -97,7 +96,7 @@ (def .public (class_name [module id]) (-> unit.ID Text) - (format lux_context + (format "lux" "." (%.nat version.latest) "." (%.nat module) "." (%.nat id))) diff --git a/stdlib/source/library/lux/meta/compiler/meta/io.lux b/stdlib/source/library/lux/meta/compiler/meta/io.lux index 15184122b..5231403a3 100644 --- a/stdlib/source/library/lux/meta/compiler/meta/io.lux +++ b/stdlib/source/library/lux/meta/compiler/meta/io.lux @@ -4,18 +4,21 @@ [data ["[0]" text]] [world - [file (.only Path System)]]]]) + ["[0]" file]]]] + [// + [archive + [module + ["[0]" descriptor]]]]) (type .public Context - Path) + file.Path) (type .public Code Text) -(def .public (safe system) - (All (_ m) (-> (System m) Text Text)) - (text.replaced "/" (of system separator))) - -(def .public lux_context - Context - "lux") +(def .public (path fs) + (All (_ !) + (-> (file.System !) descriptor.Module + file.Path)) + (text.replaced .module_separator + (of fs separator))) diff --git a/stdlib/source/library/lux/meta/compiler/meta/io/context.lux b/stdlib/source/library/lux/meta/compiler/meta/io/context.lux index ab6322718..471ffe6f0 100644 --- a/stdlib/source/library/lux/meta/compiler/meta/io/context.lux +++ b/stdlib/source/library/lux/meta/compiler/meta/io/context.lux @@ -1,6 +1,6 @@ (.require [library - [lux (.except Module Code) + [lux (.except Module) [abstract ["[0]" monad (.only Monad do)]] [control @@ -24,7 +24,7 @@ ["@" target]] [world ["[0]" file]]]] - ["[0]" // (.only Context Code) + ["[0]" // (.only Context) ["/[1]" // [import (.only Import)] ["/[1]" // (.only Input)] @@ -53,7 +53,7 @@ (def .public (path fs context module) (All (_ m) (-> (file.System m) Context Module file.Path)) (|> module - (//.safe fs) + (//.path fs) (format context (of fs separator)))) (def (find_source_file fs importer contexts module extension) diff --git a/stdlib/source/library/lux/world/finance/market/analysis.lux b/stdlib/source/library/lux/world/finance/market/analysis.lux new file mode 100644 index 000000000..a1861eea1 --- /dev/null +++ b/stdlib/source/library/lux/world/finance/market/analysis.lux @@ -0,0 +1,10 @@ +(.require + [library + [lux (.except Analysis) + [world + [time + [series (.only Series)]]]]]) + +(type .public (Analysis from to) + (-> (Series from) + (Series to))) diff --git a/stdlib/source/library/lux/world/finance/market/analysis/pivot_point.lux b/stdlib/source/library/lux/world/finance/market/analysis/pivot_point.lux index 8b0693abb..7f4a6ca51 100644 --- a/stdlib/source/library/lux/world/finance/market/analysis/pivot_point.lux +++ b/stdlib/source/library/lux/world/finance/market/analysis/pivot_point.lux @@ -9,12 +9,13 @@ [world [time ["[0]" series (.only Series) (.use "[1]#[0]" functor)]]]]] - [/// - [price (.only Price)] + [// (.only Analysis) [// - ["[0]" money] - [trade - ["[0]" session (.only Session)]]]]) + [price (.only Price)] + [// + ["[0]" money] + [trade + ["[0]" session (.only Session)]]]]]) ... https://en.wikipedia.org/wiki/Typical_price (def .public (typical_price it) @@ -68,10 +69,6 @@ #pivot_point pivot_point #bottom_central bottom_central])) -(type .public (Analysis from to) - (-> (Series from) - (Series to))) - (def .public analysis (All (_ $) (Analysis (Session $) (Central_Pivot_Range $))) diff --git a/stdlib/source/specification/lux/abstract/enum.lux b/stdlib/source/specification/lux/abstract/enum.lux deleted file mode 100644 index 0d367f7c0..000000000 --- a/stdlib/source/specification/lux/abstract/enum.lux +++ /dev/null @@ -1,32 +0,0 @@ -(.require - [library - [lux (.except) - [abstract - [monad (.only do)] - ["[0]" order - ["[1]T" \\test]]] - [math - ["[0]" random (.only Random)]] - [test - ["_" property (.only Test)]]]] - [\\library - ["[0]" /]]) - -(def .public (spec (open "/#[0]") random) - (All (_ a) (-> (/.Enum a) (Random a) Test)) - (do random.monad - [sample random] - (<| (_.for [/.Enum]) - (all _.and - (_.for [/.order] - (orderT.spec /#order random)) - (_.coverage [/.succ /.pred] - (and (/#= (|> sample /#succ /#pred) - sample) - (/#= (|> sample /#pred /#succ) - sample) - (not (/#= (/#succ sample) - sample)) - (not (/#= (/#pred sample) - sample)))) - )))) diff --git a/stdlib/source/specification/lux/abstract/mix.lux b/stdlib/source/specification/lux/abstract/mix.lux deleted file mode 100644 index 614b7439f..000000000 --- a/stdlib/source/specification/lux/abstract/mix.lux +++ /dev/null @@ -1,25 +0,0 @@ -(.require - [library - [lux (.except) - [abstract - [monad (.only do)] - [functor - [\\test (.only Injection Comparison)]]] - [math - ["[0]" random] - [number - ["n" nat]]] - [test - ["_" property (.only Test)]]]] - [\\library - ["[0]" /]]) - -(def .public (spec injection comparison (open "/#[0]")) - (All (_ f) (-> (Injection f) (Comparison f) (/.Mix f) Test)) - (do random.monad - [subject random.nat - parameter random.nat] - (<| (_.for [/.Mix]) - (_.coverage [/.mix] - (n.= (/#mix n.+ parameter (injection subject)) - (n.+ parameter subject)))))) diff --git a/stdlib/source/test/lux/abstract/enum.lux b/stdlib/source/test/lux/abstract/enum.lux index 916dc04d0..dcc6b0898 100644 --- a/stdlib/source/test/lux/abstract/enum.lux +++ b/stdlib/source/test/lux/abstract/enum.lux @@ -2,7 +2,9 @@ [library [lux (.except) [abstract - [monad (.only do)]] + [monad (.only do)] + ["[0]" order + ["[1]T" \\test]]] [control ["[0]" maybe (.use "[1]#[0]" functor)]] [data @@ -56,3 +58,25 @@ can_be_backwards? every_element_is_a_successor?))) ))))) + +(def .public (spec (open "/#[0]") random) + (All (_ of) + (-> (/.Enum of) (Random of) + Test)) + (do random.monad + [sample random] + (<| (_.for [/.Enum]) + (all _.and + (_.for [/.order] + (orderT.spec /#order random)) + + (_.coverage [/.succ /.pred] + (and (/#= (|> sample /#succ /#pred) + sample) + (/#= (|> sample /#pred /#succ) + sample) + (not (/#= (/#succ sample) + sample)) + (not (/#= (/#pred sample) + sample)))) + )))) diff --git a/stdlib/source/test/lux/abstract/mix.lux b/stdlib/source/test/lux/abstract/mix.lux index ccf941a83..de1df507c 100644 --- a/stdlib/source/test/lux/abstract/mix.lux +++ b/stdlib/source/test/lux/abstract/mix.lux @@ -2,7 +2,9 @@ [library [lux (.except) [abstract - [monad (.only do)]] + [monad (.only do)] + [functor + [\\test (.only Injection Comparison)]]] [data [collection ["[0]" list]]] @@ -25,3 +27,15 @@ (n.= (of list.mix mix (of n.addition composite) (of n.addition identity) samples) (/.with_monoid n.addition list.mix samples))) )))) + +(def .public (spec injection comparison (open "/#[0]")) + (All (_ !) + (-> (Injection !) (Comparison !) (/.Mix !) + Test)) + (do random.monad + [subject random.nat + parameter random.nat] + (<| (_.for [/.Mix]) + (_.coverage [/.mix] + (n.= (/#mix n.+ parameter (injection subject)) + (n.+ parameter subject)))))) diff --git a/stdlib/source/test/lux/abstract/monad.lux b/stdlib/source/test/lux/abstract/monad.lux index 5cf985999..1cdeab3a6 100644 --- a/stdlib/source/test/lux/abstract/monad.lux +++ b/stdlib/source/test/lux/abstract/monad.lux @@ -15,8 +15,7 @@ [test ["_" property (.only Test)]]]] [\\library - ["[0]" / (.only do) - ["[0]" free]]] + ["[0]" / (.only do)]] ["[0]" / ["[1][0]" free] ["[1][0]" indexed]]) @@ -123,10 +122,6 @@ 0) (is (Identity Nat))))) - /free.test - (_.for [free.monad] - (..spec /free.injection /free.comparison (is (/.Monad (free.Free List)) - (free.monad list.functor)))) - + (/free.test ..spec) /indexed.test )))) diff --git a/stdlib/source/test/lux/abstract/monad/free.lux b/stdlib/source/test/lux/abstract/monad/free.lux index 760acc2aa..b05075463 100644 --- a/stdlib/source/test/lux/abstract/monad/free.lux +++ b/stdlib/source/test/lux/abstract/monad/free.lux @@ -4,7 +4,7 @@ [abstract [functor (.only Functor)] [apply (.only Apply)] - ["[0]" monad (.only do)] + ["[0]" monad (.only Monad do)] ["[0]" functor ["[1]T" \\test (.only Injection Comparison)]] ["[0]" apply @@ -19,12 +19,14 @@ [\\library ["[0]" /]]) -(def .public injection +(def injection (Injection (/.Free List)) (|>> {/.#Pure})) (def (interpret free) - (All (_ a) (-> (/.Free List a) (List a))) + (All (_ of) + (-> (/.Free List of) + (List of))) (when free {/.#Pure value} (list value) @@ -34,17 +36,21 @@ (list#each interpret) list.together))) -(def .public comparison +(def comparison (Comparison (/.Free List)) (function (_ == left right) (of (list.equivalence ==) = (..interpret left) (..interpret right)))) -(def .public test - Test +(def .public (test spec) + (-> (All (_ !) + (-> (Injection !) (Comparison !) (Monad !) + Test)) + Test) (<| (_.covering /._) - (_.for [/.Free]) + (_.for [/.Free + /.#Pure /.#Impure]) (all _.and (_.for [/.functor] (functorT.spec ..injection ..comparison (is (Functor (/.Free List)) @@ -52,4 +58,7 @@ (_.for [/.apply] (applyT.spec ..injection ..comparison (is (Apply (/.Free List)) (/.apply list.functor)))) + (_.for [/.monad] + (spec ..injection ..comparison (is (/.Monad (/.Free List)) + (/.monad list.functor)))) ))) diff --git a/stdlib/source/test/lux/data.lux b/stdlib/source/test/lux/data.lux index ec160d576..789500e62 100644 --- a/stdlib/source/test/lux/data.lux +++ b/stdlib/source/test/lux/data.lux @@ -8,6 +8,7 @@ [test ["_" property (.only Test)]]]] ["[0]" / + ["[1][0]" any] ["[1][0]" binary] ["[1][0]" bit] ["[1][0]" color @@ -68,6 +69,8 @@ Test ... TODO: Inline ASAP (all _.and + /any.test + (!bundle test/0) (!bundle test/1) (!bundle test/2) diff --git a/stdlib/source/test/lux/data/any.lux b/stdlib/source/test/lux/data/any.lux new file mode 100644 index 000000000..1a8c31c44 --- /dev/null +++ b/stdlib/source/test/lux/data/any.lux @@ -0,0 +1,33 @@ +(.require + [library + [lux (.except) + [abstract + [monad (.only do)] + [\\specification + ["[0]S" equivalence] + ["[0]S" hash]]] + [math + ["[0]" random (.only Random) (.use "[1]#[0]" monad)]] + [test + ["_" property (.only Test)]]]] + [\\library + ["[0]" /]]) + +(def .public random + (Random Any) + (random#in /.any)) + +(def .public test + Test + (<| (_.covering /._) + (do [! random.monad] + []) + (all _.and + (_.for [/.equivalence] + (equivalenceS.spec /.equivalence ..random)) + (_.for [/.hash] + (hashS.spec /.hash ..random)) + + (_.coverage [/.any] + (same? [] /.any)) + ))) diff --git a/stdlib/source/test/lux/data/collection/array.lux b/stdlib/source/test/lux/data/collection/array.lux index e2e17aa03..35b85392a 100644 --- a/stdlib/source/test/lux/data/collection/array.lux +++ b/stdlib/source/test/lux/data/collection/array.lux @@ -7,7 +7,7 @@ ["[0]" functor ["[1]T" \\test (.only Injection)]] ["[0]" mix (.only Mix) - ["$[1]" \\specification]] + ["[1]T" \\test]] ["[0]" monoid ["[1]T" \\test]] [\\specification @@ -51,7 +51,7 @@ (_.for [/.functor] (functorT.spec ..injection /.equivalence /.functor)) (_.for [/.mix] - ($mix.spec ..injection /.equivalence /.mix)) + (mixT.spec ..injection /.equivalence /.mix)) ))) (def search @@ -145,7 +145,7 @@ (function (_ $ it) (!.each $ it)))) (_.for [!.mix] - ($mix.spec ..injection /.equivalence + (mixT.spec ..injection /.equivalence (is (Mix !.Array) (function (_ $ init it) (!.mix (function (_ index item output) diff --git a/stdlib/source/test/lux/data/collection/list.lux b/stdlib/source/test/lux/data/collection/list.lux index b73b76016..460565e5f 100644 --- a/stdlib/source/test/lux/data/collection/list.lux +++ b/stdlib/source/test/lux/data/collection/list.lux @@ -11,10 +11,11 @@ ["[1]T" \\test]] ["[0]" monoid ["[1]T" \\test]] + ["[0]" mix + ["[1]T" \\test]] [\\specification ["$[0]" equivalence] - ["$[0]" hash] - ["$[0]" mix]]] + ["$[0]" hash]]] [control ["[0]" pipe] ["[0]" io] @@ -61,7 +62,7 @@ (_.for [/.monoid] (monoidT.spec (/.equivalence n.equivalence) /.monoid ..random)) (_.for [/.mix] - ($mix.spec /#in /.equivalence /.mix)) + (mixT.spec /#in /.equivalence /.mix)) (_.for [/.functor] (functorT.spec /#in /.equivalence /.functor)) (_.for [/.apply] diff --git a/stdlib/source/test/lux/data/collection/sequence.lux b/stdlib/source/test/lux/data/collection/sequence.lux index ee463e2f7..80f6d06fe 100644 --- a/stdlib/source/test/lux/data/collection/sequence.lux +++ b/stdlib/source/test/lux/data/collection/sequence.lux @@ -10,9 +10,10 @@ ["[1]T" \\test]] ["[0]" monoid ["[1]T" \\test]] + ["[0]" mix + ["[1]T" \\test]] [\\specification - ["$[0]" equivalence] - ["$[0]" mix]]] + ["$[0]" equivalence]]] [control ["[0]" try (.only Try)] ["[0]" exception]] @@ -41,7 +42,7 @@ (_.for [/.monoid] (monoidT.spec (/.equivalence n.equivalence) /.monoid (random.sequence size random.nat))) (_.for [/.mix] - ($mix.spec /#in /.equivalence /.mix)) + (mixT.spec /#in /.equivalence /.mix)) (_.for [/.functor] (functorT.spec /#in /.equivalence /.functor)) (_.for [/.apply] diff --git a/stdlib/source/test/lux/data/collection/tree.lux b/stdlib/source/test/lux/data/collection/tree.lux index 66cdcfd6f..ee6d5a83d 100644 --- a/stdlib/source/test/lux/data/collection/tree.lux +++ b/stdlib/source/test/lux/data/collection/tree.lux @@ -5,9 +5,10 @@ ["[0]" monad (.only do)] ["[0]" functor ["[1]T" \\test (.only Injection Comparison)]] + ["[0]" mix + ["[1]T" \\test]] [\\specification - ["$[0]" equivalence] - ["$[0]" mix]]] + ["$[0]" equivalence]]] [control ["//" parser] ["[0]" try] @@ -209,7 +210,7 @@ (of random.monad each product.right) ($equivalence.spec (/.equivalence n.equivalence)))) (_.for [/.mix] - ($mix.spec /.leaf /.equivalence /.mix)) + (mixT.spec /.leaf /.equivalence /.mix)) (_.for [/.functor] (functorT.spec /.leaf /.equivalence /.functor)) diff --git a/stdlib/source/test/lux/math/number/int.lux b/stdlib/source/test/lux/math/number/int.lux index cd444a6e7..e8f8969c8 100644 --- a/stdlib/source/test/lux/math/number/int.lux +++ b/stdlib/source/test/lux/math/number/int.lux @@ -6,8 +6,9 @@ [\\specification ["$[0]" equivalence] ["$[0]" hash] - ["$[0]" enum] ["$[0]" interval]] + ["[0]" enum + ["[1]T" \\test]] ["[0]" codec ["[1]T" \\test]] ["[0]" order @@ -39,7 +40,7 @@ (_.for [/.order /.<] (orderT.spec /.order random.int)) (_.for [/.enum] - ($enum.spec /.enum random.int)) + (enumT.spec /.enum random.int)) (_.for [/.interval] ($interval.spec /.interval random.int)) (,, (with_template [<monoid>] diff --git a/stdlib/source/test/lux/math/number/nat.lux b/stdlib/source/test/lux/math/number/nat.lux index c56fb392b..32fca4e16 100644 --- a/stdlib/source/test/lux/math/number/nat.lux +++ b/stdlib/source/test/lux/math/number/nat.lux @@ -6,8 +6,9 @@ [\\specification ["$[0]" equivalence] ["$[0]" hash] - ["$[0]" enum] ["$[0]" interval]] + ["[0]" enum + ["[1]T" \\test]] ["[0]" codec ["[1]T" \\test]] ["[0]" order @@ -37,7 +38,7 @@ (_.for [/.order /.<] (orderT.spec /.order random.nat)) (_.for [/.enum] - ($enum.spec /.enum random.nat)) + (enumT.spec /.enum random.nat)) (_.for [/.interval] ($interval.spec /.interval random.nat)) (,, (with_template [<composite> <monoid>] diff --git a/stdlib/source/test/lux/math/number/rev.lux b/stdlib/source/test/lux/math/number/rev.lux index c570191c2..94255a012 100644 --- a/stdlib/source/test/lux/math/number/rev.lux +++ b/stdlib/source/test/lux/math/number/rev.lux @@ -6,8 +6,9 @@ [\\specification ["$[0]" equivalence] ["$[0]" hash] - ["$[0]" enum] ["$[0]" interval]] + ["[0]" enum + ["[1]T" \\test]] ["[0]" codec ["[1]T" \\test]] ["[0]" order @@ -39,7 +40,7 @@ (_.for [/.order /.<] (orderT.spec /.order random.rev)) (_.for [/.enum] - ($enum.spec /.enum random.rev)) + (enumT.spec /.enum random.rev)) (_.for [/.interval] ($interval.spec /.interval random.rev)) (,, (with_template [<composite> <monoid>] diff --git a/stdlib/source/test/lux/meta.lux b/stdlib/source/test/lux/meta.lux index 8f693d82c..129c67b98 100644 --- a/stdlib/source/test/lux/meta.lux +++ b/stdlib/source/test/lux/meta.lux @@ -38,9 +38,9 @@ ["[0]" / ["[1][0]" code] ["[1][0]" location] - ... ["[1][0]" symbol] - ... ["[1][0]" configuration] - ... ["[1][0]" version] + ["[1][0]" symbol] + ["[1][0]" configuration] + ["[1][0]" version] ["[1][0]" type] ... ["[1][0]" macro] ... ["[1][0]" static] @@ -55,7 +55,6 @@ ... "Ruby" (.,, (.these ["[1]/[0]" ruby])) ... (.,, (.these))))] ["[1][0]" compiler - ... ["[1]/[0]" version] ... ["[1]/[0]" reference] ... ["[1]/[0]" phase] ... ["[1]/[0]" meta @@ -1052,9 +1051,9 @@ /code.test /location.test - ... /symbol.test - ... /configuration.test - ... /version.test + /symbol.test + /configuration.test + /version.test /type.test ... /macro.test ... /static.test @@ -1070,7 +1069,6 @@ /global.test /compiler.test - ... /compiler/version.test ... /compiler/reference.test ... /compiler/meta/archive.test ... /compiler/meta/cli.test diff --git a/stdlib/source/test/lux/meta/compiler.lux b/stdlib/source/test/lux/meta/compiler.lux index a6589b9d5..6cc006874 100644 --- a/stdlib/source/test/lux/meta/compiler.lux +++ b/stdlib/source/test/lux/meta/compiler.lux @@ -11,8 +11,11 @@ ["[0]" /]] ["[0]" / ["[1][0]" arity] + ["[1][0]" version] ["[1][0]" language - ["[1]/[0]" lux]]]) + ["[1]/[0]" lux]] + ["[1][0]" meta + ["[1]/[0]" io]]]) (def .public test Test @@ -24,5 +27,9 @@ true) /arity.test + /version.test + /language/lux.test + + /meta/io.test ))) diff --git a/stdlib/source/test/lux/meta/compiler/meta/io.lux b/stdlib/source/test/lux/meta/compiler/meta/io.lux new file mode 100644 index 000000000..79a4bbd4d --- /dev/null +++ b/stdlib/source/test/lux/meta/compiler/meta/io.lux @@ -0,0 +1,42 @@ +(.require + [library + [lux (.except) + [abstract + [monad (.only do)]] + [data + ["[0]" text]] + [math + ["[0]" random (.only Random)] + [number + ["n" nat]]] + [world + ["[0]" file]] + [test + ["_" property (.only Test)]]]] + [\\library + ["[0]" /]]) + +(def .public test + Test + (<| (_.covering /._) + (do [! random.monad] + [/ (random.upper_cased 1) + .let [fs (file.mock /)] + module_path (random.list 3 (random.lower_cased 1)) + .let [module (text.interposed .module_separator module_path)]]) + (all _.and + (_.coverage [/.Context] + true) + (_.coverage [/.Code] + true) + (_.coverage [/.path] + (let [it (/.path fs module)] + (and (n.= (text.size module) + (text.size it)) + + (and (text.contains? .module_separator module) + (not (text.contains? / module))) + + (and (not (text.contains? .module_separator it)) + (text.contains? / it))))) + ))) diff --git a/stdlib/source/test/lux/meta/type/unit.lux b/stdlib/source/test/lux/meta/type/unit.lux index d13ba3680..0a9979c03 100644 --- a/stdlib/source/test/lux/meta/type/unit.lux +++ b/stdlib/source/test/lux/meta/type/unit.lux @@ -5,8 +5,9 @@ [monad (.only do)] [equivalence (.only Equivalence)] [\\specification - ["$[0]" equivalence] - ["$[0]" enum]] + ["$[0]" equivalence]] + ["[0]" enum + ["[1]T" \\test]] ["[0]" order ["[1]T" \\test]]] [data @@ -46,7 +47,7 @@ (_.for [/.order] (orderT.spec /.order (..meter 1,000))) (_.for [/.enum] - ($enum.spec /.enum (..meter 1,000))) + (enumT.spec /.enum (..meter 1,000))) )) (with_expansions [<descriptor> (static.random code.text diff --git a/stdlib/source/test/lux/world.lux b/stdlib/source/test/lux/world.lux index 2832e94be..cc48efe04 100644 --- a/stdlib/source/test/lux/world.lux +++ b/stdlib/source/test/lux/world.lux @@ -19,9 +19,7 @@ ["[1]/[0]" session]] ["[1]/[0]" market ["[1]/[0]" price] - ["[1]/[0]" analysis - ["[1]/[0]" accumulation_distribution] - ["[1]/[0]" pivot_point]]]] + ["[1]/[0]" analysis]]] ["[1][0]" net] ["[1][0]" time] ["[1][0]" locale] @@ -41,8 +39,7 @@ /finance/money.test /finance/trade/session.test /finance/market/price.test - /finance/market/analysis/accumulation_distribution.test - /finance/market/analysis/pivot_point.test + /finance/market/analysis.test /net.test /time.test diff --git a/stdlib/source/test/lux/world/finance/market/analysis.lux b/stdlib/source/test/lux/world/finance/market/analysis.lux new file mode 100644 index 000000000..9332a6dd6 --- /dev/null +++ b/stdlib/source/test/lux/world/finance/market/analysis.lux @@ -0,0 +1,50 @@ +(.require + [library + [lux (.except) + [abstract + [monad (.only do)]] + [math + ["[0]" random (.only Random)] + [number + ["n" nat]]] + [world + [time + ["[0]" instant (.use "[1]#[0]" equivalence)] + ["[0]" duration (.use "[1]#[0]" equivalence)] + ["[0]" series (.only) + ["[1]T" \\test]]]] + [test + ["_" property (.only Test)]]]] + [\\library + ["[0]" /]] + ["[0]" / + ["[1][0]" accumulation_distribution] + ["[1][0]" pivot_point]]) + +(def .public (spec random it) + (All (_ from to) + (-> (Random from) (/.Analysis from to) + Test)) + (do random.monad + [.let [expected_events 10] + input (seriesT.random expected_events random) + .let [output (it input)]] + (all _.and + (_.coverage [/.Analysis] + (and (instant#= (the series.#start input) + (the series.#start output)) + (duration#= (the series.#interval input) + (the series.#interval output)) + (n.= (series.size input) + (series.size output)))) + ))) + +(def .public test + Test + (<| (_.covering /._) + (do [! random.monad] + []) + (all _.and + /accumulation_distribution.test + (/pivot_point.test spec) + ))) diff --git a/stdlib/source/test/lux/world/finance/market/analysis/pivot_point.lux b/stdlib/source/test/lux/world/finance/market/analysis/pivot_point.lux index bb7cd12b3..79eb95766 100644 --- a/stdlib/source/test/lux/world/finance/market/analysis/pivot_point.lux +++ b/stdlib/source/test/lux/world/finance/market/analysis/pivot_point.lux @@ -1,6 +1,6 @@ (.require [library - [lux (.except) + [lux (.except Analysis) [abstract [monad (.only do)]] [math @@ -9,19 +9,27 @@ ["_" property (.only Test)]]]] [\\library ["[0]" / (.only) - [//// - ["[0]" money (.only) - ["[0]" currency]] - [trade - ["[0]" session (.only) - ["[1]T" \\test]]]]]]) + [// (.only Analysis) + [/// + ["[0]" money (.only) + ["[0]" currency]] + [trade + ["[0]" session (.only) + ["[1]T" \\test]]]]]]]) -(def .public test - Test +(def .public (test spec) + (-> (All (_ from to) + (-> (Random from) (Analysis from to) + Test)) + Test) (<| (_.covering /._) (do [! random.monad] [session (sessionT.random currency.usd 1000,00)]) (all _.and + (_.for [/.analysis] + (spec (sessionT.random currency.usd 1000,00) + /.analysis)) + (_.coverage [/.typical_price] (let [it (/.typical_price session)] (and (money.<= (the session.#high session) diff --git a/stdlib/source/test/lux/world/finance/trade/session.lux b/stdlib/source/test/lux/world/finance/trade/session.lux index 70dde1b44..6c8be3332 100644 --- a/stdlib/source/test/lux/world/finance/trade/session.lux +++ b/stdlib/source/test/lux/world/finance/trade/session.lux @@ -28,13 +28,13 @@ (All (_ $) (-> (Currency $) Nat (Random (/.Session $)))) - (do random.monad + (do [! random.monad] [p0 (moneyT.random $ max_sub_units) p1 (moneyT.random $ max_sub_units) p2 (moneyT.random $ max_sub_units) p3 (moneyT.random $ max_sub_units) bullish? random.bit - volume random.nat] + volume (of ! each (n.% max_sub_units) random.nat)] (when (list.sorted money.< (list p0 p1 p2 p3)) (list low bottom top high) (in [/.#open (if bullish? diff --git a/stdlib/source/test/lux/world/time.lux b/stdlib/source/test/lux/world/time.lux index 4997cb844..bc049bc44 100644 --- a/stdlib/source/test/lux/world/time.lux +++ b/stdlib/source/test/lux/world/time.lux @@ -4,8 +4,9 @@ [abstract [monad (.only do)] [\\specification - ["$[0]" equivalence] - ["$[0]" enum]] + ["$[0]" equivalence]] + ["[0]" enum + ["[1]T" \\test]] ["[0]" codec ["[1]T" \\test]] ["[0]" order @@ -45,7 +46,7 @@ (_.for [/.order] (orderT.spec /.order random.time)) (_.for [/.enum] - ($enum.spec /.enum random.time)) + (enumT.spec /.enum random.time)) (_.for [/.codec] (codecT.spec /.equivalence /.codec random.time)))) diff --git a/stdlib/source/test/lux/world/time/date.lux b/stdlib/source/test/lux/world/time/date.lux index aff778c3c..306b3e252 100644 --- a/stdlib/source/test/lux/world/time/date.lux +++ b/stdlib/source/test/lux/world/time/date.lux @@ -4,8 +4,9 @@ [abstract [monad (.only do)] [\\specification - ["$[0]" equivalence] - ["$[0]" enum]] + ["$[0]" equivalence]] + ["[0]" enum + ["[1]T" \\test]] ["[0]" codec ["[1]T" \\test]] ["[0]" order @@ -37,7 +38,7 @@ (_.for [/.order] (orderT.spec /.order random.date)) (_.for [/.enum] - ($enum.spec /.enum random.date)) + (enumT.spec /.enum random.date)) (_.for [/.codec] (codecT.spec /.equivalence /.codec random.date)) diff --git a/stdlib/source/test/lux/world/time/day.lux b/stdlib/source/test/lux/world/time/day.lux index 46b3c7785..d0ac6f1d6 100644 --- a/stdlib/source/test/lux/world/time/day.lux +++ b/stdlib/source/test/lux/world/time/day.lux @@ -5,8 +5,9 @@ [monad (.only do)] [\\specification ["$[0]" equivalence] - ["$[0]" hash] - ["$[0]" enum]] + ["$[0]" hash]] + ["[0]" enum + ["[1]T" \\test]] ["[0]" codec ["[1]T" \\test]] ["[0]" order @@ -56,7 +57,7 @@ (_.for [/.order] (orderT.spec /.order ..random)) (_.for [/.enum] - ($enum.spec /.enum ..random)) + (enumT.spec /.enum ..random)) (_.for [/.codec] (codecT.spec /.equivalence /.codec ..random)) diff --git a/stdlib/source/test/lux/world/time/duration.lux b/stdlib/source/test/lux/world/time/duration.lux index f0e17332f..7900331b8 100644 --- a/stdlib/source/test/lux/world/time/duration.lux +++ b/stdlib/source/test/lux/world/time/duration.lux @@ -4,8 +4,9 @@ [abstract [monad (.only do)] [\\specification - ["$[0]" equivalence] - ["$[0]" enum]] + ["$[0]" equivalence]] + ["[0]" enum + ["[1]T" \\test]] ["[0]" codec ["[1]T" \\test]] ["[0]" order @@ -34,7 +35,7 @@ (_.for [/.order] (orderT.spec /.order random.duration)) (_.for [/.enum] - ($enum.spec /.enum random.duration)) + (enumT.spec /.enum random.duration)) (_.for [/.monoid] (monoidT.spec /.equivalence /.monoid random.duration)) (_.for [/.codec] diff --git a/stdlib/source/test/lux/world/time/instant.lux b/stdlib/source/test/lux/world/time/instant.lux index eebdd4fa0..03abc29c7 100644 --- a/stdlib/source/test/lux/world/time/instant.lux +++ b/stdlib/source/test/lux/world/time/instant.lux @@ -5,8 +5,9 @@ [monad (.only do)] [\\specification ["$[0]" equivalence] - ["$[0]" hash] - ["$[0]" enum]] + ["$[0]" hash]] + ["[0]" enum + ["[1]T" \\test]] ["[0]" codec ["[1]T" \\test]] ["[0]" order @@ -42,7 +43,7 @@ (_.for [/.order] (orderT.spec /.order random.instant)) (_.for [/.enum] - ($enum.spec /.enum random.instant)) + (enumT.spec /.enum random.instant)) (_.for [/.codec] (codecT.spec /.equivalence /.codec random.instant)) diff --git a/stdlib/source/test/lux/world/time/month.lux b/stdlib/source/test/lux/world/time/month.lux index 20d2d070e..9d1f05ab6 100644 --- a/stdlib/source/test/lux/world/time/month.lux +++ b/stdlib/source/test/lux/world/time/month.lux @@ -5,8 +5,9 @@ [monad (.only do)] [\\specification ["$[0]" equivalence] - ["$[0]" hash] - ["$[0]" enum]] + ["$[0]" hash]] + ["[0]" enum + ["[1]T" \\test]] ["[0]" codec ["[1]T" \\test]] ["[0]" order @@ -50,7 +51,7 @@ (_.for [/.order] (orderT.spec /.order ..random)) (_.for [/.enum] - ($enum.spec /.enum ..random)) + (enumT.spec /.enum ..random)) (_.for [/.codec] (codecT.spec /.equivalence /.codec ..random)) diff --git a/stdlib/source/test/lux/world/time/series.lux b/stdlib/source/test/lux/world/time/series.lux index ef42a994e..a43c1b682 100644 --- a/stdlib/source/test/lux/world/time/series.lux +++ b/stdlib/source/test/lux/world/time/series.lux @@ -5,9 +5,10 @@ [monad (.only do)] ["[0]" functor ["[1]T" \\test (.only Injection)]] + ["[0]" mix + ["[1]T" \\test]] [\\specification - ["[0]S" equivalence] - ["[0]S" mix]]] + ["[0]S" equivalence]]] [control ["|" pipe] ["[0]" try (.use "[1]#[0]" functor)] @@ -78,7 +79,7 @@ (_.for [/.equivalence] (equivalenceS.spec (/.equivalence n.equivalence) (..random expected_size random.nat))) (_.for [/.mix] - (mixS.spec (..injection expected_start expected_interval) /.equivalence /.mix)) + (mixT.spec (..injection expected_start expected_interval) /.equivalence /.mix)) (_.for [/.functor] (functorT.spec (..injection expected_start expected_interval) /.equivalence /.functor)) |