test('simple', function (t) { var db = sublevel(level('window2', {encoding: 'json'})) var i = 0 var windowDb = Window(db, 'window', window(function (data, cb) { if(i++ % 5) return var sum = 0, count = 0 return function (end, data) { if(end) return sum += +data.value if(++count >= 20) cb(null, {sum:sum, count: count, avg: sum/count}) } })) pull.count(100) .pipe(pull.map(function (e) { return {key: timestamp(), value: Math.random()} })) .pipe(pl.write(db, function (err) { t.notOk(err) pl.read(windowDb) .pipe(pull.collect(function (err, arr) { console.log(arr) t.equal(arr.length, 14) t.end() })) })) })
tape('load-db', function (t) { var start = new Date('2000-01-01'), rolling = +start var total = 1000 var gap = (Date.now() - +start)/(total/2) pull( pull.count(total), pull.map(function (e) { return { key: '*'+Math.random(), value: { count: e, ts: new Date(rolling += Math.random()*gap).toISOString() } } }), /* ranges(24*60*60*1000, function (e) { return +new Date(e.value.ts) }), reduce(function (err, tree) { if(err) throw err console.log(tree) t.end() }) */ pl.write(db1, function (err) { if(err) throw err t.end() }) ) })
tape('simple', function (t) { pull( pull.count(100), pull.map(random), pull.collect(function (err, ary) { var buffer = Buffer.concat(ary.map(function (v) { return struct.encode(v) })) var o = ~~(Math.random()*buffer.length) pull( pull.values([buffer.slice(0, o), buffer.slice(o)]), decode(struct), pull.through(console.log), pull.collect(function (err, _ary) { console.log(_ary) t.deepEqual(_ary, ary) t.end() }) ) }) ) })
tape('keys', function (t) { var db = sublevel(level()).sublevel('test') pull.count(10) .pipe(pull.map(function (i) { return {key: 'key_'+i, value: 'value_' + i} })) .pipe(pl.write(db, function (err) { if(err) { t.notOk(err) throw err } toPull(db.createKeyStream()) .pipe(pull.collect(function (err, ary) { console.log(ary) ary.forEach(function (e) { t.equal(typeof e, 'string') t.ok(/^key_/.test(e)) }) toPull(db.createValueStream()) .pipe(pull.collect(function (err, ary) { console.log(ary) ary.forEach(function (e) { t.equal(typeof e, 'string') t.ok(/^value_/.test(e)) console.log(e) }) t.end() })) })) })) })
test('tumbling to 100', function (t) { pull( pull.count(100), groupTo100(), pull.collect(function (err, ary) { t.deepEqual(ary, expected) console.log(ary) t.end() }) ) })
read(end, function (end, data) { if (end) return cb(end); var base = _.clone(data), stream if (typeof data === 'function') { return cb(end, data) } else if (_.isArray(data[unwindBy])) { delete base[unwindBy]; stream = pull.values(data[unwindBy]); } else if (parseInt(data[unwindBy])) { delete base[unwindBy]; stream = pull.count(data[unwindBy] - 1); } else if (parseInt(unwindBy)) { stream = pull.count(unwindBy - 1); } else return cb(end, pull.values([data])); cb(end, pull( stream, pull.map(function (d) { d = _.isObject(d) ? d : {}; return _.extend({}, base, d)}) )) })
tape('date ranges', function (t) { var start = new Date('2000-01-01'), rolling = +start var total = 1000, gap = 2* ((Date.now() - +start) / total) pull( pull.count(total), pull.map(function (e) { return { key: '#' + Math.random(), value: { count: e, date: new Date(rolling += Math.random()*gap) } } }), // pull.through(function (e) { console.log(JSON.stringify(e))}), pl.write(db, function () { console.log('ready') var min, max var query = ['date', { min: min = new Date(+start + gap*total*0.25), max: max = new Date(+start + gap*total*0.3) }] console.log(index.explain(query)) pull( ( true ? index.search(query) : pl.read(index, index.explain(query))), pull.through(function (e) { console.log(decode(e) || e) }), pull.collect(function (err, ary) { if(err) throw err ary.forEach(function (e) { var date = new Date(e.value.date) t.ok(date >= min, date + ' >= ' + min) t.ok(date >= min, date + ' < ' + min) }) t.end() }) ) //t.end() }) ) })
test('sliding', function (t) { pull( pull.count(19), windows.sliding(function (a, b) { return (a = a || []).push(b), a }, 10), pull.collect(function (err, ary) { console.log(ary) t.notOk(err) t.deepEqual(ary, expected) t.end() }) ) })
db.open(function (err) { if(err) throw err console.log('ready') pull( pull.count(1600), pull.asyncMap(function (n, cb) { db.put('%' + Math.random(), {count: n, value: Math.random()}, cb) }), pull.drain(null, function (err) { console.log(db.snapshot().map(function (e) { return { size: e.size } })) }) ) })
tape('simple - with fuzz', function (t) { var ary = [] pull( pull.count(100), pull.map(random), pull.through(function (v) { ary.push(v) }), encode(struct), readRandomly(0, 64), decode(struct), pull.collect(function (err, _ary) { console.log(_ary) t.deepEqual(_ary, ary) t.end() }) ) })
test('tumbling count', function (t) { var i = 0, last var expected = [ { start: 0, data: 78 }, { start: 13, data: 247 }, { start: 26, data: 416 }, { start: 39, data: 585 }, { start: 52, data: 754 }, { start: 65, data: 923 }, { start: 78, data: 1092 }, { start: 91, data: 1261 }, { start: 104, data: 1430 } ] pull( pull.count(127), windows(function (data, cb) { if(!(i++ % 13)) { if(last) last() var acc = 0 last = function () { cb(null, acc) } return function (end, data) { if(end) return acc = acc + data } } }, rememberStart), pull.collect(function (err, ary) { t.notOk(err) console.log(ary) t.deepEqual(ary, expected) t.end() }) ) })
//getting stack overflows from writing too fast. //I think it's because there is a recursive loop //which stacks up there are many write that don't drain. //try to reproduce it. var pull = require('pull-stream') var through = require('through') var toPull = require('../') pull( pull.count(1000000), pull.map(function (e) { return e.toString()+'\n' }), toPull.sink(through()) )