test_simple.mjs 2.5 KB

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