rubico 1.9.7 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintignore +5 -0
- package/.eslintrc.js +3 -2
- package/.github/workflows/nodejs.yml +1 -1
- package/AggregateReducer.js +19 -0
- package/AggregateReducer.test.js +82 -0
- package/CHANGELOG.md +22 -1
- package/README.md +158 -81
- package/Transducer.js +75 -26
- package/Transducer.test.js +117 -0
- package/_internal/ComparisonOperator.js +68 -0
- package/_internal/File.js +41 -0
- package/_internal/FlatMappingAsyncIterator.js +4 -4
- package/_internal/FlatMappingIterator.js +1 -1
- package/_internal/TimeInLoopSuite.js +138 -0
- package/_internal/areAnyValuesPromises.js +23 -0
- package/_internal/{arrayAll.js → arrayEvery.js} +4 -4
- package/_internal/arrayExtend.js +3 -2
- package/_internal/arrayFilter.js +3 -4
- package/_internal/{arrayAny.js → arraySome.js} +8 -8
- package/_internal/{asyncIteratorAll.js → asyncIteratorEvery.js} +4 -4
- package/_internal/{asyncIteratorAny.js → asyncIteratorSome.js} +4 -4
- package/_internal/curry4.test.js +25 -0
- package/_internal/curry5.test.js +29 -0
- package/_internal/curryArgs2.js +43 -0
- package/_internal/curryArgs3.test.js +21 -0
- package/_internal/curryArgs4.js +65 -0
- package/_internal/curryArgs4.test.js +25 -0
- package/_internal/equals.js +13 -0
- package/_internal/findAllFilePaths.js +22 -0
- package/_internal/funcApply.js +2 -0
- package/_internal/funcCall.js +14 -0
- package/_internal/functionArrayAll.js +26 -0
- package/_internal/functionArrayAllSeries.js +55 -0
- package/_internal/functionObjectAll.js +32 -0
- package/_internal/genericReduce.js +4 -22
- package/_internal/genericTransform.js +15 -15
- package/_internal/improvedGenericTransform.js +93 -0
- package/_internal/{iteratorAll.js → iteratorEvery.js} +4 -4
- package/_internal/{iteratorAny.js → iteratorSome.js} +6 -6
- package/_internal/leftResolverRightResolverCompare.js +19 -0
- package/_internal/leftResolverRightValueCompare.js +16 -0
- package/_internal/leftValueRightResolverCompare.js +16 -0
- package/_internal/objectReduce.js +0 -1
- package/_internal/pathResolve.js +6 -0
- package/_internal/{reducerAll.js → reducerEvery.js} +4 -4
- package/_internal/reducerFlatMap.js +4 -4
- package/_internal/reducerFlatten.js +1 -1
- package/_internal/{reducerAny.js → reducerSome.js} +4 -4
- package/_internal/timeInLoop.js +37 -0
- package/_internal/timeInLoop.test.js +18 -0
- package/_internal/timeInLoopAsync.js +35 -0
- package/_internal/timeInLoopAsync.test.js +22 -0
- package/all.js +106 -40
- package/and.js +54 -36
- package/archive/{FlatMappingIteratorCool.js → FlatMappingIterator-2020-09-28.js} +1 -1
- package/archive/_Promise-2023-05-29.js +93 -0
- package/archive/arrayMap2-2023-05-29.js +73 -0
- package/archive/benchmarks-v1.9.7/all.js +34 -0
- package/archive/benchmarks-v1.9.7/and.js +24 -0
- package/archive/benchmarks-v1.9.7/assign.js +174 -0
- package/archive/benchmarks-v1.9.7/curry.js +55 -0
- package/archive/benchmarks-v1.9.7/eq.js +25 -0
- package/archive/benchmarks-v1.9.7/filter.js +1322 -0
- package/archive/benchmarks-v1.9.7/flatMap.js +48 -0
- package/archive/benchmarks-v1.9.7/get.js +44 -0
- package/archive/benchmarks-v1.9.7/gt.js +25 -0
- package/archive/benchmarks-v1.9.7/gte.js +25 -0
- package/archive/benchmarks-v1.9.7/lt.js +25 -0
- package/archive/benchmarks-v1.9.7/lte.js +25 -0
- package/archive/benchmarks-v1.9.7/map.js +892 -0
- package/archive/benchmarks-v1.9.7/omit.js +28 -0
- package/archive/benchmarks-v1.9.7/or.js +51 -0
- package/archive/benchmarks-v1.9.7/pick.js +24 -0
- package/archive/benchmarks-v1.9.7/pipe.js +152 -0
- package/archive/benchmarks-v1.9.7/reduce.js +739 -0
- package/archive/benchmarks-v1.9.7/switchCase.js +256 -0
- package/archive/benchmarks-v1.9.7/tap.js +90 -0
- package/archive/benchmarks-v1.9.7/transform.js +218 -0
- package/archive/benchmarks-v1.9.7/tryCatch.js +108 -0
- package/assign.js +18 -8
- package/bench +65 -0
- package/benchmark-output/v1.9.7 +268 -0
- package/benchmarks/all.async.js +43 -0
- package/benchmarks/all.js +42 -33
- package/benchmarks/always.js +15 -0
- package/benchmarks/and.async.js +25 -0
- package/benchmarks/and.js +20 -19
- package/benchmarks/assign.async.js +27 -0
- package/benchmarks/assign.js +20 -167
- package/benchmarks/curry.js +34 -54
- package/benchmarks/eq.async.js +23 -0
- package/benchmarks/eq.js +17 -19
- package/benchmarks/every.async.js +19 -0
- package/benchmarks/every.js +19 -0
- package/benchmarks/filter.async.js +32 -0
- package/benchmarks/filter.js +27 -1311
- package/benchmarks/flatMap.async.js +26 -0
- package/benchmarks/flatMap.js +26 -36
- package/benchmarks/get.async.js +19 -0
- package/benchmarks/get.js +27 -32
- package/benchmarks/gt.async.js +23 -0
- package/benchmarks/gt.js +17 -19
- package/benchmarks/gte.async.js +23 -0
- package/benchmarks/gte.js +17 -19
- package/benchmarks/lt.async.js +23 -0
- package/benchmarks/lt.js +17 -19
- package/benchmarks/lte.async.js +23 -0
- package/benchmarks/lte.js +17 -19
- package/benchmarks/map.async.js +43 -0
- package/benchmarks/map.js +24 -876
- package/benchmarks/misc/Promise.js +26 -0
- package/benchmarks/misc/isPromise.js +30 -0
- package/benchmarks/misc/promiseAll.js +36 -0
- package/benchmarks/not.js +23 -0
- package/benchmarks/omit.js +30 -20
- package/benchmarks/or.async.js +25 -0
- package/benchmarks/or.js +23 -49
- package/benchmarks/pick.js +30 -16
- package/benchmarks/pipe.async.js +47 -0
- package/benchmarks/pipe.js +46 -151
- package/benchmarks/reduce.async.js +32 -0
- package/benchmarks/reduce.js +27 -728
- package/benchmarks/set.async.js +19 -0
- package/benchmarks/set.js +41 -0
- package/benchmarks/some.async.js +19 -0
- package/benchmarks/some.js +19 -0
- package/benchmarks/switchCase.async.js +27 -0
- package/benchmarks/switchCase.js +55 -256
- package/benchmarks/tap.js +10 -85
- package/benchmarks/thunkify.js +15 -0
- package/benchmarks/transform.async.js +27 -0
- package/benchmarks/transform.js +28 -206
- package/benchmarks/tryCatch.async.js +25 -0
- package/benchmarks/tryCatch.js +24 -100
- package/build +472 -0
- package/compose.js +46 -0
- package/dist/Transducer.es.js +481 -0
- package/dist/Transducer.es.min.js +7 -0
- package/dist/Transducer.js +488 -0
- package/dist/Transducer.min.js +8 -0
- package/dist/Transducer.mjs +481 -0
- package/dist/__.es.js +2 -2
- package/dist/__.es.min.js +2 -2
- package/dist/__.js +2 -2
- package/dist/__.min.js +2 -2
- package/dist/__.mjs +2 -2
- package/dist/all.es.js +173 -92
- package/dist/all.es.min.js +3 -3
- package/dist/all.js +173 -92
- package/dist/all.min.js +3 -3
- package/dist/all.mjs +173 -92
- package/dist/always.es.js +2 -2
- package/dist/always.es.min.js +2 -2
- package/dist/always.js +2 -2
- package/dist/always.min.js +2 -2
- package/dist/always.mjs +2 -2
- package/dist/and.es.js +101 -32
- package/dist/and.es.min.js +3 -3
- package/dist/and.js +101 -32
- package/dist/and.min.js +3 -3
- package/dist/and.mjs +101 -32
- package/dist/assign.es.js +37 -10
- package/dist/assign.es.min.js +3 -3
- package/dist/assign.js +37 -10
- package/dist/assign.min.js +3 -3
- package/dist/assign.mjs +37 -10
- package/dist/compose.es.js +71 -0
- package/dist/compose.es.min.js +7 -0
- package/dist/compose.js +78 -0
- package/dist/compose.min.js +8 -0
- package/dist/compose.mjs +71 -0
- package/dist/curry.es.js +2 -2
- package/dist/curry.es.min.js +2 -2
- package/dist/curry.js +2 -2
- package/dist/curry.min.js +2 -2
- package/dist/curry.mjs +2 -2
- package/dist/eq.es.js +172 -49
- package/dist/eq.es.min.js +3 -3
- package/dist/eq.js +172 -49
- package/dist/eq.min.js +3 -3
- package/dist/eq.mjs +172 -49
- package/dist/every.es.js +194 -0
- package/dist/every.es.min.js +7 -0
- package/dist/every.js +201 -0
- package/dist/every.min.js +8 -0
- package/dist/every.mjs +194 -0
- package/dist/filter.es.js +14 -108
- package/dist/filter.es.min.js +3 -3
- package/dist/filter.js +14 -108
- package/dist/filter.min.js +3 -3
- package/dist/filter.mjs +14 -108
- package/dist/flatMap.es.js +27 -214
- package/dist/flatMap.es.min.js +3 -3
- package/dist/flatMap.js +27 -214
- package/dist/flatMap.min.js +3 -3
- package/dist/flatMap.mjs +27 -214
- package/dist/{x/forEach.es.js → forEach.es.js} +52 -70
- package/dist/forEach.es.min.js +7 -0
- package/dist/{x/forEach.js → forEach.js} +52 -70
- package/dist/forEach.min.js +8 -0
- package/dist/{x/forEach.mjs → forEach.mjs} +52 -70
- package/dist/get.es.js +60 -5
- package/dist/get.es.min.js +3 -3
- package/dist/get.js +60 -5
- package/dist/get.min.js +3 -3
- package/dist/get.mjs +60 -5
- package/dist/gt.es.js +171 -48
- package/dist/gt.es.min.js +3 -3
- package/dist/gt.js +171 -48
- package/dist/gt.min.js +3 -3
- package/dist/gt.mjs +171 -48
- package/dist/gte.es.js +171 -48
- package/dist/gte.es.min.js +3 -3
- package/dist/gte.js +171 -48
- package/dist/gte.min.js +3 -3
- package/dist/gte.mjs +171 -48
- package/dist/lt.es.js +171 -48
- package/dist/lt.es.min.js +3 -3
- package/dist/lt.js +171 -48
- package/dist/lt.min.js +3 -3
- package/dist/lt.mjs +171 -48
- package/dist/lte.es.js +171 -48
- package/dist/lte.es.min.js +3 -3
- package/dist/lte.js +171 -48
- package/dist/lte.min.js +3 -3
- package/dist/lte.mjs +171 -48
- package/dist/map.es.js +12 -101
- package/dist/map.es.min.js +3 -3
- package/dist/map.js +12 -101
- package/dist/map.min.js +3 -3
- package/dist/map.mjs +12 -101
- package/dist/not.es.js +75 -14
- package/dist/not.es.min.js +3 -3
- package/dist/not.js +75 -14
- package/dist/not.min.js +3 -3
- package/dist/not.mjs +75 -14
- package/dist/omit.es.js +7 -2
- package/dist/omit.es.min.js +3 -3
- package/dist/omit.js +7 -2
- package/dist/omit.min.js +3 -3
- package/dist/omit.mjs +7 -2
- package/dist/or.es.js +99 -31
- package/dist/or.es.min.js +3 -3
- package/dist/or.js +99 -31
- package/dist/or.min.js +3 -3
- package/dist/or.mjs +99 -31
- package/dist/pick.es.js +8 -3
- package/dist/pick.es.min.js +3 -3
- package/dist/pick.js +8 -3
- package/dist/pick.min.js +3 -3
- package/dist/pick.mjs +8 -3
- package/dist/pipe.es.js +42 -46
- package/dist/pipe.es.min.js +3 -3
- package/dist/pipe.js +42 -46
- package/dist/pipe.min.js +3 -3
- package/dist/pipe.mjs +42 -46
- package/dist/reduce.es.js +52 -94
- package/dist/reduce.es.min.js +3 -3
- package/dist/reduce.js +52 -94
- package/dist/reduce.min.js +3 -3
- package/dist/reduce.mjs +52 -94
- package/dist/rubico.es.js +762 -883
- package/dist/rubico.es.min.js +3 -3
- package/dist/rubico.global.js +2794 -0
- package/dist/rubico.global.min.js +8 -0
- package/dist/rubico.js +739 -869
- package/dist/rubico.min.js +3 -3
- package/dist/rubico.mjs +762 -883
- package/dist/set.es.js +18 -3
- package/dist/set.es.min.js +3 -3
- package/dist/set.js +18 -3
- package/dist/set.min.js +3 -3
- package/dist/set.mjs +18 -3
- package/dist/{any.js → some.es.js} +64 -54
- package/dist/some.es.min.js +7 -0
- package/dist/{any.mjs → some.js} +72 -48
- package/dist/some.min.js +8 -0
- package/dist/{any.es.js → some.mjs} +65 -48
- package/dist/switchCase.es.js +55 -5
- package/dist/switchCase.es.min.js +3 -3
- package/dist/switchCase.js +55 -5
- package/dist/switchCase.min.js +3 -3
- package/dist/switchCase.mjs +55 -5
- package/dist/tap.es.js +2 -9
- package/dist/tap.es.min.js +3 -3
- package/dist/tap.js +2 -9
- package/dist/tap.min.js +3 -3
- package/dist/tap.mjs +2 -9
- package/dist/thunkify.es.js +45 -2
- package/dist/thunkify.es.min.js +3 -3
- package/dist/thunkify.js +45 -2
- package/dist/thunkify.min.js +3 -3
- package/dist/thunkify.mjs +45 -2
- package/dist/transform.es.js +35 -71
- package/dist/transform.es.min.js +3 -3
- package/dist/transform.js +35 -71
- package/dist/transform.min.js +3 -3
- package/dist/transform.mjs +35 -71
- package/dist/tryCatch.es.js +33 -17
- package/dist/tryCatch.es.min.js +3 -3
- package/dist/tryCatch.js +33 -17
- package/dist/tryCatch.min.js +3 -3
- package/dist/tryCatch.mjs +33 -17
- package/dist/x/append.es.js +2 -2
- package/dist/x/append.es.min.js +2 -2
- package/dist/x/append.js +2 -2
- package/dist/x/append.min.js +2 -2
- package/dist/x/append.mjs +2 -2
- package/dist/x/callProp.es.js +2 -2
- package/dist/x/callProp.es.min.js +2 -2
- package/dist/x/callProp.js +2 -2
- package/dist/x/callProp.min.js +2 -2
- package/dist/x/callProp.mjs +2 -2
- package/dist/x/defaultsDeep.es.js +2 -2
- package/dist/x/defaultsDeep.es.min.js +2 -2
- package/dist/x/defaultsDeep.js +2 -2
- package/dist/x/defaultsDeep.min.js +2 -2
- package/dist/x/defaultsDeep.mjs +2 -2
- package/dist/x/differenceWith.es.js +7 -7
- package/dist/x/differenceWith.es.min.js +3 -3
- package/dist/x/differenceWith.js +7 -7
- package/dist/x/differenceWith.min.js +2 -2
- package/dist/x/differenceWith.mjs +7 -7
- package/dist/x/filterOut.es.js +60 -117
- package/dist/x/filterOut.es.min.js +3 -3
- package/dist/x/filterOut.js +60 -117
- package/dist/x/filterOut.min.js +3 -3
- package/dist/x/filterOut.mjs +60 -117
- package/dist/x/find.es.js +2 -2
- package/dist/x/find.es.min.js +2 -2
- package/dist/x/find.js +2 -2
- package/dist/x/find.min.js +2 -2
- package/dist/x/find.mjs +2 -2
- package/dist/x/findIndex.es.js +2 -2
- package/dist/x/findIndex.es.min.js +2 -2
- package/dist/x/findIndex.js +2 -2
- package/dist/x/findIndex.min.js +2 -2
- package/dist/x/findIndex.mjs +2 -2
- package/dist/x/first.es.js +2 -2
- package/dist/x/first.es.min.js +2 -2
- package/dist/x/first.js +2 -2
- package/dist/x/first.min.js +2 -2
- package/dist/x/first.mjs +2 -2
- package/dist/x/flatten.es.js +20 -207
- package/dist/x/flatten.es.min.js +3 -3
- package/dist/x/flatten.js +20 -207
- package/dist/x/flatten.min.js +3 -3
- package/dist/x/flatten.mjs +20 -207
- package/dist/x/groupBy.es.js +52 -94
- package/dist/x/groupBy.es.min.js +3 -3
- package/dist/x/groupBy.js +52 -94
- package/dist/x/groupBy.min.js +3 -3
- package/dist/x/groupBy.mjs +52 -94
- package/dist/x/has.es.js +2 -2
- package/dist/x/has.es.min.js +2 -2
- package/dist/x/has.js +2 -2
- package/dist/x/has.min.js +2 -2
- package/dist/x/has.mjs +2 -2
- package/dist/x/identity.es.js +2 -2
- package/dist/x/identity.es.min.js +2 -2
- package/dist/x/identity.js +2 -2
- package/dist/x/identity.min.js +2 -2
- package/dist/x/identity.mjs +2 -2
- package/dist/x/includes.es.js +2 -2
- package/dist/x/includes.es.min.js +2 -2
- package/dist/x/includes.js +2 -2
- package/dist/x/includes.min.js +2 -2
- package/dist/x/includes.mjs +2 -2
- package/dist/x/isDeepEqual.es.js +2 -2
- package/dist/x/isDeepEqual.es.min.js +2 -2
- package/dist/x/isDeepEqual.js +2 -2
- package/dist/x/isDeepEqual.min.js +2 -2
- package/dist/x/isDeepEqual.mjs +2 -2
- package/dist/x/isEmpty.es.js +2 -2
- package/dist/x/isEmpty.es.min.js +2 -2
- package/dist/x/isEmpty.js +2 -2
- package/dist/x/isEmpty.min.js +2 -2
- package/dist/x/isEmpty.mjs +2 -2
- package/dist/x/isEqual.es.js +2 -2
- package/dist/x/isEqual.es.min.js +2 -2
- package/dist/x/isEqual.js +2 -2
- package/dist/x/isEqual.min.js +2 -2
- package/dist/x/isEqual.mjs +2 -2
- package/dist/x/isFunction.es.js +2 -2
- package/dist/x/isFunction.es.min.js +2 -2
- package/dist/x/isFunction.js +2 -2
- package/dist/x/isFunction.min.js +2 -2
- package/dist/x/isFunction.mjs +2 -2
- package/dist/x/isIn.es.js +2 -2
- package/dist/x/isIn.es.min.js +2 -2
- package/dist/x/isIn.js +2 -2
- package/dist/x/isIn.min.js +2 -2
- package/dist/x/isIn.mjs +2 -2
- package/dist/x/isObject.es.js +2 -2
- package/dist/x/isObject.es.min.js +2 -2
- package/dist/x/isObject.js +2 -2
- package/dist/x/isObject.min.js +2 -2
- package/dist/x/isObject.mjs +2 -2
- package/dist/x/isString.es.js +2 -2
- package/dist/x/isString.es.min.js +2 -2
- package/dist/x/isString.js +2 -2
- package/dist/x/isString.min.js +2 -2
- package/dist/x/isString.mjs +2 -2
- package/dist/x/keys.es.js +2 -2
- package/dist/x/keys.es.min.js +2 -2
- package/dist/x/keys.js +2 -2
- package/dist/x/keys.min.js +2 -2
- package/dist/x/keys.mjs +2 -2
- package/dist/x/last.es.js +2 -2
- package/dist/x/last.es.min.js +2 -2
- package/dist/x/last.js +2 -2
- package/dist/x/last.min.js +2 -2
- package/dist/x/last.mjs +2 -2
- package/dist/x/maxBy.es.js +59 -6
- package/dist/x/maxBy.es.min.js +3 -3
- package/dist/x/maxBy.js +59 -6
- package/dist/x/maxBy.min.js +3 -3
- package/dist/x/maxBy.mjs +59 -6
- package/dist/x/noop.es.js +2 -2
- package/dist/x/noop.es.min.js +2 -2
- package/dist/x/noop.js +2 -2
- package/dist/x/noop.min.js +2 -2
- package/dist/x/noop.mjs +2 -2
- package/dist/x/pluck.es.js +32 -103
- package/dist/x/pluck.es.min.js +3 -3
- package/dist/x/pluck.js +32 -103
- package/dist/x/pluck.min.js +3 -3
- package/dist/x/pluck.mjs +32 -103
- package/dist/x/prepend.es.js +2 -2
- package/dist/x/prepend.es.min.js +2 -2
- package/dist/x/prepend.js +2 -2
- package/dist/x/prepend.min.js +2 -2
- package/dist/x/prepend.mjs +2 -2
- package/dist/x/size.es.js +2 -2
- package/dist/x/size.es.min.js +2 -2
- package/dist/x/size.js +2 -2
- package/dist/x/size.min.js +2 -2
- package/dist/x/size.mjs +2 -2
- package/dist/x/trace.es.js +2 -9
- package/dist/x/trace.es.min.js +3 -3
- package/dist/x/trace.js +2 -9
- package/dist/x/trace.min.js +3 -3
- package/dist/x/trace.mjs +2 -9
- package/dist/x/unionWith.es.js +2 -2
- package/dist/x/unionWith.es.min.js +2 -2
- package/dist/x/unionWith.js +2 -2
- package/dist/x/unionWith.min.js +2 -2
- package/dist/x/unionWith.mjs +2 -2
- package/dist/x/uniq.es.js +2 -2
- package/dist/x/uniq.es.min.js +2 -2
- package/dist/x/uniq.js +2 -2
- package/dist/x/uniq.min.js +2 -2
- package/dist/x/uniq.mjs +2 -2
- package/dist/x/unless.es.js +2 -2
- package/dist/x/unless.es.min.js +2 -2
- package/dist/x/unless.js +2 -2
- package/dist/x/unless.min.js +2 -2
- package/dist/x/unless.mjs +2 -2
- package/dist/x/values.es.js +2 -2
- package/dist/x/values.es.min.js +2 -2
- package/dist/x/values.js +2 -2
- package/dist/x/values.min.js +2 -2
- package/dist/x/values.mjs +2 -2
- package/dist/x/when.es.js +2 -2
- package/dist/x/when.es.min.js +2 -2
- package/dist/x/when.js +2 -2
- package/dist/x/when.min.js +2 -2
- package/dist/x/when.mjs +2 -2
- package/dist-test.js +31 -2042
- package/eq.js +21 -63
- package/es.js +739 -869
- package/every.js +94 -0
- package/filter.js +23 -91
- package/flatMap.js +75 -70
- package/forEach.js +82 -0
- package/get.js +23 -6
- package/global.js +6 -4
- package/gt.js +15 -58
- package/gte.js +14 -57
- package/index.js +739 -869
- package/lt.js +17 -60
- package/lte.js +14 -57
- package/map.js +9 -94
- package/memory-usage/reduce.js +2 -2
- package/not.js +27 -45
- package/omit.js +4 -0
- package/or.js +50 -33
- package/package.json +7 -7
- package/pick.js +5 -1
- package/pipe.js +13 -50
- package/reduce.js +42 -51
- package/rubico.js +22 -11
- package/set.js +43 -10
- package/some.js +105 -0
- package/switchCase.js +13 -3
- package/tap.js +0 -24
- package/test.js +847 -1096
- package/thunkify.js +9 -0
- package/tmp.js +1 -0
- package/transform.js +31 -16
- package/tryCatch.js +19 -15
- package/x/differenceWith.js +3 -3
- package/x/filterOut.test.js +6 -6
- package/x/flatten.js +1 -1
- package/x/flatten.test.js +0 -8
- package/x/index.js +0 -2
- package/x/pluck.js +18 -27
- package/x/pluck.test.js +3 -7
- package/x/timeInLoop.js +16 -25
- package/x/timeInLoop.test.js +8 -4
- package/any.js +0 -82
- package/dist/__.min.mjs +0 -7
- package/dist/all.min.mjs +0 -7
- package/dist/always.min.mjs +0 -7
- package/dist/and.min.mjs +0 -7
- package/dist/any.es.min.js +0 -7
- package/dist/any.min.js +0 -8
- package/dist/any.min.mjs +0 -7
- package/dist/assign.min.mjs +0 -7
- package/dist/curry.min.mjs +0 -7
- package/dist/eq.min.mjs +0 -7
- package/dist/filter.min.mjs +0 -7
- package/dist/flatMap.min.mjs +0 -7
- package/dist/fork.es.js +0 -159
- package/dist/fork.es.min.js +0 -7
- package/dist/fork.js +0 -166
- package/dist/fork.min.js +0 -8
- package/dist/fork.min.mjs +0 -7
- package/dist/fork.mjs +0 -159
- package/dist/get.min.mjs +0 -7
- package/dist/gt.min.mjs +0 -7
- package/dist/gte.min.mjs +0 -7
- package/dist/lt.min.mjs +0 -7
- package/dist/lte.min.mjs +0 -7
- package/dist/map.min.mjs +0 -7
- package/dist/not.min.mjs +0 -7
- package/dist/omit.min.mjs +0 -7
- package/dist/or.min.mjs +0 -7
- package/dist/pick.min.mjs +0 -7
- package/dist/pipe.min.mjs +0 -7
- package/dist/reduce.min.mjs +0 -7
- package/dist/rubico.min.mjs +0 -7
- package/dist/set.min.mjs +0 -7
- package/dist/switchCase.min.mjs +0 -7
- package/dist/tap.min.mjs +0 -7
- package/dist/thunkify.min.mjs +0 -7
- package/dist/transform.min.mjs +0 -7
- package/dist/tryCatch.min.mjs +0 -7
- package/dist/x/append.min.mjs +0 -7
- package/dist/x/callProp.min.mjs +0 -7
- package/dist/x/defaultsDeep.min.mjs +0 -7
- package/dist/x/differenceWith.min.mjs +0 -7
- package/dist/x/filterOut.min.mjs +0 -7
- package/dist/x/find.min.mjs +0 -7
- package/dist/x/findIndex.min.mjs +0 -7
- package/dist/x/first.min.mjs +0 -7
- package/dist/x/flatten.min.mjs +0 -7
- package/dist/x/forEach.es.min.js +0 -7
- package/dist/x/forEach.min.js +0 -8
- package/dist/x/forEach.min.mjs +0 -7
- package/dist/x/groupBy.min.mjs +0 -7
- package/dist/x/has.min.mjs +0 -7
- package/dist/x/identity.min.mjs +0 -7
- package/dist/x/includes.min.mjs +0 -7
- package/dist/x/isDeepEqual.min.mjs +0 -7
- package/dist/x/isEmpty.min.mjs +0 -7
- package/dist/x/isEqual.min.mjs +0 -7
- package/dist/x/isFunction.min.mjs +0 -7
- package/dist/x/isIn.min.mjs +0 -7
- package/dist/x/isObject.min.mjs +0 -7
- package/dist/x/isString.min.mjs +0 -7
- package/dist/x/keys.min.mjs +0 -7
- package/dist/x/last.min.mjs +0 -7
- package/dist/x/maxBy.min.mjs +0 -7
- package/dist/x/noop.min.mjs +0 -7
- package/dist/x/pluck.min.mjs +0 -7
- package/dist/x/prepend.min.mjs +0 -7
- package/dist/x/size.min.mjs +0 -7
- package/dist/x/trace.min.mjs +0 -7
- package/dist/x/unionWith.min.mjs +0 -7
- package/dist/x/uniq.min.mjs +0 -7
- package/dist/x/unless.min.mjs +0 -7
- package/dist/x/values.min.mjs +0 -7
- package/dist/x/when.min.mjs +0 -7
- package/distributor.js +0 -495
- package/fork.js +0 -101
- package/x/forEach.js +0 -93
- package/x/forEach.test.js +0 -218
- /package/{benchmarks → archive/benchmarks-v1.9.7}/any.js +0 -0
- /package/{x/forEach.benchmark.js → archive/benchmarks-v1.9.7/forEach.js} +0 -0
- /package/{benchmarks → archive/benchmarks-v1.9.7}/fork.js +0 -0
- /package/{benchmarks → archive/benchmarks-v1.9.7}/integration.js +0 -0
- /package/{benchmarks → archive/benchmarks-v1.9.7}/misc.js +0 -0
package/test.js
CHANGED
|
@@ -3,18 +3,20 @@ const assert = require('assert')
|
|
|
3
3
|
const stream = require('stream')
|
|
4
4
|
const path = require('path')
|
|
5
5
|
const fs = require('fs')
|
|
6
|
+
const { Readable, Writable } = require('stream')
|
|
7
|
+
const util = require('util')
|
|
8
|
+
const Transducer = require('./Transducer')
|
|
6
9
|
const rubico = require('./rubico')
|
|
7
10
|
const isDeepEqual = require('./x/isDeepEqual')
|
|
8
|
-
const { Readable, Writable } = require('stream')
|
|
9
11
|
const mapFrom = require('./_internal/mapFrom')
|
|
10
12
|
const sha256 = require('./_internal/sha256')
|
|
11
13
|
|
|
12
14
|
const {
|
|
13
|
-
pipe, tap,
|
|
15
|
+
pipe, compose, tap,
|
|
14
16
|
tryCatch, switchCase,
|
|
15
|
-
|
|
16
|
-
map, filter, reduce, transform,
|
|
17
|
-
|
|
17
|
+
all, assign, get, set, pick, omit,
|
|
18
|
+
map, filter, flatMap, forEach, reduce, transform,
|
|
19
|
+
some, every, and, or, not,
|
|
18
20
|
eq, gt, lt, gte, lte,
|
|
19
21
|
thunkify, always,
|
|
20
22
|
curry, __,
|
|
@@ -70,20 +72,6 @@ const asyncMult = (y, xi) => new Promise(resolve => {
|
|
|
70
72
|
setImmediate(() => resolve(y * xi))
|
|
71
73
|
})
|
|
72
74
|
|
|
73
|
-
const asyncArrayReduce = (fn, x0) => async x => {
|
|
74
|
-
if (x.length < 2) throw new Error('array must have length >= 2')
|
|
75
|
-
let y, i
|
|
76
|
-
if (x0 === undefined || x0 === null) {
|
|
77
|
-
y = await fn(x[0], x[1])
|
|
78
|
-
i = 2
|
|
79
|
-
} else {
|
|
80
|
-
y = await fn(x0, x[0])
|
|
81
|
-
i = 1
|
|
82
|
-
}
|
|
83
|
-
while (i < x.length) { y = await fn(y, x[i]); i += 1 }
|
|
84
|
-
return y
|
|
85
|
-
}
|
|
86
|
-
|
|
87
75
|
const constructReadStream = iterable => {
|
|
88
76
|
const y = new stream.Readable({ objectMode: true })
|
|
89
77
|
y._read = () => {}
|
|
@@ -109,8 +97,11 @@ const consumeReadStreamPush = s => new Promise((resolve, reject) => {
|
|
|
109
97
|
const consumeReadStreamPull = s => new Promise((resolve, reject) => {
|
|
110
98
|
let y = ''
|
|
111
99
|
s.on('readable', () => {
|
|
112
|
-
let chunk
|
|
113
|
-
while (chunk
|
|
100
|
+
let chunk = s.read()
|
|
101
|
+
while (chunk != null) {
|
|
102
|
+
y += `${chunk}`
|
|
103
|
+
chunk = s.read()
|
|
104
|
+
}
|
|
114
105
|
})
|
|
115
106
|
s.on('end', () => resolve(y))
|
|
116
107
|
s.on('error', err => reject(err))
|
|
@@ -281,13 +272,16 @@ describe('rubico', () => {
|
|
|
281
272
|
])
|
|
282
273
|
assert.deepEqual(array, [3, 6, 9])
|
|
283
274
|
})
|
|
275
|
+
it('behaves eagerly and resolves any amount of Promise arguments before the array of functions', async () => {
|
|
276
|
+
const array = await pipe(Promise.resolve(1), 2, Promise.resolve(3), [
|
|
277
|
+
Array.of,
|
|
278
|
+
numbers => numbers.map(number => number * 3),
|
|
279
|
+
])
|
|
280
|
+
assert.deepEqual(array, [3, 6, 9])
|
|
281
|
+
})
|
|
284
282
|
it('chains async and regular functions together', async () => {
|
|
285
283
|
ase(await pipe([hi, ho, asyncHey])('yo'), 'yohihohey')
|
|
286
284
|
})
|
|
287
|
-
it('chains functions in reverse if passed a function (very contrived)', async () => {
|
|
288
|
-
ase(await pipe([hi, ho, asyncHey])((y, xi) => y + xi), '(y, xi) => y + xiheyhohi')
|
|
289
|
-
ase(await pipe([asyncHey, ho, hi])((y, xi) => y + xi), '(y, xi) => y + xihihohey')
|
|
290
|
-
})
|
|
291
285
|
it('does something without arguments', async () => {
|
|
292
286
|
ase(await pipe([hi, ho, asyncHey])(), 'undefinedhihohey')
|
|
293
287
|
})
|
|
@@ -359,13 +353,13 @@ describe('rubico', () => {
|
|
|
359
353
|
new TypeError('funcB is not a function'),
|
|
360
354
|
)
|
|
361
355
|
})
|
|
362
|
-
it('handles sync errors
|
|
356
|
+
it('handles sync errors', async () => {
|
|
363
357
|
assert.throws(
|
|
364
358
|
() => pipe([hi, hi, x => { throw new Error(`throwing ${x}`) }])('yo'),
|
|
365
359
|
new Error('throwing yohihi'),
|
|
366
360
|
)
|
|
367
361
|
})
|
|
368
|
-
it('handles async errors
|
|
362
|
+
it('handles async errors', async () => {
|
|
369
363
|
assert.rejects(
|
|
370
364
|
() => pipe([hi, asyncHey, x => { throw new Error(`throwing ${x}`) }])('yo'),
|
|
371
365
|
new Error('throwing yohihey'),
|
|
@@ -373,82 +367,236 @@ describe('rubico', () => {
|
|
|
373
367
|
})
|
|
374
368
|
})
|
|
375
369
|
|
|
376
|
-
describe('
|
|
377
|
-
it('chains
|
|
378
|
-
|
|
370
|
+
describe('compose', () => {
|
|
371
|
+
it('chains functions in reverse', async () => {
|
|
372
|
+
ade(
|
|
373
|
+
compose([1, 2, 3, 4, 5], [
|
|
374
|
+
map(number => number ** 2),
|
|
375
|
+
map(number => number + 2),
|
|
376
|
+
filter(number => number % 2 == 1)
|
|
377
|
+
]),
|
|
378
|
+
[9, 25, 49],
|
|
379
|
+
)
|
|
380
|
+
|
|
381
|
+
ade(
|
|
382
|
+
compose([
|
|
383
|
+
map(number => number ** 2),
|
|
384
|
+
map(number => number + 2),
|
|
385
|
+
filter(number => number % 2 == 1)
|
|
386
|
+
])([1, 2, 3, 4, 5]),
|
|
387
|
+
[9, 25, 49],
|
|
388
|
+
)
|
|
389
|
+
|
|
390
|
+
ade(
|
|
391
|
+
await compose([
|
|
392
|
+
map(async number => number ** 2),
|
|
393
|
+
map(number => number + 2),
|
|
394
|
+
filter(async number => number % 2 == 1)
|
|
395
|
+
])([1, 2, 3, 4, 5]),
|
|
396
|
+
[9, 25, 49],
|
|
397
|
+
)
|
|
398
|
+
|
|
399
|
+
ade(
|
|
400
|
+
await compose(Promise.resolve([1, 2, 3, 4, 5]), [
|
|
401
|
+
map(number => number ** 2),
|
|
402
|
+
map(number => number + 2),
|
|
403
|
+
filter(number => number % 2 == 1)
|
|
404
|
+
]),
|
|
405
|
+
[9, 25, 49],
|
|
406
|
+
)
|
|
379
407
|
})
|
|
380
408
|
})
|
|
381
409
|
|
|
382
|
-
describe('
|
|
410
|
+
describe('all', () => {
|
|
411
|
+
it('API coverage', async () => {
|
|
412
|
+
ade(
|
|
413
|
+
all(1, 2, 3, [
|
|
414
|
+
Array.of,
|
|
415
|
+
Array.of,
|
|
416
|
+
Array.of,
|
|
417
|
+
]),
|
|
418
|
+
[
|
|
419
|
+
[1, 2, 3],
|
|
420
|
+
[1, 2, 3],
|
|
421
|
+
[1, 2, 3],
|
|
422
|
+
],
|
|
423
|
+
)
|
|
424
|
+
|
|
425
|
+
ade(
|
|
426
|
+
all([
|
|
427
|
+
Array.of,
|
|
428
|
+
Array.of,
|
|
429
|
+
Array.of,
|
|
430
|
+
])(1, 2, 3),
|
|
431
|
+
[
|
|
432
|
+
[1, 2, 3],
|
|
433
|
+
[1, 2, 3],
|
|
434
|
+
[1, 2, 3],
|
|
435
|
+
],
|
|
436
|
+
)
|
|
437
|
+
|
|
438
|
+
ade(
|
|
439
|
+
await all(Promise.resolve(1), 2, Promise.resolve(3), [
|
|
440
|
+
Array.of,
|
|
441
|
+
Array.of,
|
|
442
|
+
Array.of,
|
|
443
|
+
]),
|
|
444
|
+
[
|
|
445
|
+
[1, 2, 3],
|
|
446
|
+
[1, 2, 3],
|
|
447
|
+
[1, 2, 3],
|
|
448
|
+
],
|
|
449
|
+
)
|
|
450
|
+
|
|
451
|
+
ade(
|
|
452
|
+
all(1, 2, 3, {
|
|
453
|
+
a: Array.of,
|
|
454
|
+
b: Array.of,
|
|
455
|
+
c: Array.of,
|
|
456
|
+
}),
|
|
457
|
+
{
|
|
458
|
+
a: [1, 2, 3],
|
|
459
|
+
b: [1, 2, 3],
|
|
460
|
+
c: [1, 2, 3],
|
|
461
|
+
},
|
|
462
|
+
)
|
|
463
|
+
|
|
464
|
+
ade(
|
|
465
|
+
all({
|
|
466
|
+
a: Array.of,
|
|
467
|
+
b: Array.of,
|
|
468
|
+
c: Array.of,
|
|
469
|
+
})(1, 2, 3),
|
|
470
|
+
{
|
|
471
|
+
a: [1, 2, 3],
|
|
472
|
+
b: [1, 2, 3],
|
|
473
|
+
c: [1, 2, 3],
|
|
474
|
+
},
|
|
475
|
+
)
|
|
476
|
+
|
|
477
|
+
ade(
|
|
478
|
+
await all(Promise.resolve(1), 2, Promise.resolve(3), {
|
|
479
|
+
a: Array.of,
|
|
480
|
+
b: Array.of,
|
|
481
|
+
c: Array.of,
|
|
482
|
+
}),
|
|
483
|
+
{
|
|
484
|
+
a: [1, 2, 3],
|
|
485
|
+
b: [1, 2, 3],
|
|
486
|
+
c: [1, 2, 3],
|
|
487
|
+
},
|
|
488
|
+
)
|
|
489
|
+
})
|
|
383
490
|
it('maps input to array of sync functions', async () => {
|
|
384
|
-
ade(
|
|
491
|
+
ade(all([hi, hi, hi])('yo'), ['yohi', 'yohi', 'yohi'])
|
|
385
492
|
})
|
|
386
493
|
it('maps input to object of sync functions', async () => {
|
|
387
494
|
ade(
|
|
388
|
-
|
|
495
|
+
all({ a: hi, b: hi, c: hi })('yo'),
|
|
389
496
|
{ a: 'yohi', b: 'yohi', c: 'yohi' },
|
|
390
497
|
)
|
|
391
498
|
})
|
|
392
499
|
it('maps input to array of async functions', async () => {
|
|
393
|
-
aok(
|
|
500
|
+
aok(all([asyncHey, asyncHey, asyncHey])('yo') instanceof Promise)
|
|
394
501
|
ade(
|
|
395
|
-
await
|
|
502
|
+
await all([asyncHey, asyncHey, asyncHey])('yo'),
|
|
396
503
|
['yohey', 'yohey', 'yohey'],
|
|
397
504
|
)
|
|
398
505
|
})
|
|
399
506
|
it('maps input to object of async functions', async () => {
|
|
400
|
-
aok(
|
|
507
|
+
aok(all({ a: asyncHey, b: asyncHey, c: asyncHey })('yo') instanceof Promise)
|
|
401
508
|
ade(
|
|
402
|
-
await
|
|
509
|
+
await all({ a: asyncHey, b: asyncHey, c: asyncHey })('yo'),
|
|
403
510
|
{ a: 'yohey', b: 'yohey', c: 'yohey' },
|
|
404
511
|
)
|
|
405
512
|
})
|
|
406
513
|
it('any functions async => Promise', async () => {
|
|
407
|
-
aok(
|
|
514
|
+
aok(all([asyncHey, asyncHey, hi])('yo') instanceof Promise)
|
|
408
515
|
ade(
|
|
409
|
-
await
|
|
516
|
+
await all([asyncHey, asyncHey, hi])('yo'),
|
|
410
517
|
['yohey', 'yohey', 'yohi'],
|
|
411
518
|
)
|
|
412
519
|
})
|
|
413
|
-
it('
|
|
414
|
-
ade(
|
|
415
|
-
ade(
|
|
520
|
+
it('all([])() -> []', async () => {
|
|
521
|
+
ade(all([])(), [])
|
|
522
|
+
ade(all([])('hey'), [])
|
|
416
523
|
})
|
|
417
|
-
it('
|
|
418
|
-
ade(
|
|
419
|
-
ade(
|
|
524
|
+
it('all({})() -> {}', async () => {
|
|
525
|
+
ade(all({})(), {})
|
|
526
|
+
ade(all({})('hey'), {})
|
|
420
527
|
})
|
|
421
|
-
it('TypeError for
|
|
528
|
+
it('TypeError for all([\'hey\'])()', async () => {
|
|
422
529
|
assert.throws(
|
|
423
|
-
() =>
|
|
530
|
+
() => all(['hey'])(),
|
|
424
531
|
new TypeError('funcs[funcsIndex] is not a function'),
|
|
425
532
|
)
|
|
426
533
|
})
|
|
427
|
-
it('throws TypeError for
|
|
534
|
+
it('throws TypeError for all({ a: nonFunction })', async () => {
|
|
428
535
|
assert.throws(
|
|
429
|
-
() =>
|
|
536
|
+
() => all({ a: 'hey' })(),
|
|
430
537
|
new TypeError('funcs[key] is not a function'),
|
|
431
538
|
)
|
|
432
539
|
})
|
|
433
540
|
it('throws TypeError for String', async () => {
|
|
434
541
|
assert.throws(
|
|
435
|
-
() =>
|
|
542
|
+
() => all('ayelmao')(),
|
|
436
543
|
new TypeError('funcs[key] is not a function'),
|
|
437
544
|
)
|
|
438
545
|
})
|
|
439
546
|
it('{} for Set<[func]>; no functions exposed via in', async () => {
|
|
440
|
-
assert.deepEqual(
|
|
547
|
+
assert.deepEqual(all(new Set([() => 'yo']))('hey'), {})
|
|
441
548
|
})
|
|
442
549
|
it('{} for Map<[[1, func]]>', async () => {
|
|
443
|
-
assert.deepEqual(
|
|
550
|
+
assert.deepEqual(all(new Map([[1, () => 'yo']]))('hey'), {})
|
|
444
551
|
})
|
|
445
552
|
})
|
|
446
553
|
|
|
447
|
-
describe('
|
|
448
|
-
it('
|
|
554
|
+
describe('all.series', () => {
|
|
555
|
+
it('API coverage', async () => {
|
|
556
|
+
ade(
|
|
557
|
+
all.series(1, 2, 3, [
|
|
558
|
+
Array.of,
|
|
559
|
+
Array.of,
|
|
560
|
+
Array.of,
|
|
561
|
+
]),
|
|
562
|
+
[
|
|
563
|
+
[1, 2, 3],
|
|
564
|
+
[1, 2, 3],
|
|
565
|
+
[1, 2, 3],
|
|
566
|
+
],
|
|
567
|
+
)
|
|
568
|
+
|
|
569
|
+
ade(
|
|
570
|
+
all.series([
|
|
571
|
+
Array.of,
|
|
572
|
+
Array.of,
|
|
573
|
+
Array.of,
|
|
574
|
+
])(1, 2, 3),
|
|
575
|
+
[
|
|
576
|
+
[1, 2, 3],
|
|
577
|
+
[1, 2, 3],
|
|
578
|
+
[1, 2, 3],
|
|
579
|
+
],
|
|
580
|
+
)
|
|
581
|
+
|
|
582
|
+
ade(
|
|
583
|
+
await all.series(Promise.resolve(1), 2, Promise.resolve(3), [
|
|
584
|
+
Array.of,
|
|
585
|
+
Array.of,
|
|
586
|
+
Array.of,
|
|
587
|
+
]),
|
|
588
|
+
[
|
|
589
|
+
[1, 2, 3],
|
|
590
|
+
[1, 2, 3],
|
|
591
|
+
[1, 2, 3],
|
|
592
|
+
],
|
|
593
|
+
)
|
|
594
|
+
})
|
|
595
|
+
|
|
596
|
+
it('evaluates input against array of functions in series (sync)', async () => {
|
|
449
597
|
const arr = []
|
|
450
598
|
ade(
|
|
451
|
-
|
|
599
|
+
all.series([
|
|
452
600
|
() => { arr.push(1); return 'a' },
|
|
453
601
|
() => { arr.push(2); return 'b' },
|
|
454
602
|
() => { arr.push(3); return 'c' },
|
|
@@ -457,9 +605,9 @@ describe('rubico', () => {
|
|
|
457
605
|
)
|
|
458
606
|
ade(arr, [1, 2, 3])
|
|
459
607
|
})
|
|
460
|
-
it('
|
|
608
|
+
it('evaluates input against array of functions in series (async)', async () => {
|
|
461
609
|
const arr = []
|
|
462
|
-
const staggeredPush =
|
|
610
|
+
const staggeredPush = all.series([
|
|
463
611
|
() => sleep(10).then(() => { arr.push(1); return 'a' }),
|
|
464
612
|
() => sleep(5).then(() => { arr.push(2); return 'b' }),
|
|
465
613
|
() => { arr.push(3); return 'c' },
|
|
@@ -468,7 +616,7 @@ describe('rubico', () => {
|
|
|
468
616
|
ade(await staggeredPush, ['a', 'b', 'c'])
|
|
469
617
|
ade(arr, [1, 2, 3])
|
|
470
618
|
const arr2 = []
|
|
471
|
-
const parallelPush =
|
|
619
|
+
const parallelPush = all([
|
|
472
620
|
() => sleep(10).then(() => { arr2.push(1); return 'a' }),
|
|
473
621
|
() => sleep(5).then(() => { arr2.push(2); return 'b' }),
|
|
474
622
|
() => { arr2.push(3); return 'c' },
|
|
@@ -477,18 +625,37 @@ describe('rubico', () => {
|
|
|
477
625
|
ade(await parallelPush, ['a', 'b', 'c'])
|
|
478
626
|
ade(arr2, [3, 2, 1])
|
|
479
627
|
})
|
|
480
|
-
it('throws TypeError for
|
|
481
|
-
assert.deepEqual(
|
|
628
|
+
it('throws TypeError for all([])', async () => {
|
|
629
|
+
assert.deepEqual(all.series([])(), [])
|
|
482
630
|
})
|
|
483
|
-
it('throws TypeError for
|
|
631
|
+
it('throws TypeError for all([nonFunction])', async () => {
|
|
484
632
|
assert.throws(
|
|
485
|
-
() =>
|
|
633
|
+
() => all.series(['hey'])(),
|
|
486
634
|
new TypeError('funcs[funcsIndex] is not a function')
|
|
487
635
|
)
|
|
488
636
|
})
|
|
489
637
|
})
|
|
490
638
|
|
|
491
639
|
describe('assign', () => {
|
|
640
|
+
it('API coverage', async () => {
|
|
641
|
+
ade(assign({}, {
|
|
642
|
+
a: () => 1,
|
|
643
|
+
b: () => 2,
|
|
644
|
+
c: () => 3,
|
|
645
|
+
}), { a: 1, b: 2, c: 3 })
|
|
646
|
+
|
|
647
|
+
ade(assign({
|
|
648
|
+
a: () => 1,
|
|
649
|
+
b: () => 2,
|
|
650
|
+
c: () => 3,
|
|
651
|
+
})({}), { a: 1, b: 2, c: 3 })
|
|
652
|
+
|
|
653
|
+
ade(await assign(Promise.resolve({}), {
|
|
654
|
+
a: () => 1,
|
|
655
|
+
b: () => 2,
|
|
656
|
+
c: () => 3,
|
|
657
|
+
}), { a: 1, b: 2, c: 3 })
|
|
658
|
+
})
|
|
492
659
|
it('maps input to object of sync functions then merges', async () => {
|
|
493
660
|
ade(
|
|
494
661
|
assign({
|
|
@@ -589,6 +756,21 @@ describe('rubico', () => {
|
|
|
589
756
|
assert.equal(sum, 6)
|
|
590
757
|
})
|
|
591
758
|
|
|
759
|
+
it('behaves eagerly when supplied any amount of Promise arguments before the tryer and catcher', async () => {
|
|
760
|
+
const add = (a, b) => a + b
|
|
761
|
+
|
|
762
|
+
let sum = null
|
|
763
|
+
|
|
764
|
+
await tryCatch(Promise.resolve(1), 2, Promise.resolve(3), function throwSum(...numbers) {
|
|
765
|
+
const sum = numbers.reduce(add)
|
|
766
|
+
throw new Error(`${sum}`)
|
|
767
|
+
}, function logErrorMessage(error) {
|
|
768
|
+
sum = Number(error.message)
|
|
769
|
+
})
|
|
770
|
+
|
|
771
|
+
assert.equal(sum, 6)
|
|
772
|
+
})
|
|
773
|
+
|
|
592
774
|
it('async eager tryCatch', async () => {
|
|
593
775
|
const add = (a, b) => a + b
|
|
594
776
|
|
|
@@ -614,6 +796,7 @@ describe('rubico', () => {
|
|
|
614
796
|
ase(e1.message, '1')
|
|
615
797
|
ase(e1.x, 1)
|
|
616
798
|
})
|
|
799
|
+
|
|
617
800
|
it('tries an async function and catches with a sync function', async () => {
|
|
618
801
|
const errProp = (err, x) => { err.x = x; return err }
|
|
619
802
|
const asyncThrowError = async x => { throw new Error(x) }
|
|
@@ -678,6 +861,25 @@ describe('rubico', () => {
|
|
|
678
861
|
})
|
|
679
862
|
|
|
680
863
|
describe('switchCase', () => {
|
|
864
|
+
it('API coverage', async () => {
|
|
865
|
+
ase(
|
|
866
|
+
switchCase(1, [
|
|
867
|
+
x => x === 1, () => 'hi',
|
|
868
|
+
x => x === 2, () => 'ho',
|
|
869
|
+
() => 'hey',
|
|
870
|
+
]),
|
|
871
|
+
'hi',
|
|
872
|
+
)
|
|
873
|
+
|
|
874
|
+
ase(
|
|
875
|
+
await switchCase(Promise.resolve(1), [
|
|
876
|
+
x => x === 1, () => 'hi',
|
|
877
|
+
x => x === 2, () => 'ho',
|
|
878
|
+
() => 'hey',
|
|
879
|
+
]),
|
|
880
|
+
'hi',
|
|
881
|
+
)
|
|
882
|
+
})
|
|
681
883
|
it('switches on values (including Promises), evaluating eagerly', async () => {
|
|
682
884
|
ase(switchCase([true, 'hey', 'ho']), 'hey')
|
|
683
885
|
ase(await switchCase([
|
|
@@ -807,10 +1009,16 @@ describe('rubico', () => {
|
|
|
807
1009
|
})
|
|
808
1010
|
|
|
809
1011
|
describe('map', () => {
|
|
810
|
-
it('
|
|
1012
|
+
it('API coverage', async () => {
|
|
811
1013
|
const myArray = [1, 2, 3]
|
|
812
|
-
|
|
813
|
-
|
|
1014
|
+
assert.deepEqual(
|
|
1015
|
+
map(myArray, number => number ** 2),
|
|
1016
|
+
[1, 4, 9]
|
|
1017
|
+
)
|
|
1018
|
+
assert.deepEqual(
|
|
1019
|
+
await map(Promise.resolve(myArray), number => number ** 2),
|
|
1020
|
+
[1, 4, 9]
|
|
1021
|
+
)
|
|
814
1022
|
})
|
|
815
1023
|
|
|
816
1024
|
it('Test', Test('map', map(number => number ** 2))
|
|
@@ -900,15 +1108,6 @@ describe('rubico', () => {
|
|
|
900
1108
|
})
|
|
901
1109
|
})
|
|
902
1110
|
|
|
903
|
-
describe('map(func A=>B)(GeneratorFunction<A>) -> GeneratorFunction<B>', () => {
|
|
904
|
-
it('func A=>B; B', async () => {
|
|
905
|
-
const numbers = function* () { let i = 0; while (++i < 6) yield i }
|
|
906
|
-
const squares = map(number => number ** 2)(numbers)
|
|
907
|
-
assert.equal(objectToString(squares), '[object GeneratorFunction]')
|
|
908
|
-
assert.deepEqual([...squares()], [1, 4, 9, 16, 25])
|
|
909
|
-
})
|
|
910
|
-
})
|
|
911
|
-
|
|
912
1111
|
describe('map(func A=>B)(Iterator<A>) -> Iterator<B>', () => {
|
|
913
1112
|
it('func A=>B; B', async () => {
|
|
914
1113
|
const numbers = function* () { let i = 0; while (++i < 6) yield i }
|
|
@@ -919,25 +1118,6 @@ describe('rubico', () => {
|
|
|
919
1118
|
})
|
|
920
1119
|
})
|
|
921
1120
|
|
|
922
|
-
describe('map(func A=>Promise|B)(AsyncGeneratorFunction<A>) -> AsyncGeneratorFunction<B>', () => {
|
|
923
|
-
it('func A=>B; B', async () => {
|
|
924
|
-
const asyncNumbers = async function* () { let i = 0; while (++i < 6) yield i }
|
|
925
|
-
const asyncSquares = map(number => number ** 2)(asyncNumbers)
|
|
926
|
-
assert.equal(objectToString(asyncSquares), '[object AsyncGeneratorFunction]')
|
|
927
|
-
const squaresArray = []
|
|
928
|
-
for await (const number of asyncSquares()) squaresArray.push(number)
|
|
929
|
-
assert.deepEqual(squaresArray, [1, 4, 9, 16, 25])
|
|
930
|
-
})
|
|
931
|
-
it('func A=>Promise<B>; Promise<B>', async () => {
|
|
932
|
-
const asyncNumbers = async function* () { let i = 0; while (++i < 6) yield i }
|
|
933
|
-
const asyncSquares = map(async number => number ** 2)(asyncNumbers)
|
|
934
|
-
assert.equal(objectToString(asyncSquares), '[object AsyncGeneratorFunction]')
|
|
935
|
-
const squaresArray = []
|
|
936
|
-
for await (const number of asyncSquares()) squaresArray.push(number)
|
|
937
|
-
assert.deepEqual(squaresArray, [1, 4, 9, 16, 25])
|
|
938
|
-
})
|
|
939
|
-
})
|
|
940
|
-
|
|
941
1121
|
describe('map(func A=>Promise|B)(AsyncIterator<A>) -> AsyncIterator<B>', () => {
|
|
942
1122
|
it('func A=>B; AsyncIterator<B>', async () => {
|
|
943
1123
|
const asyncNumbers = async function* () { let i = 0; while (++i < 6) yield i }
|
|
@@ -961,13 +1141,13 @@ describe('rubico', () => {
|
|
|
961
1141
|
it('func A=>B; Reducer<B>', async () => {
|
|
962
1142
|
const add = (a, b) => a + b
|
|
963
1143
|
assert.strictEqual(
|
|
964
|
-
[1, 2, 3, 4, 5].reduce(map(number => number ** 2)(add), 0),
|
|
1144
|
+
[1, 2, 3, 4, 5].reduce(Transducer.map(number => number ** 2)(add), 0),
|
|
965
1145
|
55,
|
|
966
1146
|
)
|
|
967
1147
|
})
|
|
968
1148
|
it('func A=>B; async Reducer<A>; Reducer<B>', async () => {
|
|
969
1149
|
const asyncAdd = async (a, b) => a + b
|
|
970
|
-
const asyncReducer = map(number => number ** 2)(asyncAdd)
|
|
1150
|
+
const asyncReducer = Transducer.map(number => number ** 2)(asyncAdd)
|
|
971
1151
|
let total = 0
|
|
972
1152
|
for (const number of [1, 2, 3, 4, 5]) {
|
|
973
1153
|
total = await asyncReducer(total, number)
|
|
@@ -976,7 +1156,7 @@ describe('rubico', () => {
|
|
|
976
1156
|
})
|
|
977
1157
|
it('func A=>Promise<B>; Reducer<B>', async () => {
|
|
978
1158
|
const add = (a, b) => a + b
|
|
979
|
-
const asyncReducer = map(async number => number ** 2)(add)
|
|
1159
|
+
const asyncReducer = Transducer.map(async number => number ** 2)(add)
|
|
980
1160
|
let total = 0
|
|
981
1161
|
for (const number of [1, 2, 3, 4, 5]) {
|
|
982
1162
|
total = await asyncReducer(total, number)
|
|
@@ -1135,7 +1315,6 @@ describe('rubico', () => {
|
|
|
1135
1315
|
assert.deepEqual(map.pool(1, asyncSquare)([]), [])
|
|
1136
1316
|
})
|
|
1137
1317
|
it('works for arrays of undefined values', async () => {
|
|
1138
|
-
ade(await map.pool(1, x => x)([,,,,, ]), Array(5).fill(undefined))
|
|
1139
1318
|
ade(await map.pool(1, x => x)(Array(5)), Array(5).fill(undefined))
|
|
1140
1319
|
ade(await map.pool(1, x => x)(Array(5).fill(null)), Array(5).fill(null))
|
|
1141
1320
|
})
|
|
@@ -1163,7 +1342,9 @@ describe('rubico', () => {
|
|
|
1163
1342
|
})
|
|
1164
1343
|
it('abides by asynchronous limit for arrays and sets', async () => {
|
|
1165
1344
|
const numbers = [1, 2, 3, 4, 5, 6]
|
|
1166
|
-
|
|
1345
|
+
const period = 10
|
|
1346
|
+
let i = 0
|
|
1347
|
+
let maxi = 0
|
|
1167
1348
|
const plusSleepMinus = n => (async () => {
|
|
1168
1349
|
i += 1
|
|
1169
1350
|
maxi = Math.max(maxi, i)
|
|
@@ -1207,107 +1388,6 @@ then(() => {
|
|
|
1207
1388
|
})
|
|
1208
1389
|
})
|
|
1209
1390
|
|
|
1210
|
-
describe('map.withIndex', () => {
|
|
1211
|
-
it('[sync] applies a function to each item of array with index and reference to array', async () => {
|
|
1212
|
-
const numbers = [100, 100, 100, 100, 100]
|
|
1213
|
-
ade(
|
|
1214
|
-
map.withIndex((xi, i, x) => xi + i - x[i])(numbers),
|
|
1215
|
-
[0, 1, 2, 3, 4],
|
|
1216
|
-
)
|
|
1217
|
-
})
|
|
1218
|
-
it('[async] applies a function to each item of array with index and reference to array', async () => {
|
|
1219
|
-
const numbers = [100, 100, 100, 100, 100]
|
|
1220
|
-
aok(map.withIndex(async (xi, i, x) => xi + i - x[i])(numbers) instanceof Promise)
|
|
1221
|
-
ade(
|
|
1222
|
-
await map.withIndex(async (xi, i, x) => xi + i - x[i])(numbers),
|
|
1223
|
-
[0, 1, 2, 3, 4],
|
|
1224
|
-
)
|
|
1225
|
-
})
|
|
1226
|
-
xit('[sync] applies a function to each character of a string with index and value of string', async () => {
|
|
1227
|
-
ase(
|
|
1228
|
-
map.withIndex((xi, i, x) => xi + i + x[i])('abc'),
|
|
1229
|
-
'a0ab1bc2c',
|
|
1230
|
-
)
|
|
1231
|
-
})
|
|
1232
|
-
xit('[async] applies a function to each character of a string with index and value of string', async () => {
|
|
1233
|
-
aok(
|
|
1234
|
-
map.withIndex(async (xi, i, x) => xi + i + x[i])('abc') instanceof Promise
|
|
1235
|
-
)
|
|
1236
|
-
ase(
|
|
1237
|
-
await map.withIndex(async (xi, i, x) => xi + i + x[i])('abc'),
|
|
1238
|
-
'a0ab1bc2c',
|
|
1239
|
-
)
|
|
1240
|
-
})
|
|
1241
|
-
it('throws a TypeError on map.withIndex(nonFunction)', async () => {
|
|
1242
|
-
assert.throws(
|
|
1243
|
-
() => map.withIndex({})([1, 2, 3]),
|
|
1244
|
-
new TypeError('mapper is not a function'),
|
|
1245
|
-
)
|
|
1246
|
-
})
|
|
1247
|
-
it('throws a TypeError on map.withIndex(...)(null)', async () => {
|
|
1248
|
-
assert.throws(
|
|
1249
|
-
() => map.withIndex(() => 'hi')(null),
|
|
1250
|
-
new TypeError('null is not an Array')
|
|
1251
|
-
)
|
|
1252
|
-
})
|
|
1253
|
-
})
|
|
1254
|
-
|
|
1255
|
-
describe('map.own', () => {
|
|
1256
|
-
describe('map.own(mapper A=>B)(Object<A>) -> Object<B>', () => {
|
|
1257
|
-
it('maps an objects own properties', async () => {
|
|
1258
|
-
const Person = function (name) {
|
|
1259
|
-
this.name = name
|
|
1260
|
-
}
|
|
1261
|
-
|
|
1262
|
-
Person.prototype.greet = function () {
|
|
1263
|
-
console.log(`Hello, my name is ${this.name}`)
|
|
1264
|
-
}
|
|
1265
|
-
|
|
1266
|
-
const david = new Person('david')
|
|
1267
|
-
|
|
1268
|
-
david.a = 1
|
|
1269
|
-
david.b = 2
|
|
1270
|
-
david.c = 3
|
|
1271
|
-
|
|
1272
|
-
const square = number => number ** 2
|
|
1273
|
-
|
|
1274
|
-
const mappedOwn = map.own(square)(david)
|
|
1275
|
-
assert.deepStrictEqual(mappedOwn, { name: NaN, a: 1, b: 4, c: 9 });
|
|
1276
|
-
})
|
|
1277
|
-
|
|
1278
|
-
it('maps a functions own properties', async () => {
|
|
1279
|
-
const someFunctionWithProperties = () => null
|
|
1280
|
-
|
|
1281
|
-
someFunctionWithProperties.a = 1
|
|
1282
|
-
someFunctionWithProperties.b = 2
|
|
1283
|
-
someFunctionWithProperties.c = 3
|
|
1284
|
-
|
|
1285
|
-
const cube = number => number ** 3
|
|
1286
|
-
|
|
1287
|
-
const mappedOwn = map.own(cube)(someFunctionWithProperties)
|
|
1288
|
-
assert.deepStrictEqual(mappedOwn, { a: 1, b: 8, c: 27 });
|
|
1289
|
-
})
|
|
1290
|
-
|
|
1291
|
-
it('throws a TypeError if value argument is not an object', async () => {
|
|
1292
|
-
assert.throws(
|
|
1293
|
-
() => {
|
|
1294
|
-
map.own(() => true)('invalid')
|
|
1295
|
-
},
|
|
1296
|
-
new TypeError('invalid is not an Object')
|
|
1297
|
-
)
|
|
1298
|
-
})
|
|
1299
|
-
|
|
1300
|
-
it('throws a TypeError if value argument is an array', async () => {
|
|
1301
|
-
assert.throws(
|
|
1302
|
-
() => {
|
|
1303
|
-
map.own(() => true)([])
|
|
1304
|
-
},
|
|
1305
|
-
new TypeError(' is not an Object')
|
|
1306
|
-
)
|
|
1307
|
-
})
|
|
1308
|
-
})
|
|
1309
|
-
})
|
|
1310
|
-
|
|
1311
1391
|
describe('filter', () => {
|
|
1312
1392
|
it('eager', async () => {
|
|
1313
1393
|
const numbers = [1, 2, 3]
|
|
@@ -1341,11 +1421,6 @@ then(() => {
|
|
|
1341
1421
|
[3, 5],
|
|
1342
1422
|
)
|
|
1343
1423
|
})
|
|
1344
|
-
it('does not provide index or reference to original array', async () => {
|
|
1345
|
-
let total = 0
|
|
1346
|
-
filter((...args) => args.forEach(arg => (total += arg)))([1, 2, 3])
|
|
1347
|
-
assert.equal(total, 6)
|
|
1348
|
-
})
|
|
1349
1424
|
})
|
|
1350
1425
|
|
|
1351
1426
|
describe('filter(predicate T=>Promise|boolean)(Set<T>) -> Promise|Set<T>', () => {
|
|
@@ -1466,15 +1541,6 @@ then(() => {
|
|
|
1466
1541
|
)
|
|
1467
1542
|
})
|
|
1468
1543
|
})
|
|
1469
|
-
describe('filter(predicate T=>boolean)(GeneratorFunction<args, T>) -> GeneratorFunction<args, T>', () => {
|
|
1470
|
-
it('predicate T=>boolean', async () => {
|
|
1471
|
-
const numbers = function* () { let i = 0; while (++i < 6) yield i }
|
|
1472
|
-
const isOdd = number => number % 2 == 1
|
|
1473
|
-
const oddNumbers = filter(isOdd)(numbers)
|
|
1474
|
-
assert.equal(objectToString(oddNumbers), '[object GeneratorFunction]')
|
|
1475
|
-
assert.deepEqual([...oddNumbers()], [1, 3, 5])
|
|
1476
|
-
})
|
|
1477
|
-
})
|
|
1478
1544
|
describe('filter(predicate T=>boolean)(Iterator<T>) -> Iterator<T>', () => {
|
|
1479
1545
|
it('predicate T=>boolean', async () => {
|
|
1480
1546
|
const numbers = function* () { let i = 0; while (++i < 6) yield i }
|
|
@@ -1484,33 +1550,6 @@ then(() => {
|
|
|
1484
1550
|
assert.deepEqual([...oddNumbersIterator], [1, 3, 5])
|
|
1485
1551
|
})
|
|
1486
1552
|
})
|
|
1487
|
-
describe('filter(predicate T=>Promise|boolean)(AsyncGeneratorFunction<args, T>) -> AsyncGeneratorFunction<args, T>', () => {
|
|
1488
|
-
const asyncNumbers = async function* () { let i = 0; while (++i < 6) yield i }
|
|
1489
|
-
it('predicate T=>boolean', async () => {
|
|
1490
|
-
const isOdd = number => number % 2 == 1
|
|
1491
|
-
const asyncOddNumbers = filter(isOdd)(asyncNumbers)
|
|
1492
|
-
assert.equal(objectToString(asyncOddNumbers), '[object AsyncGeneratorFunction]')
|
|
1493
|
-
const oddNumbersArray = []
|
|
1494
|
-
for await (const number of asyncOddNumbers()) oddNumbersArray.push(number)
|
|
1495
|
-
assert.deepEqual(oddNumbersArray, [1, 3, 5])
|
|
1496
|
-
})
|
|
1497
|
-
it('predicate T=>Promise<boolean>', async () => {
|
|
1498
|
-
const asyncIsOdd = async number => number % 2 == 1
|
|
1499
|
-
const asyncOddNumbers = filter(asyncIsOdd)(asyncNumbers)
|
|
1500
|
-
assert.equal(objectToString(asyncOddNumbers), '[object AsyncGeneratorFunction]')
|
|
1501
|
-
const oddNumbersArray = []
|
|
1502
|
-
for await (const number of asyncOddNumbers()) oddNumbersArray.push(number)
|
|
1503
|
-
assert.deepEqual(oddNumbersArray, [1, 3, 5])
|
|
1504
|
-
})
|
|
1505
|
-
it('predicate T=>Promise|boolean', async () => {
|
|
1506
|
-
const variadicAsyncIsOdd = number => number % 2 == 1 ? Promise.resolve(true) : false
|
|
1507
|
-
const asyncOddNumbers = filter(variadicAsyncIsOdd)(asyncNumbers)
|
|
1508
|
-
assert.equal(objectToString(asyncOddNumbers), '[object AsyncGeneratorFunction]')
|
|
1509
|
-
const oddNumbersArray = []
|
|
1510
|
-
for await (const number of asyncOddNumbers()) oddNumbersArray.push(number)
|
|
1511
|
-
assert.deepEqual(oddNumbersArray, [1, 3, 5])
|
|
1512
|
-
})
|
|
1513
|
-
})
|
|
1514
1553
|
describe('filter(predicate T=>Promise|boolean)(AsyncIterator<T>) -> AsyncIterator<T>', () => {
|
|
1515
1554
|
const asyncNumbers = async function* () { let i = 0; while (++i < 6) yield i }
|
|
1516
1555
|
it('predicate T=>boolean', async () => {
|
|
@@ -1521,33 +1560,17 @@ then(() => {
|
|
|
1521
1560
|
for await (const number of asyncOddNumbersIterator) oddNumbersArray.push(number)
|
|
1522
1561
|
assert.deepEqual(oddNumbersArray, [1, 3, 5])
|
|
1523
1562
|
})
|
|
1524
|
-
it('predicate T=>Promise<boolean>', async () => {
|
|
1525
|
-
const asyncIsOdd = async number => number % 2 == 1
|
|
1526
|
-
const asyncOddNumbers = filter(asyncIsOdd)(asyncNumbers)
|
|
1527
|
-
assert.equal(objectToString(asyncOddNumbers), '[object AsyncGeneratorFunction]')
|
|
1528
|
-
const oddNumbersArray = []
|
|
1529
|
-
for await (const number of asyncOddNumbers()) oddNumbersArray.push(number)
|
|
1530
|
-
assert.deepEqual(oddNumbersArray, [1, 3, 5])
|
|
1531
|
-
})
|
|
1532
|
-
it('predicate T=>Promise|boolean', async () => {
|
|
1533
|
-
const variadicAsyncIsOdd = number => number % 2 == 1 ? Promise.resolve(true) : false
|
|
1534
|
-
const asyncOddNumbers = filter(variadicAsyncIsOdd)(asyncNumbers)
|
|
1535
|
-
assert.equal(objectToString(asyncOddNumbers), '[object AsyncGeneratorFunction]')
|
|
1536
|
-
const oddNumbersArray = []
|
|
1537
|
-
for await (const number of asyncOddNumbers()) oddNumbersArray.push(number)
|
|
1538
|
-
assert.deepEqual(oddNumbersArray, [1, 3, 5])
|
|
1539
|
-
})
|
|
1540
1563
|
})
|
|
1541
1564
|
describe('filter(predicate T=>Promise|boolean)(Reducer<T>) -> Reducer<T>', () => {
|
|
1542
1565
|
const concat = (array, values) => array.concat(values)
|
|
1543
1566
|
it('predicate T=>boolean', async () => {
|
|
1544
1567
|
const isOdd = number => number % 2 == 1
|
|
1545
|
-
const concatOdds = filter(isOdd)(concat)
|
|
1568
|
+
const concatOdds = Transducer.filter(isOdd)(concat)
|
|
1546
1569
|
assert.deepEqual([1, 2, 3, 4, 5].reduce(concatOdds, []), [1, 3, 5])
|
|
1547
1570
|
})
|
|
1548
1571
|
it('predicate T=>Promise<boolean>', async () => {
|
|
1549
1572
|
const asyncIsOdd = async number => number % 2 == 1
|
|
1550
|
-
const concatOdds = filter(asyncIsOdd)(concat)
|
|
1573
|
+
const concatOdds = Transducer.filter(asyncIsOdd)(concat)
|
|
1551
1574
|
let oddNumbers = []
|
|
1552
1575
|
for (const number of [1, 2, 3, 4, 5]) {
|
|
1553
1576
|
oddNumbers = await concatOdds(oddNumbers, number)
|
|
@@ -1556,7 +1579,7 @@ then(() => {
|
|
|
1556
1579
|
})
|
|
1557
1580
|
it('predicate T=>Promise|boolean', async () => {
|
|
1558
1581
|
const variadicAsyncIsOdd = number => number % 2 == 1 ? Promise.resolve(true) : false
|
|
1559
|
-
const concatOdds = filter(variadicAsyncIsOdd)(concat)
|
|
1582
|
+
const concatOdds = Transducer.filter(variadicAsyncIsOdd)(concat)
|
|
1560
1583
|
let oddNumbers = []
|
|
1561
1584
|
for (const number of [1, 2, 3, 4, 5]) {
|
|
1562
1585
|
oddNumbers = await concatOdds(oddNumbers, number)
|
|
@@ -1591,77 +1614,33 @@ then(() => {
|
|
|
1591
1614
|
})
|
|
1592
1615
|
})
|
|
1593
1616
|
|
|
1594
|
-
describe('filter.withIndex', () => {
|
|
1595
|
-
describe('filter.withIndex(predicate T=>Promise|boolean)(value Array<T>) -> Array<T>', () => {
|
|
1596
|
-
it('predicate T=>boolean', async () => {
|
|
1597
|
-
const shellUniq = filter.withIndex(
|
|
1598
|
-
(item, index, array) => item !== array[index + 1])
|
|
1599
|
-
assert.deepEqual(
|
|
1600
|
-
shellUniq([1, 1, 1, 2, 2, 3, 3, 3, 4, 5, 5, 5]),
|
|
1601
|
-
[1, 2, 3, 4, 5])
|
|
1602
|
-
})
|
|
1603
|
-
it('predicate T=>Promise<boolean>', async () => {
|
|
1604
|
-
const asyncShellUniq = filter.withIndex(
|
|
1605
|
-
async (item, index, array) => item !== array[index + 1])
|
|
1606
|
-
assert.deepEqual(
|
|
1607
|
-
await asyncShellUniq([1, 1, 1, 2, 2, 3, 3, 3, 4, 5, 5, 5]),
|
|
1608
|
-
[1, 2, 3, 4, 5])
|
|
1609
|
-
})
|
|
1610
|
-
it('predicate T=>Promise|boolean', async () => {
|
|
1611
|
-
const variadicAsyncShellUniq = filter.withIndex(
|
|
1612
|
-
(item, index, array) => item !== array[index + 1] ? Promise.resolve(true) : false)
|
|
1613
|
-
assert.deepEqual(
|
|
1614
|
-
await variadicAsyncShellUniq([1, 1, 1, 2, 2, 3, 3, 3, 4, 5, 5, 5]),
|
|
1615
|
-
[1, 2, 3, 4, 5])
|
|
1616
|
-
assert.deepEqual(
|
|
1617
|
-
await variadicAsyncShellUniq([2, 2, 3, 3, 3, 4, 5, 5, 5, 6]),
|
|
1618
|
-
[2, 3, 4, 5, 6])
|
|
1619
|
-
})
|
|
1620
|
-
})
|
|
1621
|
-
|
|
1622
|
-
describe('filter.withIndex(predicate T=>Promise|boolean)(value !Array)', () => {
|
|
1623
|
-
it('value Object', async () => {
|
|
1624
|
-
assert.throws(
|
|
1625
|
-
() => filter.withIndex(() => true)({}),
|
|
1626
|
-
new TypeError('[object Object] is not an Array'),
|
|
1627
|
-
)
|
|
1628
|
-
})
|
|
1629
|
-
it('value string', async () => {
|
|
1630
|
-
assert.throws(
|
|
1631
|
-
() => filter.withIndex(() => true)('hey'),
|
|
1632
|
-
new TypeError('hey is not an Array'),
|
|
1633
|
-
)
|
|
1634
|
-
})
|
|
1635
|
-
it('value function', async () => {
|
|
1636
|
-
assert.throws(
|
|
1637
|
-
() => filter.withIndex(() => true)(() => false),
|
|
1638
|
-
new TypeError('() => false is not an Array'),
|
|
1639
|
-
)
|
|
1640
|
-
})
|
|
1641
|
-
it('value null', async () => {
|
|
1642
|
-
assert.throws(
|
|
1643
|
-
() => filter.withIndex(() => true)(null),
|
|
1644
|
-
new TypeError('null is not an Array'),
|
|
1645
|
-
)
|
|
1646
|
-
})
|
|
1647
|
-
it('value undefined', async () => {
|
|
1648
|
-
assert.throws(
|
|
1649
|
-
() => filter.withIndex(() => true)(undefined),
|
|
1650
|
-
new TypeError('undefined is not an Array'),
|
|
1651
|
-
)
|
|
1652
|
-
})
|
|
1653
|
-
})
|
|
1654
|
-
})
|
|
1655
|
-
|
|
1656
1617
|
describe('reduce', () => {
|
|
1657
1618
|
it('eager', async () => {
|
|
1658
1619
|
const numbers = [1, 2, 3, 4, 5]
|
|
1659
1620
|
const sum1 = reduce(numbers, (a, b) => a + b)
|
|
1660
1621
|
const sum2 = reduce(numbers, (a, b) => a + b, 0)
|
|
1661
1622
|
const sum3 = reduce(numbers, (a, b) => a + b, () => 0)
|
|
1623
|
+
const sum4 = await reduce(numbers, (a, b) => a + b, async () => 0)
|
|
1624
|
+
const sum5 = await reduce(numbers, (a, b) => a + b, Promise.resolve(0))
|
|
1662
1625
|
assert.equal(sum1, 15)
|
|
1663
1626
|
assert.equal(sum2, 15)
|
|
1664
1627
|
assert.equal(sum3, 15)
|
|
1628
|
+
assert.equal(sum4, 15)
|
|
1629
|
+
assert.equal(sum5, 15)
|
|
1630
|
+
})
|
|
1631
|
+
|
|
1632
|
+
it('eager Promise arguments', async () => {
|
|
1633
|
+
const numbers = Promise.resolve([1, 2, 3, 4, 5])
|
|
1634
|
+
const sum1 = await reduce(numbers, (a, b) => a + b)
|
|
1635
|
+
const sum2 = await reduce(numbers, (a, b) => a + b, 0)
|
|
1636
|
+
const sum3 = await reduce(numbers, (a, b) => a + b, () => 0)
|
|
1637
|
+
const sum4 = await reduce(numbers, (a, b) => a + b, async () => 0)
|
|
1638
|
+
const sum5 = await reduce(numbers, (a, b) => a + b, Promise.resolve(0))
|
|
1639
|
+
assert.equal(sum1, 15)
|
|
1640
|
+
assert.equal(sum2, 15)
|
|
1641
|
+
assert.equal(sum3, 15)
|
|
1642
|
+
assert.equal(sum4, 15)
|
|
1643
|
+
assert.equal(sum5, 15)
|
|
1665
1644
|
})
|
|
1666
1645
|
|
|
1667
1646
|
describe(`
|
|
@@ -1791,42 +1770,6 @@ reduce(
|
|
|
1791
1770
|
assert.strictEqual(
|
|
1792
1771
|
await reduce(variadicAsyncAdd, 0)(numbers()), 0)
|
|
1793
1772
|
})
|
|
1794
|
-
it('collection ()=>Generator<...[number]>', async () => {
|
|
1795
|
-
const numbers = function* () { yield 1; }
|
|
1796
|
-
assert.strictEqual(
|
|
1797
|
-
reduce(add, 0)(numbers)(), 1)
|
|
1798
|
-
assert.strictEqual(
|
|
1799
|
-
await reduce(asyncAdd, 0)(numbers)(), 1)
|
|
1800
|
-
assert.strictEqual(
|
|
1801
|
-
await reduce(variadicAsyncAdd, 0)(numbers)(), 1)
|
|
1802
|
-
})
|
|
1803
|
-
it('collection ()=>Generator<number>', async () => {
|
|
1804
|
-
const numbers = function* () { yield 1; yield 2; yield 3; yield 4; yield 5 }
|
|
1805
|
-
assert.strictEqual(
|
|
1806
|
-
reduce(add, 0)(numbers)(), 15)
|
|
1807
|
-
assert.strictEqual(
|
|
1808
|
-
await reduce(asyncAdd, 0)(numbers)(), 15)
|
|
1809
|
-
assert.strictEqual(
|
|
1810
|
-
await reduce(variadicAsyncAdd, 0)(numbers)(), 15)
|
|
1811
|
-
})
|
|
1812
|
-
it('collection ()=>Generator<number>', async () => {
|
|
1813
|
-
const numbers = function* () { yield 1; yield 2; yield 3; yield 4; yield 5 }
|
|
1814
|
-
assert.strictEqual(
|
|
1815
|
-
reduce(add)(numbers)(), 15)
|
|
1816
|
-
assert.strictEqual(
|
|
1817
|
-
await reduce(asyncAdd)(numbers)(), 15)
|
|
1818
|
-
assert.strictEqual(
|
|
1819
|
-
await reduce(variadicAsyncAdd)(numbers)(), 15)
|
|
1820
|
-
})
|
|
1821
|
-
it('collection ()=>Generator<>', async () => {
|
|
1822
|
-
const numbers = function* () {}
|
|
1823
|
-
assert.strictEqual(
|
|
1824
|
-
reduce(add, 0)(numbers)(), 0)
|
|
1825
|
-
assert.strictEqual(
|
|
1826
|
-
reduce(asyncAdd, 0)(numbers)(), 0)
|
|
1827
|
-
assert.strictEqual(
|
|
1828
|
-
reduce(variadicAsyncAdd, 0)(numbers)(), 0)
|
|
1829
|
-
})
|
|
1830
1773
|
it('collection AsyncGenerator<number>', async () => {
|
|
1831
1774
|
const numbers = async function* () { yield 1; yield 2; yield 3; yield 4; yield 5 }
|
|
1832
1775
|
assert.strictEqual(
|
|
@@ -1846,24 +1789,6 @@ reduce(
|
|
|
1846
1789
|
assert.strictEqual(
|
|
1847
1790
|
await reduce(variadicAsyncAdd, 0)(numbers()), 0)
|
|
1848
1791
|
})
|
|
1849
|
-
it('collection ()=>AsyncGenerator<number>', async () => {
|
|
1850
|
-
const numbers = async function* () { yield 1; yield 2; yield 3; yield 4; yield 5 }
|
|
1851
|
-
assert.strictEqual(
|
|
1852
|
-
await reduce(add, 0)(numbers)(), 15)
|
|
1853
|
-
assert.strictEqual(
|
|
1854
|
-
await reduce(asyncAdd, 0)(numbers)(), 15)
|
|
1855
|
-
assert.strictEqual(
|
|
1856
|
-
await reduce(variadicAsyncAdd, 0)(numbers)(), 15)
|
|
1857
|
-
})
|
|
1858
|
-
it('collection ()=>AsyncGenerator<>', async () => {
|
|
1859
|
-
const numbers = async function* () {}
|
|
1860
|
-
assert.strictEqual(
|
|
1861
|
-
await reduce(add, 0)(numbers)(), 0)
|
|
1862
|
-
assert.strictEqual(
|
|
1863
|
-
await reduce(asyncAdd, 0)(numbers)(), 0)
|
|
1864
|
-
assert.strictEqual(
|
|
1865
|
-
await reduce(variadicAsyncAdd, 0)(numbers)(), 0)
|
|
1866
|
-
})
|
|
1867
1792
|
it('collection Reducible<number>', async () => {
|
|
1868
1793
|
const reducible = {
|
|
1869
1794
|
reduce(reducer, init) {
|
|
@@ -1913,127 +1838,6 @@ reduce(
|
|
|
1913
1838
|
assert.equal(await reduce(asyncAdd, async () => 0)(stringNumberMap5), 10)
|
|
1914
1839
|
assert.equal(reduce(add)(stringNumberMap5), 10)
|
|
1915
1840
|
})
|
|
1916
|
-
it('collection Reducer<number>', async () => {
|
|
1917
|
-
const reducers = [
|
|
1918
|
-
(a, b) => a + b,
|
|
1919
|
-
]
|
|
1920
|
-
const combinedReducingFunction = reduce(
|
|
1921
|
-
(reducingFunc, reducer) => reducingFunc(reducer),
|
|
1922
|
-
() => reduce(result => result, 0),
|
|
1923
|
-
)(reducers)
|
|
1924
|
-
assert.strictEqual(combinedReducingFunction([1, 2, 3, 4, 5]), 15)
|
|
1925
|
-
})
|
|
1926
|
-
it('reduce meta concatenation', async () => {
|
|
1927
|
-
const reducers = [
|
|
1928
|
-
(state, action) => action.type == 'A' ? { ...state, A: true } : state,
|
|
1929
|
-
(state, action) => action.type == 'B' ? { ...state, B: true } : state,
|
|
1930
|
-
(state, action) => action.type == 'C' ? { ...state, C: true } : state,
|
|
1931
|
-
]
|
|
1932
|
-
const combinedReducingFunction = reduce(
|
|
1933
|
-
(reducingFunc, reducer) => reducingFunc(reducer),
|
|
1934
|
-
() => reduce(result => result, () => ({})),
|
|
1935
|
-
)(reducers)
|
|
1936
|
-
assert.deepEqual(combinedReducingFunction([
|
|
1937
|
-
{ type: 'A' }, { type: 'B' }, { type: 'C' },
|
|
1938
|
-
]), { A: true, B: true, C: true })
|
|
1939
|
-
assert.deepEqual(combinedReducingFunction([
|
|
1940
|
-
{ type: 'A' }, { type: 'B' },
|
|
1941
|
-
]), { A: true, B: true })
|
|
1942
|
-
assert.deepEqual(combinedReducingFunction([
|
|
1943
|
-
{ type: 'A' },
|
|
1944
|
-
]), { A: true })
|
|
1945
|
-
assert.deepEqual(combinedReducingFunction([
|
|
1946
|
-
]), {})
|
|
1947
|
-
assert.deepEqual(combinedReducingFunction([
|
|
1948
|
-
{ type: 'A' }, { type: 'C' },
|
|
1949
|
-
]), { A: true, C: true })
|
|
1950
|
-
})
|
|
1951
|
-
it('multiple reducers as arguments', async () => {
|
|
1952
|
-
const reducers = [
|
|
1953
|
-
(state, action) => action.type == 'A' ? { ...state, A: true } : state,
|
|
1954
|
-
(state, action) => action.type == 'B' ? { ...state, B: true } : state,
|
|
1955
|
-
(state, action) => action.type == 'C' ? { ...state, C: true } : state,
|
|
1956
|
-
]
|
|
1957
|
-
const combinedReducingFunction = reduce(
|
|
1958
|
-
result => result, () => ({}),
|
|
1959
|
-
)(...reducers)
|
|
1960
|
-
assert.deepEqual(combinedReducingFunction([
|
|
1961
|
-
{ type: 'A' }, { type: 'B' }, { type: 'C' },
|
|
1962
|
-
]), { A: true, B: true, C: true })
|
|
1963
|
-
assert.deepEqual(combinedReducingFunction([
|
|
1964
|
-
{ type: 'A' }, { type: 'B' },
|
|
1965
|
-
]), { A: true, B: true })
|
|
1966
|
-
assert.deepEqual(combinedReducingFunction([
|
|
1967
|
-
{ type: 'A' },
|
|
1968
|
-
]), { A: true })
|
|
1969
|
-
assert.deepEqual(combinedReducingFunction([
|
|
1970
|
-
]), {})
|
|
1971
|
-
assert.deepEqual(combinedReducingFunction([
|
|
1972
|
-
{ type: 'A' }, { type: 'C' },
|
|
1973
|
-
]), { A: true, C: true })
|
|
1974
|
-
})
|
|
1975
|
-
it('collection (<object>, object)=>Promise<object>', async () => {
|
|
1976
|
-
const reducers = [
|
|
1977
|
-
async (state, action) => action.type == 'A' ? { ...state, A: true } : state,
|
|
1978
|
-
async (state, action) => action.type == 'B' ? { ...state, B: true } : state,
|
|
1979
|
-
async (state, action) => action.type == 'C' ? { ...state, C: true } : state,
|
|
1980
|
-
]
|
|
1981
|
-
const combinedReducingFunction = reduce(
|
|
1982
|
-
(reducingFunc, reducer) => reducingFunc(reducer),
|
|
1983
|
-
() => reduce(result => result, () => ({})),
|
|
1984
|
-
)(reducers)
|
|
1985
|
-
assert.deepEqual(await combinedReducingFunction([
|
|
1986
|
-
{ type: 'A' }, { type: 'B' }, { type: 'C' },
|
|
1987
|
-
]), { A: true, B: true, C: true })
|
|
1988
|
-
assert.deepEqual(await combinedReducingFunction([
|
|
1989
|
-
{ type: 'A' }, { type: 'B' },
|
|
1990
|
-
]), { A: true, B: true })
|
|
1991
|
-
assert.deepEqual(await combinedReducingFunction([
|
|
1992
|
-
{ type: 'A' },
|
|
1993
|
-
]), { A: true })
|
|
1994
|
-
assert.deepEqual(await combinedReducingFunction([
|
|
1995
|
-
]), {})
|
|
1996
|
-
assert.deepEqual(await combinedReducingFunction([
|
|
1997
|
-
{ type: 'A' }, { type: 'C' },
|
|
1998
|
-
]), { A: true, C: true })
|
|
1999
|
-
})
|
|
2000
|
-
it('collection (<object>, object)=>Promise|object', async () => {
|
|
2001
|
-
const reducers = [
|
|
2002
|
-
(state, action) => action.type == 'A' ? { ...state, A: true } : state,
|
|
2003
|
-
async (state, action) => action.type == 'B' ? { ...state, B: true } : state,
|
|
2004
|
-
async (state, action) => action.type == 'C' ? { ...state, C: true } : state,
|
|
2005
|
-
]
|
|
2006
|
-
const combinedReducingFunction = reduce(
|
|
2007
|
-
(reducingFunc, reducer) => reducingFunc(reducer),
|
|
2008
|
-
() => reduce(result => result, () => ({})),
|
|
2009
|
-
)(reducers)
|
|
2010
|
-
assert.deepEqual(await combinedReducingFunction([
|
|
2011
|
-
{ type: 'A' }, { type: 'B' }, { type: 'C' },
|
|
2012
|
-
]), { A: true, B: true, C: true })
|
|
2013
|
-
assert.deepEqual(await combinedReducingFunction([
|
|
2014
|
-
{ type: 'A' }, { type: 'B' },
|
|
2015
|
-
]), { A: true, B: true })
|
|
2016
|
-
assert.deepEqual(await combinedReducingFunction([
|
|
2017
|
-
{ type: 'A' },
|
|
2018
|
-
]), { A: true })
|
|
2019
|
-
assert.deepEqual(await combinedReducingFunction([
|
|
2020
|
-
]), {})
|
|
2021
|
-
assert.deepEqual(await combinedReducingFunction([
|
|
2022
|
-
{ type: 'A' }, { type: 'C' },
|
|
2023
|
-
]), { A: true, C: true })
|
|
2024
|
-
assert(typeof combinedReducingFunction([
|
|
2025
|
-
{ type: 'A' },
|
|
2026
|
-
]).then == 'function')
|
|
2027
|
-
assert.deepEqual(await combinedReducingFunction([
|
|
2028
|
-
{ type: 'A' },
|
|
2029
|
-
]), { A: true })
|
|
2030
|
-
assert(typeof combinedReducingFunction([
|
|
2031
|
-
{ type: 'B' },
|
|
2032
|
-
]).then == 'function')
|
|
2033
|
-
assert.deepEqual(await combinedReducingFunction([
|
|
2034
|
-
{ type: 'B' },
|
|
2035
|
-
]), { B: true })
|
|
2036
|
-
})
|
|
2037
1841
|
it('collection atomic', async () => {
|
|
2038
1842
|
assert.strictEqual(
|
|
2039
1843
|
reduce((a, b) => a + b, 0)(10),
|
|
@@ -2212,55 +2016,6 @@ reduce(
|
|
|
2212
2016
|
})
|
|
2213
2017
|
})
|
|
2214
2018
|
|
|
2215
|
-
describe('integration: transducers from pipe, map, filter, reduce', () => {
|
|
2216
|
-
const concat = (y, xi) => y.concat(xi)
|
|
2217
|
-
const add = (y, xi) => y + xi
|
|
2218
|
-
it('reduce with sync transduced reducers', async () => {
|
|
2219
|
-
const squareOdds = pipe([
|
|
2220
|
-
filter(isOdd),
|
|
2221
|
-
map(x => x ** 2),
|
|
2222
|
-
])
|
|
2223
|
-
ade(
|
|
2224
|
-
reduce(squareOdds(concat), [])([1, 2, 3, 4, 5]),
|
|
2225
|
-
[1, 9, 25],
|
|
2226
|
-
)
|
|
2227
|
-
ade(
|
|
2228
|
-
reduce(squareOdds((y, xi) => y.add(xi)), new Set())([1, 2, 3, 4, 5]),
|
|
2229
|
-
new Set([1, 9, 25]),
|
|
2230
|
-
)
|
|
2231
|
-
const appendAlphas = pipe([
|
|
2232
|
-
map(x => `${x}a`),
|
|
2233
|
-
map(x => `${x}b`),
|
|
2234
|
-
map(x => `${x}c`),
|
|
2235
|
-
])
|
|
2236
|
-
ase(
|
|
2237
|
-
reduce(appendAlphas(add), '')('123'),
|
|
2238
|
-
'1abc2abc3abc',
|
|
2239
|
-
)
|
|
2240
|
-
ade(
|
|
2241
|
-
reduce(appendAlphas(concat), [])('123'),
|
|
2242
|
-
['1abc', '2abc', '3abc'],
|
|
2243
|
-
)
|
|
2244
|
-
})
|
|
2245
|
-
it('reduce with an async transduced reducer', async () => {
|
|
2246
|
-
const hosWithHey = pipe([
|
|
2247
|
-
filter(async x => x === 'ho'),
|
|
2248
|
-
map(x => Promise.resolve(`${x}hey`)),
|
|
2249
|
-
])
|
|
2250
|
-
const hihos = { a: 'hi', b: 'ho', c: 'hi', d: 'ho', e: 'hi', f: 'ho' }
|
|
2251
|
-
aok(reduce(hosWithHey(add), '')(hihos) instanceof Promise),
|
|
2252
|
-
aok(reduce(hosWithHey(concat), [])(hihos) instanceof Promise),
|
|
2253
|
-
ase(
|
|
2254
|
-
await reduce(hosWithHey(add), '')(hihos),
|
|
2255
|
-
'hoheyhoheyhohey',
|
|
2256
|
-
)
|
|
2257
|
-
ade(
|
|
2258
|
-
await reduce(hosWithHey(concat), [])(hihos),
|
|
2259
|
-
['hohey', 'hohey', 'hohey'],
|
|
2260
|
-
)
|
|
2261
|
-
})
|
|
2262
|
-
})
|
|
2263
|
-
|
|
2264
2019
|
describe('transform', () => {
|
|
2265
2020
|
describe(`
|
|
2266
2021
|
transform(
|
|
@@ -2307,125 +2062,146 @@ transform(
|
|
|
2307
2062
|
`, () => {
|
|
2308
2063
|
describe('collection x init', () => {
|
|
2309
2064
|
const square = number => number ** 2
|
|
2065
|
+
it('API coverage', async () => {
|
|
2066
|
+
assert.deepEqual(
|
|
2067
|
+
transform([1, 2, 3, 4, 5], Transducer.map(square), []),
|
|
2068
|
+
[1, 4, 9, 16, 25],
|
|
2069
|
+
)
|
|
2070
|
+
assert.deepEqual(
|
|
2071
|
+
transform([1, 2, 3, 4, 5], Transducer.map(square), () => []),
|
|
2072
|
+
[1, 4, 9, 16, 25],
|
|
2073
|
+
)
|
|
2074
|
+
assert.deepEqual(
|
|
2075
|
+
await transform([1, 2, 3, 4, 5], Transducer.map(square), async () => []),
|
|
2076
|
+
[1, 4, 9, 16, 25],
|
|
2077
|
+
)
|
|
2078
|
+
assert.deepEqual(
|
|
2079
|
+
await transform([1, 2, 3, 4, 5], Transducer.map(square), Promise.resolve([])),
|
|
2080
|
+
[1, 4, 9, 16, 25],
|
|
2081
|
+
)
|
|
2082
|
+
assert.deepEqual(
|
|
2083
|
+
await transform(Promise.resolve([1, 2, 3, 4, 5]), Transducer.map(square), []),
|
|
2084
|
+
[1, 4, 9, 16, 25],
|
|
2085
|
+
)
|
|
2086
|
+
})
|
|
2310
2087
|
it('init []|() => []', async () => {
|
|
2311
2088
|
assert.deepEqual(
|
|
2312
|
-
transform(map(square), [])([1, 2, 3, 4, 5]),
|
|
2089
|
+
transform(Transducer.map(square), [])([1, 2, 3, 4, 5]),
|
|
2313
2090
|
[1, 4, 9, 16, 25],
|
|
2314
2091
|
)
|
|
2315
2092
|
assert.deepEqual(
|
|
2316
|
-
transform(map(square), (
|
|
2093
|
+
await transform(Transducer.map(square), Promise.resolve([]))([1, 2, 3, 4, 5]),
|
|
2317
2094
|
[1, 4, 9, 16, 25],
|
|
2318
2095
|
)
|
|
2319
2096
|
assert.deepEqual(
|
|
2320
|
-
|
|
2097
|
+
transform(Transducer.map(square), () => [])([1, 2, 3, 4, 5]),
|
|
2321
2098
|
[1, 4, 9, 16, 25],
|
|
2322
2099
|
)
|
|
2323
2100
|
assert.deepEqual(
|
|
2324
|
-
transform(map(square), (
|
|
2325
|
-
|
|
2326
|
-
[1, 2, 3, 4, 5, 0, 0, 1, 4, 9, 16, 25]
|
|
2101
|
+
await transform(Transducer.map(square), async () => [])([1, 2, 3, 4, 5]),
|
|
2102
|
+
[1, 4, 9, 16, 25],
|
|
2327
2103
|
)
|
|
2328
2104
|
assert.deepEqual(
|
|
2329
|
-
transform(map(square), [])([1, 2, 3, 4, 5][Symbol.iterator]()),
|
|
2105
|
+
transform(Transducer.map(square), [])([1, 2, 3, 4, 5][Symbol.iterator]()),
|
|
2330
2106
|
[1, 4, 9, 16, 25],
|
|
2331
2107
|
)
|
|
2332
2108
|
const duplicate = item => [item, item]
|
|
2333
2109
|
assert.deepEqual(
|
|
2334
|
-
transform(map(duplicate), [])([1, 2, 3, 4, 5]),
|
|
2110
|
+
transform(Transducer.map(duplicate), [])([1, 2, 3, 4, 5]),
|
|
2335
2111
|
[1, 1, 2, 2, 3, 3, 4, 4, 5, 5],
|
|
2336
2112
|
)
|
|
2337
2113
|
assert.deepEqual(
|
|
2338
|
-
transform(map(duplicate), () => [])([1, 2, 3, 4, 5]),
|
|
2114
|
+
transform(Transducer.map(duplicate), () => [])([1, 2, 3, 4, 5]),
|
|
2339
2115
|
[1, 1, 2, 2, 3, 3, 4, 4, 5, 5],
|
|
2340
2116
|
)
|
|
2341
2117
|
assert.deepEqual(
|
|
2342
|
-
await transform(map(async number => duplicate(number)), async () => [])([1, 2, 3, 4, 5]),
|
|
2118
|
+
await transform(Transducer.map(async number => duplicate(number)), async () => [])([1, 2, 3, 4, 5]),
|
|
2343
2119
|
[1, 1, 2, 2, 3, 3, 4, 4, 5, 5],
|
|
2344
2120
|
)
|
|
2345
2121
|
})
|
|
2346
2122
|
it('init \'\'|(()=>\'\')', async () => {
|
|
2347
2123
|
assert.strictEqual(
|
|
2348
|
-
transform(map(square), '')([1, 2, 3, 4, 5]),
|
|
2124
|
+
transform(Transducer.map(square), '')([1, 2, 3, 4, 5]),
|
|
2349
2125
|
'1491625',
|
|
2350
2126
|
)
|
|
2351
2127
|
assert.strictEqual(
|
|
2352
|
-
transform(map(square), () => '')([1, 2, 3, 4, 5]),
|
|
2128
|
+
transform(Transducer.map(square), () => '')([1, 2, 3, 4, 5]),
|
|
2353
2129
|
'1491625',
|
|
2354
2130
|
)
|
|
2355
2131
|
assert.strictEqual(
|
|
2356
|
-
await transform(map(async number => number ** 2), async () => '')([1, 2, 3, 4, 5]),
|
|
2132
|
+
await transform(Transducer.map(async number => number ** 2), async () => '')([1, 2, 3, 4, 5]),
|
|
2357
2133
|
'1491625',
|
|
2358
2134
|
)
|
|
2359
2135
|
})
|
|
2360
2136
|
it('init Set|()=>Set', async () => {
|
|
2361
2137
|
assert.deepEqual(
|
|
2362
|
-
transform(map(square), new Set())([1, 2, 3, 4, 5]),
|
|
2138
|
+
transform(Transducer.map(square), new Set())([1, 2, 3, 4, 5]),
|
|
2363
2139
|
new Set([1, 4, 9, 16, 25]),
|
|
2364
2140
|
)
|
|
2365
2141
|
assert.deepEqual(
|
|
2366
|
-
transform(map(square), () => new Set())([1, 2, 3, 4, 5]),
|
|
2142
|
+
transform(Transducer.map(square), () => new Set())([1, 2, 3, 4, 5]),
|
|
2367
2143
|
new Set([1, 4, 9, 16, 25]),
|
|
2368
2144
|
)
|
|
2369
2145
|
assert.deepEqual(
|
|
2370
|
-
await transform(map(square), async () => new Set())([1, 2, 3, 4, 5]),
|
|
2146
|
+
await transform(Transducer.map(square), async () => new Set())([1, 2, 3, 4, 5]),
|
|
2371
2147
|
new Set([1, 4, 9, 16, 25]),
|
|
2372
2148
|
)
|
|
2373
2149
|
const SetWithSquare = number => new Set([number, number ** 2])
|
|
2374
2150
|
assert.deepEqual(
|
|
2375
|
-
transform(map(SetWithSquare), new Set())([1, 2, 3, 4, 5]),
|
|
2151
|
+
transform(Transducer.map(SetWithSquare), new Set())([1, 2, 3, 4, 5]),
|
|
2376
2152
|
new Set([1, 2, 4, 3, 9, 4, 16, 5, 25]),
|
|
2377
2153
|
)
|
|
2378
2154
|
assert.deepEqual(
|
|
2379
|
-
transform(map(SetWithSquare), () => new Set())([1, 2, 3, 4, 5]),
|
|
2155
|
+
transform(Transducer.map(SetWithSquare), () => new Set())([1, 2, 3, 4, 5]),
|
|
2380
2156
|
new Set([1, 2, 4, 3, 9, 4, 16, 5, 25]),
|
|
2381
2157
|
)
|
|
2382
2158
|
assert.deepEqual(
|
|
2383
|
-
await transform(map(async number => SetWithSquare(number)), async () => new Set())([1, 2, 3, 4, 5]),
|
|
2159
|
+
await transform(Transducer.map(async number => SetWithSquare(number)), async () => new Set())([1, 2, 3, 4, 5]),
|
|
2384
2160
|
new Set([1, 2, 4, 3, 9, 4, 16, 5, 25]),
|
|
2385
2161
|
)
|
|
2386
2162
|
})
|
|
2387
2163
|
it('init TypedArray|()=>TypedArray', async () => {
|
|
2388
2164
|
for (const constructor of numberTypedArrayConstructors) {
|
|
2389
2165
|
assert.deepEqual(
|
|
2390
|
-
transform(map(square), new constructor())([1, 2, 3, 4, 5]),
|
|
2166
|
+
transform(Transducer.map(square), new constructor())([1, 2, 3, 4, 5]),
|
|
2391
2167
|
new constructor([1, 4, 9, 16, 25])
|
|
2392
2168
|
)
|
|
2393
2169
|
assert.deepEqual(
|
|
2394
|
-
transform(map(square), () => new constructor())([1, 2, 3, 4, 5]),
|
|
2170
|
+
transform(Transducer.map(square), () => new constructor())([1, 2, 3, 4, 5]),
|
|
2395
2171
|
new constructor([1, 4, 9, 16, 25])
|
|
2396
2172
|
)
|
|
2397
2173
|
assert.deepEqual(
|
|
2398
|
-
await transform(map(async number => number ** 2), async () => new constructor())([1, 2, 3, 4, 5]),
|
|
2174
|
+
await transform(Transducer.map(async number => number ** 2), async () => new constructor())([1, 2, 3, 4, 5]),
|
|
2399
2175
|
new constructor([1, 4, 9, 16, 25])
|
|
2400
2176
|
)
|
|
2401
2177
|
assert.deepEqual(
|
|
2402
|
-
transform(map(number => new constructor([number ** 2])), () => new constructor())([1, 2, 3, 4, 5]),
|
|
2178
|
+
transform(Transducer.map(number => new constructor([number ** 2])), () => new constructor())([1, 2, 3, 4, 5]),
|
|
2403
2179
|
new constructor([1, 4, 9, 16, 25])
|
|
2404
2180
|
)
|
|
2405
2181
|
assert.deepEqual(
|
|
2406
|
-
await transform(map(async number => new constructor([number ** 2])), async () => new constructor())([1, 2, 3, 4, 5]),
|
|
2182
|
+
await transform(Transducer.map(async number => new constructor([number ** 2])), async () => new constructor())([1, 2, 3, 4, 5]),
|
|
2407
2183
|
new constructor([1, 4, 9, 16, 25])
|
|
2408
2184
|
)
|
|
2409
2185
|
}
|
|
2410
2186
|
for (const constructor of bigIntTypedArrayConstructors) {
|
|
2411
2187
|
assert.deepEqual(
|
|
2412
|
-
transform(map(number => number ** 2n), new constructor())([1n, 2n, 3n, 4n, 5n]),
|
|
2188
|
+
transform(Transducer.map(number => number ** 2n), new constructor())([1n, 2n, 3n, 4n, 5n]),
|
|
2413
2189
|
new constructor([1n, 4n, 9n, 16n, 25n])
|
|
2414
2190
|
)
|
|
2415
2191
|
assert.deepEqual(
|
|
2416
|
-
transform(map(number => number ** 2n), () => new constructor())([1n, 2n, 3n, 4n, 5n]),
|
|
2192
|
+
transform(Transducer.map(number => number ** 2n), () => new constructor())([1n, 2n, 3n, 4n, 5n]),
|
|
2417
2193
|
new constructor([1n, 4n, 9n, 16n, 25n])
|
|
2418
2194
|
)
|
|
2419
2195
|
assert.deepEqual(
|
|
2420
|
-
await transform(map(async number => number ** 2n), async () => new constructor())([1n, 2n, 3n, 4n, 5n]),
|
|
2196
|
+
await transform(Transducer.map(async number => number ** 2n), async () => new constructor())([1n, 2n, 3n, 4n, 5n]),
|
|
2421
2197
|
new constructor([1n, 4n, 9n, 16n, 25n])
|
|
2422
2198
|
)
|
|
2423
2199
|
assert.deepEqual(
|
|
2424
|
-
transform(map(number => new constructor([number ** 2n])), () => new constructor())([1n, 2n, 3n, 4n, 5n]),
|
|
2200
|
+
transform(Transducer.map(number => new constructor([number ** 2n])), () => new constructor())([1n, 2n, 3n, 4n, 5n]),
|
|
2425
2201
|
new constructor([1n, 4n, 9n, 16n, 25n])
|
|
2426
2202
|
)
|
|
2427
2203
|
assert.deepEqual(
|
|
2428
|
-
await transform(map(async number => new constructor([number ** 2n])), async () => new constructor())([1n, 2n, 3n, 4n, 5n]),
|
|
2204
|
+
await transform(Transducer.map(async number => new constructor([number ** 2n])), async () => new constructor())([1n, 2n, 3n, 4n, 5n]),
|
|
2429
2205
|
new constructor([1n, 4n, 9n, 16n, 25n])
|
|
2430
2206
|
)
|
|
2431
2207
|
}
|
|
@@ -2440,39 +2216,39 @@ transform(
|
|
|
2440
2216
|
: Math.max(this.number, otherMax))
|
|
2441
2217
|
}
|
|
2442
2218
|
assert.deepEqual(
|
|
2443
|
-
transform(map(number => number ** 2), new Max(-Infinity))([1, 2, 3, 4, 5]),
|
|
2219
|
+
transform(Transducer.map(number => number ** 2), new Max(-Infinity))([1, 2, 3, 4, 5]),
|
|
2444
2220
|
new Max(25),
|
|
2445
2221
|
)
|
|
2446
2222
|
assert.deepEqual(
|
|
2447
|
-
transform(map(number => number ** 2), () => new Max(-Infinity))([1, 2, 3, 4, 5]),
|
|
2223
|
+
transform(Transducer.map(number => number ** 2), () => new Max(-Infinity))([1, 2, 3, 4, 5]),
|
|
2448
2224
|
new Max(25),
|
|
2449
2225
|
)
|
|
2450
2226
|
assert.deepEqual(
|
|
2451
|
-
await transform(map(async number => number ** 2), async () => new Max(-Infinity))([1, 2, 3, 4, 5]),
|
|
2227
|
+
await transform(Transducer.map(async number => number ** 2), async () => new Max(-Infinity))([1, 2, 3, 4, 5]),
|
|
2452
2228
|
new Max(25),
|
|
2453
2229
|
)
|
|
2454
2230
|
})
|
|
2455
2231
|
it('init { write: function }|()=>({ write: function })', async () => {
|
|
2456
2232
|
assert.deepEqual(
|
|
2457
|
-
transform(map(number => number ** 2), new MockWritable([]))([1, 2, 3, 4, 5]),
|
|
2233
|
+
transform(Transducer.map(number => number ** 2), new MockWritable([]))([1, 2, 3, 4, 5]),
|
|
2458
2234
|
new MockWritable([1, 4, 9, 16, 25]),
|
|
2459
2235
|
)
|
|
2460
2236
|
assert.deepEqual(
|
|
2461
|
-
transform(map(number => number ** 2), () => new MockWritable([]))([1, 2, 3, 4, 5]),
|
|
2237
|
+
transform(Transducer.map(number => number ** 2), () => new MockWritable([]))([1, 2, 3, 4, 5]),
|
|
2462
2238
|
new MockWritable([1, 4, 9, 16, 25]),
|
|
2463
2239
|
)
|
|
2464
2240
|
assert.deepEqual(
|
|
2465
|
-
await transform(map(async number => number ** 2), async () => new MockWritable([]))([1, 2, 3, 4, 5]),
|
|
2241
|
+
await transform(Transducer.map(async number => number ** 2), async () => new MockWritable([]))([1, 2, 3, 4, 5]),
|
|
2466
2242
|
new MockWritable([1, 4, 9, 16, 25]),
|
|
2467
2243
|
)
|
|
2468
2244
|
const numberToSquaredReadable = number => binaryToReadableStream(Buffer.from([number ** 2]))
|
|
2469
2245
|
assert.deepEqual(
|
|
2470
|
-
await transform(map(numberToSquaredReadable), new MockWritable([]))([1, 2, 3, 4, 5]),
|
|
2246
|
+
await transform(Transducer.map(numberToSquaredReadable), new MockWritable([]))([1, 2, 3, 4, 5]),
|
|
2471
2247
|
new MockWritable([1, 4, 9, 16, 25].map(number => new Uint8Array([number]))),
|
|
2472
2248
|
)
|
|
2473
2249
|
const numberToNumberObjectReadable = number => arrayToObjectReadableStream([{ number }])
|
|
2474
2250
|
assert.deepEqual(
|
|
2475
|
-
await transform(map(numberToNumberObjectReadable), new MockWritable([]))([1, 2, 3, 4, 5]),
|
|
2251
|
+
await transform(Transducer.map(numberToNumberObjectReadable), new MockWritable([]))([1, 2, 3, 4, 5]),
|
|
2476
2252
|
new MockWritable([
|
|
2477
2253
|
{ number: 1 },
|
|
2478
2254
|
{ number: 2 },
|
|
@@ -2483,12 +2259,12 @@ transform(
|
|
|
2483
2259
|
)
|
|
2484
2260
|
const numberToDuplicateString = number => `${number}${number}`
|
|
2485
2261
|
assert.deepEqual(
|
|
2486
|
-
await transform(map(numberToDuplicateString), new MockWritable([]))([1, 2, 3, 4, 5]),
|
|
2262
|
+
await transform(Transducer.map(numberToDuplicateString), new MockWritable([]))([1, 2, 3, 4, 5]),
|
|
2487
2263
|
new MockWritable(['11', '22', '33', '44', '55']),
|
|
2488
2264
|
)
|
|
2489
2265
|
const numberToDuplicateUint8Array = number => new Uint8Array([number, number])
|
|
2490
2266
|
assert.deepEqual(
|
|
2491
|
-
transform(map(numberToDuplicateUint8Array), new MockWritable([]))([1, 2, 3, 4, 5]),
|
|
2267
|
+
transform(Transducer.map(numberToDuplicateUint8Array), new MockWritable([]))([1, 2, 3, 4, 5]),
|
|
2492
2268
|
new MockWritable([
|
|
2493
2269
|
new Uint8Array([1, 1]),
|
|
2494
2270
|
new Uint8Array([2, 2]),
|
|
@@ -2499,7 +2275,7 @@ transform(
|
|
|
2499
2275
|
)
|
|
2500
2276
|
const numberToObjectNumber = number => ({ number })
|
|
2501
2277
|
assert.deepEqual(
|
|
2502
|
-
transform(map(numberToObjectNumber), new MockWritable([]))([1, 2, 3, 4, 5]),
|
|
2278
|
+
transform(Transducer.map(numberToObjectNumber), new MockWritable([]))([1, 2, 3, 4, 5]),
|
|
2503
2279
|
new MockWritable([
|
|
2504
2280
|
{ number: 1 },
|
|
2505
2281
|
{ number: 2 },
|
|
@@ -2510,16 +2286,16 @@ transform(
|
|
|
2510
2286
|
)
|
|
2511
2287
|
const toNull = () => null
|
|
2512
2288
|
assert.deepEqual(
|
|
2513
|
-
transform(map(toNull), new MockWritable([]))([1, 2, 3, 4, 5]),
|
|
2289
|
+
transform(Transducer.map(toNull), new MockWritable([]))([1, 2, 3, 4, 5]),
|
|
2514
2290
|
new MockWritable([null, null, null, null, null]),
|
|
2515
2291
|
)
|
|
2516
2292
|
const getEmptyReadable = () => binaryToReadableStream(Buffer.from([]))
|
|
2517
2293
|
assert.deepEqual(
|
|
2518
|
-
await transform(map(getEmptyReadable), new MockWritable([]))([1, 2, 3, 4, 5]),
|
|
2294
|
+
await transform(Transducer.map(getEmptyReadable), new MockWritable([]))([1, 2, 3, 4, 5]),
|
|
2519
2295
|
new MockWritable([]),
|
|
2520
2296
|
)
|
|
2521
2297
|
assert.throws(
|
|
2522
|
-
() => transform(map(function () {
|
|
2298
|
+
() => transform(Transducer.map(function () {
|
|
2523
2299
|
throw new Error('hey')
|
|
2524
2300
|
}), new MockWritable([]))([1, 2, 3, 4, 5]),
|
|
2525
2301
|
new Error('hey'),
|
|
@@ -2527,21 +2303,21 @@ transform(
|
|
|
2527
2303
|
})
|
|
2528
2304
|
it('init 3', async () => {
|
|
2529
2305
|
assert.strictEqual(
|
|
2530
|
-
transform(map(square), 3)([1, 2, 3, 4, 5]),
|
|
2306
|
+
transform(Transducer.map(square), 3)([1, 2, 3, 4, 5]),
|
|
2531
2307
|
3,
|
|
2532
2308
|
)
|
|
2533
2309
|
})
|
|
2534
2310
|
it('init null|undefined', async () => {
|
|
2535
2311
|
assert.strictEqual(
|
|
2536
|
-
transform(map(square), null)([1, 2, 3, 4, 5]),
|
|
2312
|
+
transform(Transducer.map(square), null)([1, 2, 3, 4, 5]),
|
|
2537
2313
|
null,
|
|
2538
2314
|
)
|
|
2539
2315
|
assert.strictEqual(
|
|
2540
|
-
transform(map(square), undefined)([1, 2, 3, 4, 5]),
|
|
2316
|
+
transform(Transducer.map(square), undefined)([1, 2, 3, 4, 5]),
|
|
2541
2317
|
undefined,
|
|
2542
2318
|
)
|
|
2543
2319
|
assert.strictEqual(
|
|
2544
|
-
transform(map(square))([1, 2, 3, 4, 5]),
|
|
2320
|
+
transform(Transducer.map(square))([1, 2, 3, 4, 5]),
|
|
2545
2321
|
undefined,
|
|
2546
2322
|
)
|
|
2547
2323
|
})
|
|
@@ -2549,23 +2325,23 @@ transform(
|
|
|
2549
2325
|
})
|
|
2550
2326
|
})
|
|
2551
2327
|
|
|
2552
|
-
describe('transform -
|
|
2553
|
-
const squareOdds =
|
|
2554
|
-
const asyncEvens = filter(asyncIsEven)
|
|
2328
|
+
describe('transform - misc', () => {
|
|
2329
|
+
const squareOdds = compose([Transducer.filter(isOdd), Transducer.map(square)])
|
|
2330
|
+
const asyncEvens = Transducer.filter(asyncIsEven)
|
|
2555
2331
|
const bigNumbers = [1n, 2n, 3n, 4n, 5n]
|
|
2556
|
-
const squareOddsToString =
|
|
2557
|
-
filter(isOdd),
|
|
2558
|
-
map(pipe([square, x => `${x}`])),
|
|
2332
|
+
const squareOddsToString = compose([
|
|
2333
|
+
Transducer.filter(isOdd),
|
|
2334
|
+
Transducer.map(pipe([square, x => `${x}`])),
|
|
2559
2335
|
])
|
|
2560
2336
|
it('sync transforms iterable to null', async () => {
|
|
2561
2337
|
let y = ''
|
|
2562
|
-
ase(transform(map(tap(x => { y += x })), null)([1, 2, 3, 4, 5]), null)
|
|
2338
|
+
ase(transform(Transducer.map(tap(x => { y += x })), null)([1, 2, 3, 4, 5]), null)
|
|
2563
2339
|
ase(y, '12345')
|
|
2564
2340
|
})
|
|
2565
2341
|
it('async transforms iterable to null', async () => {
|
|
2566
2342
|
let y = ''
|
|
2567
|
-
aok(transform(map(tap(async () => {})), null)([1, 2, 3, 4, 5]) instanceof Promise)
|
|
2568
|
-
ase(await transform(map(tap(async x => { y += x })), null)([1, 2, 3, 4, 5]), null)
|
|
2343
|
+
aok(transform(Transducer.map(tap(async () => {})), null)([1, 2, 3, 4, 5]) instanceof Promise)
|
|
2344
|
+
ase(await transform(Transducer.map(tap(async x => { y += x })), null)([1, 2, 3, 4, 5]), null)
|
|
2569
2345
|
ase(y, '12345')
|
|
2570
2346
|
})
|
|
2571
2347
|
it('sync transforms iterable to array', async () => {
|
|
@@ -2596,24 +2372,24 @@ transform(
|
|
|
2596
2372
|
for (const constructor of numberTypedArrayConstructors) {
|
|
2597
2373
|
ade(
|
|
2598
2374
|
transform(squareOddsToString, new constructor(0))([1, 2, 3, 4, 5]),
|
|
2599
|
-
new constructor([1, 9,
|
|
2375
|
+
new constructor([1, 9, 25]),
|
|
2600
2376
|
)
|
|
2601
2377
|
}
|
|
2602
2378
|
ade(
|
|
2603
2379
|
transform(squareOddsToString, Buffer.alloc(0))([1, 2, 3, 4, 5]),
|
|
2604
|
-
Buffer.from([1, 9,
|
|
2380
|
+
Buffer.from([1, 9, 25]),
|
|
2605
2381
|
)
|
|
2606
2382
|
})
|
|
2607
2383
|
it('coerces booleans to 0 and 1', async () => {
|
|
2608
2384
|
for (const constructor of numberTypedArrayConstructors) {
|
|
2609
2385
|
assert.deepEqual(
|
|
2610
|
-
transform(map(x => x), new constructor(0))([true, false, false]),
|
|
2386
|
+
transform(Transducer.map(x => x), new constructor(0))([true, false, false]),
|
|
2611
2387
|
new constructor([1, 0, 0])
|
|
2612
2388
|
)
|
|
2613
2389
|
}
|
|
2614
2390
|
for (const constructor of bigIntTypedArrayConstructors) {
|
|
2615
2391
|
assert.deepEqual(
|
|
2616
|
-
transform(map(x => x), new constructor(0))([true, false, false]),
|
|
2392
|
+
transform(Transducer.map(x => x), new constructor(0))([true, false, false]),
|
|
2617
2393
|
new constructor([1n, 0n, 0n])
|
|
2618
2394
|
)
|
|
2619
2395
|
}
|
|
@@ -2629,7 +2405,7 @@ transform(
|
|
|
2629
2405
|
it('sync transforms iterable to a bigint TypedArray', async () => {
|
|
2630
2406
|
const isBigOdd = x => (x % 2n === 1n)
|
|
2631
2407
|
const bigSquare = x => x ** 2n
|
|
2632
|
-
const squareBigOdds =
|
|
2408
|
+
const squareBigOdds = compose([Transducer.filter(isBigOdd), Transducer.map(bigSquare)])
|
|
2633
2409
|
for (const constructor of bigIntTypedArrayConstructors) {
|
|
2634
2410
|
ade(
|
|
2635
2411
|
transform(squareBigOdds, new constructor(0))(bigNumbers),
|
|
@@ -2639,7 +2415,7 @@ transform(
|
|
|
2639
2415
|
})
|
|
2640
2416
|
it('async transforms iterable to a bigint TypedArray', async () => {
|
|
2641
2417
|
const asyncIsBigEven = async x => (x % 2n === 0n)
|
|
2642
|
-
const asyncBigEvens = filter(asyncIsBigEven)
|
|
2418
|
+
const asyncBigEvens = Transducer.filter(asyncIsBigEven)
|
|
2643
2419
|
for (const constructor of bigIntTypedArrayConstructors) {
|
|
2644
2420
|
const buffer99 = new constructor([9n, 9n])
|
|
2645
2421
|
const buffer9924 = transform(asyncBigEvens, buffer99)(bigNumbers)
|
|
@@ -2659,9 +2435,9 @@ transform(
|
|
|
2659
2435
|
await fs.promises.unlink('./tmp')
|
|
2660
2436
|
})
|
|
2661
2437
|
it('async transforms iterable to writeable stream', async () => {
|
|
2662
|
-
const asyncEvensToString =
|
|
2663
|
-
filter(asyncIsEven),
|
|
2664
|
-
map(x => `${x}`)
|
|
2438
|
+
const asyncEvensToString = compose([
|
|
2439
|
+
Transducer.filter(asyncIsEven),
|
|
2440
|
+
Transducer.map(x => `${x}`)
|
|
2665
2441
|
])
|
|
2666
2442
|
const tmpWriter = fs.createWriteStream(path.join(__dirname, './tmp'))
|
|
2667
2443
|
tmpWriter.write('99')
|
|
@@ -2678,42 +2454,42 @@ transform(
|
|
|
2678
2454
|
})
|
|
2679
2455
|
it('sync transforms an iterable to an object', async () => {
|
|
2680
2456
|
ade(
|
|
2681
|
-
transform(map(n => ({ [n]: n })), {})([1, 2, 3, 4, 5]),
|
|
2457
|
+
transform(Transducer.map(n => ({ [n]: n })), {})([1, 2, 3, 4, 5]),
|
|
2682
2458
|
{ '1': 1, '2': 2, '3': 3, '4': 4, '5': 5 },
|
|
2683
2459
|
)
|
|
2684
2460
|
})
|
|
2685
2461
|
it('async transforms an iterable to an object', async () => {
|
|
2686
2462
|
aok(
|
|
2687
|
-
transform(map(async n => [n, n]), {})([1, 2, 3, 4, 5]) instanceof Promise,
|
|
2463
|
+
transform(Transducer.map(async n => [n, n]), {})([1, 2, 3, 4, 5]) instanceof Promise,
|
|
2688
2464
|
)
|
|
2689
2465
|
aok(
|
|
2690
|
-
transform(map(async n => ({ [n]: n })), {})([1, 2, 3, 4, 5]) instanceof Promise,
|
|
2466
|
+
transform(Transducer.map(async n => ({ [n]: n })), {})([1, 2, 3, 4, 5]) instanceof Promise,
|
|
2691
2467
|
)
|
|
2692
2468
|
ade(
|
|
2693
|
-
await transform(map(async n => ({ [n]: n })), {})([1, 2, 3, 4, 5]),
|
|
2469
|
+
await transform(Transducer.map(async n => ({ [n]: n })), {})([1, 2, 3, 4, 5]),
|
|
2694
2470
|
{ '1': 1, '2': 2, '3': 3, '4': 4, '5': 5 },
|
|
2695
2471
|
)
|
|
2696
2472
|
})
|
|
2697
2473
|
it('initial value can be a function', async () => {
|
|
2698
2474
|
const square = x => x ** 2
|
|
2699
2475
|
ade(
|
|
2700
|
-
transform(map(square), () => [])([1, 2, 3]),
|
|
2476
|
+
transform(Transducer.map(square), () => [])([1, 2, 3]),
|
|
2701
2477
|
[1, 4, 9],
|
|
2702
2478
|
)
|
|
2703
2479
|
})
|
|
2704
2480
|
it('initial value can be an async function', async () => {
|
|
2705
2481
|
const square = x => x ** 2
|
|
2706
2482
|
aok(
|
|
2707
|
-
transform(map(square), async () => [])([1, 2, 3]) instanceof Promise,
|
|
2483
|
+
transform(Transducer.map(square), async () => [])([1, 2, 3]) instanceof Promise,
|
|
2708
2484
|
)
|
|
2709
2485
|
ade(
|
|
2710
|
-
await transform(map(square), async () => [])([1, 2, 3]),
|
|
2486
|
+
await transform(Transducer.map(square), async () => [])([1, 2, 3]),
|
|
2711
2487
|
[1, 4, 9],
|
|
2712
2488
|
)
|
|
2713
2489
|
})
|
|
2714
|
-
it('
|
|
2490
|
+
it('nonfunction initial values can be unsafe', async () => {
|
|
2715
2491
|
const square = x => x ** 2
|
|
2716
|
-
const unsafeSquareAllTransform = transform(map(square), [])
|
|
2492
|
+
const unsafeSquareAllTransform = transform(Transducer.map(square), [])
|
|
2717
2493
|
ade(
|
|
2718
2494
|
unsafeSquareAllTransform([1, 2, 3]),
|
|
2719
2495
|
[1, 4, 9],
|
|
@@ -2722,7 +2498,7 @@ transform(
|
|
|
2722
2498
|
unsafeSquareAllTransform([1, 2, 3]),
|
|
2723
2499
|
[1, 4, 9, 1, 4, 9],
|
|
2724
2500
|
)
|
|
2725
|
-
const safeSquareAllTransform = transform(map(square), () => [])
|
|
2501
|
+
const safeSquareAllTransform = transform(Transducer.map(square), () => [])
|
|
2726
2502
|
ade(
|
|
2727
2503
|
safeSquareAllTransform([1, 2, 3]),
|
|
2728
2504
|
[1, 4, 9],
|
|
@@ -2735,12 +2511,12 @@ transform(
|
|
|
2735
2511
|
it('=> [] for initial () => [] and input []', async () => {
|
|
2736
2512
|
const square = x => x ** 2
|
|
2737
2513
|
ade(
|
|
2738
|
-
transform(map(square), () => [])([]),
|
|
2514
|
+
transform(Transducer.map(square), () => [])([]),
|
|
2739
2515
|
[],
|
|
2740
2516
|
)
|
|
2741
2517
|
const emptyAsyncIterator = (async function*(){})()
|
|
2742
2518
|
ade(
|
|
2743
|
-
await transform(map(square), () => [])(emptyAsyncIterator),
|
|
2519
|
+
await transform(Transducer.map(square), () => [])(emptyAsyncIterator),
|
|
2744
2520
|
[],
|
|
2745
2521
|
)
|
|
2746
2522
|
})
|
|
@@ -2748,36 +2524,34 @@ transform(
|
|
|
2748
2524
|
|
|
2749
2525
|
describe('flatMap', () => {
|
|
2750
2526
|
describe(`
|
|
2751
|
-
|
|
2752
|
-
|
|
2753
|
-
Monad = Array|String|Set
|
|
2754
|
-
|TypedArray|DuplexStream|Iterator|AsyncIterator
|
|
2755
|
-
|{ chain: function }|{ flatMap: function }|Object
|
|
2756
|
-
|
|
2757
|
-
Foldable = Iterable|AsyncIterable|{ reduce: function }
|
|
2527
|
+
type FlatMappable = Array|String|Set|Iterator|AsyncIterator
|
|
2528
|
+
type Iterable = Iterable|AsyncIterable|Object<value any>
|
|
2758
2529
|
|
|
2759
2530
|
flatMap(
|
|
2760
|
-
|
|
2761
|
-
|
|
2531
|
+
value FlatMappable,
|
|
2532
|
+
flatMapper (item any)=>Promise|Iterable,
|
|
2533
|
+
) -> result Promise|FlatMappable
|
|
2762
2534
|
|
|
2763
2535
|
flatMap(
|
|
2764
|
-
flatMapper item=>Promise|
|
|
2765
|
-
)(
|
|
2766
|
-
|
|
2767
|
-
) -> flatMappingGeneratorFunction ...args=>Generator
|
|
2768
|
-
|
|
2769
|
-
flatMap(
|
|
2770
|
-
flatMapper item=>Promise|Monad|Foldable|any,
|
|
2771
|
-
)(
|
|
2772
|
-
value (args ...any)=>AsyncGenerator<item>,
|
|
2773
|
-
) -> flatMappingAsyncGeneratorFunction ...args=>AsyncGenerator
|
|
2536
|
+
flatMapper (item any)=>Promise|Iterable,
|
|
2537
|
+
)(value FlatMappable) -> result Promise|FlatMappable
|
|
2538
|
+
`, () => {
|
|
2774
2539
|
|
|
2775
|
-
|
|
2540
|
+
it('API coverage', async () => {
|
|
2541
|
+
assert.deepEqual(
|
|
2542
|
+
flatMap([1, 2, 3, 4, 5], number => isOdd(number) ? [number] : []),
|
|
2543
|
+
[1, 3, 5],
|
|
2544
|
+
)
|
|
2545
|
+
assert.deepEqual(
|
|
2546
|
+
flatMap(number => isOdd(number) ? [number] : [])([1, 2, 3, 4, 5]),
|
|
2547
|
+
[1, 3, 5],
|
|
2548
|
+
)
|
|
2549
|
+
assert.deepEqual(
|
|
2550
|
+
await flatMap(Promise.resolve([1, 2, 3, 4, 5]), number => isOdd(number) ? [number] : []),
|
|
2551
|
+
[1, 3, 5],
|
|
2552
|
+
)
|
|
2553
|
+
})
|
|
2776
2554
|
|
|
2777
|
-
flatMap(
|
|
2778
|
-
flatMapper item=>Promise|Monad|Foldable|any,
|
|
2779
|
-
)(value Reducer<item>) -> flatMappingReducer Reducer
|
|
2780
|
-
`, () => {
|
|
2781
2555
|
const async = func => async function asyncFunc(...args) {
|
|
2782
2556
|
return func(...args)
|
|
2783
2557
|
}
|
|
@@ -3002,198 +2776,6 @@ flatMap(
|
|
|
3002
2776
|
[numbersSet, duplicateReadableStream, new Set(numbersArray.map(duplicateBuffer))],
|
|
3003
2777
|
[numbersSet, async(duplicateReadableStream), new Set(numbersArray.map(duplicateBuffer))],
|
|
3004
2778
|
|
|
3005
|
-
[numbersUint8Array, identity, numbersUint8Array],
|
|
3006
|
-
[numbersUint8Array, number => [[number, number]], numbersUint8ArrayDuplicates],
|
|
3007
|
-
[numbersUint8Array, async(number => [[number, number]]), numbersUint8ArrayDuplicates],
|
|
3008
|
-
[numbersUint8Array, number => [new Uint8Array([number, number])], numbersUint8ArrayDuplicates], // binary cannot nest arrays
|
|
3009
|
-
[numbersUint8Array, async(number => [new Uint8Array([number, number])]), numbersUint8ArrayDuplicates],
|
|
3010
|
-
[numbersUint8Array, number => [new Uint8Array([number]), new Uint8Array([number])], numbersUint8ArrayDuplicates],
|
|
3011
|
-
[numbersUint8Array, duplicateArray, numbersUint8ArrayDuplicates],
|
|
3012
|
-
[numbersUint8Array, async(duplicateArray), numbersUint8ArrayDuplicates],
|
|
3013
|
-
[numbersUint8Array, DuplicateArray.of, numbersUint8ArrayDuplicates],
|
|
3014
|
-
[numbersUint8Array, async(DuplicateArray.of), numbersUint8ArrayDuplicates],
|
|
3015
|
-
[numbersUint8Array, Identity.of, numbersUint8Array],
|
|
3016
|
-
[numbersUint8Array, async(Identity.of), numbersUint8Array],
|
|
3017
|
-
[numbersUint8Array, duplicateMockFoldable, numbersUint8ArrayDuplicates],
|
|
3018
|
-
[numbersUint8Array, async(duplicateMockFoldable), numbersUint8ArrayDuplicates],
|
|
3019
|
-
[numbersUint8Array, duplicateAsyncMockFoldable, numbersUint8ArrayDuplicates],
|
|
3020
|
-
[numbersUint8Array, async(duplicateAsyncMockFoldable), numbersUint8ArrayDuplicates],
|
|
3021
|
-
[numbersUint8Array, duplicateObject, numbersUint8ArrayDuplicates],
|
|
3022
|
-
[numbersUint8Array, async(duplicateObject), numbersUint8ArrayDuplicates],
|
|
3023
|
-
[numbersUint8Array, duplicateUint8Array, numbersUint8ArrayDuplicates],
|
|
3024
|
-
[numbersUint8Array, async(duplicateUint8Array), numbersUint8ArrayDuplicates],
|
|
3025
|
-
[numbersInt8Array, duplicateArray, numbersInt8ArrayDuplicates],
|
|
3026
|
-
[numbersInt8Array, async(duplicateArray), numbersInt8ArrayDuplicates],
|
|
3027
|
-
[numbersInt8Array, DuplicateArray.of, numbersInt8ArrayDuplicates],
|
|
3028
|
-
[numbersInt8Array, async(DuplicateArray.of), numbersInt8ArrayDuplicates],
|
|
3029
|
-
[numbersInt8Array, Identity.of, numbersInt8Array],
|
|
3030
|
-
[numbersInt8Array, async(Identity.of), numbersInt8Array],
|
|
3031
|
-
[numbersInt8Array, duplicateMockFoldable, numbersInt8ArrayDuplicates],
|
|
3032
|
-
[numbersInt8Array, async(duplicateMockFoldable), numbersInt8ArrayDuplicates],
|
|
3033
|
-
[numbersInt8Array, duplicateAsyncMockFoldable, numbersInt8ArrayDuplicates],
|
|
3034
|
-
[numbersInt8Array, async(duplicateAsyncMockFoldable), numbersInt8ArrayDuplicates],
|
|
3035
|
-
[numbersInt8Array, duplicateObject, numbersInt8ArrayDuplicates],
|
|
3036
|
-
[numbersInt8Array, async(duplicateObject), numbersInt8ArrayDuplicates],
|
|
3037
|
-
[numbersInt8Array, duplicateInt8Array, numbersInt8ArrayDuplicates],
|
|
3038
|
-
[numbersInt8Array, async(duplicateInt8Array), numbersInt8ArrayDuplicates],
|
|
3039
|
-
[numbersUint16Array, duplicateArray, numbersUint16ArrayDuplicates],
|
|
3040
|
-
[numbersUint16Array, async(duplicateArray), numbersUint16ArrayDuplicates],
|
|
3041
|
-
[numbersUint16Array, DuplicateArray.of, numbersUint16ArrayDuplicates],
|
|
3042
|
-
[numbersUint16Array, async(DuplicateArray.of), numbersUint16ArrayDuplicates],
|
|
3043
|
-
[numbersUint16Array, Identity.of, numbersUint16Array],
|
|
3044
|
-
[numbersUint16Array, async(Identity.of), numbersUint16Array],
|
|
3045
|
-
[numbersUint16Array, duplicateMockFoldable, numbersUint16ArrayDuplicates],
|
|
3046
|
-
[numbersUint16Array, async(duplicateMockFoldable), numbersUint16ArrayDuplicates],
|
|
3047
|
-
[numbersUint16Array, duplicateAsyncMockFoldable, numbersUint16ArrayDuplicates],
|
|
3048
|
-
[numbersUint16Array, async(duplicateAsyncMockFoldable), numbersUint16ArrayDuplicates],
|
|
3049
|
-
[numbersUint16Array, duplicateObject, numbersUint16ArrayDuplicates],
|
|
3050
|
-
[numbersUint16Array, async(duplicateObject), numbersUint16ArrayDuplicates],
|
|
3051
|
-
[numbersUint16Array, duplicateUint16Array, numbersUint16ArrayDuplicates],
|
|
3052
|
-
[numbersUint16Array, async(duplicateUint16Array), numbersUint16ArrayDuplicates],
|
|
3053
|
-
[numbersInt16Array, duplicateArray, numbersInt16ArrayDuplicates],
|
|
3054
|
-
[numbersInt16Array, async(duplicateArray), numbersInt16ArrayDuplicates],
|
|
3055
|
-
[numbersInt16Array, DuplicateArray.of, numbersInt16ArrayDuplicates],
|
|
3056
|
-
[numbersInt16Array, async(DuplicateArray.of), numbersInt16ArrayDuplicates],
|
|
3057
|
-
[numbersInt16Array, Identity.of, numbersInt16Array],
|
|
3058
|
-
[numbersInt16Array, async(Identity.of), numbersInt16Array],
|
|
3059
|
-
[numbersInt16Array, duplicateMockFoldable, numbersInt16ArrayDuplicates],
|
|
3060
|
-
[numbersInt16Array, async(duplicateMockFoldable), numbersInt16ArrayDuplicates],
|
|
3061
|
-
[numbersInt16Array, duplicateAsyncMockFoldable, numbersInt16ArrayDuplicates],
|
|
3062
|
-
[numbersInt16Array, async(duplicateAsyncMockFoldable), numbersInt16ArrayDuplicates],
|
|
3063
|
-
[numbersInt16Array, duplicateObject, numbersInt16ArrayDuplicates],
|
|
3064
|
-
[numbersInt16Array, async(duplicateObject), numbersInt16ArrayDuplicates],
|
|
3065
|
-
[numbersInt16Array, duplicateInt16Array, numbersInt16ArrayDuplicates],
|
|
3066
|
-
[numbersInt16Array, async(duplicateInt16Array), numbersInt16ArrayDuplicates],
|
|
3067
|
-
[numbersUint32Array, duplicateArray, numbersUint32ArrayDuplicates],
|
|
3068
|
-
[numbersUint32Array, async(duplicateArray), numbersUint32ArrayDuplicates],
|
|
3069
|
-
[numbersUint32Array, DuplicateArray.of, numbersUint32ArrayDuplicates],
|
|
3070
|
-
[numbersUint32Array, async(DuplicateArray.of), numbersUint32ArrayDuplicates],
|
|
3071
|
-
[numbersUint32Array, Identity.of, numbersUint32Array],
|
|
3072
|
-
[numbersUint32Array, async(Identity.of), numbersUint32Array],
|
|
3073
|
-
[numbersUint32Array, duplicateMockFoldable, numbersUint32ArrayDuplicates],
|
|
3074
|
-
[numbersUint32Array, async(duplicateMockFoldable), numbersUint32ArrayDuplicates],
|
|
3075
|
-
[numbersUint32Array, duplicateAsyncMockFoldable, numbersUint32ArrayDuplicates],
|
|
3076
|
-
[numbersUint32Array, async(duplicateAsyncMockFoldable), numbersUint32ArrayDuplicates],
|
|
3077
|
-
[numbersUint32Array, duplicateObject, numbersUint32ArrayDuplicates],
|
|
3078
|
-
[numbersUint32Array, async(duplicateObject), numbersUint32ArrayDuplicates],
|
|
3079
|
-
[numbersUint32Array, duplicateUint32Array, numbersUint32ArrayDuplicates],
|
|
3080
|
-
[numbersUint32Array, async(duplicateUint32Array), numbersUint32ArrayDuplicates],
|
|
3081
|
-
[numbersInt32Array, duplicateArray, numbersInt32ArrayDuplicates],
|
|
3082
|
-
[numbersInt32Array, async(duplicateArray), numbersInt32ArrayDuplicates],
|
|
3083
|
-
[numbersInt32Array, DuplicateArray.of, numbersInt32ArrayDuplicates],
|
|
3084
|
-
[numbersInt32Array, async(DuplicateArray.of), numbersInt32ArrayDuplicates],
|
|
3085
|
-
[numbersInt32Array, Identity.of, numbersInt32Array],
|
|
3086
|
-
[numbersInt32Array, async(Identity.of), numbersInt32Array],
|
|
3087
|
-
[numbersInt32Array, duplicateMockFoldable, numbersInt32ArrayDuplicates],
|
|
3088
|
-
[numbersInt32Array, async(duplicateMockFoldable), numbersInt32ArrayDuplicates],
|
|
3089
|
-
[numbersInt32Array, duplicateAsyncMockFoldable, numbersInt32ArrayDuplicates],
|
|
3090
|
-
[numbersInt32Array, async(duplicateAsyncMockFoldable), numbersInt32ArrayDuplicates],
|
|
3091
|
-
[numbersInt32Array, duplicateObject, numbersInt32ArrayDuplicates],
|
|
3092
|
-
[numbersInt32Array, async(duplicateObject), numbersInt32ArrayDuplicates],
|
|
3093
|
-
[numbersInt32Array, duplicateInt32Array, numbersInt32ArrayDuplicates],
|
|
3094
|
-
[numbersInt32Array, async(duplicateInt32Array), numbersInt32ArrayDuplicates],
|
|
3095
|
-
[numbersFloat32Array, duplicateArray, numbersFloat32ArrayDuplicates],
|
|
3096
|
-
[numbersFloat32Array, async(duplicateArray), numbersFloat32ArrayDuplicates],
|
|
3097
|
-
[numbersFloat32Array, DuplicateArray.of, numbersFloat32ArrayDuplicates],
|
|
3098
|
-
[numbersFloat32Array, async(DuplicateArray.of), numbersFloat32ArrayDuplicates],
|
|
3099
|
-
[numbersFloat32Array, Identity.of, numbersFloat32Array],
|
|
3100
|
-
[numbersFloat32Array, async(Identity.of), numbersFloat32Array],
|
|
3101
|
-
[numbersFloat32Array, duplicateMockFoldable, numbersFloat32ArrayDuplicates],
|
|
3102
|
-
[numbersFloat32Array, async(duplicateMockFoldable), numbersFloat32ArrayDuplicates],
|
|
3103
|
-
[numbersFloat32Array, duplicateAsyncMockFoldable, numbersFloat32ArrayDuplicates],
|
|
3104
|
-
[numbersFloat32Array, async(duplicateAsyncMockFoldable), numbersFloat32ArrayDuplicates],
|
|
3105
|
-
[numbersFloat32Array, duplicateObject, numbersFloat32ArrayDuplicates],
|
|
3106
|
-
[numbersFloat32Array, async(duplicateObject), numbersFloat32ArrayDuplicates],
|
|
3107
|
-
[numbersFloat32Array, duplicateFloat32Array, numbersFloat32ArrayDuplicates],
|
|
3108
|
-
[numbersFloat32Array, async(duplicateFloat32Array), numbersFloat32ArrayDuplicates],
|
|
3109
|
-
[numbersFloat64Array, duplicateArray, numbersFloat64ArrayDuplicates],
|
|
3110
|
-
[numbersFloat64Array, async(duplicateArray), numbersFloat64ArrayDuplicates],
|
|
3111
|
-
[numbersFloat64Array, DuplicateArray.of, numbersFloat64ArrayDuplicates],
|
|
3112
|
-
[numbersFloat64Array, async(DuplicateArray.of), numbersFloat64ArrayDuplicates],
|
|
3113
|
-
[numbersFloat64Array, Identity.of, numbersFloat64Array],
|
|
3114
|
-
[numbersFloat64Array, async(Identity.of), numbersFloat64Array],
|
|
3115
|
-
[numbersFloat64Array, duplicateMockFoldable, numbersFloat64ArrayDuplicates],
|
|
3116
|
-
[numbersFloat64Array, async(duplicateMockFoldable), numbersFloat64ArrayDuplicates],
|
|
3117
|
-
[numbersFloat64Array, duplicateAsyncMockFoldable, numbersFloat64ArrayDuplicates],
|
|
3118
|
-
[numbersFloat64Array, async(duplicateAsyncMockFoldable), numbersFloat64ArrayDuplicates],
|
|
3119
|
-
[numbersFloat64Array, duplicateObject, numbersFloat64ArrayDuplicates],
|
|
3120
|
-
[numbersFloat64Array, async(duplicateObject), numbersFloat64ArrayDuplicates],
|
|
3121
|
-
[numbersFloat64Array, duplicateFloat64Array, numbersFloat64ArrayDuplicates],
|
|
3122
|
-
[numbersFloat64Array, async(duplicateFloat64Array), numbersFloat64ArrayDuplicates],
|
|
3123
|
-
[numbersBigUint64Array, duplicateArray, numbersBigUint64ArrayDuplicates],
|
|
3124
|
-
[numbersBigUint64Array, async(duplicateArray), numbersBigUint64ArrayDuplicates],
|
|
3125
|
-
[numbersBigUint64Array, DuplicateArray.of, numbersBigUint64ArrayDuplicates],
|
|
3126
|
-
[numbersBigUint64Array, async(DuplicateArray.of), numbersBigUint64ArrayDuplicates],
|
|
3127
|
-
[numbersBigUint64Array, Identity.of, numbersBigUint64Array],
|
|
3128
|
-
[numbersBigUint64Array, async(Identity.of), numbersBigUint64Array],
|
|
3129
|
-
[numbersBigUint64Array, duplicateMockFoldable, numbersBigUint64ArrayDuplicates],
|
|
3130
|
-
[numbersBigUint64Array, async(duplicateMockFoldable), numbersBigUint64ArrayDuplicates],
|
|
3131
|
-
[numbersBigUint64Array, duplicateAsyncMockFoldable, numbersBigUint64ArrayDuplicates],
|
|
3132
|
-
[numbersBigUint64Array, async(duplicateAsyncMockFoldable), numbersBigUint64ArrayDuplicates],
|
|
3133
|
-
[numbersBigUint64Array, duplicateObjectBigInt, numbersBigUint64ArrayDuplicates],
|
|
3134
|
-
[numbersBigUint64Array, async(duplicateObjectBigInt), numbersBigUint64ArrayDuplicates],
|
|
3135
|
-
[numbersBigUint64Array, duplicateBigUint64Array, numbersBigUint64ArrayDuplicates],
|
|
3136
|
-
[numbersBigUint64Array, async(duplicateBigUint64Array), numbersBigUint64ArrayDuplicates],
|
|
3137
|
-
[numbersBigInt64Array, duplicateArray, numbersBigInt64ArrayDuplicates],
|
|
3138
|
-
[numbersBigInt64Array, async(duplicateArray), numbersBigInt64ArrayDuplicates],
|
|
3139
|
-
[numbersBigInt64Array, DuplicateArray.of, numbersBigInt64ArrayDuplicates],
|
|
3140
|
-
[numbersBigInt64Array, async(DuplicateArray.of), numbersBigInt64ArrayDuplicates],
|
|
3141
|
-
[numbersBigInt64Array, Identity.of, numbersBigInt64Array],
|
|
3142
|
-
[numbersBigInt64Array, async(Identity.of), numbersBigInt64Array],
|
|
3143
|
-
[numbersBigInt64Array, duplicateMockFoldable, numbersBigInt64ArrayDuplicates],
|
|
3144
|
-
[numbersBigInt64Array, async(duplicateMockFoldable), numbersBigInt64ArrayDuplicates],
|
|
3145
|
-
[numbersBigInt64Array, duplicateAsyncMockFoldable, numbersBigInt64ArrayDuplicates],
|
|
3146
|
-
[numbersBigInt64Array, async(duplicateAsyncMockFoldable), numbersBigInt64ArrayDuplicates],
|
|
3147
|
-
[numbersBigInt64Array, duplicateObjectBigInt, numbersBigInt64ArrayDuplicates],
|
|
3148
|
-
[numbersBigInt64Array, async(duplicateObjectBigInt), numbersBigInt64ArrayDuplicates],
|
|
3149
|
-
[numbersBigInt64Array, duplicateBigInt64Array, numbersBigInt64ArrayDuplicates],
|
|
3150
|
-
[numbersBigInt64Array, async(duplicateBigInt64Array), numbersBigInt64ArrayDuplicates],
|
|
3151
|
-
[bigIntsSet, duplicateBigUint64Array, bigIntsSet],
|
|
3152
|
-
[bigIntsSet, async(duplicateBigUint64Array), bigIntsSet],
|
|
3153
|
-
[bigIntsSet, duplicateBigInt64Array, bigIntsSet],
|
|
3154
|
-
[bigIntsSet, async(duplicateBigInt64Array), bigIntsSet],
|
|
3155
|
-
|
|
3156
|
-
[new MockDuplexStream(numbersArray), identity, Object.assign(new MockDuplexStream(numbersArray), { array: numbersArray })],
|
|
3157
|
-
[new MockDuplexStream(numbersArray), () => null, Object.assign(new MockDuplexStream(numbersArray), { array: [null, null, null, null, null] })],
|
|
3158
|
-
[new MockDuplexStream(numbersArray), duplicateArray, Object.assign(new MockDuplexStream(numbersArray), { array: numbersDuplicates })],
|
|
3159
|
-
[new MockDuplexStream(numbersArray), async(duplicateArray), Object.assign(new MockDuplexStream(numbersArray), { array: numbersDuplicates })],
|
|
3160
|
-
[new MockDuplexStream(numbersArray), DuplicateArray.of, Object.assign(new MockDuplexStream(numbersArray), { array: numbersArray.map(duplicateArray) })], // .chain is 1 flat
|
|
3161
|
-
[new MockDuplexStream(numbersArray), async(DuplicateArray.of), Object.assign(new MockDuplexStream(numbersArray), { array: numbersArray.map(duplicateArray) })],
|
|
3162
|
-
[new MockDuplexStream(numbersArray), Identity.of, Object.assign(new MockDuplexStream(numbersArray), { array: numbersArray })],
|
|
3163
|
-
[new MockDuplexStream(numbersArray), async(Identity.of), Object.assign(new MockDuplexStream(numbersArray), { array: numbersArray })],
|
|
3164
|
-
[new MockDuplexStream(numbersArray), duplicateMockFoldable, Object.assign(new MockDuplexStream(numbersArray), { array: numbersDuplicates })],
|
|
3165
|
-
[new MockDuplexStream(numbersArray), async(duplicateMockFoldable), Object.assign(new MockDuplexStream(numbersArray), { array: numbersDuplicates })],
|
|
3166
|
-
[new MockDuplexStream(numbersArray), duplicateAsyncMockFoldable, Object.assign(new MockDuplexStream(numbersArray), { array: numbersDuplicates })],
|
|
3167
|
-
[new MockDuplexStream(numbersArray), async(duplicateAsyncMockFoldable), Object.assign(new MockDuplexStream(numbersArray), { array: numbersDuplicates })],
|
|
3168
|
-
[new MockDuplexStream(numbersArray), duplicateObject, Object.assign(new MockDuplexStream(numbersArray), { array: numbersDuplicates })],
|
|
3169
|
-
[new MockDuplexStream(numbersArray), async(duplicateObject), Object.assign(new MockDuplexStream(numbersArray), { array: numbersDuplicates })],
|
|
3170
|
-
[new MockDuplexStream(numbersArray), duplicateString, Object.assign(new MockDuplexStream(numbersArray), { array: numbersDuplicates })],
|
|
3171
|
-
[new MockDuplexStream(numbersArray), async(duplicateString), Object.assign(new MockDuplexStream(numbersArray), { array: numbersDuplicates })],
|
|
3172
|
-
[new MockDuplexStream(numbersArray), duplicateReadableStream, Object.assign(new MockDuplexStream(numbersArray), { array: numbersArray.map(duplicateBuffer) })], // 1 flat to buf
|
|
3173
|
-
[new MockDuplexStream(numbersArray), async(duplicateReadableStream), Object.assign(new MockDuplexStream(numbersArray), { array: numbersArray.map(duplicateBuffer) })],
|
|
3174
|
-
[new MockDuplexStream(numbersArray), duplicateUint8ClampedArray, Object.assign(new MockDuplexStream(numbersArray), { array: numbersDuplicates })],
|
|
3175
|
-
[new MockDuplexStream(numbersArray), async(duplicateUint8ClampedArray), Object.assign(new MockDuplexStream(numbersArray), { array: numbersDuplicates })],
|
|
3176
|
-
[new MockDuplexStream(numbersArray), duplicateUint8Array, Object.assign(new MockDuplexStream(numbersArray), { array: numbersDuplicates })],
|
|
3177
|
-
[new MockDuplexStream(numbersArray), async(duplicateUint8Array), Object.assign(new MockDuplexStream(numbersArray), { array: numbersDuplicates })],
|
|
3178
|
-
[new MockDuplexStream(numbersArray), duplicateInt8Array, Object.assign(new MockDuplexStream(numbersArray), { array: numbersDuplicates })],
|
|
3179
|
-
[new MockDuplexStream(numbersArray), async(duplicateInt8Array), Object.assign(new MockDuplexStream(numbersArray), { array: numbersDuplicates })],
|
|
3180
|
-
[new MockDuplexStream(numbersArray), duplicateUint16Array, Object.assign(new MockDuplexStream(numbersArray), { array: numbersDuplicates })],
|
|
3181
|
-
[new MockDuplexStream(numbersArray), async(duplicateUint16Array), Object.assign(new MockDuplexStream(numbersArray), { array: numbersDuplicates })],
|
|
3182
|
-
[new MockDuplexStream(numbersArray), duplicateInt16Array, Object.assign(new MockDuplexStream(numbersArray), { array: numbersDuplicates })],
|
|
3183
|
-
[new MockDuplexStream(numbersArray), async(duplicateInt16Array), Object.assign(new MockDuplexStream(numbersArray), { array: numbersDuplicates })],
|
|
3184
|
-
[new MockDuplexStream(numbersArray), duplicateUint32Array, Object.assign(new MockDuplexStream(numbersArray), { array: numbersDuplicates })],
|
|
3185
|
-
[new MockDuplexStream(numbersArray), async(duplicateUint32Array), Object.assign(new MockDuplexStream(numbersArray), { array: numbersDuplicates })],
|
|
3186
|
-
[new MockDuplexStream(numbersArray), duplicateInt32Array, Object.assign(new MockDuplexStream(numbersArray), { array: numbersDuplicates })],
|
|
3187
|
-
[new MockDuplexStream(numbersArray), async(duplicateInt32Array), Object.assign(new MockDuplexStream(numbersArray), { array: numbersDuplicates })],
|
|
3188
|
-
[new MockDuplexStream(numbersArray), duplicateFloat32Array, Object.assign(new MockDuplexStream(numbersArray), { array: numbersDuplicates })],
|
|
3189
|
-
[new MockDuplexStream(numbersArray), async(duplicateFloat32Array), Object.assign(new MockDuplexStream(numbersArray), { array: numbersDuplicates })],
|
|
3190
|
-
[new MockDuplexStream(numbersArray), duplicateFloat64Array, Object.assign(new MockDuplexStream(numbersArray), { array: numbersDuplicates })],
|
|
3191
|
-
[new MockDuplexStream(numbersArray), async(duplicateFloat64Array), Object.assign(new MockDuplexStream(numbersArray), { array: numbersDuplicates })],
|
|
3192
|
-
[new MockDuplexStream(bigIntsArray), duplicateBigUint64Array, Object.assign(new MockDuplexStream(numbersArray), { array: numbersDuplicates })],
|
|
3193
|
-
[new MockDuplexStream(bigIntsArray), async(duplicateBigUint64Array), Object.assign(new MockDuplexStream(numbersArray), { array: numbersDuplicates })],
|
|
3194
|
-
[new MockDuplexStream(bigIntsArray), duplicateBigInt64Array, Object.assign(new MockDuplexStream(numbersArray), { array: numbersDuplicates })], // 1 == 1n true
|
|
3195
|
-
[new MockDuplexStream(bigIntsArray), async(duplicateBigInt64Array), Object.assign(new MockDuplexStream(numbersArray), { array: numbersDuplicates })], // 1 == 1n true
|
|
3196
|
-
|
|
3197
2779
|
[numbersGeneratorFunction(), identity, numbersArray, function (expected, actual) {
|
|
3198
2780
|
assert.deepEqual([...actual], expected)
|
|
3199
2781
|
}],
|
|
@@ -3378,80 +2960,9 @@ flatMap(
|
|
|
3378
2960
|
assert.strictEqual(flatMap(() => 'hey')(null), 'hey')
|
|
3379
2961
|
})
|
|
3380
2962
|
|
|
3381
|
-
it('value GeneratorFunction', async () => {
|
|
3382
|
-
const numbers = function* () { yield 1; yield 2; yield 3; yield 4; yield 5 }
|
|
3383
|
-
const duplicateNumbers = flatMap(duplicateArray)(numbers)
|
|
3384
|
-
assert.equal(objectToString(duplicateNumbers), '[object GeneratorFunction]')
|
|
3385
|
-
assert.deepEqual([...duplicateNumbers()], numbersDuplicates)
|
|
3386
|
-
assert.deepEqual([...flatMap(() => null)(numbers)()], [null, null, null, null, null])
|
|
3387
|
-
assert.deepEqual([...flatMap(() => [null, null])(numbers)()], [null, null, null, null, null, null, null, null, null, null])
|
|
3388
|
-
assert.deepEqual([...flatMap(DuplicateArray.of)(numbers)()], numbersArray.map(duplicateArray))
|
|
3389
|
-
assert.deepEqual([...flatMap(Identity.of)(numbers)()], [1, 2, 3, 4, 5])
|
|
3390
|
-
assert.deepEqual([...flatMap(duplicateMockFoldable)(numbers)()], numbersDuplicates)
|
|
3391
|
-
assert.deepEqual([...flatMap(duplicateArray)(numbers)()], numbersDuplicates)
|
|
3392
|
-
assert.deepEqual([...flatMap(duplicateObject)(numbers)()], numbersDuplicates)
|
|
3393
|
-
assert.deepEqual([...flatMap(duplicateUint8Array)(numbers)()], numbersDuplicates)
|
|
3394
|
-
assert.deepEqual([...flatMap(number => new Set([number]))(numbers)()], numbersArray)
|
|
3395
|
-
assert.deepEqual([...flatMap(() => 1)(numbers)()], [1, 1, 1, 1, 1])
|
|
3396
|
-
})
|
|
3397
|
-
it('value AsyncGeneratorFunction', async () => {
|
|
3398
|
-
const numbers = async function* () { yield 1; yield 2; yield 3; yield 4; yield 5 }
|
|
3399
|
-
const duplicateNumbers = flatMap(duplicateArray)(numbers)
|
|
3400
|
-
assert.equal(objectToString(duplicateNumbers), '[object AsyncGeneratorFunction]')
|
|
3401
|
-
assert.deepEqual(await asyncIteratorToArray(duplicateNumbers()), numbersDuplicates)
|
|
3402
|
-
assert.deepEqual(await asyncIteratorToArray(flatMap(() => null)(numbers)()), [null, null, null, null, null])
|
|
3403
|
-
assert.deepEqual(await asyncIteratorToArray(flatMap(() => [null, null])(numbers)()), [null, null, null, null, null, null, null, null, null, null])
|
|
3404
|
-
assert.deepEqual(await asyncIteratorToArray(flatMap(DuplicateArray.of)(numbers)()), numbersArray.map(duplicateArray))
|
|
3405
|
-
assert.deepEqual(await asyncIteratorToArray(flatMap(async(DuplicateArray.of))(numbers)()), numbersArray.map(duplicateArray))
|
|
3406
|
-
assert.deepEqual(await asyncIteratorToArray(flatMap(Identity.of)(numbers)()), [1, 2, 3, 4, 5])
|
|
3407
|
-
assert.deepEqual(await asyncIteratorToArray(flatMap(async(Identity.of))(numbers)()), [1, 2, 3, 4, 5])
|
|
3408
|
-
assert.deepEqual(await asyncIteratorToArray(flatMap(duplicateArray)(numbers)()), numbersDuplicates)
|
|
3409
|
-
assert.deepEqual(await asyncIteratorToArray(flatMap(async(duplicateArray))(numbers)()), numbersDuplicates)
|
|
3410
|
-
assert.deepEqual(await asyncIteratorToArray(flatMap(duplicateObject)(numbers)()), numbersDuplicates)
|
|
3411
|
-
assert.deepEqual(await asyncIteratorToArray(flatMap(async(duplicateObject))(numbers)()), numbersDuplicates)
|
|
3412
|
-
assert.deepEqual(await asyncIteratorToArray(flatMap(duplicateUint8Array)(numbers)()), numbersDuplicates)
|
|
3413
|
-
assert.deepEqual(await asyncIteratorToArray(flatMap(async(duplicateUint8Array))(numbers)()), numbersDuplicates)
|
|
3414
|
-
assert.deepEqual(await asyncIteratorToArray(flatMap(duplicateMockFoldable)(numbers)()), numbersDuplicates)
|
|
3415
|
-
assert.deepEqual(await asyncIteratorToArray(flatMap(async(duplicateMockFoldable))(numbers)()), numbersDuplicates)
|
|
3416
|
-
assert.deepEqual(await asyncIteratorToArray(flatMap(duplicateReadableStream)(numbers)()), numbersArray.map(duplicateBuffer))
|
|
3417
|
-
assert.deepEqual(await asyncIteratorToArray(flatMap(async(duplicateReadableStream))(numbers)()), numbersArray.map(duplicateBuffer))
|
|
3418
|
-
assert.deepEqual(await asyncIteratorToArray(flatMap(number => new Set([number]))(numbers)()), numbersArray)
|
|
3419
|
-
assert.deepEqual(await asyncIteratorToArray(flatMap(async(number => new Set([number])))(numbers)()), numbersArray)
|
|
3420
|
-
assert.deepEqual(await asyncIteratorToArray(flatMap(() => 1)(numbers)()), [1, 1, 1, 1, 1])
|
|
3421
|
-
assert.deepEqual(await asyncIteratorToArray(flatMap(async(() => 1))(numbers)()), [1, 1, 1, 1, 1])
|
|
3422
|
-
})
|
|
3423
|
-
|
|
3424
|
-
it('value Reducer', async () => {
|
|
3425
|
-
const concat = (array, values) => array.concat(values)
|
|
3426
|
-
assert.deepEqual([1, 2, 3, 4, 5].reduce(flatMap(duplicateArray)(concat), []), [1, 1, 2, 2, 3, 3, 4, 4, 5, 5])
|
|
3427
|
-
assert.deepEqual([1, 2, 3, 4, 5].reduce(map(duplicateString)(concat), []), ['11', '22', '33', '44', '55'])
|
|
3428
|
-
assert.deepEqual([1, 2, 3, 4, 5].reduce(flatMap(duplicateString)(concat), []), ['1', '1', '2', '2', '3', '3', '4', '4', '5', '5'])
|
|
3429
|
-
assert.deepEqual([1, 2, 3, 4, 5].reduce(flatMap(duplicateObject)(concat), []), [1, 1, 2, 2, 3, 3, 4, 4, 5, 5])
|
|
3430
|
-
assert.deepEqual([1, 2, 3, 4, 5].reduce(flatMap(duplicateBuffer)(concat), []), [1, 1, 2, 2, 3, 3, 4, 4, 5, 5])
|
|
3431
|
-
assert.deepEqual([1, 2, 3, 4, 5].reduce(flatMap(duplicateUint8ClampedArray)(concat), []), [1, 1, 2, 2, 3, 3, 4, 4, 5, 5])
|
|
3432
|
-
assert.deepEqual([1, 2, 3, 4, 5].reduce(flatMap(duplicateUint8Array)(concat), []), [1, 1, 2, 2, 3, 3, 4, 4, 5, 5])
|
|
3433
|
-
assert.deepEqual([1, 2, 3, 4, 5].reduce(flatMap(duplicateInt8Array)(concat), []), [1, 1, 2, 2, 3, 3, 4, 4, 5, 5])
|
|
3434
|
-
assert.deepEqual([1, 2, 3, 4, 5].reduce(flatMap(duplicateUint16Array)(concat), []), [1, 1, 2, 2, 3, 3, 4, 4, 5, 5])
|
|
3435
|
-
assert.deepEqual([1, 2, 3, 4, 5].reduce(flatMap(duplicateInt16Array)(concat), []), [1, 1, 2, 2, 3, 3, 4, 4, 5, 5])
|
|
3436
|
-
assert.deepEqual([1, 2, 3, 4, 5].reduce(flatMap(duplicateUint32Array)(concat), []), [1, 1, 2, 2, 3, 3, 4, 4, 5, 5])
|
|
3437
|
-
assert.deepEqual([1, 2, 3, 4, 5].reduce(flatMap(duplicateInt32Array)(concat), []), [1, 1, 2, 2, 3, 3, 4, 4, 5, 5])
|
|
3438
|
-
assert.deepEqual([1, 2, 3, 4, 5].reduce(flatMap(duplicateFloat32Array)(concat), []), [1, 1, 2, 2, 3, 3, 4, 4, 5, 5])
|
|
3439
|
-
assert.deepEqual([1, 2, 3, 4, 5].reduce(flatMap(duplicateFloat64Array)(concat), []), [1, 1, 2, 2, 3, 3, 4, 4, 5, 5])
|
|
3440
|
-
assert.deepEqual([1n, 2n, 3n, 4n, 5n].reduce(flatMap(duplicateBigUint64Array)(concat), []), [1n, 1n, 2n, 2n, 3n, 3n, 4n, 4n, 5n, 5n])
|
|
3441
|
-
assert.deepEqual([1n, 2n, 3n, 4n, 5n].reduce(flatMap(duplicateBigInt64Array)(concat), []), [1n, 1n, 2n, 2n, 3n, 3n, 4n, 4n, 5n, 5n])
|
|
3442
|
-
assert.deepEqual([1, 2, 3, 4, 5].reduce(flatMap(duplicateBuffer)(concat), []), [1, 1, 2, 2, 3, 3, 4, 4, 5, 5])
|
|
3443
|
-
assert.deepEqual([1, 2, 3, 4, 5].reduce(flatMap(duplicateMockFoldable)(concat), []), [1, 1, 2, 2, 3, 3, 4, 4, 5, 5])
|
|
3444
|
-
assert.deepEqual([1, 2, 3, 4, 5].reduce(flatMap(DuplicateArray.of)(concat), []), [1, 1, 2, 2, 3, 3, 4, 4, 5, 5])
|
|
3445
|
-
assert.deepEqual([1, 2, 3, 4, 5].reduce(flatMap(Identity.of)(concat), []), [1, 2, 3, 4, 5])
|
|
3446
|
-
assert.deepEqual([1, 2, 3, 4, 5].reduce(flatMap(() => null)(concat), []), [null, null, null, null, null])
|
|
3447
|
-
assert.deepEqual([1, 2, 3, 4, 5].reduce(flatMap(() => [null, null])(concat), []), [null, null, null, null, null, null, null, null, null, null])
|
|
3448
|
-
assert.deepEqual(await reduce(flatMap(duplicateReadableStream)(concat), [])([1, 2, 3, 4, 5]), [1, 2, 3, 4, 5].map(duplicateBuffer))
|
|
3449
|
-
assert.deepEqual(await reduce(flatMap(async(duplicateReadableStream))(concat), [])([1, 2, 3, 4, 5]), [1, 2, 3, 4, 5].map(duplicateBuffer))
|
|
3450
|
-
assert.deepEqual(await reduce(flatMap(duplicateArrayOfUint8Array)(concat), [])([1, 2, 3, 4, 5]), [1, 1, 2, 2, 3, 3, 4, 4, 5, 5].map(number => Buffer.from([number])))
|
|
3451
|
-
})
|
|
3452
|
-
|
|
3453
2963
|
it('value number', async () => {
|
|
3454
2964
|
assert.deepEqual(flatMap(duplicateArray)(1), [1, 1])
|
|
2965
|
+
assert.deepEqual(flatMap(1, duplicateArray), [1, 1])
|
|
3455
2966
|
})
|
|
3456
2967
|
})
|
|
3457
2968
|
|
|
@@ -3466,7 +2977,7 @@ flatMap(
|
|
|
3466
2977
|
})
|
|
3467
2978
|
})
|
|
3468
2979
|
|
|
3469
|
-
describe('flatMap -
|
|
2980
|
+
describe('flatMap - misc', () => {
|
|
3470
2981
|
it('maps then flattens an array, async + parallel', async () => {
|
|
3471
2982
|
const asyncPowers = async x => [x ** 2, x ** 3]
|
|
3472
2983
|
aok(flatMap(asyncPowers)([1, 2, 3, 4, 5]) instanceof Promise)
|
|
@@ -3559,7 +3070,7 @@ flatMap(
|
|
|
3559
3070
|
const powers = x => [x ** 2, x ** 3]
|
|
3560
3071
|
ade(
|
|
3561
3072
|
transform(
|
|
3562
|
-
flatMap(powers),
|
|
3073
|
+
Transducer.flatMap(powers),
|
|
3563
3074
|
[],
|
|
3564
3075
|
)([1, 2, 3]),
|
|
3565
3076
|
[1, 1, 4, 8, 9, 27],
|
|
@@ -3569,13 +3080,13 @@ flatMap(
|
|
|
3569
3080
|
const powers = async x => [x ** 2, x ** 3]
|
|
3570
3081
|
aok(
|
|
3571
3082
|
transform(
|
|
3572
|
-
flatMap(powers),
|
|
3083
|
+
Transducer.flatMap(powers),
|
|
3573
3084
|
[],
|
|
3574
3085
|
)([1, 2, 3]) instanceof Promise
|
|
3575
3086
|
)
|
|
3576
3087
|
ade(
|
|
3577
3088
|
await transform(
|
|
3578
|
-
flatMap(powers),
|
|
3089
|
+
Transducer.flatMap(powers),
|
|
3579
3090
|
[],
|
|
3580
3091
|
)([1, 2, 3]),
|
|
3581
3092
|
[1, 1, 4, 8, 9, 27],
|
|
@@ -3583,9 +3094,170 @@ flatMap(
|
|
|
3583
3094
|
})
|
|
3584
3095
|
})
|
|
3585
3096
|
|
|
3097
|
+
describe('forEach', () => {
|
|
3098
|
+
describe(`
|
|
3099
|
+
Reducer<T> = (any, T)=>Promise|any
|
|
3100
|
+
|
|
3101
|
+
var T any,
|
|
3102
|
+
callback T=>(),
|
|
3103
|
+
collection Iterable<T>|AsyncIterable<T>{ forEach: callback=>() }|Object<T>
|
|
3104
|
+
|
|
3105
|
+
forEach(callback)(collection) -> ()
|
|
3106
|
+
`,
|
|
3107
|
+
() => {
|
|
3108
|
+
it('API coverage', async () => {
|
|
3109
|
+
let sum1 = 0
|
|
3110
|
+
forEach([1, 2, 3, 4, 5], number => {
|
|
3111
|
+
sum1 += number
|
|
3112
|
+
})
|
|
3113
|
+
assert.equal(sum1, 15)
|
|
3114
|
+
|
|
3115
|
+
let sum2 = 0
|
|
3116
|
+
await forEach(Promise.resolve([1, 2, 3, 4, 5]), number => {
|
|
3117
|
+
sum2 += number
|
|
3118
|
+
})
|
|
3119
|
+
assert.equal(sum2, 15)
|
|
3120
|
+
})
|
|
3121
|
+
it('collection Array testing promises', async () => {
|
|
3122
|
+
let total = 0
|
|
3123
|
+
const addTotal = number => (total += number),
|
|
3124
|
+
variadicAsyncAddTotal = number => number % 2 == 1 ? (total += number) : Promise.resolve(total += number)
|
|
3125
|
+
forEach(addTotal)([1, 2, 3, 4, 5])
|
|
3126
|
+
assert.strictEqual(total, 15)
|
|
3127
|
+
total = 0
|
|
3128
|
+
const operation = forEach(async(addTotal))([1, 2, 3, 4, 5])
|
|
3129
|
+
assert(typeof operation.then == 'function')
|
|
3130
|
+
await operation
|
|
3131
|
+
assert.strictEqual(total, 15)
|
|
3132
|
+
})
|
|
3133
|
+
|
|
3134
|
+
let total = 0
|
|
3135
|
+
const addTotal = number => (total += number),
|
|
3136
|
+
variadicAsyncAddTotal = number => number % 2 == 1 ? (total += number) : Promise.resolve(total += number)
|
|
3137
|
+
|
|
3138
|
+
const ThunkAssertion = (
|
|
3139
|
+
func, value, asserter,
|
|
3140
|
+
) => function thunkAssertion() {
|
|
3141
|
+
it(`${func.name}(${util.inspect(value)}) - ${asserter}`, async () => {
|
|
3142
|
+
await asserter(await func(value))
|
|
3143
|
+
})
|
|
3144
|
+
}
|
|
3145
|
+
|
|
3146
|
+
const numbersGenerator = function* () {
|
|
3147
|
+
yield 1; yield 2; yield 3; yield 4; yield 5
|
|
3148
|
+
}
|
|
3149
|
+
const numbersAsyncGenerator = async function* () {
|
|
3150
|
+
yield 1; yield 2; yield 3; yield 4; yield 5
|
|
3151
|
+
}
|
|
3152
|
+
|
|
3153
|
+
const thunkAssertions = [
|
|
3154
|
+
ThunkAssertion(forEach(addTotal), [1, 2, 3, 4, 5], result => {
|
|
3155
|
+
assert.deepEqual(result, [1, 2, 3, 4, 5])
|
|
3156
|
+
assert.strictEqual(total, 15)
|
|
3157
|
+
total = 0
|
|
3158
|
+
}),
|
|
3159
|
+
ThunkAssertion(forEach(async(addTotal)), [1, 2, 3, 4, 5], result => {
|
|
3160
|
+
assert.deepEqual(result, [1, 2, 3, 4, 5])
|
|
3161
|
+
assert.strictEqual(total, 15)
|
|
3162
|
+
total = 0
|
|
3163
|
+
}),
|
|
3164
|
+
ThunkAssertion(forEach(variadicAsyncAddTotal), [1, 2, 3, 4, 5], result => {
|
|
3165
|
+
assert.deepEqual(result, [1, 2, 3, 4, 5])
|
|
3166
|
+
assert.strictEqual(total, 15)
|
|
3167
|
+
total = 0
|
|
3168
|
+
}),
|
|
3169
|
+
ThunkAssertion(forEach(addTotal), numbersGenerator(), result => {
|
|
3170
|
+
assert.deepEqual([...result], [])
|
|
3171
|
+
assert.strictEqual(total, 15)
|
|
3172
|
+
total = 0
|
|
3173
|
+
}),
|
|
3174
|
+
ThunkAssertion(forEach(async(addTotal)), numbersGenerator(), result => {
|
|
3175
|
+
assert.deepEqual([...result], [])
|
|
3176
|
+
assert.strictEqual(total, 15)
|
|
3177
|
+
total = 0
|
|
3178
|
+
}),
|
|
3179
|
+
ThunkAssertion(forEach(variadicAsyncAddTotal), numbersGenerator(), result => {
|
|
3180
|
+
assert.deepEqual([...result], [])
|
|
3181
|
+
assert.strictEqual(total, 15)
|
|
3182
|
+
total = 0
|
|
3183
|
+
}),
|
|
3184
|
+
ThunkAssertion(forEach(addTotal), numbersAsyncGenerator(), async result => {
|
|
3185
|
+
assert.deepEqual(await asyncIteratorToArray(result), [])
|
|
3186
|
+
assert.strictEqual(total, 15)
|
|
3187
|
+
total = 0
|
|
3188
|
+
}),
|
|
3189
|
+
ThunkAssertion(forEach(async(addTotal)), numbersAsyncGenerator(), async result => {
|
|
3190
|
+
assert.deepEqual(await asyncIteratorToArray(result), [])
|
|
3191
|
+
assert.strictEqual(total, 15)
|
|
3192
|
+
total = 0
|
|
3193
|
+
}),
|
|
3194
|
+
ThunkAssertion(forEach(variadicAsyncAddTotal), numbersAsyncGenerator(), async result => {
|
|
3195
|
+
assert.deepEqual(await asyncIteratorToArray(result), [])
|
|
3196
|
+
assert.strictEqual(total, 15)
|
|
3197
|
+
total = 0
|
|
3198
|
+
}),
|
|
3199
|
+
ThunkAssertion(forEach(addTotal), { a: 1, b: 2, c: 3, d: 4, e: 5 }, result => {
|
|
3200
|
+
assert.deepEqual(result, { a: 1, b: 2, c: 3, d: 4, e: 5 })
|
|
3201
|
+
assert.strictEqual(total, 15)
|
|
3202
|
+
total = 0
|
|
3203
|
+
}),
|
|
3204
|
+
ThunkAssertion(forEach(async(addTotal)), { a: 1, b: 2, c: 3, d: 4, e: 5 }, result => {
|
|
3205
|
+
assert.deepEqual(result, { a: 1, b: 2, c: 3, d: 4, e: 5 })
|
|
3206
|
+
assert.strictEqual(total, 15)
|
|
3207
|
+
total = 0
|
|
3208
|
+
}),
|
|
3209
|
+
ThunkAssertion(forEach(variadicAsyncAddTotal), { a: 1, b: 2, c: 3, d: 4, e: 5 }, result => {
|
|
3210
|
+
assert.deepEqual(result, { a: 1, b: 2, c: 3, d: 4, e: 5 })
|
|
3211
|
+
assert.strictEqual(total, 15)
|
|
3212
|
+
total = 0
|
|
3213
|
+
}),
|
|
3214
|
+
]
|
|
3215
|
+
|
|
3216
|
+
thunkAssertions.forEach(thunk => thunk())
|
|
3217
|
+
|
|
3218
|
+
it('forEach(noop)({ forEach: function })', async () => {
|
|
3219
|
+
const forEachable = {
|
|
3220
|
+
forEach() {
|
|
3221
|
+
return 1
|
|
3222
|
+
},
|
|
3223
|
+
}
|
|
3224
|
+
assert.strictEqual(forEach(noop)(forEachable), 1)
|
|
3225
|
+
})
|
|
3226
|
+
|
|
3227
|
+
|
|
3228
|
+
const noop = function () {}
|
|
3229
|
+
it('forEach(noop)(1)', async () => {
|
|
3230
|
+
assert.strictEqual(forEach(noop)(1), 1)
|
|
3231
|
+
})
|
|
3232
|
+
it('forEach(noop)(null)', async () => {
|
|
3233
|
+
assert.strictEqual(forEach(noop)(null), null)
|
|
3234
|
+
})
|
|
3235
|
+
it('forEach(noop)(undefined)', async () => {
|
|
3236
|
+
assert.strictEqual(forEach(noop)(undefined), undefined)
|
|
3237
|
+
})
|
|
3238
|
+
it('forEach(noop)()', async () => {
|
|
3239
|
+
assert.strictEqual(forEach(noop)(), undefined)
|
|
3240
|
+
})
|
|
3241
|
+
|
|
3242
|
+
it('execute a function for each item of a collection, returning the collection', async () => {
|
|
3243
|
+
let total = 0
|
|
3244
|
+
assert.deepEqual(
|
|
3245
|
+
forEach(number => total += number)([1, 2, 3]),
|
|
3246
|
+
[1, 2, 3],
|
|
3247
|
+
)
|
|
3248
|
+
assert.strictEqual(total, 6)
|
|
3249
|
+
})
|
|
3250
|
+
})
|
|
3251
|
+
})
|
|
3252
|
+
|
|
3586
3253
|
describe('get', () => {
|
|
3587
3254
|
const aaaaa = { a: { a: { a: { a: { a: 1 } } } } }
|
|
3588
3255
|
const nested = [[[[[1]]]]]
|
|
3256
|
+
it('API coverage', async () => {
|
|
3257
|
+
ase(get({ a: 1 }, 'a'), 1)
|
|
3258
|
+
ase(await get(Promise.resolve({ a: 1 }), 'a'), 1)
|
|
3259
|
+
ase(get('a')({ a: 1 }), 1)
|
|
3260
|
+
})
|
|
3589
3261
|
it('accesses a property of an object by name', async () => {
|
|
3590
3262
|
ase(get('a')({ a: 1 }), 1)
|
|
3591
3263
|
ase(get('b')({ a: 1 }), undefined)
|
|
@@ -3637,11 +3309,26 @@ flatMap(
|
|
|
3637
3309
|
ade(set('a', 1)(undefined), undefined)
|
|
3638
3310
|
ade(set('a', 1)('yo'), 'yo')
|
|
3639
3311
|
ade(set('a', 1)({ b: 2 }), { a: 1, b: 2 })
|
|
3640
|
-
ade(set('a
|
|
3312
|
+
ade(await set('a', Promise.resolve(1))({ b: 2 }), { a: 1, b: 2 })
|
|
3313
|
+
ade(set('a.b', 1)({ a: { c: 2 } }), { a: { b: 1, c: 2 } })
|
|
3641
3314
|
ade(set('a.b', 1)({ a: 1 }), { a: { b: 1 } })
|
|
3642
|
-
ade(set(['a', 'b'], 1)({ a: { c: 2 }}), { a: { b: 1, c: 2 }})
|
|
3315
|
+
ade(set(['a', 'b'], 1)({ a: { c: 2 } }), { a: { b: 1, c: 2 } })
|
|
3643
3316
|
ade(set('a[0].b.c', 4)({ 'a': [{ 'b': { 'c': 3 } }] }), { 'a': [{ 'b': { 'c': 4 } }] })
|
|
3644
|
-
ade(set('a.b.c.d', 1)({}), { a: { b: { c: { d: 1 } }}})
|
|
3317
|
+
ade(set('a.b.c.d', 1)({}), { a: { b: { c: { d: 1 } } } })
|
|
3318
|
+
})
|
|
3319
|
+
|
|
3320
|
+
it('eagerly set a property of an object', async () => {
|
|
3321
|
+
ade(set(null, 'a', 1), null)
|
|
3322
|
+
ade(set(undefined, 'a', 1), undefined)
|
|
3323
|
+
ade(set('yo', 'a', 1), 'yo')
|
|
3324
|
+
ade(set({ b: 2 }, 'a', 1), { a: 1, b: 2 })
|
|
3325
|
+
ade(set({ a: { c: 2 } }, 'a.b', 1), { a: { b: 1, c: 2 } })
|
|
3326
|
+
ade(set({ a: 1 }, 'a.b', 1), { a: { b: 1 } })
|
|
3327
|
+
ade(set({ a: { c: 2 } }, ['a', 'b'], 1), { a: { b: 1, c: 2 } })
|
|
3328
|
+
ade(await set(Promise.resolve({ 'a': [{ 'b': { 'c': 3 } }] }), 'a[0].b.c', 4), { 'a': [{ 'b': { 'c': 4 } }] })
|
|
3329
|
+
ade(await set({ 'a': [{ 'b': { 'c': 3 } }] }, 'a[0].b.c', Promise.resolve(4)), { 'a': [{ 'b': { 'c': 4 } }] })
|
|
3330
|
+
ade(await set(Promise.resolve({}), 'a.b.c.d', 1), { a: { b: { c: { d: 1 } } } })
|
|
3331
|
+
ade(await set({}, 'a.b.c.d', Promise.resolve(1)), { a: { b: { c: { d: 1 } } } })
|
|
3645
3332
|
})
|
|
3646
3333
|
|
|
3647
3334
|
it('the property value may be a resolver', async () => {
|
|
@@ -3663,6 +3350,14 @@ flatMap(
|
|
|
3663
3350
|
const abc = { a: 1, b: 2, c: 3 }
|
|
3664
3351
|
const nested = { a: { b: { c: { d: 1, e: [2, 3] } } } }
|
|
3665
3352
|
|
|
3353
|
+
it('API coverage', async () => {
|
|
3354
|
+
ade(pick(abc, ['a']), { a: 1 })
|
|
3355
|
+
ade(pick(abc, ['a', 'd']), { a: 1 })
|
|
3356
|
+
ade(pick(abc, ['d']), {})
|
|
3357
|
+
ade(await pick(Promise.resolve(abc), ['a']), { a: 1 })
|
|
3358
|
+
ade(await pick(Promise.resolve(abc), ['a', 'd']), { a: 1 })
|
|
3359
|
+
ade(await pick(Promise.resolve(abc), ['d']), {})
|
|
3360
|
+
})
|
|
3666
3361
|
it('picks properties off an object defined by array', async () => {
|
|
3667
3362
|
ade(pick(['a'])(abc), { a: 1 })
|
|
3668
3363
|
ade(pick(['a', 'd'])(abc), { a: 1 })
|
|
@@ -3678,16 +3373,21 @@ flatMap(
|
|
|
3678
3373
|
// assert.deepEqual(pick(['a[0][0].d'])({ a: [[{ b: 1, c: 2, d: 3 }]] }), { a: [[{ b: 1, c: 2 }]] })
|
|
3679
3374
|
// assert.deepEqual(pick(['a[0][0].d'])({ a: [[{ b: 1, c: 2, d: null }]] }), { a: [[{ b: 1, c: 2 }]] })
|
|
3680
3375
|
})
|
|
3681
|
-
it('eager api', async () => {
|
|
3682
|
-
ade(pick(abc, ['a']), { a: 1 })
|
|
3683
|
-
ade(pick(abc, ['a', 'd']), { a: 1 })
|
|
3684
|
-
ade(pick(abc, ['d']), {})
|
|
3685
|
-
})
|
|
3686
3376
|
})
|
|
3687
3377
|
|
|
3688
3378
|
describe('omit', () => {
|
|
3689
3379
|
const abc = { a: 1, b: 2, c: 3 }
|
|
3690
3380
|
const nested = { a: { b: { c: { d: 1, e: [2, 3] } } } }
|
|
3381
|
+
|
|
3382
|
+
it('API coverage', async () => {
|
|
3383
|
+
ade(omit(nested, []), nested)
|
|
3384
|
+
ade(await omit(Promise.resolve(nested), []), nested)
|
|
3385
|
+
ade(omit([1, 2, 3], []), [1, 2, 3])
|
|
3386
|
+
ade(await omit(Promise.resolve([1, 2, 3]), []), [1, 2, 3])
|
|
3387
|
+
ade(omit(abc, ['a']), { b: 2, c: 3 })
|
|
3388
|
+
ade(omit(abc, ['a', 'd']), { b: 2, c: 3 })
|
|
3389
|
+
ade(omit(abc, ['d']), { a: 1, b: 2, c: 3 })
|
|
3390
|
+
})
|
|
3691
3391
|
it('omits properties from an object defined by array', async () => {
|
|
3692
3392
|
assert(omit([])(nested) !== nested)
|
|
3693
3393
|
ade(omit([])(nested), nested)
|
|
@@ -3735,23 +3435,21 @@ flatMap(
|
|
|
3735
3435
|
.case(null, null)
|
|
3736
3436
|
.case({}, {})
|
|
3737
3437
|
.case([], []))
|
|
3738
|
-
|
|
3739
|
-
it('eager api', async () => {
|
|
3740
|
-
ade(omit(nested, []), nested)
|
|
3741
|
-
ade(omit([1, 2, 3], []), [1, 2, 3])
|
|
3742
|
-
ade(omit(abc, ['a']), { b: 2, c: 3 })
|
|
3743
|
-
ade(omit(abc, ['a', 'd']), { b: 2, c: 3 })
|
|
3744
|
-
ade(omit(abc, ['d']), { a: 1, b: 2, c: 3 })
|
|
3745
|
-
})
|
|
3746
3438
|
})
|
|
3747
3439
|
|
|
3748
|
-
describe(
|
|
3749
|
-
|
|
3440
|
+
describe('some', () => {
|
|
3441
|
+
it('API coverage', async () => {
|
|
3442
|
+
ase(
|
|
3443
|
+
some([1, 2, 3, 4, 5], number => number > 3),
|
|
3444
|
+
true,
|
|
3445
|
+
)
|
|
3750
3446
|
|
|
3751
|
-
|
|
3447
|
+
ase(
|
|
3448
|
+
await some(Promise.resolve([1, 2, 3, 4, 5]), number => number > 3),
|
|
3449
|
+
true,
|
|
3450
|
+
)
|
|
3451
|
+
})
|
|
3752
3452
|
|
|
3753
|
-
any(predicate any=>Promise|boolean)(value Foldable) -> Promise|boolean
|
|
3754
|
-
`, () => {
|
|
3755
3453
|
const numbersArray = [1, 2, 3, 4, 5]
|
|
3756
3454
|
const evenNumbersArray = [2, 4, 6, 8, 10]
|
|
3757
3455
|
const numbersGenerator = function* () {
|
|
@@ -3808,7 +3506,7 @@ any(predicate any=>Promise|boolean)(value Foldable) -> Promise|boolean
|
|
|
3808
3506
|
|
|
3809
3507
|
cases.forEach(([func, value, result, asserter = assert.strictEqual]) => {
|
|
3810
3508
|
it(`${func.name}(${JSON.stringify(value)}) -> ${result}`, async () => {
|
|
3811
|
-
asserter(await
|
|
3509
|
+
asserter(await some(func)(value), result)
|
|
3812
3510
|
})
|
|
3813
3511
|
})
|
|
3814
3512
|
|
|
@@ -3820,7 +3518,7 @@ any(predicate any=>Promise|boolean)(value Foldable) -> Promise|boolean
|
|
|
3820
3518
|
}
|
|
3821
3519
|
let concurrencyCount = 0,
|
|
3822
3520
|
maxConcurrencyCount = 0
|
|
3823
|
-
assert.strictEqual(await
|
|
3521
|
+
assert.strictEqual(await some(async number => {
|
|
3824
3522
|
concurrencyCount += 1
|
|
3825
3523
|
maxConcurrencyCount = Math.max(maxConcurrencyCount, concurrencyCount)
|
|
3826
3524
|
await sleep(10)
|
|
@@ -3829,7 +3527,7 @@ any(predicate any=>Promise|boolean)(value Foldable) -> Promise|boolean
|
|
|
3829
3527
|
})(asyncRange(40)), false)
|
|
3830
3528
|
assert.strictEqual(concurrencyCount, 0)
|
|
3831
3529
|
assert.strictEqual(maxConcurrencyCount, 20)
|
|
3832
|
-
assert.strictEqual(await
|
|
3530
|
+
assert.strictEqual(await some(async number => {
|
|
3833
3531
|
maxConcurrencyCount = Math.max(maxConcurrencyCount, concurrencyCount)
|
|
3834
3532
|
await sleep(10)
|
|
3835
3533
|
if (number == 19) {
|
|
@@ -3840,52 +3538,58 @@ any(predicate any=>Promise|boolean)(value Foldable) -> Promise|boolean
|
|
|
3840
3538
|
})
|
|
3841
3539
|
|
|
3842
3540
|
it('1', async () => {
|
|
3843
|
-
assert.strictEqual(
|
|
3541
|
+
assert.strictEqual(some(() => true)(1), true)
|
|
3844
3542
|
})
|
|
3845
3543
|
it('null', async () => {
|
|
3846
|
-
assert.strictEqual(
|
|
3544
|
+
assert.strictEqual(some(() => true)(null), true)
|
|
3847
3545
|
})
|
|
3848
3546
|
it('undefined', async () => {
|
|
3849
|
-
assert.strictEqual(
|
|
3850
|
-
assert.strictEqual(
|
|
3547
|
+
assert.strictEqual(some(() => true)(undefined), true)
|
|
3548
|
+
assert.strictEqual(some(() => true)(), true)
|
|
3851
3549
|
})
|
|
3852
3550
|
})
|
|
3853
3551
|
|
|
3854
|
-
describe('
|
|
3552
|
+
describe('some - v1.5.15 regression', () => {
|
|
3855
3553
|
const numbers = [1, 2, 3, 4, 5]
|
|
3856
3554
|
const numbersObject = { a: 1, b: 2, c: 3, d: 4, e: 5 }
|
|
3857
3555
|
it('[sync] tests fn against all items of iterable, true if any evaluation is truthy', async () => {
|
|
3858
|
-
ase(
|
|
3859
|
-
ase(
|
|
3860
|
-
ase(
|
|
3861
|
-
ase(
|
|
3862
|
-
ase(
|
|
3863
|
-
ase(
|
|
3556
|
+
ase(some(x => x > 5)(numbers), false)
|
|
3557
|
+
ase(some(x => x > 0)(numbers), true)
|
|
3558
|
+
ase(some(x => x > 5)(new Set(numbers)), false)
|
|
3559
|
+
ase(some(x => x > 0)(new Set(numbers)), true)
|
|
3560
|
+
ase(some(x => x > 5)(numbersObject), false)
|
|
3561
|
+
ase(some(x => x > 0)(numbersObject), true)
|
|
3864
3562
|
})
|
|
3865
3563
|
it('[async] tests fn against all items of iterable, true if any evaluation is truthy', async () => {
|
|
3866
|
-
aok(
|
|
3867
|
-
ase(await
|
|
3868
|
-
ase(await
|
|
3869
|
-
ase(await
|
|
3870
|
-
ase(await
|
|
3871
|
-
ase(await
|
|
3872
|
-
ase(await
|
|
3564
|
+
aok(some(async x => x > 5)(numbers) instanceof Promise)
|
|
3565
|
+
ase(await some(async x => x > 5)(numbers), false)
|
|
3566
|
+
ase(await some(async x => x > 0)(numbers), true)
|
|
3567
|
+
ase(await some(async x => x > 5)(new Set(numbers)), false)
|
|
3568
|
+
ase(await some(async x => x > 0)(new Set(numbers)), true)
|
|
3569
|
+
ase(await some(async x => x > 5)(numbersObject), false)
|
|
3570
|
+
ase(await some(async x => x > 0)(numbersObject), true)
|
|
3873
3571
|
})
|
|
3874
3572
|
it('tests a variadic async function', async () => {
|
|
3875
3573
|
ase(
|
|
3876
|
-
await
|
|
3574
|
+
await some(x => x < 2 ? Promise.resolve(false) : true)([1, 2, 3, 4, 5]),
|
|
3877
3575
|
true,
|
|
3878
3576
|
)
|
|
3879
3577
|
})
|
|
3880
3578
|
})
|
|
3881
3579
|
|
|
3882
|
-
describe(
|
|
3883
|
-
|
|
3580
|
+
describe('every', () => {
|
|
3581
|
+
it('API coverage', async () => {
|
|
3582
|
+
ase(
|
|
3583
|
+
every([1, 2, 3, 4, 5], number => number > 0),
|
|
3584
|
+
true,
|
|
3585
|
+
)
|
|
3884
3586
|
|
|
3885
|
-
|
|
3587
|
+
ase(
|
|
3588
|
+
await every(Promise.resolve([1, 2, 3, 4, 5]), number => number > 0),
|
|
3589
|
+
true,
|
|
3590
|
+
)
|
|
3591
|
+
})
|
|
3886
3592
|
|
|
3887
|
-
all(predicate all=>Promise|boolean)(value Foldable) -> Promise|boolean
|
|
3888
|
-
`, () => {
|
|
3889
3593
|
const numbersArray = [1, 2, 3, 4, 5]
|
|
3890
3594
|
const evenNumbersArray = [2, 4, 6, 8, 10]
|
|
3891
3595
|
const numbersGenerator = function* () {
|
|
@@ -3936,7 +3640,7 @@ all(predicate all=>Promise|boolean)(value Foldable) -> Promise|boolean
|
|
|
3936
3640
|
|
|
3937
3641
|
cases.forEach(([func, value, result, asserter = assert.strictEqual]) => {
|
|
3938
3642
|
it(`${func.name}(${JSON.stringify(value)}) -> ${result}`, async () => {
|
|
3939
|
-
asserter(await
|
|
3643
|
+
asserter(await every(func)(value), result)
|
|
3940
3644
|
})
|
|
3941
3645
|
})
|
|
3942
3646
|
|
|
@@ -3948,7 +3652,7 @@ all(predicate all=>Promise|boolean)(value Foldable) -> Promise|boolean
|
|
|
3948
3652
|
}
|
|
3949
3653
|
let concurrencyCount = 0,
|
|
3950
3654
|
maxConcurrencyCount = 0
|
|
3951
|
-
assert.strictEqual(await
|
|
3655
|
+
assert.strictEqual(await every(async number => {
|
|
3952
3656
|
concurrencyCount += 1
|
|
3953
3657
|
maxConcurrencyCount = Math.max(maxConcurrencyCount, concurrencyCount)
|
|
3954
3658
|
await sleep(10)
|
|
@@ -3957,7 +3661,7 @@ all(predicate all=>Promise|boolean)(value Foldable) -> Promise|boolean
|
|
|
3957
3661
|
})(asyncRange(40)), true)
|
|
3958
3662
|
assert.strictEqual(concurrencyCount, 0)
|
|
3959
3663
|
assert.strictEqual(maxConcurrencyCount, 20)
|
|
3960
|
-
assert.strictEqual(await
|
|
3664
|
+
assert.strictEqual(await every(async number => {
|
|
3961
3665
|
maxConcurrencyCount = Math.max(maxConcurrencyCount, concurrencyCount)
|
|
3962
3666
|
await sleep(10)
|
|
3963
3667
|
if (number == 19) {
|
|
@@ -3968,46 +3672,61 @@ all(predicate all=>Promise|boolean)(value Foldable) -> Promise|boolean
|
|
|
3968
3672
|
})
|
|
3969
3673
|
|
|
3970
3674
|
it('1', async () => {
|
|
3971
|
-
assert.strictEqual(
|
|
3675
|
+
assert.strictEqual(every(() => true)(1), true)
|
|
3972
3676
|
})
|
|
3973
3677
|
it('null', async () => {
|
|
3974
|
-
assert.strictEqual(
|
|
3678
|
+
assert.strictEqual(every(() => true)(null), true)
|
|
3975
3679
|
})
|
|
3976
3680
|
it('undefined', async () => {
|
|
3977
|
-
assert.strictEqual(
|
|
3978
|
-
assert.strictEqual(
|
|
3681
|
+
assert.strictEqual(every(() => true)(undefined), true)
|
|
3682
|
+
assert.strictEqual(every(() => true)(), true)
|
|
3979
3683
|
})
|
|
3980
3684
|
})
|
|
3981
3685
|
|
|
3982
|
-
describe('
|
|
3686
|
+
describe('every - v1.5.15 regression', () => {
|
|
3983
3687
|
const numbers = [1, 2, 3, 4, 5]
|
|
3984
3688
|
const numbersObject = { a: 1, b: 2, c: 3, d: 4, e: 5 }
|
|
3985
3689
|
it('syncly evaluates fn against all items in iterable, true if all evaluations are truthy', async () => {
|
|
3986
|
-
ase(
|
|
3987
|
-
ase(
|
|
3988
|
-
ase(
|
|
3989
|
-
ase(
|
|
3990
|
-
ase(
|
|
3991
|
-
ase(
|
|
3690
|
+
ase(every(x => x > 5)(numbers), false)
|
|
3691
|
+
ase(every(x => x > 0)(numbers), true)
|
|
3692
|
+
ase(every(x => x > 5)(new Set(numbers)), false)
|
|
3693
|
+
ase(every(x => x > 0)(new Set(numbers)), true)
|
|
3694
|
+
ase(every(x => x > 5)(numbersObject), false)
|
|
3695
|
+
ase(every(x => x > 0)(numbersObject), true)
|
|
3992
3696
|
})
|
|
3993
3697
|
it('asyncly evaluates fn against all items in iterable, true if all evaluations are truthy', async () => {
|
|
3994
|
-
aok(
|
|
3995
|
-
ase(await
|
|
3996
|
-
ase(await
|
|
3997
|
-
ase(await
|
|
3998
|
-
ase(await
|
|
3999
|
-
ase(await
|
|
4000
|
-
ase(await
|
|
3698
|
+
aok(every(async x => x > 5)(numbers) instanceof Promise)
|
|
3699
|
+
ase(await every(async x => x > 5)(numbers), false)
|
|
3700
|
+
ase(await every(async x => x > 0)(numbers), true)
|
|
3701
|
+
ase(await every(async x => x > 5)(new Set(numbers)), false)
|
|
3702
|
+
ase(await every(async x => x > 0)(new Set(numbers)), true)
|
|
3703
|
+
ase(await every(async x => x > 5)(numbersObject), false)
|
|
3704
|
+
ase(await every(async x => x > 0)(numbersObject), true)
|
|
4001
3705
|
})
|
|
4002
3706
|
it('tests a variadic async function', async () => {
|
|
4003
3707
|
ase(
|
|
4004
|
-
await
|
|
3708
|
+
await every(x => x < 2 ? Promise.resolve(true) : false)([1, 2, 3, 4, 5]),
|
|
4005
3709
|
false,
|
|
4006
3710
|
)
|
|
4007
3711
|
})
|
|
4008
3712
|
})
|
|
4009
3713
|
|
|
4010
3714
|
describe('not', () => {
|
|
3715
|
+
it('API coverage', async () => {
|
|
3716
|
+
ase(
|
|
3717
|
+
not(1, 2, 3, (...numbers) => (
|
|
3718
|
+
numbers.every(num => typeof num == 'number')
|
|
3719
|
+
)),
|
|
3720
|
+
false,
|
|
3721
|
+
)
|
|
3722
|
+
|
|
3723
|
+
ase(
|
|
3724
|
+
await not(Promise.resolve(1), 2, Promise.resolve(3), (...numbers) => (
|
|
3725
|
+
numbers.every(num => typeof num == 'number')
|
|
3726
|
+
)),
|
|
3727
|
+
false,
|
|
3728
|
+
)
|
|
3729
|
+
})
|
|
4011
3730
|
it('not(someValue) -> !someValue', async () => {
|
|
4012
3731
|
assert.strictEqual(not(false), true)
|
|
4013
3732
|
assert.strictEqual(not(null), true)
|
|
@@ -4025,19 +3744,25 @@ all(predicate all=>Promise|boolean)(value Foldable) -> Promise|boolean
|
|
|
4025
3744
|
})
|
|
4026
3745
|
})
|
|
4027
3746
|
|
|
4028
|
-
describe('
|
|
4029
|
-
it('
|
|
4030
|
-
|
|
4031
|
-
|
|
4032
|
-
|
|
3747
|
+
describe('and', () => {
|
|
3748
|
+
it('API coverage', async () => {
|
|
3749
|
+
aok(
|
|
3750
|
+
and(1, 2, 3, [
|
|
3751
|
+
(...numbers) => numbers.every(num => typeof num == 'number'),
|
|
3752
|
+
(...numbers) => numbers.every(num => num < 5),
|
|
3753
|
+
(...numbers) => numbers.every(num => num > 0),
|
|
3754
|
+
])
|
|
3755
|
+
)
|
|
3756
|
+
|
|
3757
|
+
aok(
|
|
3758
|
+
await and(Promise.resolve(1), 2, Promise.resolve(3), [
|
|
3759
|
+
(...numbers) => numbers.every(num => typeof num == 'number'),
|
|
3760
|
+
(...numbers) => numbers.every(num => num < 5),
|
|
3761
|
+
(...numbers) => numbers.every(num => num > 0),
|
|
3762
|
+
])
|
|
3763
|
+
)
|
|
4033
3764
|
})
|
|
4034
|
-
})
|
|
4035
3765
|
|
|
4036
|
-
describe(`
|
|
4037
|
-
and(
|
|
4038
|
-
predicates Array<predicate function|nonfunction>
|
|
4039
|
-
)(point any) -> Promise|boolean
|
|
4040
|
-
`, () => {
|
|
4041
3766
|
it('all nonfunctions', async () => {
|
|
4042
3767
|
assert.strictEqual(and([true, true, true]), true)
|
|
4043
3768
|
assert.strictEqual(and([true, true, false]), false)
|
|
@@ -4073,14 +3798,13 @@ and(
|
|
|
4073
3798
|
assert.strictEqual(and([isOdd, isOdd, isOdd])(undefined), false)
|
|
4074
3799
|
assert.strictEqual(and([isOdd, isOdd, isOdd])(), false)
|
|
4075
3800
|
})
|
|
4076
|
-
})
|
|
4077
3801
|
|
|
4078
|
-
describe('and - v1.5.15 regression', () => {
|
|
4079
3802
|
const isGreaterThan1 = x => x > 1
|
|
4080
3803
|
it('sync tests input against provided array of functions, true if all evaluations are truthy', async () => {
|
|
4081
3804
|
ase(and([isOdd, isGreaterThan1])(3), true)
|
|
4082
3805
|
ase(and([isOdd, isGreaterThan1])(1), false)
|
|
4083
3806
|
})
|
|
3807
|
+
|
|
4084
3808
|
it('async tests input against provided array of functions, true if all evaluations are truthy', async () => {
|
|
4085
3809
|
aok(and([asyncIsEven, isGreaterThan1])(2) instanceof Promise)
|
|
4086
3810
|
ase(await and([asyncIsEven, isGreaterThan1])(2), true)
|
|
@@ -4088,11 +3812,25 @@ and(
|
|
|
4088
3812
|
})
|
|
4089
3813
|
})
|
|
4090
3814
|
|
|
4091
|
-
describe(
|
|
4092
|
-
|
|
4093
|
-
|
|
4094
|
-
|
|
4095
|
-
|
|
3815
|
+
describe('or', () => {
|
|
3816
|
+
it('API coverage', async () => {
|
|
3817
|
+
aok(
|
|
3818
|
+
or(1, 2, 3, [
|
|
3819
|
+
(...numbers) => numbers.every(num => typeof num == 'number'),
|
|
3820
|
+
false,
|
|
3821
|
+
false,
|
|
3822
|
+
])
|
|
3823
|
+
)
|
|
3824
|
+
|
|
3825
|
+
aok(
|
|
3826
|
+
await or(Promise.resolve(1), 2, Promise.resolve(3), [
|
|
3827
|
+
(...numbers) => numbers.every(num => typeof num == 'number'),
|
|
3828
|
+
false,
|
|
3829
|
+
false,
|
|
3830
|
+
])
|
|
3831
|
+
)
|
|
3832
|
+
})
|
|
3833
|
+
|
|
4096
3834
|
it('all nonfunctions', async () => {
|
|
4097
3835
|
assert.strictEqual(or([true, true, true]), true)
|
|
4098
3836
|
assert.strictEqual(or([false, false, false]), false)
|
|
@@ -4135,73 +3873,47 @@ or(
|
|
|
4135
3873
|
})
|
|
4136
3874
|
})
|
|
4137
3875
|
|
|
4138
|
-
describe(
|
|
4139
|
-
|
|
4140
|
-
|
|
4141
|
-
|
|
4142
|
-
|
|
4143
|
-
|
|
4144
|
-
|
|
4145
|
-
|
|
4146
|
-
|
|
4147
|
-
|
|
4148
|
-
|
|
4149
|
-
|
|
4150
|
-
|
|
4151
|
-
|
|
4152
|
-
|
|
4153
|
-
|
|
4154
|
-
|
|
4155
|
-
|
|
4156
|
-
|
|
4157
|
-
[() => eq(1, 0), undefined, false],
|
|
4158
|
-
[eq(1, () => 0), undefined, false],
|
|
4159
|
-
[eq(1, async () => 0), undefined, false],
|
|
4160
|
-
[eq(() => 1, 0), undefined, false],
|
|
4161
|
-
[eq(async () => 1, 0), undefined, false],
|
|
4162
|
-
[eq(() => 1, () => 0), undefined, false],
|
|
4163
|
-
[eq(async () => 1, () => 0), undefined, false],
|
|
4164
|
-
[eq(async () => 1, async () => 0), undefined, false],
|
|
4165
|
-
[eq(async () => 1, async () => 0), undefined, false],
|
|
4166
|
-
[() => eq(0, '0'), undefined, false],
|
|
4167
|
-
[eq(0, () => '0'), undefined, false],
|
|
4168
|
-
[eq(0, async () => '0'), undefined, false],
|
|
4169
|
-
[eq(() => 0, '0'), undefined, false],
|
|
4170
|
-
[eq(async () => 0, '0'), undefined, false],
|
|
4171
|
-
[eq(() => 0, () => '0'), undefined, false],
|
|
4172
|
-
[eq(async () => 0, () => '0'), undefined, false],
|
|
4173
|
-
[eq(() => 0, async () => '0'), undefined, false],
|
|
4174
|
-
[eq(async () => 0, async () => '0'), undefined, false],
|
|
4175
|
-
]
|
|
4176
|
-
|
|
4177
|
-
cases.forEach(([func, value, result, asserter = assert.strictEqual]) => {
|
|
4178
|
-
it(`${func.name}(${JSON.stringify(value)}) -> ${result}`, async () => {
|
|
4179
|
-
asserter(await func(value), result)
|
|
4180
|
-
})
|
|
3876
|
+
describe('eq', () => {
|
|
3877
|
+
it('API coverage', async () => {
|
|
3878
|
+
aok(eq(2, 2))
|
|
3879
|
+
aok(await eq(Promise.resolve(2), 2))
|
|
3880
|
+
aok(await eq(2, Promise.resolve(2)))
|
|
3881
|
+
aok(await eq(Promise.resolve(2), Promise.resolve(2)))
|
|
3882
|
+
aok(
|
|
3883
|
+
eq(2, number => number * 2, number => number + 2)
|
|
3884
|
+
)
|
|
3885
|
+
aok(
|
|
3886
|
+
eq(number => number * 2, number => number + 2)(2)
|
|
3887
|
+
)
|
|
3888
|
+
aok(
|
|
3889
|
+
await eq(Promise.resolve(2), number => number * 2, number => number + 2)
|
|
3890
|
+
)
|
|
3891
|
+
aok(eq(2, number => number * 2, 4))
|
|
3892
|
+
aok(await eq(Promise.resolve(2), number => number * 2, 4))
|
|
3893
|
+
aok(eq(2, 4, number => number ** 2))
|
|
3894
|
+
aok(await eq(Promise.resolve(2), 4, number => number ** 2))
|
|
4181
3895
|
})
|
|
4182
|
-
})
|
|
4183
3896
|
|
|
4184
|
-
describe('eq - v1.5.15 regression', () => {
|
|
4185
3897
|
it('[sync] eq(f, g)(x) == (f(x) == g(x))', async () => {
|
|
4186
3898
|
ase(eq(x => `${x}`, x => x)('hey'), true)
|
|
4187
|
-
ase(eq(x => `${x}`, x => x)(1),
|
|
3899
|
+
ase(eq(x => `${x}`, x => x)(1), true)
|
|
4188
3900
|
})
|
|
4189
3901
|
it('[async] eq(f, g)(x) == (f(x) == g(x))', async () => {
|
|
4190
3902
|
aok(eq(x => `${x}`, async x => x)('hey') instanceof Promise)
|
|
4191
3903
|
ase(await eq(async x => `${x}`, async x => x)('hey'), true)
|
|
4192
|
-
ase(await eq(async x => `${x}`, async x => x)(1),
|
|
3904
|
+
ase(await eq(async x => `${x}`, async x => x)(1), true)
|
|
4193
3905
|
})
|
|
4194
3906
|
it('[sync] eq(f, value)(x) == (valueA == valueB)', async () => {
|
|
4195
|
-
ase(eq(() => 'hey', 'hey')('
|
|
4196
|
-
ase(eq(() => 'hey', 'ho')('
|
|
3907
|
+
ase(eq(() => 'hey', 'hey')('abc'), true)
|
|
3908
|
+
ase(eq(() => 'hey', 'ho')('abc'), false)
|
|
4197
3909
|
})
|
|
4198
3910
|
it('[async] eq(f, value)(x) == (valueA == valueB)', async () => {
|
|
4199
|
-
ase(await eq(async () => 'hey', 'hey')('
|
|
4200
|
-
ase(await eq('hey', async () => 'ho')('
|
|
3911
|
+
ase(await eq(async () => 'hey', 'hey')('abc'), true)
|
|
3912
|
+
ase(await eq('hey', async () => 'ho')('abc'), false)
|
|
4201
3913
|
})
|
|
4202
3914
|
it('[sync] eq(value, g)(x) == (valueA == valueB)', async () => {
|
|
4203
|
-
ase(eq('hey', () => 'hey')('
|
|
4204
|
-
ase(eq('hey', () => 'ho')('
|
|
3915
|
+
ase(eq('hey', () => 'hey')('abc'), true)
|
|
3916
|
+
ase(eq('hey', () => 'ho')('abc'), false)
|
|
4205
3917
|
})
|
|
4206
3918
|
it('[async] eq(value, g)(x) == (value == g(x))', async () => {
|
|
4207
3919
|
aok(eq('hey', async x => x)('hey') instanceof Promise)
|
|
@@ -4216,12 +3928,21 @@ eq(
|
|
|
4216
3928
|
it('false for eq(string,)', () => {
|
|
4217
3929
|
assert.strictEqual(eq('hey',), false)
|
|
4218
3930
|
})
|
|
4219
|
-
it('false for too many arguments', async () => {
|
|
4220
|
-
assert.strictEqual(eq('hey', () => {}, 'ho')(), false)
|
|
4221
|
-
})
|
|
4222
3931
|
})
|
|
4223
3932
|
|
|
4224
3933
|
describe('gt', () => {
|
|
3934
|
+
it('API coverage', async () => {
|
|
3935
|
+
aok(
|
|
3936
|
+
gt(1, number => number, number => number * 0)
|
|
3937
|
+
)
|
|
3938
|
+
aok(
|
|
3939
|
+
await gt(Promise.resolve(1), number => number, number => number * 0)
|
|
3940
|
+
)
|
|
3941
|
+
aok(gt(1, number => number, 0))
|
|
3942
|
+
aok(await gt(Promise.resolve(1), number => number, 0))
|
|
3943
|
+
aok(gt(1, 3, number => number * 0))
|
|
3944
|
+
aok(await gt(Promise.resolve(1), 3, number => number * 0))
|
|
3945
|
+
})
|
|
4225
3946
|
it('[sync] gt(f, g)(x) === (f(x) > g(x))', async () => {
|
|
4226
3947
|
ase(gt(x => x + 1, x => x)(1), true)
|
|
4227
3948
|
ase(gt(x => x, x => x)(1), false)
|
|
@@ -4234,14 +3955,14 @@ eq(
|
|
|
4234
3955
|
ase(await gt(async x => x, async x => x + 1)(1), false)
|
|
4235
3956
|
})
|
|
4236
3957
|
it('[sync] gt(f, value)(x) === (valueA > valueB)', async () => {
|
|
4237
|
-
ase(gt(() => 1, 0)('
|
|
4238
|
-
ase(gt(() => 1, 1)('
|
|
4239
|
-
ase(gt(() => 0, 1)('
|
|
3958
|
+
ase(gt(() => 1, 0)('abc'), true)
|
|
3959
|
+
ase(gt(() => 1, 1)('abc'), false)
|
|
3960
|
+
ase(gt(() => 0, 1)('abc'), false)
|
|
4240
3961
|
})
|
|
4241
3962
|
it('[sync] gt(value, g)(x) === (valueA > valueB)', async () => {
|
|
4242
|
-
ase(gt(1, () => 0)('
|
|
4243
|
-
ase(gt(1, () => 1)('
|
|
4244
|
-
ase(gt(0, () => 1)('
|
|
3963
|
+
ase(gt(1, () => 0)('abc'), true)
|
|
3964
|
+
ase(gt(1, () => 1)('abc'), false)
|
|
3965
|
+
ase(gt(0, () => 1)('abc'), false)
|
|
4245
3966
|
})
|
|
4246
3967
|
it('[async] gt(value, g)(x) === (value > g(x))', async () => {
|
|
4247
3968
|
aok(gt(1, async x => x)(2) instanceof Promise)
|
|
@@ -4260,12 +3981,21 @@ eq(
|
|
|
4260
3981
|
it('throws RangeError on not enough arguments', async () => {
|
|
4261
3982
|
assert.strictEqual(gt('hey'), false)
|
|
4262
3983
|
})
|
|
4263
|
-
it('throws RangeError on too many arguments', async () => {
|
|
4264
|
-
assert.strictEqual(gt('hey', () => {}, 'ho')(), false)
|
|
4265
|
-
})
|
|
4266
3984
|
})
|
|
4267
3985
|
|
|
4268
3986
|
describe('lt', () => {
|
|
3987
|
+
it('API coverage', async () => {
|
|
3988
|
+
aok(
|
|
3989
|
+
lt(5, number => number - 3, number => number + 3)
|
|
3990
|
+
)
|
|
3991
|
+
aok(
|
|
3992
|
+
await lt(Promise.resolve(5), number => number - 3, number => number + 3)
|
|
3993
|
+
)
|
|
3994
|
+
aok(lt(5, 2, number => number + 3))
|
|
3995
|
+
aok(await lt(Promise.resolve(5), 2, number => number + 3))
|
|
3996
|
+
aok(lt(5, number => number - 3, 5))
|
|
3997
|
+
aok(await lt(Promise.resolve(5), number => number - 3, 5))
|
|
3998
|
+
})
|
|
4269
3999
|
it('[sync] lt(f, g)(x) === (f(x) < g(x))', async () => {
|
|
4270
4000
|
ase(lt(x => x + 1, x => x)(1), false)
|
|
4271
4001
|
ase(lt(x => x, x => x)(1), false)
|
|
@@ -4278,14 +4008,14 @@ eq(
|
|
|
4278
4008
|
ase(await lt(async x => x, async x => x + 1)(1), true)
|
|
4279
4009
|
})
|
|
4280
4010
|
it('[sync] lt(f, value)(x) === (valueA < valueB)', async () => {
|
|
4281
|
-
ase(lt(() => 1, 0)('
|
|
4282
|
-
ase(lt(() => 1, 1)('
|
|
4283
|
-
ase(lt(() => 0, 1)('
|
|
4011
|
+
ase(lt(() => 1, 0)('abc'), false)
|
|
4012
|
+
ase(lt(() => 1, 1)('abc'), false)
|
|
4013
|
+
ase(lt(() => 0, 1)('abc'), true)
|
|
4284
4014
|
})
|
|
4285
4015
|
it('[sync] lt(value, g)(x) === (valueA < valueB)', async () => {
|
|
4286
|
-
ase(lt(1, () => 0)('
|
|
4287
|
-
ase(lt(1, () => 1)('
|
|
4288
|
-
ase(lt(0, () => 1)('
|
|
4016
|
+
ase(lt(1, () => 0)('abc'), false)
|
|
4017
|
+
ase(lt(1, () => 1)('abc'), false)
|
|
4018
|
+
ase(lt(0, () => 1)('abc'), true)
|
|
4289
4019
|
})
|
|
4290
4020
|
it('[async] lt(value, g)(x) === (value < g(x))', async () => {
|
|
4291
4021
|
aok(lt(1, async x => x)(2) instanceof Promise)
|
|
@@ -4304,12 +4034,21 @@ eq(
|
|
|
4304
4034
|
it('throws RangeError on not enough arguments', () => {
|
|
4305
4035
|
assert.strictEqual(lt('hey'), false)
|
|
4306
4036
|
})
|
|
4307
|
-
it('throws RangeError on too many arguments', async () => {
|
|
4308
|
-
assert.strictEqual(lt('hey', () => {}, 'ho')(), false)
|
|
4309
|
-
})
|
|
4310
4037
|
})
|
|
4311
4038
|
|
|
4312
4039
|
describe('gte', () => {
|
|
4040
|
+
it('API coverage', async () => {
|
|
4041
|
+
aok(
|
|
4042
|
+
gte(5, number => number + 3, number => number + 3)
|
|
4043
|
+
)
|
|
4044
|
+
aok(
|
|
4045
|
+
await gte(Promise.resolve(5), number => number + 3, number => number + 3)
|
|
4046
|
+
)
|
|
4047
|
+
aok(gte(5, 10, number => number + 3))
|
|
4048
|
+
aok(await gte(Promise.resolve(5), 10, number => number + 3))
|
|
4049
|
+
aok(gte(5, number => number + 3, 5))
|
|
4050
|
+
aok(await gte(Promise.resolve(5), number => number + 3, 5))
|
|
4051
|
+
})
|
|
4313
4052
|
it('[sync] gte(f, g)(x) === (f(x) >= g(x))', async () => {
|
|
4314
4053
|
ase(gte(x => x + 1, x => x)(1), true)
|
|
4315
4054
|
ase(gte(x => x, x => x)(1), true)
|
|
@@ -4322,14 +4061,14 @@ eq(
|
|
|
4322
4061
|
ase(await gte(async x => x, async x => x + 1)(1), false)
|
|
4323
4062
|
})
|
|
4324
4063
|
it('[sync] gte(f, value)(x) === (valueA >= valueB)', async () => {
|
|
4325
|
-
ase(gte(() => 1, 0)('
|
|
4326
|
-
ase(gte(() => 1, 1)('
|
|
4327
|
-
ase(gte(() => 0, 1)('
|
|
4064
|
+
ase(gte(() => 1, 0)('abc'), true)
|
|
4065
|
+
ase(gte(() => 1, 1)('abc'), true)
|
|
4066
|
+
ase(gte(() => 0, 1)('abc'), false)
|
|
4328
4067
|
})
|
|
4329
4068
|
it('[sync] gte(value, g)(x) === (valueA >= valueB)', async () => {
|
|
4330
|
-
ase(gte(1, () => 0)('
|
|
4331
|
-
ase(gte(1, () => 1)('
|
|
4332
|
-
ase(gte(0, () => 1)('
|
|
4069
|
+
ase(gte(1, () => 0)('abc'), true)
|
|
4070
|
+
ase(gte(1, () => 1)('abc'), true)
|
|
4071
|
+
ase(gte(0, () => 1)('abc'), false)
|
|
4333
4072
|
})
|
|
4334
4073
|
it('[async] gte(value, g)(x) === (value >= g(x))', async () => {
|
|
4335
4074
|
aok(gte(1, async x => x)(2) instanceof Promise)
|
|
@@ -4348,12 +4087,21 @@ eq(
|
|
|
4348
4087
|
it('throws RangeError on not enough arguments', () => {
|
|
4349
4088
|
assert.strictEqual(gte('hey'), false)
|
|
4350
4089
|
})
|
|
4351
|
-
it('throws RangeError on too many arguments', async () => {
|
|
4352
|
-
assert.strictEqual(gte('hey', () => {}, 'ho')(), false)
|
|
4353
|
-
})
|
|
4354
4090
|
})
|
|
4355
4091
|
|
|
4356
4092
|
describe('lte', () => {
|
|
4093
|
+
it('API coverage', async () => {
|
|
4094
|
+
aok(
|
|
4095
|
+
lte(5, number => number + 3, number => number + 3)
|
|
4096
|
+
)
|
|
4097
|
+
aok(
|
|
4098
|
+
await lte(Promise.resolve(5), number => number + 3, number => number + 3)
|
|
4099
|
+
)
|
|
4100
|
+
aok(lte(5, 0, number => number + 3))
|
|
4101
|
+
aok(await lte(Promise.resolve(5), 0, number => number + 3))
|
|
4102
|
+
aok(lte(5, number => number + 3, 10))
|
|
4103
|
+
aok(await lte(Promise.resolve(5), number => number + 3, 10))
|
|
4104
|
+
})
|
|
4357
4105
|
it('[sync] lte(f, g)(x) === (f(x) <= g(x))', async () => {
|
|
4358
4106
|
ase(lte(x => x + 1, x => x)(1), false)
|
|
4359
4107
|
ase(lte(x => x, x => x)(1), true)
|
|
@@ -4366,14 +4114,14 @@ eq(
|
|
|
4366
4114
|
ase(await lte(async x => x, async x => x + 1)(1), true)
|
|
4367
4115
|
})
|
|
4368
4116
|
it('[sync] lte(f, value)(x) === (valueA <= valueB)', async () => {
|
|
4369
|
-
ase(lte(() => 1, 0)('
|
|
4370
|
-
ase(lte(() => 1, 1)('
|
|
4371
|
-
ase(lte(() => 0, 1)('
|
|
4117
|
+
ase(lte(() => 1, 0)('abc'), false)
|
|
4118
|
+
ase(lte(() => 1, 1)('abc'), true)
|
|
4119
|
+
ase(lte(() => 0, 1)('abc'), true)
|
|
4372
4120
|
})
|
|
4373
4121
|
it('[sync] lte(value, g)(x) === (valueA <= valueB)', async () => {
|
|
4374
|
-
ase(lte(1, () => 0)('
|
|
4375
|
-
ase(lte(1, () => 1)('
|
|
4376
|
-
ase(lte(0, () => 1)('
|
|
4122
|
+
ase(lte(1, () => 0)('abc'), false)
|
|
4123
|
+
ase(lte(1, () => 1)('abc'), true)
|
|
4124
|
+
ase(lte(0, () => 1)('abc'), true)
|
|
4377
4125
|
})
|
|
4378
4126
|
it('[async] lte(value, g)(x) === (value <= g(x))', async () => {
|
|
4379
4127
|
aok(lte(1, async x => x)(2) instanceof Promise)
|
|
@@ -4392,9 +4140,6 @@ eq(
|
|
|
4392
4140
|
it('throws RangeError on not enough arguments', () => {
|
|
4393
4141
|
assert.strictEqual(lte('hey'), false)
|
|
4394
4142
|
})
|
|
4395
|
-
it('throws RangeError on too many arguments', async () => {
|
|
4396
|
-
assert.strictEqual(lte('hey', () => {}, 'ho')(), false)
|
|
4397
|
-
})
|
|
4398
4143
|
})
|
|
4399
4144
|
|
|
4400
4145
|
describe('thunkify', () => {
|
|
@@ -4404,6 +4149,12 @@ eq(
|
|
|
4404
4149
|
assert.strictEqual(thunkAdd212.length, 0)
|
|
4405
4150
|
assert.strictEqual(thunkAdd212(), 3)
|
|
4406
4151
|
})
|
|
4152
|
+
|
|
4153
|
+
const asyncThunkAdd212 = thunkify(add2, Promise.resolve(1), 2)
|
|
4154
|
+
it('creates a thunk that resolves any promise arguments', async () => {
|
|
4155
|
+
assert.strictEqual(asyncThunkAdd212.length, 0)
|
|
4156
|
+
assert.strictEqual(await asyncThunkAdd212(), 3)
|
|
4157
|
+
})
|
|
4407
4158
|
})
|
|
4408
4159
|
|
|
4409
4160
|
describe('always', () => {
|
|
@@ -4485,7 +4236,7 @@ eq(
|
|
|
4485
4236
|
})
|
|
4486
4237
|
})
|
|
4487
4238
|
|
|
4488
|
-
it('exports
|
|
4489
|
-
ase(Object.keys(rubico).length,
|
|
4239
|
+
it('exports 31 functions', async () => {
|
|
4240
|
+
ase(Object.keys(rubico).length, 31)
|
|
4490
4241
|
})
|
|
4491
4242
|
})
|