add stream folder with scan and scan-merge

This commit is contained in:
Zach Dahl 2016-10-29 00:24:18 -05:00
parent db956d7194
commit db445a899d
4 changed files with 147 additions and 0 deletions

17
stream/tests/index.html Normal file
View file

@ -0,0 +1,17 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<script src="../../module/module.js"></script>
<script src="../../ospec/ospec.js"></script>
<script src="../../util/stream.js"></script>
<script src="../../stream.js"></script>
<script src="../scan.js"></script>
<script src="../scan-merge.js"></script>
<script src="test-stream.js"></script>
<script>require("../../ospec/ospec").run()</script>
</body>
</html>

View file

@ -0,0 +1,90 @@
'use strict'
var o = require('../../ospec/ospec')
o.spec('stream', function () {
var prop
o.beforeEach(function () {
prop = require('../../stream')
})
o.spec('scan', function () {
var scan
o.beforeEach(function () {
scan = require('../scan')
})
o('defaults to seed', function () {
var parent = prop()
var child = scan(function (out, p) {
return out - p
}, 123, parent)
o(child()).equals(123)
})
o('accumulates values as expected', function () {
var parent = prop()
var child = scan(function (arr, p) {
return arr.concat(p)
}, [], parent)
parent(7)
parent('11')
parent(undefined)
parent({ a: 1 })
var result = child()
// deepEquals fails on arrays?
o(result[0]).equals(7)
o(result[1]).equals('11')
o(result[2]).equals(undefined)
o(result[3]).deepEquals({ a: 1 })
})
})
o.spec('scanMerge', function () {
var scanMerge
o.beforeEach(function () {
scanMerge = require('../scan-merge')
})
o('defaults to seed', function () {
var parent1 = prop()
var parent2 = prop()
var child = scanMerge([
[parent1, function (out, p1) {
return out + p1
}],
[parent2, function (out, p2) {
return out + p2
}]
], -10)
o(child()).equals(-10)
})
o('accumulates as expected', function () {
var parent1 = prop()
var parent2 = prop()
var child = scanMerge([
[parent1, function (out, p1) {
return out + p1
}],
[parent2, function (out, p2) {
return out + p2 + p2
}]
], 'a')
parent1('b')
parent2('c')
parent1('b')
o(child()).equals('abccb')
})
})
})