reducers
Version:
Library for higher-order manipulation of collections
76 lines (57 loc) • 2.23 kB
JavaScript
;
var test = require("./util/test")
var concat = require("../concat")
var into = require("../into")
var delay = require("../delay")
var capture = require("../capture")
var map = require("../map")
var expand = require("../expand")
var take = require("../take")
var merge = require("../merge")
var into = require("../into")
exports["test merge"] = function(assert) {
var source = [ [ 1 ], [ 2, 3 ], [ 4, 5, 6 ] ]
var actual = merge(source)
assert.deepEqual(into(actual),
[ 1, 2, 3, 4, 5, 6 ],
"merge reducers")
assert.deepEqual(into(actual),
[ 1, 2, 3, 4, 5, 6 ],
"can be re-reduced")
assert.deepEqual(source, [ [ 1 ], [ 2, 3 ], [ 4, 5, 6 ] ],
"no changes to a source")
}
exports["test merge stream of empty streams"] = test(function(assert) {
var actual = merge([[], []])
assert(actual, [], "merge of empty streams is empty")
})
exports["test merge empty & non-empty"] = test(function(assert) {
var actual = merge([[], [1, 2], []])
assert(actual, [1, 2], "merge with empties is non-empty")
})
exports["test merge flattened"] = test(function(assert) {
var stream = merge([[1, 2], ["a", "b"]])
var actual = merge([[">"], stream, []])
assert(actual, [">", 1, 2, "a", "b"], "flattening flattened works")
})
exports["test merge sync & async streams"] = test(function(assert) {
var async = delay([3, 2, 1])
var actual = merge([async, ["|"], async, ["a", "b"], []])
assert(actual, ["|", "a", "b", 3, 3, 2, 2, 1, 1], "orders by time")
})
exports["test merge with broken stream"] = test(function(assert) {
var boom = Error("Boom!")
var async = delay(concat([3, 2, 1], boom))
var flattened = merge([[">"], async, [1, 2]])
var actual = capture(flattened, function(error) {
return error.message
})
assert(actual, [">", 1, 2, 3, 2, 1, boom.message], "errors propagate")
})
exports["test merge async stream of streams"] = test(function(assert) {
var async = delay([3, 2, 1])
var actual = merge([[], [1, 2], async, ["a", "b"], async])
assert(actual, [1, 2, "a", "b", 3, 3, 2, 2, 1, 1], "mixed stream works")
})
if (module == require.main)
require("test").run(exports)