diff options
Diffstat (limited to 'stdlib/source/test')
31 files changed, 138 insertions, 125 deletions
diff --git a/stdlib/source/test/lux.lux b/stdlib/source/test/lux.lux index 5b45d6e5e..42f4c9f81 100644 --- a/stdlib/source/test/lux.lux +++ b/stdlib/source/test/lux.lux @@ -10,15 +10,16 @@ [host (#+)]])] (.module: ["/" lux #* - [cli (#+ program:)] - ["." io (#+ io)] [abstract [monad (#+ do)] [predicate (#+ Predicate)]] + [control + [cli (#+ program:)] + ["." io (#+ io)] + ["." function]] [data [number ["." i64]]] - ["." function] ["." math] ["_" test (#+ Test)] ## These modules do not need to be tested. @@ -110,8 +111,6 @@ ] ## TODO: Must have 100% coverage on tests. ["." / #_ - ["#." cli] - ["#." io] ["#." abstract] ["#." control] ["#." data] @@ -353,8 +352,6 @@ ..templates) (<| (_.context "Cross-platform support.") ..cross-platform-support) - /cli.test - /io.test (<| (_.context "/abstract") /abstract.test) (<| (_.context "/control") @@ -362,16 +359,15 @@ (<| (_.context "/data") /data.test) /macro.test - (<| (_.context "/math") - /math.test) + /math.test (<| (_.context "/time") /time.test) /type.test /world.test - (<| (_.context "/host Host-platform interoperation") + (<| (_.context "/host") ($_ _.and /host.test - (<| (_.context "/jvm JVM (Java Virtual Machine)") + (<| (_.context "/jvm") /host/jvm.test))) ))) diff --git a/stdlib/source/test/lux/abstract/apply.lux b/stdlib/source/test/lux/abstract/apply.lux index a269810bb..6b3ea631f 100644 --- a/stdlib/source/test/lux/abstract/apply.lux +++ b/stdlib/source/test/lux/abstract/apply.lux @@ -4,7 +4,8 @@ [data [text format]] - ["." function] + [control + ["." function]] [math ["r" random]] ["_" test (#+ Test)]] diff --git a/stdlib/source/test/lux/abstract/enum.lux b/stdlib/source/test/lux/abstract/enum.lux index 63bbf97ad..b0498dc09 100644 --- a/stdlib/source/test/lux/abstract/enum.lux +++ b/stdlib/source/test/lux/abstract/enum.lux @@ -2,7 +2,8 @@ [lux #* data/text/format ["_" test (#+ Test)] - ["." function] + [control + ["." function]] [abstract/monad (#+ do)] [math ["r" random (#+ Random)]]] diff --git a/stdlib/source/test/lux/abstract/functor.lux b/stdlib/source/test/lux/abstract/functor.lux index cf3538575..77a07233b 100644 --- a/stdlib/source/test/lux/abstract/functor.lux +++ b/stdlib/source/test/lux/abstract/functor.lux @@ -6,7 +6,8 @@ [abstract [equivalence (#+ Equivalence)] [monad (#+ do)]] - ["." function]] + [control + ["." function]]] {1 ["." / (#+ Functor)]}) diff --git a/stdlib/source/test/lux/abstract/monad.lux b/stdlib/source/test/lux/abstract/monad.lux index 4382a260d..827a1e509 100644 --- a/stdlib/source/test/lux/abstract/monad.lux +++ b/stdlib/source/test/lux/abstract/monad.lux @@ -3,7 +3,8 @@ [data [text format]] - ["." function] + [control + ["." function]] [math ["r" random]] ["_" test (#+ Test)]] diff --git a/stdlib/source/test/lux/abstract/monoid.lux b/stdlib/source/test/lux/abstract/monoid.lux index b526c3e58..3600795ff 100644 --- a/stdlib/source/test/lux/abstract/monoid.lux +++ b/stdlib/source/test/lux/abstract/monoid.lux @@ -2,10 +2,11 @@ [lux #* data/text/format ["_" test (#+ Test)] - ["." function] [abstract/monad (#+ do)] [math - ["r" random (#+ Random)]]] + ["r" random (#+ Random)]] + [control + ["." function]]] {1 ["." / (#+ Monoid) [// diff --git a/stdlib/source/test/lux/control.lux b/stdlib/source/test/lux/control.lux index 341a119fe..9d95dc969 100644 --- a/stdlib/source/test/lux/control.lux +++ b/stdlib/source/test/lux/control.lux @@ -2,8 +2,10 @@ [lux #* ["_" test (#+ Test)]] ["." / #_ + ["#." cli] ["#." continuation] ["#." exception] + ["#." io] ["#." parser] ["#." pipe] ["#." reader] @@ -19,7 +21,8 @@ ["#." stm]] [security ["#." privacy] - ["#." integrity]]]) + ["#." integrity]] + ]) (def: concurrency Test @@ -41,8 +44,10 @@ (def: #export test Test ($_ _.and + /cli.test /continuation.test /exception.test + /io.test /parser.test (<| (_.context "/pipe") /pipe.test) diff --git a/stdlib/source/test/lux/cli.lux b/stdlib/source/test/lux/control/cli.lux index ff7a3abb3..ff7a3abb3 100644 --- a/stdlib/source/test/lux/cli.lux +++ b/stdlib/source/test/lux/control/cli.lux diff --git a/stdlib/source/test/lux/control/concurrency/actor.lux b/stdlib/source/test/lux/control/concurrency/actor.lux index eff4d051d..a39f7b039 100644 --- a/stdlib/source/test/lux/control/concurrency/actor.lux +++ b/stdlib/source/test/lux/control/concurrency/actor.lux @@ -1,12 +1,10 @@ (.module: [lux #* ["_" test (#+ Test)] - ["." io (#+ IO io)] [abstract/monad (#+ do)] [control ["ex" exception] - [concurrency - ["." promise ("#;." monad)]]] + ["." io (#+ IO io)]] [data ["." error] [text @@ -14,7 +12,9 @@ [math ["r" random]]] {1 - ["." / (#+ actor: message:)]}) + ["." / (#+ actor: message:) + [// + ["." promise ("#;." monad)]]]}) (actor: Counter Nat diff --git a/stdlib/source/test/lux/control/concurrency/atom.lux b/stdlib/source/test/lux/control/concurrency/atom.lux index 455f8b00d..63f9ec296 100644 --- a/stdlib/source/test/lux/control/concurrency/atom.lux +++ b/stdlib/source/test/lux/control/concurrency/atom.lux @@ -1,11 +1,12 @@ (.module: [lux #* ["_" test (#+ Test)] - ["." io] [abstract/monad (#+ do)] data/text/format [math - ["r" random]]] + ["r" random]] + [control + ["." io]]] {1 ["." /]}) diff --git a/stdlib/source/test/lux/control/concurrency/frp.lux b/stdlib/source/test/lux/control/concurrency/frp.lux index 7ac79b465..f9cea5737 100644 --- a/stdlib/source/test/lux/control/concurrency/frp.lux +++ b/stdlib/source/test/lux/control/concurrency/frp.lux @@ -1,12 +1,9 @@ (.module: [lux #* ["_" test (#+ Test)] - ["." io (#+ IO io)] [abstract/monad (#+ do)] [control - [concurrency - ["." promise ("#@." monad)] - ["." atom (#+ Atom atom)]]] + ["." io (#+ IO io)]] [data [number ["." nat]] @@ -15,7 +12,10 @@ [math ["r" random]]] {1 - ["." / (#+ Channel)]}) + ["." / (#+ Channel) + [// + ["." promise ("#@." monad)] + ["." atom (#+ Atom atom)]]]}) (def: #export test Test diff --git a/stdlib/source/test/lux/control/concurrency/promise.lux b/stdlib/source/test/lux/control/concurrency/promise.lux index 5a49f26fe..5a4a41adb 100644 --- a/stdlib/source/test/lux/control/concurrency/promise.lux +++ b/stdlib/source/test/lux/control/concurrency/promise.lux @@ -1,10 +1,10 @@ (.module: [lux #* ["_" test (#+ Test)] - ["." io] [abstract/monad (#+ do)] [control - pipe] + pipe + ["." io]] data/text/format [math ["r" random]]] diff --git a/stdlib/source/test/lux/control/concurrency/semaphore.lux b/stdlib/source/test/lux/control/concurrency/semaphore.lux index 40bd81364..369bc8507 100644 --- a/stdlib/source/test/lux/control/concurrency/semaphore.lux +++ b/stdlib/source/test/lux/control/concurrency/semaphore.lux @@ -3,6 +3,7 @@ [abstract ["." monad (#+ do)]] [control + ["." io] [concurrency ["/" semaphore] ["." promise (#+ Promise)] @@ -13,7 +14,6 @@ format] [collection ["." list ("#;." functor)]]] - ["." io] [math ["r" random]]] lux/test) diff --git a/stdlib/source/test/lux/control/concurrency/stm.lux b/stdlib/source/test/lux/control/concurrency/stm.lux index 9e3b9290c..6b9a65a55 100644 --- a/stdlib/source/test/lux/control/concurrency/stm.lux +++ b/stdlib/source/test/lux/control/concurrency/stm.lux @@ -1,14 +1,9 @@ (.module: [lux #* ["_" test (#+ Test)] - ["." io (#+ IO)] ["M" abstract/monad (#+ do Monad)] [control - [concurrency - ["." atom (#+ Atom atom)] - ["." process] - ["." promise] - ["." frp (#+ Channel)]]] + ["." io (#+ IO)]] [data text/format [number @@ -18,7 +13,12 @@ [math ["r" random]]] {1 - ["." /]}) + ["." / + [// + ["." atom (#+ Atom atom)] + ["." process] + ["." promise] + ["." frp (#+ Channel)]]]}) (def: (read! channel) (All [a] (-> (Channel a) (IO (Atom (List a))))) diff --git a/stdlib/source/test/lux/io.lux b/stdlib/source/test/lux/control/io.lux index 3b00ceb3f..1a14558b2 100644 --- a/stdlib/source/test/lux/io.lux +++ b/stdlib/source/test/lux/control/io.lux @@ -9,10 +9,11 @@ [/ ["$." functor (#+ Injection Comparison)] ["$." apply] - ["$." monad]]}] - ["." function]] + ["$." monad]]}]] {1 - ["." / (#+ IO)]}) + ["." / (#+ IO) + [// + ["." function]]]}) (def: injection (Injection IO) diff --git a/stdlib/source/test/lux/control/reader.lux b/stdlib/source/test/lux/control/reader.lux index aa639ce70..94aacdb5d 100644 --- a/stdlib/source/test/lux/control/reader.lux +++ b/stdlib/source/test/lux/control/reader.lux @@ -1,6 +1,5 @@ (.module: [lux #* - ["." io (#+ IO)] ["_" test (#+ Test)] [abstract [monad (#+ do)] @@ -15,7 +14,9 @@ [math ["r" random]]] {1 - ["." / (#+ Reader)]}) + ["." / (#+ Reader) + [// + ["." io (#+ IO)]]]}) (def: (injection value) (Injection (All [a r] (Reader r a))) @@ -29,7 +30,7 @@ (def: #export test Test - (<| (_.context (%name (name-of /.Reader))) + (<| (_.context (%name (name-of /._))) (do r.monad [sample r.nat factor r.nat] diff --git a/stdlib/source/test/lux/control/region.lux b/stdlib/source/test/lux/control/region.lux index a575e4250..57ed91c1a 100644 --- a/stdlib/source/test/lux/control/region.lux +++ b/stdlib/source/test/lux/control/region.lux @@ -3,9 +3,6 @@ ["_" test (#+ Test)] [abstract ["." monad (#+ do)]] - [control - ["." thread (#+ Thread)] - ["ex" exception (#+ exception:)]] [data ["." error (#+ Error)] [text @@ -15,7 +12,10 @@ [math ["r" random]]] {1 - ["." /]}) + ["." / + [// + ["." thread (#+ Thread)] + ["ex" exception (#+ exception:)]]]}) (exception: oops) diff --git a/stdlib/source/test/lux/control/state.lux b/stdlib/source/test/lux/control/state.lux index 808d5ebb2..96f9e9d34 100644 --- a/stdlib/source/test/lux/control/state.lux +++ b/stdlib/source/test/lux/control/state.lux @@ -1,7 +1,6 @@ (.module: [lux #* ["_" test (#+ Test)] - ["." io] [abstract [monad (#+ do)] {[0 #test] @@ -10,7 +9,8 @@ ["$." apply] ["$." monad]]}] [control - [pipe (#+ let>)]] + [pipe (#+ let>)] + ["." io]] [data ["." product] [text diff --git a/stdlib/source/test/lux/control/writer.lux b/stdlib/source/test/lux/control/writer.lux index 392fc7a4b..a95384fef 100644 --- a/stdlib/source/test/lux/control/writer.lux +++ b/stdlib/source/test/lux/control/writer.lux @@ -1,7 +1,6 @@ (.module: [lux #* ["_" test (#+ Test)] - ["." io] [abstract [equivalence (#+ Equivalence)] [monoid (#+ Monoid)] @@ -11,6 +10,8 @@ ["$." functor (#+ Injection Comparison)] ["$." apply] ["$." monad]]}] + [control + ["." io]] [data ["." product] ["." text ("#;." equivalence) diff --git a/stdlib/source/test/lux/data/bit.lux b/stdlib/source/test/lux/data/bit.lux index 9515fa5ce..eebca5f2a 100644 --- a/stdlib/source/test/lux/data/bit.lux +++ b/stdlib/source/test/lux/data/bit.lux @@ -3,14 +3,15 @@ data/text/format ["_" test (#+ Test)] ["r" math/random] - ["." function] [abstract [monad (#+ do)] {[0 #test] [/ ["$." equivalence] ["$." monoid] - ["$." codec]]}]] + ["$." codec]]}] + [control + ["." function]]] {1 ["." /]}) diff --git a/stdlib/source/test/lux/data/collection/bits.lux b/stdlib/source/test/lux/data/collection/bits.lux index a727761ca..4b9743912 100644 --- a/stdlib/source/test/lux/data/collection/bits.lux +++ b/stdlib/source/test/lux/data/collection/bits.lux @@ -27,7 +27,7 @@ (def: #export test Test - (<| (_.context (%name (name-of /.Bits))) + (<| (_.context (%name (name-of /._))) ($_ _.and ($equivalence.spec /.equivalence ..bits) (do r.monad @@ -47,7 +47,7 @@ (and (n/= 0 (/.capacity /.empty)) (|> /.empty (/.set idx) /.capacity (n/- idx) - (predicate.union (n/>= 0) + (predicate.unite (n/>= 0) (n/< /.chunk-size))))) (_.test "Bits (must) shrink when (and as much as) possible." (let [grown (/.flip idx /.empty)] diff --git a/stdlib/source/test/lux/data/collection/list.lux b/stdlib/source/test/lux/data/collection/list.lux index 247b2de78..fb97c3d32 100644 --- a/stdlib/source/test/lux/data/collection/list.lux +++ b/stdlib/source/test/lux/data/collection/list.lux @@ -2,7 +2,6 @@ [lux #* data/text/format ["_" test (#+ Test)] - ["." io] [abstract [monad (#+ do)] {[0 #test] @@ -14,7 +13,8 @@ ["$." apply] ["$." monad]]}] [control - pipe] + pipe + ["." io]] [data ["." bit] ["." product] diff --git a/stdlib/source/test/lux/data/error.lux b/stdlib/source/test/lux/data/error.lux index 8f89ccb8f..f65128ec3 100644 --- a/stdlib/source/test/lux/data/error.lux +++ b/stdlib/source/test/lux/data/error.lux @@ -1,7 +1,6 @@ (.module: [lux #* ["_" test (#+ Test)] - ["." io] [abstract [monad (#+ do Monad)] {[0 #test] @@ -11,7 +10,8 @@ ["$." monad] ["$." equivalence]]}] [control - pipe] + pipe + ["." io]] [data text/format [number diff --git a/stdlib/source/test/lux/data/maybe.lux b/stdlib/source/test/lux/data/maybe.lux index dc6ca1d56..a92141bd9 100644 --- a/stdlib/source/test/lux/data/maybe.lux +++ b/stdlib/source/test/lux/data/maybe.lux @@ -10,13 +10,13 @@ ["$." apply] ["$." monad]]}] [control + ["." io ("#@." monad)] pipe] [data ["." text format] [number ["." nat]]] - ["." io ("#@." monad)] [math ["r" random (#+ Random)]]] {1 diff --git a/stdlib/source/test/lux/host/jvm.jvm.lux b/stdlib/source/test/lux/host/jvm.jvm.lux index 16c4aea90..47c6f35d9 100644 --- a/stdlib/source/test/lux/host/jvm.jvm.lux +++ b/stdlib/source/test/lux/host/jvm.jvm.lux @@ -2,6 +2,7 @@ [lux #* [abstract/monad (#+ do)] [control + ["." io (#+ IO)] [concurrency ["." atom]] [security @@ -15,7 +16,6 @@ [collection ["." dictionary] ["." row]]] - ["." io (#+ IO)] [world ["." file (#+ File)] [binary (#+ Binary)]] diff --git a/stdlib/source/test/lux/math.lux b/stdlib/source/test/lux/math.lux index fcd4a1134..c11380015 100644 --- a/stdlib/source/test/lux/math.lux +++ b/stdlib/source/test/lux/math.lux @@ -31,63 +31,64 @@ (def: #export test Test - ($_ _.and - (<| (_.context "Trigonometry") - (do r.monad - [angle (|> r.safe-frac (:: @ map (f/* /.tau)))] - ($_ _.and - (_.test "Sine and arc-sine are inverse functions." - (trigonometric-symmetry /.sin /.asin angle)) - (_.test "Cosine and arc-cosine are inverse functions." - (trigonometric-symmetry /.cos /.acos angle)) - (_.test "Tangent and arc-tangent are inverse functions." - (trigonometric-symmetry /.tan /.atan angle)) - ))) - (<| (_.context "Rounding") - (do r.monad - [sample (|> r.safe-frac (:: @ map (f/* +1000.0)))] - ($_ _.and - (_.test "The ceiling will be an integer value, and will be >= the original." - (let [ceil'd (/.ceil sample)] - (and (|> ceil'd frac-to-int int-to-frac (f/= ceil'd)) - (f/>= sample ceil'd) - (f/<= +1.0 (f/- sample ceil'd))))) - (_.test "The floor will be an integer value, and will be <= the original." - (let [floor'd (/.floor sample)] - (and (|> floor'd frac-to-int int-to-frac (f/= floor'd)) - (f/<= sample floor'd) - (f/<= +1.0 (f/- floor'd sample))))) - (_.test "The round will be an integer value, and will be < or > or = the original." - (let [round'd (/.round sample)] - (and (|> round'd frac-to-int int-to-frac (f/= round'd)) - (f/<= +1.0 (frac@abs (f/- sample round'd)))))) - ))) - (<| (_.context "Exponentials and logarithms") - (do r.monad - [sample (|> r.safe-frac (:: @ map (f/* +10.0)))] - (_.test "Logarithm is the inverse of exponential." - (|> sample /.exp /.log (within? +1.0e-15 sample))))) - (<| (_.context "Greatest-Common-Divisor and Least-Common-Multiple") - (do r.monad - [#let [gen-nat (|> r.nat (:: @ map (|>> (n/% 1000) (n/max 1))))] - x gen-nat - y gen-nat] - ($_ _.and - (_.test "GCD" - (let [gcd (/.n/gcd x y)] - (and (n/= 0 (n/% gcd x)) - (n/= 0 (n/% gcd y)) - (n/>= 1 gcd)))) + (<| (_.context (%name (name-of /._))) + ($_ _.and + (<| (_.context "Trigonometry") + (do r.monad + [angle (|> r.safe-frac (:: @ map (f/* /.tau)))] + ($_ _.and + (_.test "Sine and arc-sine are inverse functions." + (trigonometric-symmetry /.sin /.asin angle)) + (_.test "Cosine and arc-cosine are inverse functions." + (trigonometric-symmetry /.cos /.acos angle)) + (_.test "Tangent and arc-tangent are inverse functions." + (trigonometric-symmetry /.tan /.atan angle)) + ))) + (<| (_.context "Rounding") + (do r.monad + [sample (|> r.safe-frac (:: @ map (f/* +1000.0)))] + ($_ _.and + (_.test "The ceiling will be an integer value, and will be >= the original." + (let [ceil'd (/.ceil sample)] + (and (|> ceil'd frac-to-int int-to-frac (f/= ceil'd)) + (f/>= sample ceil'd) + (f/<= +1.0 (f/- sample ceil'd))))) + (_.test "The floor will be an integer value, and will be <= the original." + (let [floor'd (/.floor sample)] + (and (|> floor'd frac-to-int int-to-frac (f/= floor'd)) + (f/<= sample floor'd) + (f/<= +1.0 (f/- floor'd sample))))) + (_.test "The round will be an integer value, and will be < or > or = the original." + (let [round'd (/.round sample)] + (and (|> round'd frac-to-int int-to-frac (f/= round'd)) + (f/<= +1.0 (frac@abs (f/- sample round'd)))))) + ))) + (<| (_.context "Exponentials and logarithms") + (do r.monad + [sample (|> r.safe-frac (:: @ map (f/* +10.0)))] + (_.test "Logarithm is the inverse of exponential." + (|> sample /.exp /.log (within? +1.0e-15 sample))))) + (<| (_.context "Greatest-Common-Divisor and Least-Common-Multiple") + (do r.monad + [#let [gen-nat (|> r.nat (:: @ map (|>> (n/% 1000) (n/max 1))))] + x gen-nat + y gen-nat] + ($_ _.and + (_.test "GCD" + (let [gcd (/.n/gcd x y)] + (and (n/= 0 (n/% gcd x)) + (n/= 0 (n/% gcd y)) + (n/>= 1 gcd)))) - (_.test "LCM" - (let [lcm (/.n/lcm x y)] - (and (n/= 0 (n/% x lcm)) - (n/= 0 (n/% y lcm)) - (n/<= (n/* x y) lcm)))) - ))) + (_.test "LCM" + (let [lcm (/.n/lcm x y)] + (and (n/= 0 (n/% x lcm)) + (n/= 0 (n/% y lcm)) + (n/<= (n/* x y) lcm)))) + ))) - /infix.test - /modular.test - /logic/continuous.test - /logic/fuzzy.test - )) + /infix.test + /modular.test + /logic/continuous.test + /logic/fuzzy.test + ))) diff --git a/stdlib/source/test/lux/math/infix.lux b/stdlib/source/test/lux/math/infix.lux index db40f693c..5224700a5 100644 --- a/stdlib/source/test/lux/math/infix.lux +++ b/stdlib/source/test/lux/math/infix.lux @@ -12,7 +12,7 @@ (def: #export test Test - (<| (_.context (%name (name-of /.infix))) + (<| (_.context (%name (name-of /._))) (do r.monad [subject r.nat parameter r.nat diff --git a/stdlib/source/test/lux/type/resource.lux b/stdlib/source/test/lux/type/resource.lux index 293629e18..92b085e6a 100644 --- a/stdlib/source/test/lux/type/resource.lux +++ b/stdlib/source/test/lux/type/resource.lux @@ -6,7 +6,8 @@ [abstract [monad [indexed (#+ do)]]] - ["." io]] + [control + ["." io]]] {1 ["." / (#+ Res)]}) diff --git a/stdlib/source/test/lux/world/file.lux b/stdlib/source/test/lux/world/file.lux index 86b031660..b72e8be82 100644 --- a/stdlib/source/test/lux/world/file.lux +++ b/stdlib/source/test/lux/world/file.lux @@ -5,11 +5,11 @@ ["_" test (#+ Test)] [abstract/monad (#+ do)] [control + ["." io (#+ IO)] [concurrency ["." promise]] [security ["!" capability]]] - ["." io (#+ IO)] [data ["." error (#+ Error)] ["." text] diff --git a/stdlib/source/test/lux/world/net/tcp.lux b/stdlib/source/test/lux/world/net/tcp.lux index b3f9a6d0d..fb4983302 100644 --- a/stdlib/source/test/lux/world/net/tcp.lux +++ b/stdlib/source/test/lux/world/net/tcp.lux @@ -4,9 +4,9 @@ ["r" math/random (#+ Random)] ["_" test (#+ Test)] ["." abstract/monad (#+ do)] - ["." io (#+ IO)] [control ["ex" exception (#+ exception:)] + ["." io (#+ IO)] [concurrency ["." promise (#+ Promise Resolver)] ["." frp ("#@." functor)]] diff --git a/stdlib/source/test/lux/world/net/udp.lux b/stdlib/source/test/lux/world/net/udp.lux index 2e61257ad..44765acab 100644 --- a/stdlib/source/test/lux/world/net/udp.lux +++ b/stdlib/source/test/lux/world/net/udp.lux @@ -5,6 +5,7 @@ ["_" test (#+ Test)] ["." abstract/monad (#+ do)] [control + ["." io] [concurrency ["." promise]] [security @@ -12,7 +13,6 @@ [data ["." error] ["." text]] - ["." io] [world ["." binary] ["." net]]] |