From 91a1f21f3c75750217d272554bc8a341f075f82d Mon Sep 17 00:00:00 2001 From: Eduardo Julian Date: Tue, 15 Nov 2022 20:07:38 -0400 Subject: Now documenting dependers and dependees. --- stdlib/source/test/lux.lux | 3 +- stdlib/source/test/lux/control/maybe.lux | 3 +- stdlib/source/test/lux/data.lux | 5 +- stdlib/source/test/lux/data/collection/list.lux | 3 +- stdlib/source/test/lux/data/color.lux | 25 ++- stdlib/source/test/lux/data/color/rgb.lux | 128 ++++++++++++++ .../language/lux/phase/synthesis/primitive.lux | 4 +- .../lux/meta/compiler/meta/archive/registry.lux | 10 +- stdlib/source/test/lux/meta/extension.lux | 124 ++++++------- stdlib/source/test/lux/meta/type.lux | 4 +- stdlib/source/test/lux/meta/type/linear.lux | 194 +++++++++++++++++++++ stdlib/source/test/lux/meta/type/resource.lux | 194 --------------------- 12 files changed, 417 insertions(+), 280 deletions(-) create mode 100644 stdlib/source/test/lux/data/color/rgb.lux create mode 100644 stdlib/source/test/lux/meta/type/linear.lux delete mode 100644 stdlib/source/test/lux/meta/type/resource.lux (limited to 'stdlib/source/test') diff --git a/stdlib/source/test/lux.lux b/stdlib/source/test/lux.lux index 916f1dbc2..29e2725cf 100644 --- a/stdlib/source/test/lux.lux +++ b/stdlib/source/test/lux.lux @@ -895,7 +895,8 @@ item/1 random.nat item/2 random.nat] (all _.and - (_.coverage [/.Either] + (_.coverage [/.Either + /.#Left /.#Right] (and (exec (is (/.Either Nat Text) {.#Left left}) diff --git a/stdlib/source/test/lux/control/maybe.lux b/stdlib/source/test/lux/control/maybe.lux index d99622737..7ff61a642 100644 --- a/stdlib/source/test/lux/control/maybe.lux +++ b/stdlib/source/test/lux/control/maybe.lux @@ -29,7 +29,8 @@ (def .public test Test (<| (_.covering /._) - (_.for [.Maybe]) + (_.for [.Maybe + .#None .#Some]) (all _.and (_.for [/.equivalence] ($equivalence.spec (/.equivalence n.equivalence) (random.maybe random.nat))) diff --git a/stdlib/source/test/lux/data.lux b/stdlib/source/test/lux/data.lux index b242a4582..74432550a 100644 --- a/stdlib/source/test/lux/data.lux +++ b/stdlib/source/test/lux/data.lux @@ -10,8 +10,7 @@ ["[0]" / ["[1][0]" binary] ["[1][0]" bit] - ["[1][0]" color (.only) - ["[1]/[0]" named]] + ["[1][0]" color] ["[1][0]" identity] ["[1][0]" product] ["[1][0]" sum] @@ -44,7 +43,7 @@ /binary.test /bit.test /color.test - /color/named.test)) + )) (def test/1 Test diff --git a/stdlib/source/test/lux/data/collection/list.lux b/stdlib/source/test/lux/data/collection/list.lux index f32a5c3d5..3b079d53d 100644 --- a/stdlib/source/test/lux/data/collection/list.lux +++ b/stdlib/source/test/lux/data/collection/list.lux @@ -415,7 +415,8 @@ (def .public test Test (<| (_.covering /._) - (_.for [.List]) + (_.for [.List + .#End .#Item]) (let [(open "/#[0]") (/.equivalence n.equivalence) (open "/#[0]") /.functor] (do [! random.monad] diff --git a/stdlib/source/test/lux/data/color.lux b/stdlib/source/test/lux/data/color.lux index e098211cb..c56352d3d 100644 --- a/stdlib/source/test/lux/data/color.lux +++ b/stdlib/source/test/lux/data/color.lux @@ -11,7 +11,7 @@ [collection ["[0]" list]]] [math - ["[0]" random (.only Random)] + ["[0]" random (.only Random) (.use "[1]#[0]" functor)] [number ["n" nat] ["f" frac] @@ -20,12 +20,15 @@ [test ["_" property (.only Test)]]]] [\\library - ["[0]" /]]) + ["[0]" / (.only) + ["[0]" rgb]]] + ["[0]" / + ["[1][0]" rgb] + ["[1][0]" named]]) (def .public random (Random /.Color) - (|> (all random.and random.nat random.nat random.nat) - (at random.monad each /.of_rgb))) + (random#each /.of_rgb /rgb.random)) (def scale (-> Nat Frac) @@ -51,11 +54,12 @@ [tr tg tb] (/.rgb to)] (square_root (all f.+ - (|> (scale tr) (f.- (scale fr)) square) - (|> (scale tg) (f.- (scale fg)) square) - (|> (scale tb) (f.- (scale fb)) square))))) + (|> (scale (rgb.number tr)) (f.- (scale (rgb.number fr))) square) + (|> (scale (rgb.number tg)) (f.- (scale (rgb.number fg))) square) + (|> (scale (rgb.number tb)) (f.- (scale (rgb.number fb))) square))))) -(def rgb_error_margin +1.8) +(def rgb_error_margin + +1.8) (with_template [] [(def ( color) @@ -70,7 +74,7 @@ (def (encoding expected) (-> /.Color Test) (all _.and - (_.coverage [/.RGB /.rgb /.of_rgb] + (_.coverage [/.rgb /.of_rgb] (|> expected /.rgb /.of_rgb (at /.equivalence = expected))) (_.coverage [/.HSL /.hsl /.of_hsl] @@ -210,4 +214,7 @@ (_.coverage [/.translucent] (r.= /.transparent (r.+ /.translucent /.translucent))) )) + + /rgb.test + /named.test )))) diff --git a/stdlib/source/test/lux/data/color/rgb.lux b/stdlib/source/test/lux/data/color/rgb.lux new file mode 100644 index 000000000..5781c9efa --- /dev/null +++ b/stdlib/source/test/lux/data/color/rgb.lux @@ -0,0 +1,128 @@ +(.require + [library + [lux (.except) + [abstract + [monad (.only do)] + [\\specification + ["[0]S" equivalence] + ["[0]S" hash] + ["[0]S" monoid]]] + [control + ["[0]" try (.use "[1]#[0]" functor)] + ["[0]" exception]] + [math + ["[0]" random (.only Random) (.use "[1]#[0]" functor)] + [number + ["n" nat]]] + [test + ["_" property (.only Test)]]]] + [\\library + ["[0]" /]]) + +(def .public value + (Random /.Value) + (random.one (|>> (n.% /.limit) + /.value + try.maybe) + random.nat)) + +(def .public random + (Random /.RGB) + (do random.monad + [red ..value + green ..value + blue ..value] + (in [/.#red red + /.#green green + /.#blue blue]))) + +(def .public test + Test + (<| (_.covering /._) + (do [! random.monad] + [expected_value ..value + expected ..random]) + (all _.and + (_.for [/.Value] + (all _.and + (_.coverage [/.number /.value] + (|> expected_value + /.number + /.value + (try#each (|>> /.number + (n.= (/.number expected_value)))) + (try.else false))) + (_.coverage [/.limit] + (and (when (/.value /.limit) + {try.#Failure _} true + {try.#Success _} false) + (when (/.value (-- /.limit)) + {try.#Failure _} false + {try.#Success _} true))) + (_.coverage [/.least] + (when (/.value (++ (/.number /.least))) + {try.#Failure _} false + {try.#Success _} true)) + (_.coverage [/.most] + (when (/.value (-- (/.number /.most))) + {try.#Failure _} false + {try.#Success _} true)) + (_.coverage [/.invalid] + (and (when (/.value (-- (/.number /.least))) + {try.#Failure it} (exception.match? /.invalid it) + {try.#Success _} false) + (when (/.value (++ (/.number /.most))) + {try.#Failure it} (exception.match? /.invalid it) + {try.#Success _} false))) + )) + (_.for [/.RGB] + (all _.and + (_.for [/.equivalence] + (equivalenceS.spec /.equivalence ..random)) + (_.for [/.hash] + (hashS.spec /.hash ..random)) + (_.for [/.addition] + (monoidS.spec /.equivalence /.addition ..random)) + (_.for [/.subtraction] + (monoidS.spec /.equivalence /.subtraction ..random)) + + (_.coverage [/.rgb] + (`` (and (let [red (/.number expected_value) + green (/.number expected_value) + blue (/.number expected_value)] + (when (/.rgb red green blue) + {try.#Failure _} + false + + {try.#Success it} + (and (n.= (/.number expected_value) + (/.number (the /.#red it))) + (n.= (/.number expected_value) + (/.number (the /.#green it))) + (n.= (/.number expected_value) + (/.number (the /.#blue it)))))) + (,, (with_template [ ] + [(let [red (n.+ (/.number expected_value)) + green (n.+ (/.number expected_value)) + blue (n.+ (/.number expected_value))] + (when (/.rgb red green blue) + {try.#Failure it} + (exception.match? /.invalid it) + + {try.#Success _} + false))] + + [/.limit 0 0] + [0 /.limit 0] + [0 0 /.limit] + ))))) + (_.coverage [/.complement] + (let [~expected (/.complement expected) + (open "/#[0]") /.equivalence] + (and (not (/#= expected ~expected)) + (/#= expected (/.complement ~expected))))) + (_.coverage [/.black /.white] + (and (at /.equivalence = /.white (/.complement /.black)) + (at /.equivalence = /.black (/.complement /.white)))) + )) + ))) diff --git a/stdlib/source/test/lux/meta/compiler/language/lux/phase/synthesis/primitive.lux b/stdlib/source/test/lux/meta/compiler/language/lux/phase/synthesis/primitive.lux index a12f284a3..ca7bb0c3b 100644 --- a/stdlib/source/test/lux/meta/compiler/language/lux/phase/synthesis/primitive.lux +++ b/stdlib/source/test/lux/meta/compiler/language/lux/phase/synthesis/primitive.lux @@ -77,9 +77,9 @@ Test (<| (_.context (%.symbol (symbol ////synthesis.#Primitive))) (`` (all _.and - (,, (with_template [ ] + (,, (with_template [ ] [(do r.monad - [expected ] + [expected ] (_.test (%.symbol (symbol )) (|> {////analysis.#Primitive { expected}} (//.phase archive.empty) diff --git a/stdlib/source/test/lux/meta/compiler/meta/archive/registry.lux b/stdlib/source/test/lux/meta/compiler/meta/archive/registry.lux index 2097736ad..57ce1b585 100644 --- a/stdlib/source/test/lux/meta/compiler/meta/archive/registry.lux +++ b/stdlib/source/test/lux/meta/compiler/meta/archive/registry.lux @@ -114,8 +114,8 @@ [/.definition (is category.Definition [expected_name {.#None}]) /.definitions category.#Definition /.analyser expected_name] [/.analyser expected_name /.analysers category.#Analyser /.synthesizer expected_name] - [/.synthesizer expected_name /.synthesizers category.#Synthesizer /.generator expected_name] - [/.generator expected_name /.generators category.#Generator /.declaration expected_name] + [/.synthesizer expected_name /.synthesizers category.#Synthesizer /.translator expected_name] + [/.translator expected_name /.translators category.#Translator /.declaration expected_name] [/.declaration expected_name /.declarations category.#Declaration /.custom expected_name] [/.custom expected_name /.customs category.#Custom /.definition (is category.Definition [expected_name {.#None}])] )) @@ -130,7 +130,7 @@ [/.definition (is category.Definition [expected_name {.#None}]) product.left] [/.analyser expected_name |>] [/.synthesizer expected_name |>] - [/.generator expected_name |>] + [/.translator expected_name |>] [/.declaration expected_name |>] [/.custom expected_name |>] )))) @@ -155,7 +155,7 @@ [it {.#None}]))] [/.analyser /.analysers text.equivalence (|>>)] [/.synthesizer /.synthesizers text.equivalence (|>>)] - [/.generator /.generators text.equivalence (|>>)] + [/.translator /.translators text.equivalence (|>>)] [/.declaration /.declarations text.equivalence (|>>)] [/.custom /.customs text.equivalence (|>>)] )))) @@ -174,7 +174,7 @@ [/.definition (is category.Definition [expected_name {.#None}]) product.left] [/.analyser expected_name |>] [/.synthesizer expected_name |>] - [/.generator expected_name |>] + [/.translator expected_name |>] [/.declaration expected_name |>] [/.custom expected_name |>] )))) diff --git a/stdlib/source/test/lux/meta/extension.lux b/stdlib/source/test/lux/meta/extension.lux index e27b0282f..1302a74fc 100644 --- a/stdlib/source/test/lux/meta/extension.lux +++ b/stdlib/source/test/lux/meta/extension.lux @@ -45,7 +45,7 @@ ["[0]" unit]]] [language [lux - ["[0]" generation] + ["[0]" translation] ["[0]" declaration] ["[0]" analysis (.only) ["[0]" type] @@ -53,16 +53,16 @@ ["[0]" synthesis (.only) ["<[1]>" \\parser]] [phase - [generation + [translation (.,, (.for "JVM" (.,, (.these ["[0]" jvm ["[1]/[0]" runtime]])) (.,, (.these))))]]]]]] [test ["_" property (.only Test)]]]] [\\library - ["[0]" / (.only analysis synthesis generation declaration)]]))) + ["[0]" / (.only analysis synthesis translation declaration)]]))) -... Generation +... Translation (for @.old (these) @@ -97,57 +97,57 @@ [location.dummy] (is analysis.Analysis))))))) - ... Generation - (def my_generation|generation - Generation - (generation (_ phase archive [pass_through .any]) - (phase archive pass_through))) + ... Translation + (def my_translation|translation + Translation + (translation (_ phase archive [pass_through .any]) + (phase archive pass_through))) - (def my_generation|synthesis + (def my_translation|synthesis Synthesis (synthesis (_ phase archive [parameters (<>.some .any)]) (let [! phase.monad] (|> parameters (monad.each ! (phase archive)) - (at ! each (|>> {synthesis.#Extension (symbol ..my_generation|generation)} + (at ! each (|>> {synthesis.#Extension (symbol ..my_translation|translation)} [location.dummy] (is synthesis.Synthesis))))))) - (def my_generation + (def my_translation Analysis (analysis (_ phase archive [parameters (<>.some .any)]) (let [! phase.monad] (|> parameters (monad.each ! (phase archive)) (at ! each (|>> (is (List analysis.Analysis)) - {analysis.#Extension (symbol ..my_generation|synthesis)} + {analysis.#Extension (symbol ..my_translation|synthesis)} [location.dummy] (is analysis.Analysis))))))) - (def dummy_generation|generation - Generation - (generation (_ phase archive []) - (let [[_ self] (symbol ..dummy_generation)] - (at phase.monad in - (for @.jvm (jvm.string self) - @.js (js.string self) - @.python (python.unicode self) - @.lua (lua.string self) - @.ruby (ruby.string self) - @.php (php.string self) - @.scheme (scheme.string self)))))) - - (def dummy_generation|synthesis + (def dummy_translation|translation + Translation + (translation (_ phase archive []) + (let [[_ self] (symbol ..dummy_translation)] + (at phase.monad in + (for @.jvm (jvm.string self) + @.js (js.string self) + @.python (python.unicode self) + @.lua (lua.string self) + @.ruby (ruby.string self) + @.php (php.string self) + @.scheme (scheme.string self)))))) + + (def dummy_translation|synthesis Synthesis (synthesis (_ phase archive []) (at phase.monad in (is synthesis.Synthesis - [location.dummy {synthesis.#Extension (symbol ..dummy_generation|generation) (list)}])))) + [location.dummy {synthesis.#Extension (symbol ..dummy_translation|translation) (list)}])))) - (def dummy_generation + (def dummy_translation Analysis (analysis (_ phase archive []) (at phase.monad in (is analysis.Analysis - [location.dummy {analysis.#Extension (symbol ..dummy_generation|synthesis) (list)}])))) + [location.dummy {analysis.#Extension (symbol ..dummy_translation|synthesis) (list)}])))) ... Declaration (def my_declaration @@ -166,37 +166,37 @@ expressionS (declaration.lifted_synthesis (synthesis_phase lux archive expressionA)) - generation_phase declaration.generation - expressionG (declaration.lifted_generation - (generation_phase lux archive expressionS)) + translation_phase declaration.translation + expressionG (declaration.lifted_translation + (translation_phase lux archive expressionS)) - _ (declaration.lifted_generation - (generation.with_new_context archive unit.none + _ (declaration.lifted_translation + (translation.with_new_context archive unit.none (do ! - [[module_id artifact_id] (generation.context archive) + [[module_id artifact_id] (translation.context archive) .let [commentary (format "Successfully installed declaration " (%.text self) "!")] - _ (generation.save! artifact_id {.#None} - (for @.jvm (let [$class (jvm/runtime.class_name [module_id artifact_id])] - (<| [$class] - (try.else (binary.empty 0)) - (try#each (binaryF.result class.format)) - (class.class version.v6_0 class.public - (name.internal $class) - {.#None} - (name.internal "java.lang.Object") - (list) - (list) - (list) - (list)))) - @.js (js.comment commentary - (js.statement (js.string commentary))) - @.python (python.comment commentary - (python.statement (python.string commentary))) - @.lua (lua.comment commentary - (lua.statement expressionG)) - @.ruby (ruby.comment commentary - (ruby.statement (ruby.string commentary)))))] - (generation.log! commentary))))] + _ (translation.save! artifact_id {.#None} + (for @.jvm (let [$class (jvm/runtime.class_name [module_id artifact_id])] + (<| [$class] + (try.else (binary.empty 0)) + (try#each (binaryF.result class.format)) + (class.class version.v6_0 class.public + (name.internal $class) + {.#None} + (name.internal "java.lang.Object") + (list) + (list) + (list) + (list)))) + @.js (js.comment commentary + (js.statement (js.string commentary))) + @.python (python.comment commentary + (python.statement (python.string commentary))) + @.lua (lua.comment commentary + (lua.statement expressionG)) + @.ruby (ruby.comment commentary + (ruby.statement (ruby.string commentary)))))] + (translation.log! commentary))))] (in declaration.no_requirements)))) (..my_declaration (n.* 2 3)) @@ -216,13 +216,13 @@ [/.analysis ..my_analysis] [/.synthesis ..my_synthesis])) - (_.coverage [/.generation] + (_.coverage [/.translation] (for @.old false (and (n.= expected - (..my_generation expected)) - (let [[_ expected] (symbol ..dummy_generation)] + (..my_translation expected)) + (let [[_ expected] (symbol ..dummy_translation)] (text#= expected - (..dummy_generation)))))) + (..dummy_translation)))))) (_.coverage [/.declaration] true) ))))) diff --git a/stdlib/source/test/lux/meta/type.lux b/stdlib/source/test/lux/meta/type.lux index 488bdabc0..50cccc419 100644 --- a/stdlib/source/test/lux/meta/type.lux +++ b/stdlib/source/test/lux/meta/type.lux @@ -39,7 +39,7 @@ ["[1][0]" implicit] ["[1][0]" quotient] ["[1][0]" refinement] - ["[1][0]" resource] + ["[1][0]" linear] ["[1][0]" unit] ["[1][0]" variance] ["[1][0]" poly] @@ -569,7 +569,7 @@ /implicit.test /quotient.test /refinement.test - /resource.test + /linear.test /unit.test /variance.test /poly.test diff --git a/stdlib/source/test/lux/meta/type/linear.lux b/stdlib/source/test/lux/meta/type/linear.lux new file mode 100644 index 000000000..4b134ebbe --- /dev/null +++ b/stdlib/source/test/lux/meta/type/linear.lux @@ -0,0 +1,194 @@ +(.require + [library + [lux (.except) + [abstract + ["[0]" monad (.only) + [indexed (.only do)]]] + [control + ["[0]" io (.only IO)] + ["[0]" try] + ["[0]" exception (.only Exception)] + [concurrency + ["[0]" async (.only Async)]]] + [data + ["[0]" identity (.only Identity)] + ["[0]" text (.use "[1]#[0]" equivalence) + ["%" \\format (.only format)]]] + [math + ["[0]" random]] + ["[0]" meta (.only) + ["[0]" code (.only) + ["<[1]>" \\parser]] + [macro + [syntax (.only syntax)] + ["[0]" expansion]]] + [test + ["[0]" unit] + ["_" property (.only Test)]]]] + [\\library + ["[0]" / (.only Res)]]) + +(def pure + Test + (monad.do [! random.monad] + [pre (at ! each %.nat random.nat) + post (at ! each %.nat random.nat) + .let [! identity.monad]] + (_.for [/.Linear /.run! /.monad] + (`` (all _.and + (,, (with_template [ ] + [(_.coverage + (<| (text#= (format pre post)) + (is (Identity Text)) + (/.run! !) + (do (/.monad !) + + (in (format left right)))))] + + [[/.Affine /.Key /.Res /.Ordered /.ordered + /.Relevant /.read] + [res|left (/.ordered ! pre) + res|right (/.ordered ! post) + right (/.read ! res|right) + left (/.read ! res|left)]] + [[/.Commutative /.commutative /.exchange] + [res|left (/.commutative ! pre) + res|right (/.commutative ! post) + _ ((/.exchange [1 0]) !) + left (/.read ! res|left) + right (/.read ! res|right)]] + [[/.group /.un_group] + [res|left (/.commutative ! pre) + res|right (/.commutative ! post) + _ ((/.group 2) !) + _ ((/.un_group 2) !) + right (/.read ! res|right) + left (/.read ! res|left)]] + [[/.lifted] + [left (/.lifted ! pre) + right (/.lifted ! post)]] + )) + ))))) + +(def sync + Test + (monad.do [! random.monad] + [pre (at ! each %.nat random.nat) + post (at ! each %.nat random.nat) + .let [! io.monad]] + (_.for [/.Linear /.run! /.monad] + (`` (all _.and + (,, (with_template [ ] + [(_.coverage + (<| (text#= (format pre post)) + io.run! + (is (IO Text)) + (/.run! !) + (do (/.monad !) + + (in (format left right)))))] + + [[/.Affine /.Key /.Res /.Ordered /.ordered + /.Relevant /.read] + [res|left (/.ordered ! pre) + res|right (/.ordered ! post) + right (/.read ! res|right) + left (/.read ! res|left)]] + [[/.Commutative /.commutative /.exchange] + [res|left (/.commutative ! pre) + res|right (/.commutative ! post) + _ ((/.exchange [1 0]) !) + left (/.read ! res|left) + right (/.read ! res|right)]] + [[/.group /.un_group] + [res|left (/.commutative ! pre) + res|right (/.commutative ! post) + _ ((/.group 2) !) + _ ((/.un_group 2) !) + right (/.read ! res|right) + left (/.read ! res|left)]] + [[/.lifted] + [left (/.lifted ! (io.io pre)) + right (/.lifted ! (io.io post))]] + )) + ))))) + +(def async + Test + (monad.do [! random.monad] + [pre (at ! each %.nat random.nat) + post (at ! each %.nat random.nat) + .let [! async.monad]] + (_.for [/.Linear /.run! /.monad] + (`` (all _.and + (,, (with_template [ ] + [(in (monad.do ! + [outcome (<| (is (Async Text)) + (/.run! !) + (do (/.monad !) + + (in (format left right))))] + (unit.coverage + (text#= (format pre post) + outcome))))] + + [[/.Affine /.Key /.Res /.Ordered /.ordered + /.Relevant /.read] + [res|left (/.ordered ! pre) + res|right (/.ordered ! post) + right (/.read ! res|right) + left (/.read ! res|left)]] + [[/.Commutative /.commutative /.exchange] + [res|left (/.commutative ! pre) + res|right (/.commutative ! post) + _ ((/.exchange [1 0]) !) + left (/.read ! res|left) + right (/.read ! res|right)]] + [[/.group /.un_group] + [res|left (/.commutative ! pre) + res|right (/.commutative ! post) + _ ((/.group 2) !) + _ ((/.un_group 2) !) + right (/.read ! res|right) + left (/.read ! res|left)]] + [[/.lifted] + [left (/.lifted ! (async.resolved pre)) + right (/.lifted ! (async.resolved post))]] + )) + ))))) + +(def with_error + (syntax (_ [exception .symbol + to_expand .any]) + (monad.do meta.monad + [[_ exception] (meta.export exception)] + (function (_ compiler) + {.#Right [compiler + (list (code.bit (when ((expansion.single to_expand) compiler) + {try.#Success _} + false + + {try.#Failure error} + true)))]})))) + +(def .public test + Test + (<| (_.covering /._) + (_.for [/.Procedure]) + (all _.and + ..pure + ..sync + ..async + + (_.coverage [/.amount_cannot_be_zero] + (`` (and (,, (with_template [] + [(with_error /.amount_cannot_be_zero + ( 0))] + + [/.group] + [/.un_group] + ))))) + (_.coverage [/.index_cannot_be_repeated] + (with_error /.index_cannot_be_repeated + (/.exchange [0 0]))) + ))) diff --git a/stdlib/source/test/lux/meta/type/resource.lux b/stdlib/source/test/lux/meta/type/resource.lux deleted file mode 100644 index 4b134ebbe..000000000 --- a/stdlib/source/test/lux/meta/type/resource.lux +++ /dev/null @@ -1,194 +0,0 @@ -(.require - [library - [lux (.except) - [abstract - ["[0]" monad (.only) - [indexed (.only do)]]] - [control - ["[0]" io (.only IO)] - ["[0]" try] - ["[0]" exception (.only Exception)] - [concurrency - ["[0]" async (.only Async)]]] - [data - ["[0]" identity (.only Identity)] - ["[0]" text (.use "[1]#[0]" equivalence) - ["%" \\format (.only format)]]] - [math - ["[0]" random]] - ["[0]" meta (.only) - ["[0]" code (.only) - ["<[1]>" \\parser]] - [macro - [syntax (.only syntax)] - ["[0]" expansion]]] - [test - ["[0]" unit] - ["_" property (.only Test)]]]] - [\\library - ["[0]" / (.only Res)]]) - -(def pure - Test - (monad.do [! random.monad] - [pre (at ! each %.nat random.nat) - post (at ! each %.nat random.nat) - .let [! identity.monad]] - (_.for [/.Linear /.run! /.monad] - (`` (all _.and - (,, (with_template [ ] - [(_.coverage - (<| (text#= (format pre post)) - (is (Identity Text)) - (/.run! !) - (do (/.monad !) - - (in (format left right)))))] - - [[/.Affine /.Key /.Res /.Ordered /.ordered - /.Relevant /.read] - [res|left (/.ordered ! pre) - res|right (/.ordered ! post) - right (/.read ! res|right) - left (/.read ! res|left)]] - [[/.Commutative /.commutative /.exchange] - [res|left (/.commutative ! pre) - res|right (/.commutative ! post) - _ ((/.exchange [1 0]) !) - left (/.read ! res|left) - right (/.read ! res|right)]] - [[/.group /.un_group] - [res|left (/.commutative ! pre) - res|right (/.commutative ! post) - _ ((/.group 2) !) - _ ((/.un_group 2) !) - right (/.read ! res|right) - left (/.read ! res|left)]] - [[/.lifted] - [left (/.lifted ! pre) - right (/.lifted ! post)]] - )) - ))))) - -(def sync - Test - (monad.do [! random.monad] - [pre (at ! each %.nat random.nat) - post (at ! each %.nat random.nat) - .let [! io.monad]] - (_.for [/.Linear /.run! /.monad] - (`` (all _.and - (,, (with_template [ ] - [(_.coverage - (<| (text#= (format pre post)) - io.run! - (is (IO Text)) - (/.run! !) - (do (/.monad !) - - (in (format left right)))))] - - [[/.Affine /.Key /.Res /.Ordered /.ordered - /.Relevant /.read] - [res|left (/.ordered ! pre) - res|right (/.ordered ! post) - right (/.read ! res|right) - left (/.read ! res|left)]] - [[/.Commutative /.commutative /.exchange] - [res|left (/.commutative ! pre) - res|right (/.commutative ! post) - _ ((/.exchange [1 0]) !) - left (/.read ! res|left) - right (/.read ! res|right)]] - [[/.group /.un_group] - [res|left (/.commutative ! pre) - res|right (/.commutative ! post) - _ ((/.group 2) !) - _ ((/.un_group 2) !) - right (/.read ! res|right) - left (/.read ! res|left)]] - [[/.lifted] - [left (/.lifted ! (io.io pre)) - right (/.lifted ! (io.io post))]] - )) - ))))) - -(def async - Test - (monad.do [! random.monad] - [pre (at ! each %.nat random.nat) - post (at ! each %.nat random.nat) - .let [! async.monad]] - (_.for [/.Linear /.run! /.monad] - (`` (all _.and - (,, (with_template [ ] - [(in (monad.do ! - [outcome (<| (is (Async Text)) - (/.run! !) - (do (/.monad !) - - (in (format left right))))] - (unit.coverage - (text#= (format pre post) - outcome))))] - - [[/.Affine /.Key /.Res /.Ordered /.ordered - /.Relevant /.read] - [res|left (/.ordered ! pre) - res|right (/.ordered ! post) - right (/.read ! res|right) - left (/.read ! res|left)]] - [[/.Commutative /.commutative /.exchange] - [res|left (/.commutative ! pre) - res|right (/.commutative ! post) - _ ((/.exchange [1 0]) !) - left (/.read ! res|left) - right (/.read ! res|right)]] - [[/.group /.un_group] - [res|left (/.commutative ! pre) - res|right (/.commutative ! post) - _ ((/.group 2) !) - _ ((/.un_group 2) !) - right (/.read ! res|right) - left (/.read ! res|left)]] - [[/.lifted] - [left (/.lifted ! (async.resolved pre)) - right (/.lifted ! (async.resolved post))]] - )) - ))))) - -(def with_error - (syntax (_ [exception .symbol - to_expand .any]) - (monad.do meta.monad - [[_ exception] (meta.export exception)] - (function (_ compiler) - {.#Right [compiler - (list (code.bit (when ((expansion.single to_expand) compiler) - {try.#Success _} - false - - {try.#Failure error} - true)))]})))) - -(def .public test - Test - (<| (_.covering /._) - (_.for [/.Procedure]) - (all _.and - ..pure - ..sync - ..async - - (_.coverage [/.amount_cannot_be_zero] - (`` (and (,, (with_template [] - [(with_error /.amount_cannot_be_zero - ( 0))] - - [/.group] - [/.un_group] - ))))) - (_.coverage [/.index_cannot_be_repeated] - (with_error /.index_cannot_be_repeated - (/.exchange [0 0]))) - ))) -- cgit v1.2.3