sets.js 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. import assert from 'assert';
  2. import { push, remove, toggle } from 'misago/utils/sets';
  3. describe("Sets Utils", function() {
  4. it("push", function() {
  5. let set = [];
  6. set = push(set, 2);
  7. assert.equal(set.length, 1, "array length changed");
  8. assert.equal(set[0], 2, "array contains pushed value");
  9. set = push(set, 2);
  10. assert.equal(set.length, 1, "array length didn't change");
  11. assert.equal(set[0], 2, "array contains pushed value");
  12. set = push(set, 1);
  13. assert.equal(set.length, 2, "array length changed");
  14. assert.equal(set[0], 2, "array contains original item");
  15. assert.equal(set[1], 1, "array contains pushed item");
  16. });
  17. it("push is immutable", function() {
  18. let set = [];
  19. let newSet = push(set, 2);
  20. assert.equal(set.length, 0, "operation didn't change old value");
  21. assert.ok(set !== newSet, "operation created new value");
  22. assert.ok(push(newSet, 2) === newSet, "no change returned old value");
  23. });
  24. it("remove", function() {
  25. let set = [1, 2, 3];
  26. set = remove(set, 2);
  27. assert.equal(set.length, 2, "array length changed");
  28. assert.equal(set[1], 3, "removed value is no longer in array");
  29. set = remove(set, 2);
  30. assert.equal(set.length, 2, "array length didn't change");
  31. });
  32. it("remove is immutable", function() {
  33. let set = [1, 2, 3];
  34. let newSet = remove(set, 2);
  35. assert.equal(set.length, 3, "operation didn't change old value");
  36. assert.ok(set !== newSet, "operation created new value");
  37. assert.ok(remove(newSet, 2) === newSet, "no change returned old value");
  38. });
  39. it("toggle", function() {
  40. let set = [];
  41. set = toggle(set, 2);
  42. assert.equal(set.length, 1, "array length changed");
  43. assert.equal(set[0], 2, "array contains toggled value");
  44. set = toggle(set, 2);
  45. assert.equal(set.length, 0, "array was emptied");
  46. set = toggle(set, 2);
  47. assert.equal(set.length, 1, "array length changed");
  48. assert.equal(set[0], 2, "array contains toggled item again");
  49. });
  50. it("toggle is immutable", function() {
  51. let set = [1, 2, 3];
  52. let newSet = toggle(set, 2);
  53. assert.equal(set.length, 3, "operation didn't change old value");
  54. assert.ok(set !== newSet, "operation created new value");
  55. assert.ok(toggle(newSet, 2) !== newSet, "toggle always mutates state");
  56. });
  57. });