test_fold.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. 'use strict';
  2. const unit = require('heya-unit');
  3. const Chain = require('../index');
  4. const {streamFromArray, delay} = require('./helpers');
  5. const fold = require('../utils/fold');
  6. const scan = require('../utils/scan');
  7. const Reduce = require('../utils/Reduce');
  8. unit.add(module, [
  9. function test_fold(t) {
  10. const async = t.startAsync('test_fold');
  11. const chain = new Chain([fold((acc, x) => acc + x, 0)]),
  12. output = [];
  13. streamFromArray([1, 2, 3]).pipe(chain);
  14. chain.on('data', value => output.push(value));
  15. chain.on('end', () => {
  16. eval(t.TEST('t.unify(output, [6])'));
  17. async.done();
  18. });
  19. },
  20. function test_foldAsync(t) {
  21. const async = t.startAsync('test_foldAsync');
  22. const chain = new Chain([fold(delay((acc, x) => acc + x), 0)]),
  23. output = [];
  24. streamFromArray([1, 2, 3]).pipe(chain);
  25. chain.on('data', value => output.push(value));
  26. chain.on('end', () => {
  27. eval(t.TEST('t.unify(output, [6])'));
  28. async.done();
  29. });
  30. },
  31. function test_foldScan(t) {
  32. const async = t.startAsync('test_foldScan');
  33. const chain = new Chain([scan((acc, x) => acc + x, 0)]),
  34. output = [];
  35. streamFromArray([1, 2, 3]).pipe(chain);
  36. chain.on('data', value => output.push(value));
  37. chain.on('end', () => {
  38. eval(t.TEST('t.unify(output, [1, 3, 6])'));
  39. async.done();
  40. });
  41. },
  42. function test_foldScanAsync(t) {
  43. const async = t.startAsync('test_foldScanAsync');
  44. const chain = new Chain([scan(delay((acc, x) => acc + x), 0)]),
  45. output = [];
  46. streamFromArray([1, 2, 3]).pipe(chain);
  47. chain.on('data', value => output.push(value));
  48. chain.on('end', () => {
  49. eval(t.TEST('t.unify(output, [1, 3, 6])'));
  50. async.done();
  51. });
  52. },
  53. function test_foldReduce(t) {
  54. const async = t.startAsync('test_foldReduce');
  55. const reduce = new Reduce({reducer: (acc, x) => acc + x, initial: 0});
  56. streamFromArray([1, 2, 3]).pipe(reduce);
  57. reduce.on('finish', () => {
  58. eval(t.TEST('t.unify(reduce.accumulator, 6)'));
  59. async.done();
  60. });
  61. },
  62. function test_foldReduceAsync(t) {
  63. const async = t.startAsync('test_foldReduceAsync');
  64. const reduce = new Reduce({reducer: delay((acc, x) => acc + x), initial: 0});
  65. streamFromArray([1, 2, 3]).pipe(reduce);
  66. reduce.on('finish', () => {
  67. eval(t.TEST('t.unify(reduce.accumulator, 6)'));
  68. async.done();
  69. });
  70. }
  71. ]);