complex.js 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. var assert = require('assert');
  2. var Lazy = require('..');
  3. var expresso = expresso;
  4. function range(i, j) {
  5. var r = [];
  6. for (;i<j;i++) r.push(i);
  7. return r;
  8. }
  9. exports['complex'] = function () {
  10. var lazy = new Lazy;
  11. var data1 = [];
  12. var data2 = [];
  13. var data3 = [];
  14. var joinExecuted = false;
  15. lazy
  16. .map(function (x) {
  17. return 2*x;
  18. })
  19. .forEach(function (x) {
  20. data1.push(x);
  21. })
  22. .map(function (x) {
  23. return x/2;
  24. })
  25. .take(5)
  26. .forEach(function (x) {
  27. data2.push(x);
  28. })
  29. .filter(function (x) {
  30. return x % 2 == 0;
  31. })
  32. .forEach(function (x) {
  33. data3.push(x);
  34. })
  35. .join(function (xs) {
  36. joinExecuted = true;
  37. assert.deepEqual(xs, [0, 2, 4]);
  38. });
  39. range(0,10).forEach(function (x) {
  40. lazy.emit('data', x);
  41. });
  42. lazy.emit('end');
  43. assert.deepEqual(data1, range(0,10).map(function (x) { return x*2 }));
  44. assert.deepEqual(data2, range(0,5));
  45. assert.deepEqual(data3, [0, 2, 4]);
  46. assert.ok(joinExecuted);
  47. }