map.js 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. 'use strict';
  2. var map = require('../');
  3. var test = require('tape');
  4. function cripple(xs) {
  5. xs.map = undefined; // eslint-disable-line no-param-reassign
  6. return xs;
  7. }
  8. test('numbers -> letters', function (t) {
  9. t.plan(2);
  10. var a = map([97, 98, 99], function (c) {
  11. return String.fromCharCode(c);
  12. });
  13. t.equal(a.join(''), 'abc');
  14. var b = map(cripple([97, 98, 99]), function (c) {
  15. return String.fromCharCode(c);
  16. });
  17. t.equal(b.join(''), 'abc');
  18. });
  19. test('elements and indexes', function (t) {
  20. t.plan(8);
  21. var x = { q: 5 };
  22. var y = 3;
  23. var z = null;
  24. t.deepEqual(
  25. map([x, y, z], function (c, i) { return i; }),
  26. [ 0, 1, 2 ],
  27. 'index check'
  28. );
  29. t.deepEqual(
  30. map([x, y, z], function (c, i) { return i; }),
  31. [ 0, 1, 2 ],
  32. 'crippled index check'
  33. );
  34. var xs0 = [ x, y, z ];
  35. map(xs0, function (c, i, xs) {
  36. t.strictEqual(xs, xs0, 'argument[2]');
  37. });
  38. var xs1 = [ x, y, z ];
  39. map(xs1, function (c, i, xs) {
  40. t.strictEqual(xs, xs1, 'crippled argument[2]');
  41. });
  42. });
  43. test('ignore holes', function (t) {
  44. t.plan(2);
  45. t.deepEqual(
  46. map(new Array(5), function (x) { return x; }),
  47. []
  48. );
  49. t.deepEqual(
  50. map(cripple(new Array(5)), function (x) { return x; }),
  51. []
  52. );
  53. });
  54. test('sparse map', function (t) {
  55. t.plan(2);
  56. var xs = [,, 'a',, 'b']; // eslint-disable-line no-sparse-arrays
  57. t.equal(
  58. map(xs, function (x, i) { return x + i; }).join(''),
  59. 'a2b4'
  60. );
  61. var ys = [,, 'a',, 'b']; // eslint-disable-line no-sparse-arrays
  62. t.equal(
  63. map(cripple(ys), function (x, i) { return x + i; }).join(''),
  64. 'a2b4'
  65. );
  66. t.end();
  67. });