test_fold.js 2.2 KB

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