test_fold.mjs 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. 'use strict';
  2. import test from 'tape-six';
  3. import {streamToArray, delay} from './helpers.mjs';
  4. import chain from '../src/index.js';
  5. import fromIterable from '../src/utils/fromIterable.js';
  6. import fold from '../src/utils/fold.js';
  7. import scan from '../src/utils/scan.js';
  8. import reduce from '../src/utils/reduce.js';
  9. import reduceStream from '../src/utils/reduceStream.js';
  10. test.asPromise('fold: smoke test', (t, resolve) => {
  11. const output = [],
  12. c = chain([fromIterable([1, 2, 3]), fold((acc, x) => acc + x, 0), streamToArray(output)]);
  13. c.on('end', () => {
  14. t.deepEqual(output, [6]);
  15. resolve();
  16. });
  17. });
  18. test.asPromise('fold: async', (t, resolve) => {
  19. const output = [],
  20. c = chain([
  21. fromIterable([1, 2, 3]),
  22. fold(
  23. delay((acc, x) => acc + x),
  24. 0
  25. ),
  26. streamToArray(output)
  27. ]);
  28. c.on('end', () => {
  29. t.deepEqual(output, [6]);
  30. resolve();
  31. });
  32. });
  33. test.asPromise('fold: scan', (t, resolve) => {
  34. const output = [],
  35. c = chain([fromIterable([1, 2, 3]), scan((acc, x) => acc + x, 0), streamToArray(output)]);
  36. c.on('end', () => {
  37. t.deepEqual(output, [1, 3, 6]);
  38. resolve();
  39. });
  40. });
  41. test.asPromise('fold: scan async', (t, resolve) => {
  42. const output = [],
  43. c = chain([
  44. fromIterable([1, 2, 3]),
  45. scan(
  46. delay((acc, x) => acc + x),
  47. 0
  48. ),
  49. streamToArray(output)
  50. ]);
  51. c.on('end', () => {
  52. t.deepEqual(output, [1, 3, 6]);
  53. resolve();
  54. });
  55. });
  56. test.asPromise('fold: reduce', (t, resolve) => {
  57. const output = [],
  58. c = chain([fromIterable([1, 2, 3]), fold((acc, x) => acc + x, 0), streamToArray(output)]);
  59. c.on('end', () => {
  60. t.deepEqual(output, [6]);
  61. resolve();
  62. });
  63. });
  64. test.asPromise('fold: reduce async', (t, resolve) => {
  65. const output = [],
  66. c = chain([
  67. fromIterable([1, 2, 3]),
  68. reduce(
  69. delay((acc, x) => acc + x),
  70. 0
  71. ),
  72. streamToArray(output)
  73. ]);
  74. c.on('end', () => {
  75. t.deepEqual(output, [6]);
  76. resolve();
  77. });
  78. });
  79. test.asPromise('fold: reduce stream', (t, resolve) => {
  80. const r = reduceStream((acc, x) => acc + x, 0);
  81. fromIterable([1, 2, 3]).pipe(r);
  82. r.on('finish', () => {
  83. t.deepEqual(r.accumulator, 6);
  84. resolve();
  85. });
  86. });
  87. test.asPromise('fold: reduce stream async', (t, resolve) => {
  88. const r = reduceStream({reducer: delay((acc, x) => acc + x), initial: 0});
  89. fromIterable([1, 2, 3]).pipe(r);
  90. r.on('finish', () => {
  91. t.deepEqual(r.accumulator, 6);
  92. resolve();
  93. });
  94. });