diff options
Diffstat (limited to '')
30 files changed, 227 insertions, 159 deletions
diff --git a/stdlib/source/library/lux/data/collection/list.lux b/stdlib/source/library/lux/data/collection/list.lux index 77e5529b1..cddf68036 100644 --- a/stdlib/source/library/lux/data/collection/list.lux +++ b/stdlib/source/library/lux/data/collection/list.lux @@ -143,7 +143,7 @@ <else>)))] [while {.#Item x (while predicate xs')} {.#End}] - [until (until predicate xs') xs] + [until xs (until predicate xs')] ) (def .public (split_at n xs) diff --git a/stdlib/source/library/lux/world/file.lux b/stdlib/source/library/lux/world/file.lux index 1e2bdd90d..11adc36a7 100644 --- a/stdlib/source/library/lux/world/file.lux +++ b/stdlib/source/library/lux/world/file.lux @@ -1337,3 +1337,9 @@ (if ? (in (exception.except ..cannot_make_file [path])) (at fs write path content)))) + +(def .public (copy monad fs from to) + (All (_ !) (-> (Monad !) (System !) Path Path (! (Try Any)))) + (do (try.with monad) + [data (at fs read from)] + (at fs write to data))) diff --git a/stdlib/source/library/lux/world/shell.lux b/stdlib/source/library/lux/world/shell.lux index bd7829907..4101cb3c9 100644 --- a/stdlib/source/library/lux/world/shell.lux +++ b/stdlib/source/library/lux/world/shell.lux @@ -82,7 +82,8 @@ (type .public (Shell !) (Interface - (is (-> [Environment Path Command (List Argument)] (! (Try (Process !)))) + (is (-> [Environment Path Command (List Argument)] + (! (Try (Process !)))) execute))) (def .public (async shell) diff --git a/stdlib/source/program/aedifex/command/deploy/release.lux b/stdlib/source/program/aedifex/command/deploy/release.lux index 88303069a..5a2496648 100644 --- a/stdlib/source/program/aedifex/command/deploy/release.lux +++ b/stdlib/source/program/aedifex/command/deploy/release.lux @@ -97,6 +97,7 @@ [pom ////artifact/extension.pom] [tar ////artifact/extension.lux_library] [jar ////artifact/extension.jvm_library] + [sha-1 ////artifact/extension.sha-1] [md5 ////artifact/extension.md5] ) @@ -142,6 +143,11 @@ (at ////hash.md5_codec encoded) (at utf8.codec encoded) (at remote upload (..md5 artifact))) + _ (|> it + ////hash.sha-1 + (at ////hash.sha-1_codec encoded) + (at utf8.codec encoded) + (at remote upload (..sha-1 artifact))) _ (..release_unsigned_artifact! local remote signature)] (in []))) @@ -150,8 +156,7 @@ (do [! ////action.monad] [_ (///install.do! console fs local profile) _ (install_dummies! environment local fs artifact) - .let [working_directory (at environment directory) - @root (////repository/local.root environment fs) + .let [@root (////repository/local.root environment fs) $bundle (////artifact.bundle (the ////artifact.#version artifact) artifact) / (at fs separator) @local (%.format @root / $bundle)] diff --git a/stdlib/source/program/aedifex/format.lux b/stdlib/source/program/aedifex/format.lux index 594b91014..771bcc9de 100644 --- a/stdlib/source/program/aedifex/format.lux +++ b/stdlib/source/program/aedifex/format.lux @@ -28,31 +28,31 @@ (def (license [name url type]) (Format /.License) - (`' [#name (, (code.text name)) - #url (, (code.text url)) - #type (, (when type - {/.#Repo} - (' "repo") + (`' ["name" (, (code.text name)) + "url" (, (code.text url)) + "type" (, (when type + {/.#Repo} + (' "repo") - {/.#Manual} - (' "manual")))])) + {/.#Manual} + (' "manual")))])) (def (organization [name url]) (Format /.Organization) - (`' [#name (, (code.text name)) - #url (, (code.text url))])) + (`' ["name" (, (code.text name)) + "url" (, (code.text url))])) (def (developer [name url organization]) (Format /.Developer) (when organization {.#None} - (`' [#name (, (code.text name)) - #url (, (code.text url))]) + (`' ["name" (, (code.text name)) + "url" (, (code.text url))]) {.#Some value} - (`' [#name (, (code.text name)) - #url (, (code.text url)) - #organization (, (..organization value))]))) + (`' ["name" (, (code.text name)) + "url" (, (code.text url)) + "organization" (, (..organization value))]))) (def contributor (Format /.Contributor) @@ -156,10 +156,18 @@ (` [(, (code.symbol definition)) (,* (list#each code.text parameters))])) +(def configuration + (Format /.Configuration) + (|>> (list#each (function (_ [setting value]) + (list (code.text setting) + (code.text value)))) + list#conjoint + code.tuple)) + (def .public lux_compiler_label "lux") -(def (profile value) +(def .public (profile value) (Format /.Profile) (`` (|> ..empty (..on_list "parents" (the /.#parents value) code.text) @@ -174,6 +182,7 @@ (..on_maybe "program" (the /.#program value) code.symbol) (..on_maybe "test" (the /.#test value) code.symbol) (..on_dictionary "deploy_repositories" (the /.#deploy_repositories value) code.text code.text) + (dictionary.has "configuration" (..configuration (the /.#configuration value))) (,, (with_template [<tag>] [(dictionary.has (template.text [<tag>]) (..runtime (the <tag> value)))] diff --git a/stdlib/source/program/aedifex/hash.lux b/stdlib/source/program/aedifex/hash.lux index 64e9784d3..a83752014 100644 --- a/stdlib/source/program/aedifex/hash.lux +++ b/stdlib/source/program/aedifex/hash.lux @@ -8,7 +8,7 @@ [monad (.only do)]] [control ["[0]" try (.only Try)] - ["[0]" exception (.only exception)]] + ["[0]" exception (.only Exception)]] [data ["[0]" binary (.only Binary)] ["[0]" text (.only) diff --git a/stdlib/source/program/aedifex/parser.lux b/stdlib/source/program/aedifex/parser.lux index 0327a4cd9..6e64f5bf2 100644 --- a/stdlib/source/program/aedifex/parser.lux +++ b/stdlib/source/program/aedifex/parser.lux @@ -288,5 +288,5 @@ (Parser Project) (at <>.monad each (dictionary.of_list text.hash) - (<code>.tuple (<>.many (<>.and <code>.text + (<code>.tuple (<>.some (<>.and <code>.text ..profile))))) diff --git a/stdlib/source/program/aedifex/profile.lux b/stdlib/source/program/aedifex/profile.lux index 2d9d41b4c..e887160b5 100644 --- a/stdlib/source/program/aedifex/profile.lux +++ b/stdlib/source/program/aedifex/profile.lux @@ -164,6 +164,9 @@ Name "") +(type .public Configuration + (property.List Text)) + (type .public Profile (Record [#parents (List Name) @@ -178,7 +181,7 @@ #program (Maybe Symbol) #test (Maybe Symbol) #deploy_repositories (Dictionary Text Address) - #configuration (property.List Text) + #configuration Configuration #java Runtime #js Runtime #python Runtime diff --git a/stdlib/source/program/aedifex/project.lux b/stdlib/source/program/aedifex/project.lux index 9d0a00f43..d35873c71 100644 --- a/stdlib/source/program/aedifex/project.lux +++ b/stdlib/source/program/aedifex/project.lux @@ -7,7 +7,7 @@ ["[0]" monad (.only do)]] [control ["[0]" try (.only Try)] - ["[0]" exception (.only exception)]] + ["[0]" exception (.only Exception)]] [data ["[0]" text (.only) ["%" \\format (.only format)]] diff --git a/stdlib/source/test/aedifex.lux b/stdlib/source/test/aedifex.lux index 41c03b43b..8b859955e 100644 --- a/stdlib/source/test/aedifex.lux +++ b/stdlib/source/test/aedifex.lux @@ -10,7 +10,7 @@ ["[1][0]" artifact] ["[1][0]" cli] ["[1][0]" command] - ["[1][0]" dependency + ["[1][0]" dependency (.only) ["[1]/[0]" deployment] ["[1]/[0]" resolution] ["[1]/[0]" status]] diff --git a/stdlib/source/test/aedifex/artifact/snapshot/version/value.lux b/stdlib/source/test/aedifex/artifact/snapshot/version/value.lux index 470cd66c7..f116a0a78 100644 --- a/stdlib/source/test/aedifex/artifact/snapshot/version/value.lux +++ b/stdlib/source/test/aedifex/artifact/snapshot/version/value.lux @@ -16,8 +16,9 @@ [number ["n" nat] ["i" int]]] - [time - ["[0]" instant]] + [world + [time + ["[0]" instant]]] [test ["_" property (.only Test)]]]] ["$[0]" /// diff --git a/stdlib/source/test/aedifex/artifact/time/date.lux b/stdlib/source/test/aedifex/artifact/time/date.lux index 5efc00d4e..23f0a69f8 100644 --- a/stdlib/source/test/aedifex/artifact/time/date.lux +++ b/stdlib/source/test/aedifex/artifact/time/date.lux @@ -16,9 +16,10 @@ [number ["n" nat] ["i" int]]] - [time - ["[0]" date (.use "[1]#[0]" equivalence)] - ["[0]" year]] + [world + [time + ["[0]" date (.use "[1]#[0]" equivalence)] + ["[0]" year]]] [test ["_" property (.only Test)]]]] [\\program diff --git a/stdlib/source/test/aedifex/artifact/time/time.lux b/stdlib/source/test/aedifex/artifact/time/time.lux index d4bc90f4e..90ac9819b 100644 --- a/stdlib/source/test/aedifex/artifact/time/time.lux +++ b/stdlib/source/test/aedifex/artifact/time/time.lux @@ -1,7 +1,6 @@ (.require [library [lux (.except) - ["[0]" time] [abstract [monad (.only do)]] [control @@ -14,6 +13,8 @@ [number ["n" nat] ["i" int]]] + [world + ["[0]" time]] [test ["_" property (.only Test)]]]] [\\program diff --git a/stdlib/source/test/aedifex/cli.lux b/stdlib/source/test/aedifex/cli.lux index b388866c6..fa6d9c72c 100644 --- a/stdlib/source/test/aedifex/cli.lux +++ b/stdlib/source/test/aedifex/cli.lux @@ -7,15 +7,15 @@ ["$[0]" equivalence]]] [control ["[0]" pipe] - ["[0]" try] - [parser - ["[0]" cli]]] + ["[0]" try]] [data ["[0]" text] [collection ["[0]" list]]] [math ["[0]" random (.only Random) (.use "[1]#[0]" monad)]] + [program + ["cli" \\parser]] [test ["_" property (.only Test)]]]] [\\program @@ -79,7 +79,7 @@ (cli.result /.command) (pipe.when {try.#Success [names actual]} - (and (at (list.equivalence text.equivalence) = (list //.default) names) + (and (at (list.equivalence text.equivalence) = (list) names) (at /.equivalence = expected actual)) {try.#Failure error} @@ -97,7 +97,7 @@ (cli.result /.command) (pipe.when {try.#Success [actual_profile actual_command]} - (and (at (list.equivalence text.equivalence) = (list expected_profile //.default) actual_profile) + (and (at (list.equivalence text.equivalence) = (list expected_profile) actual_profile) (at /.equivalence = expected_command actual_command)) {try.#Failure error} diff --git a/stdlib/source/test/aedifex/command/auto.lux b/stdlib/source/test/aedifex/command/auto.lux index b202af97f..c46b474ac 100644 --- a/stdlib/source/test/aedifex/command/auto.lux +++ b/stdlib/source/test/aedifex/command/auto.lux @@ -6,8 +6,6 @@ [control ["[0]" pipe] ["[0]" try] - [parser - ["[0]" environment]] [concurrency ["[0]" atom (.only Atom)] ["[0]" async (.only Async)]]] @@ -26,8 +24,10 @@ [world [console (.only Console)] ["[0]" shell (.only Exit Shell)] - ["[0]" program (.only Program)] - ["[0]" file + ["[0]" environment + ["program" / (.only Environment)] + ["[1]" \\parser]] + ["[0]" file (.only) ["[0]" watch]] [time ["[0]" instant]]] @@ -49,7 +49,7 @@ (def (command expected_runs end_signal fs dummy_file) (-> Nat Text (file.System Async) file.Path [(Atom Nat) - (-> (Console Async) (Program Async) (file.System Async) (Shell Async) Resolution (Command [Exit Any]))]) + (-> (Console Async) (Environment Async) (file.System Async) (Shell Async) Resolution (Command [Exit Any]))]) (let [@runs (is (Atom Nat) (atom.atom 0))] [@runs @@ -71,7 +71,8 @@ .let [/ (at file.default separator) [fs watcher] (watch.mock /)] - program (random.alphabetic 5) + program (random.and (random.alphabetic 5) + (random.alphabetic 5)) target (random.alphabetic 5) source (random.alphabetic 5) .let [empty_profile (is Profile diff --git a/stdlib/source/test/aedifex/command/build.lux b/stdlib/source/test/aedifex/command/build.lux index c039b6e9c..674a04e93 100644 --- a/stdlib/source/test/aedifex/command/build.lux +++ b/stdlib/source/test/aedifex/command/build.lux @@ -9,9 +9,7 @@ ["[0]" try] ["[0]" exception] [concurrency - ["[0]" async (.only Async)]] - [parser - ["[0]" environment]]] + ["[0]" async (.only Async)]]] [data ["[0]" text (.use "[1]#[0]" equivalence)] [collection @@ -21,7 +19,9 @@ [world ["[0]" file] ["[0]" shell (.only Shell)] - ["[0]" program]] + ["[0]" environment + ["program" /] + ["[1]" \\parser]]] [test ["[0]" unit] ["_" property (.only Test)]]]] @@ -146,7 +146,8 @@ last_error (random.alphabetic 5) .let [fs (file.mock (at file.default separator)) shell (shell.async (..good_shell []))] - program (random.alphabetic 5) + program (random.and (random.alphabetic 5) + (random.alphabetic 5)) target (random.alphabetic 5) home (random.alphabetic 5) working_directory (random.alphabetic 5) diff --git a/stdlib/source/test/aedifex/command/deploy.lux b/stdlib/source/test/aedifex/command/deploy.lux index 55fac78c6..6e8d38d31 100644 --- a/stdlib/source/test/aedifex/command/deploy.lux +++ b/stdlib/source/test/aedifex/command/deploy.lux @@ -2,22 +2,21 @@ [library [lux (.except) [abstract - [monad (.only do)]] + ["[0]" monad (.only do)]] [control ["[0]" maybe] ["[0]" try (.only Try)] + ["[0]" exception] [concurrency - ["[0]" async (.only Async)]] - [parser - ["[0]" environment]]] + ["[0]" async (.only Async) (.use "[1]#[0]" monad)]]] [data - ["[0]" binary (.use "[1]#[0]" equivalence)] + ["[0]" binary (.use "[1]#[0]" equivalence) + ["[0]" \\format]] ["[0]" text (.use "[1]#[0]" equivalence) ["%" \\format (.only format)] [encoding ["[0]" utf8]]] ["[0]" format - ["[1]" binary] ["[0]" tar] ["[0]" xml]] [collection @@ -30,41 +29,74 @@ ["[0]" export]]]] [world ["[0]" file] - ["[0]" program (.only Program)] - ["[0]" shell]] + ["[0]" shell (.only Process Shell)] + ["[0]" environment + ["program" / (.only Environment)] + ["[1]" \\parser]]] [test ["[0]" unit] ["_" property (.only Test)]]]] - [// - ["$[0]" build] - ["$[0]" install] - ["$[0]" version] + ["$" // + ["[1][0]" install] + ["[1][0]" version] [// - ["$[0]" profile] - ["$[0]" repository]]] + ["[1][0]" profile] + ["[1][0]" repository]]] [\\program ["[0]" / (.only) - ["//[1]" /// - ["[1]" profile] - ["[1][0]" action] - ["[1][0]" pom] - ["[1][0]" hash] - ["[1][0]" repository (.only Repository) - ["[1]/[0]" local] - ["[1]/[0]" remote]] - ["[1][0]" artifact (.only Artifact) - ["[1]/[0]" extension]]]]]) + ["/[1]" // + ["[1][0]" install] + ["/[1]" // + ["[1]" profile] + ["[1][0]" action] + ["[1][0]" pom] + ["[1][0]" hash] + ["[1][0]" repository (.only Repository) + ["[1]/[0]" local] + ["[1]/[0]" remote]] + ["[1][0]" artifact (.only Artifact) + ["[1]/[0]" extension]]]]]]) + +(def (shell fs) + (-> (file.System Async) (Shell Async)) + (implementation + (def (execute [environment working_directory command arguments]) + (do [! ///action.monad] + [files (at fs directory_files working_directory) + _ (monad.each ! + (function (_ file) + (do ! + [_ (is (Async (Try Any)) + (file.copy async.monad fs + file + (format file ".asc")))] + (in []))) + files)] + (<| in + (is (Process Async)) + (implementation + (def (read _) + (async#in (exception.except shell.no_more_output []))) + (def (fail _) + (async#in (exception.except shell.no_more_output []))) + (def (write input) + (async#in {try.#Failure "write"})) + (def (destroy _) + (async#in {try.#Failure "destroy"})) + (def (await _) + (in shell.error)))))))) (def (execute! program local remote fs artifact profile) - (-> (Program Async) (Repository Async) (Repository Async) (file.System Async) + (-> (Environment Async) (Repository Async) (Repository Async) (file.System Async) Artifact ///.Profile - (Async (Try Text))) + (Async (Try [Text Text]))) (do ///action.monad - [.let [console ($version.echo "") - shell (shell.async ($build.bad_shell []))] + [.let [console ($version.echo "")] _ ($install.make_sources! fs (the ///.#sources profile)) - _ (/.do! program shell console local remote fs artifact profile)] - (at console read_line []))) + _ (/.do! program (..shell fs) console local remote fs artifact profile) + locally_installed! (at console read_line []) + deployed! (at console read_line [])] + (in [locally_installed! deployed!]))) (def .public test Test @@ -87,12 +119,12 @@ $repository.empty)]] (in (do [! async.monad] [verdict (do [! ///action.monad] - [logging (..execute! program local remote fs artifact profile) + [[locally_installed! deployed!] (..execute! program local remote fs artifact profile) expected_library (|> profile (the ///.#sources) set.list (export.library fs) - (at ! each (format.result tar.format))) + (at ! each (\\format.result tar.format))) actual_pom (at remote download (///repository/remote.uri (the ///artifact.#version artifact) artifact ///artifact/extension.pom)) actual_library (at remote download (///repository/remote.uri (the ///artifact.#version artifact) artifact ///artifact/extension.lux_library)) @@ -108,7 +140,8 @@ (at ///hash.md5_codec decoded actual_md5))) .let [succeeded! - (text#= /.success logging) + (and (text#= //install.success locally_installed!) + (text#= /.success deployed!)) deployed_library! (binary#= expected_library diff --git a/stdlib/source/test/aedifex/command/deps.lux b/stdlib/source/test/aedifex/command/deps.lux index 15d5e3986..64060127b 100644 --- a/stdlib/source/test/aedifex/command/deps.lux +++ b/stdlib/source/test/aedifex/command/deps.lux @@ -2,14 +2,13 @@ [library [lux (.except) [abstract - [monad (.only do)] - ["[0]" predicate]] + [monad (.only do)]] [control ["[0]" try] + [function + ["[0]" predicate]] [concurrency - ["[0]" async]] - [parser - ["[0]" environment]]] + ["[0]" async]]] [data ["[0]" text (.use "[1]#[0]" equivalence) ["%" \\format (.only format)] @@ -23,8 +22,10 @@ [math ["[0]" random (.only Random)]] [world - ["[0]" program] - ["[0]" file]] + ["[0]" file] + ["[0]" environment + ["program" /] + ["[1]" \\parser]]] [test ["[0]" unit] ["_" property (.only Test)]]]] diff --git a/stdlib/source/test/aedifex/command/install.lux b/stdlib/source/test/aedifex/command/install.lux index ff8bca5e9..d942a9d17 100644 --- a/stdlib/source/test/aedifex/command/install.lux +++ b/stdlib/source/test/aedifex/command/install.lux @@ -7,9 +7,7 @@ ["[0]" try (.only Try) (.use "[1]#[0]" functor)] ["[0]" exception] [concurrency - ["[0]" async (.only Async)]] - [parser - ["[0]" environment]]] + ["[0]" async (.only Async)]]] [data ["[0]" binary] ["[0]" text (.use "[1]#[0]" equivalence) @@ -20,7 +18,9 @@ ["[0]" random]] [world ["[0]" file] - ["[0]" program (.only Program)]] + ["[0]" environment + ["program" / (.only Environment)] + ["[1]" \\parser]]] [test ["[0]" unit] ["_" property (.only Test)]]]] @@ -31,7 +31,7 @@ ["$[0]" artifact]]] [\\program ["[0]" / (.only) - ["/[1]" /// + ["//[1]" /// ["[1]" profile] ["[1][0]" action (.only Action)] ["[1][0]" local] @@ -54,7 +54,7 @@ (file.make_file async.monad fs (binary.empty 0) (format head / head ".lux"))))))))) (def (execute! program fs sample) - (-> (Program Async) (file.System Async) ///.Profile (Async (Try Text))) + (-> (Environment Async) (file.System Async) ///.Profile (Async (Try Text))) (do ///action.monad [.let [console ($version.echo "")] _ (..make_sources! fs (the ///.#sources sample)) diff --git a/stdlib/source/test/aedifex/command/test.lux b/stdlib/source/test/aedifex/command/test.lux index 1209b4020..31afea06b 100644 --- a/stdlib/source/test/aedifex/command/test.lux +++ b/stdlib/source/test/aedifex/command/test.lux @@ -7,9 +7,7 @@ ["[0]" try] ["[0]" exception] [concurrency - ["[0]" async]] - [parser - ["[0]" environment]]] + ["[0]" async]]] [data ["[0]" text (.use "[1]#[0]" equivalence)] [collection @@ -20,7 +18,9 @@ [world ["[0]" file] ["[0]" shell] - ["[0]" program]] + ["[0]" environment + ["program" /] + ["[1]" \\parser]]] [test ["[0]" unit] ["_" property (.only Test)]]]] @@ -45,7 +45,8 @@ Test (<| (_.covering /._) (do [! random.monad] - [test (random.alphabetic 5) + [test (random.and (random.alphabetic 5) + (random.alphabetic 5)) target (random.alphabetic 5) home (random.alphabetic 5) working_directory (random.alphabetic 5) diff --git a/stdlib/source/test/aedifex/dependency/resolution.lux b/stdlib/source/test/aedifex/dependency/resolution.lux index 0f353d828..ad9d9033f 100644 --- a/stdlib/source/test/aedifex/dependency/resolution.lux +++ b/stdlib/source/test/aedifex/dependency/resolution.lux @@ -3,12 +3,13 @@ [lux (.except all) [abstract [monad (.only do)] - ["[0]" predicate] [\\specification ["$[0]" equivalence]]] [control ["[0]" try] ["[0]" exception] + [function + ["[0]" predicate]] [concurrency ["[0]" async]]] [data diff --git a/stdlib/source/test/aedifex/input.lux b/stdlib/source/test/aedifex/input.lux index 9c296e12c..7dc6ccc8e 100644 --- a/stdlib/source/test/aedifex/input.lux +++ b/stdlib/source/test/aedifex/input.lux @@ -43,6 +43,11 @@ (-> (Set Address) (Set Address)) (set.has //.default_repository)) +(def with_defaults + (-> Profile Profile) + (|>> (revised //.#sources ..with_default_source) + (revised //.#repositories ..with_default_repository))) + (def .public test Test (<| (_.covering /._) @@ -59,11 +64,7 @@ (at utf8.codec encoded))] _ (at fs write //project.file profile) actual (is (Async (Try Profile)) - (/.read async.monad fs (list //.default)))] - (in (at //.equivalence = - (|> expected - (revised //.#sources ..with_default_source) - (revised //.#repositories ..with_default_repository)) - actual)))] + (/.read async.monad fs (list)))] + (in (at //.equivalence = (with_defaults expected) actual)))] (unit.coverage [/.read] (try.else false verdict))))))) diff --git a/stdlib/source/test/aedifex/metadata/artifact.lux b/stdlib/source/test/aedifex/metadata/artifact.lux index f2d430fb2..27c194d84 100644 --- a/stdlib/source/test/aedifex/metadata/artifact.lux +++ b/stdlib/source/test/aedifex/metadata/artifact.lux @@ -8,8 +8,6 @@ [control ["[0]" maybe] ["[0]" try (.use "[1]#[0]" functor)] - [parser - ["[0]" environment]] [concurrency ["[0]" async]]] [data @@ -27,7 +25,9 @@ ["[0]" code]] [world ["[0]" file] - ["[0]" program] + ["[0]" environment + ["program" /] + ["[1]" \\parser]] ["[0]" time (.only) ["[0]" date] ["[0]" year] diff --git a/stdlib/source/test/aedifex/metadata/snapshot.lux b/stdlib/source/test/aedifex/metadata/snapshot.lux index 34965c98a..fa26186ea 100644 --- a/stdlib/source/test/aedifex/metadata/snapshot.lux +++ b/stdlib/source/test/aedifex/metadata/snapshot.lux @@ -8,8 +8,6 @@ [control ["[0]" maybe] ["[0]" try (.use "[1]#[0]" functor)] - [parser - ["[0]" environment]] [concurrency ["[0]" async]]] [data @@ -27,7 +25,9 @@ ["[0]" code]] [world ["[0]" file] - ["[0]" program] + ["[0]" environment + ["program" /] + ["[1]" \\parser]] ["[0]" time (.only) ["[0]" date] ["[0]" year] @@ -38,7 +38,7 @@ ["[0]" unit] ["_" property (.only Test)]]]] ["$[0]" /// - ["[1][0]" artifact + ["[1][0]" artifact (.only) ["[1]/[0]" type] ["[1]/[0]" time] ["[1]/[0]" snapshot diff --git a/stdlib/source/test/aedifex/parser.lux b/stdlib/source/test/aedifex/parser.lux index 54cdbc17a..cbc67dbab 100644 --- a/stdlib/source/test/aedifex/parser.lux +++ b/stdlib/source/test/aedifex/parser.lux @@ -6,7 +6,7 @@ [hash (.only Hash)]] [control ["[0]" pipe] - ["[0]" try]] + ["[0]" try (.use "[1]#[0]" functor)]] [data ["[0]" text] [collection @@ -40,7 +40,7 @@ (def (list_of random) (All (_ a) (-> (Random a) (Random (List a)))) (do [! random.monad] - [size (at ! each (n.% 5) random.nat)] + [size (at ! each (|>> (n.% 5) ++) random.nat)] (random.list size random))) (def (dictionary_of key_hash key_random value_random) @@ -72,6 +72,16 @@ (//project.project //.default (at //.monoid identity)) project)) +(def with_defaults + (-> Project Project) + (|>> ..with_empty_profile + dictionary.entries + (list#each (function (_ [name profile]) + [name (|> profile + ..with_default_sources + ..with_default_repository)])) + (dictionary.of_list text.hash))) + (def .public test Test (<| (_.covering /._) @@ -84,17 +94,6 @@ //format.project list (<code>.result /.project) - (pipe.when - {try.#Success actual} - (|> expected - ..with_empty_profile - dictionary.entries - (list#each (function (_ [name profile]) - [name (|> profile - ..with_default_sources - ..with_default_repository)])) - (dictionary.of_list text.hash) - (at //project.equivalence = actual)) - - {try.#Failure error} - false)))))) + (try#each (at //project.equivalence = (..with_defaults expected))) + (try.else false) + ))))) diff --git a/stdlib/source/test/aedifex/profile.lux b/stdlib/source/test/aedifex/profile.lux index 9a2c5ba3c..4d964ebdd 100644 --- a/stdlib/source/test/aedifex/profile.lux +++ b/stdlib/source/test/aedifex/profile.lux @@ -1,6 +1,6 @@ (.require [library - [lux (.except) + [lux (.except symbol) [abstract [monad (.only do)] [hash (.only Hash)] @@ -8,9 +8,7 @@ ["$[0]" equivalence] ["$[0]" monoid]]] [control - ["[0]" try] - [parser - ["[0]" cli]]] + ["[0]" try]] [data ["[0]" text (.use "[1]#[0]" equivalence)] [collection @@ -26,6 +24,8 @@ [cli ["[0]" compiler (.only) ["$[1]" \\test]]]]]] + [program + ["cli" \\parser]] [test ["_" property (.only Test)]]]] [// @@ -124,6 +124,11 @@ (Random /.Target) (random.alphabetic 1)) +(def (symbol module_size short_size) + (-> Nat Nat (Random Symbol)) + (random.and (random.alphabetic module_size) + (random.alphabetic short_size))) + (def .public random (Random /.Profile) (all random.and @@ -136,11 +141,11 @@ (..list_of $compiler.random) (..set_of text.hash ..source) ..target - (random.maybe (random.alphabetic 1)) - (random.maybe (random.alphabetic 2)) - (..dictionary_of text.hash (random.alphabetic 3) ..repository) - (..list_of (random.and (random.alphabetic 4) - (random.alphabetic 5))) + (random.maybe (symbol 1 2)) + (random.maybe (symbol 3 4)) + (..dictionary_of text.hash (random.alphabetic 5) ..repository) + (..list_of (random.and (random.alphabetic 6) + (random.alphabetic 7))) (random#in //runtime.default_java) (random#in //runtime.default_js) (random#in //runtime.default_python) diff --git a/stdlib/source/test/aedifex/repository.lux b/stdlib/source/test/aedifex/repository.lux index fd26f3898..f61f1ec50 100644 --- a/stdlib/source/test/aedifex/repository.lux +++ b/stdlib/source/test/aedifex/repository.lux @@ -8,7 +8,7 @@ [control ["[0]" io] ["[0]" try] - ["[0]" exception (.only exception)]] + ["[0]" exception (.only Exception)]] [data ["[0]" product] ["[0]" binary (.only Binary)] diff --git a/stdlib/source/test/aedifex/repository/local.lux b/stdlib/source/test/aedifex/repository/local.lux index 96a07f678..874c773b3 100644 --- a/stdlib/source/test/aedifex/repository/local.lux +++ b/stdlib/source/test/aedifex/repository/local.lux @@ -5,8 +5,6 @@ [monad (.only do)]] [control ["[0]" try (.use "[1]#[0]" functor)] - [parser - ["[0]" environment]] [concurrency ["[0]" async]]] [data @@ -18,7 +16,9 @@ ["[0]" random]] [world ["[0]" file] - ["[0]" program]] + ["[0]" environment + ["program" /] + ["[1]" \\parser]]] [test ["[0]" unit] ["_" property (.only Test)]]]] diff --git a/stdlib/source/test/lux/data/collection/list.lux b/stdlib/source/test/lux/data/collection/list.lux index bd1e684d7..f32a5c3d5 100644 --- a/stdlib/source/test/lux/data/collection/list.lux +++ b/stdlib/source/test/lux/data/collection/list.lux @@ -230,7 +230,7 @@ (_.coverage [/.while /.until] (/#= sample (/#composite (/.while n.even? sample) - (/.until n.even? sample)))) + (/.until (|>> n.even? not) sample)))) (_.coverage [/.sub] (let [subs (/.sub sub_size sample)] (and (/.every? (|>> /.size (n.<= sub_size)) subs) diff --git a/stdlib/source/test/lux/meta/compiler/language/lux/analysis/coverage.lux b/stdlib/source/test/lux/meta/compiler/language/lux/analysis/coverage.lux index cf2d5edac..9aa2277d3 100644 --- a/stdlib/source/test/lux/meta/compiler/language/lux/analysis/coverage.lux +++ b/stdlib/source/test/lux/meta/compiler/language/lux/analysis/coverage.lux @@ -55,7 +55,7 @@ (random.set n.hash ..spread random.nat) (random.set i.hash ..spread random.int) (random.set r.hash ..spread random.rev) - (random.set f.hash ..spread random.frac) + (random.set f.hash ..spread random.safe_frac) (random.set text.hash ..spread (random.unicode 1)) (all random.and (random.maybe (random#in ..spread)) @@ -96,7 +96,7 @@ [random.nat n.hash /.#Nat //simple.#Nat] [random.int i.hash /.#Int //simple.#Int] [random.rev r.hash /.#Rev //simple.#Rev] - [random.frac f.hash /.#Frac //simple.#Frac] + [random.safe_frac f.hash /.#Frac //simple.#Frac] [(random.unicode 1) text.hash /.#Text //simple.#Text] )) @@ -115,22 +115,20 @@ (do [! random.monad] [arity (..ranged 2 (n.- 2 ..spread)) - it (random.list arity again) - .let [coverages (list#each product.left it) - patterns (list#each product.right it)]] - (in [(|> coverages - (list.only (|>> /.exhaustive? not)) - list.reversed - (pipe.when - {.#End} - {/.#Exhaustive} - - {.#Item last prevs} - (list#mix (function (_ left right) - {/.#Seq left right}) - last - prevs))) - {//pattern.#Complex {//complex.#Tuple patterns}}])) + it (random.list arity again)] + (in [(when (|> it + (list#each product.left) + list.reversed + (list.until (|>> /.exhaustive? not))) + {.#End} + {/.#Exhaustive} + + {.#Item last prevs} + (list#mix (function (_ left right) + {/.#Seq left right}) + last + prevs)) + {//pattern.#Complex {//complex.#Tuple (list#each product.right it)}}])) (do random.monad [register random.nat] |