test_fold.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. 'use strict';
  2. const unit = require('heya-unit');
  3. const {streamToArray, delay} = require('./helpers');
  4. const chain = require('../src/index');
  5. const fromIterable = require('../src/utils/FromIterable');
  6. const fold = require('../src/utils/fold');
  7. const scan = require('../src/utils/scan');
  8. const reduce = require('../src/utils/reduce');
  9. const {reduceStream} = require('../src/utils/ReduceStream');
  10. const {asStream} = chain;
  11. unit.add(module, [
  12. function test_fold(t) {
  13. const async = t.startAsync('test_fold');
  14. const output = [],
  15. c = chain([
  16. fromIterable([1, 2, 3]),
  17. fold((acc, x) => acc + x, 0),
  18. streamToArray(output)
  19. ]);
  20. c.on('end', () => {
  21. eval(t.TEST('t.unify(output, [6])'));
  22. async.done();
  23. });
  24. },
  25. function test_foldAsync(t) {
  26. const async = t.startAsync('test_foldAsync');
  27. const output = [],
  28. c = chain([
  29. fromIterable([1, 2, 3]),
  30. fold(
  31. delay((acc, x) => acc + x),
  32. 0
  33. ),
  34. streamToArray(output)
  35. ]);
  36. c.on('end', () => {
  37. eval(t.TEST('t.unify(output, [6])'));
  38. async.done();
  39. });
  40. },
  41. function test_foldScan(t) {
  42. const async = t.startAsync('test_foldScan');
  43. const output = [],
  44. c = chain([
  45. fromIterable([1, 2, 3]),
  46. scan((acc, x) => acc + x, 0),
  47. streamToArray(output)
  48. ]);
  49. c.on('end', () => {
  50. eval(t.TEST('t.unify(output, [1, 3, 6])'));
  51. async.done();
  52. });
  53. },
  54. function test_foldScanAsync(t) {
  55. const async = t.startAsync('test_foldScanAsync');
  56. const output = [],
  57. c = chain([
  58. fromIterable([1, 2, 3]),
  59. scan(
  60. delay((acc, x) => acc + x),
  61. 0
  62. ),
  63. streamToArray(output)
  64. ]);
  65. c.on('end', () => {
  66. eval(t.TEST('t.unify(output, [1, 3, 6])'));
  67. async.done();
  68. });
  69. },
  70. function test_foldReduce(t) {
  71. const async = t.startAsync('test_foldReduce');
  72. const output = [],
  73. c = chain([
  74. fromIterable([1, 2, 3]),
  75. fold((acc, x) => acc + x, 0),
  76. streamToArray(output)
  77. ]);
  78. c.on('end', () => {
  79. eval(t.TEST('t.unify(output, [6])'));
  80. async.done();
  81. });
  82. },
  83. function test_foldReduceAsync(t) {
  84. const async = t.startAsync('test_foldReduceAsync');
  85. const output = [],
  86. c = chain([
  87. fromIterable([1, 2, 3]),
  88. reduce(
  89. delay((acc, x) => acc + x),
  90. 0
  91. ),
  92. streamToArray(output)
  93. ]);
  94. c.on('end', () => {
  95. eval(t.TEST('t.unify(output, [6])'));
  96. async.done();
  97. });
  98. },
  99. function test_foldReduceStream(t) {
  100. const async = t.startAsync('test_foldReduceStream');
  101. const r = reduceStream((acc, x) => acc + x, 0);
  102. fromIterable([1, 2, 3]).pipe(r);
  103. r.on('finish', () => {
  104. eval(t.TEST('t.unify(r.accumulator, 6)'));
  105. async.done();
  106. });
  107. },
  108. function test_foldReduceStreamAsync(t) {
  109. const async = t.startAsync('test_foldReduceStreamAsync');
  110. const r = reduceStream({reducer: delay((acc, x) => acc + x), initial: 0});
  111. fromIterable([1, 2, 3]).pipe(r);
  112. r.on('finish', () => {
  113. eval(t.TEST('t.unify(r.accumulator, 6)'));
  114. async.done();
  115. });
  116. }
  117. ]);