/test/util/set_helpers_test.js

https://github.com/fangel/RelAlg.js · JavaScript · 126 lines · 119 code · 2 blank · 5 comment · 3 complexity · 8e020b08f2588719e9908385948125a6 MD5 · raw file

  1. (function(factory) {
  2. if (typeof define !== 'undefined' && define.amd) {
  3. // We are running the tests in Karma, which uses RequireJS for everything,
  4. // so we wrap everything in a define, with our test-case as the module.
  5. // Chai is loaded from Bower.
  6. define(['chai', 'relalg/util/set_helpers'], factory)
  7. } else {
  8. // We are using the Mocha runner in Node.js, so we load Chai and RequireJS
  9. // from NPM, then use RequireJS to load relalg.
  10. var chai = require("chai")
  11. , requirejs = require("requirejs")
  12. , _ = require('../mocha-setup')
  13. var SetHelper = requirejs("relalg/util/set_helpers")
  14. factory(chai, SetHelper)
  15. }
  16. })(function(chai, SetHelper) {
  17. var assert = chai.assert
  18. describe("Set Helper Function", function() {
  19. describe("Union", function() {
  20. it("Should contain the union of the two sets", function() {
  21. assert.deepEqual([], SetHelper.Union([], []))
  22. assert.deepEqual([1], SetHelper.Union([1], []))
  23. assert.deepEqual([1], SetHelper.Union([], [1]))
  24. assert.deepEqual([1, 2], SetHelper.Union([1], [2]))
  25. })
  26. it("Should not contain duplicates when both sites contains the same item", function() {
  27. assert.deepEqual([1], SetHelper.Union([1], [1]))
  28. assert.deepEqual([1, 2], SetHelper.Union([1, 2], [1]))
  29. assert.deepEqual([1, 2], SetHelper.Union([1, 2], [1, 2]))
  30. assert.deepEqual([1, 2], SetHelper.Union([1, 2], [2, 1]))
  31. })
  32. it("Should work on multi-dimentional data", function() {
  33. assert.deepEqual([[]], SetHelper.Union([[]], [[]]))
  34. assert.deepEqual([[1]], SetHelper.Union([[1]], []))
  35. assert.deepEqual([[1]], SetHelper.Union([], [[1]]))
  36. assert.deepEqual([[1], [2]], SetHelper.Union([[1]], [[2]]))
  37. assert.deepEqual([[1]], SetHelper.Union([[1]], [[1]]))
  38. assert.deepEqual([[1], [2]], SetHelper.Union([[1], [2]], [[1]]))
  39. assert.deepEqual([[1], [2]], SetHelper.Union([[1], [2]], [[1], [2]]))
  40. assert.deepEqual([[1], [2]], SetHelper.Union([[1], [2]], [[2], [1]]))
  41. assert.deepEqual([[1, 2]], SetHelper.Union([[1, 2]], [[1, 2]]))
  42. })
  43. })
  44. describe("Difference", function() {
  45. it("Should return [] when both sets contains the same", function() {
  46. assert.deepEqual([], SetHelper.Difference([], []))
  47. assert.deepEqual([], SetHelper.Difference([1], [1]))
  48. assert.deepEqual([], SetHelper.Difference([1, 2], [1, 2]))
  49. })
  50. it("Should return anything that is only on the LHS", function() {
  51. assert.deepEqual([1], SetHelper.Difference([1], []))
  52. assert.deepEqual([1], SetHelper.Difference([1, 2], [2]))
  53. assert.deepEqual([2], SetHelper.Difference([1, 2], [1]))
  54. })
  55. it("Should return [] when the LHS is contained in the RHS", function() {
  56. assert.deepEqual([], SetHelper.Difference([], [1]))
  57. assert.deepEqual([], SetHelper.Difference([1], [1, 2]))
  58. assert.deepEqual([], SetHelper.Difference([2], [1, 2]))
  59. })
  60. it("Should work with multi-dimentional data", function() {
  61. assert.deepEqual([], SetHelper.Difference([[]], [[]]))
  62. assert.deepEqual([], SetHelper.Difference([[1]], [[1]]))
  63. assert.deepEqual([[1,2]], SetHelper.Difference([[1,2]], [[1,3]]))
  64. assert.deepEqual([[1,2]], SetHelper.Difference([[1,2], [1,3]], [[1,3]]))
  65. assert.deepEqual([], SetHelper.Difference([[1,2]], [[1,2], [1,3]]))
  66. assert.deepEqual([], SetHelper.Difference([], [[1,2], [1,3]]))
  67. })
  68. })
  69. describe("Intersection", function() {
  70. it("Should return everything when both sets contains the same", function() {
  71. assert.deepEqual([], SetHelper.Intersection([], []))
  72. assert.deepEqual([1], SetHelper.Intersection([1], [1]))
  73. assert.deepEqual([1, 2], SetHelper.Intersection([1, 2], [1, 2]))
  74. })
  75. it("Should return [] when both sets contains disjoint sets", function() {
  76. assert.deepEqual([], SetHelper.Intersection([1], [2]))
  77. assert.deepEqual([], SetHelper.Intersection([1, 3], [2]))
  78. assert.deepEqual([], SetHelper.Intersection([1, 2], [3, 4]))
  79. })
  80. it("Should return the intersection when both slightly overlap", function() {
  81. assert.deepEqual([1], SetHelper.Intersection([1], [2, 1]))
  82. assert.deepEqual([3], SetHelper.Intersection([1, 3], [2, 3]))
  83. assert.deepEqual([4], SetHelper.Intersection([1, 2, 4], [3, 4]))
  84. })
  85. it("Should work on multi-dimentional data", function() {
  86. assert.deepEqual([[]], SetHelper.Intersection([[]], [[]]))
  87. assert.deepEqual([[1]], SetHelper.Intersection([[1]], [[1]]))
  88. assert.deepEqual([[1], [2]], SetHelper.Intersection([[1], [2]], [[1], [2]]))
  89. assert.deepEqual([[1, 2]], SetHelper.Intersection([[1, 2]], [[1, 2]]))
  90. assert.deepEqual([], SetHelper.Intersection([[1, 2]], [[1, 3]]))
  91. assert.deepEqual([[1,2]], SetHelper.Intersection([[1, 2]], [[1,2], [1, 3]]))
  92. assert.deepEqual([[1,2]], SetHelper.Intersection([[1, 2], [1, 3]], [[1,2]]))
  93. assert.deepEqual([[1,2], [1,3]], SetHelper.Intersection([[1, 2], [1, 3]], [[1, 2], [1, 3]]))
  94. })
  95. })
  96. describe("Duplicates", function() {
  97. it("Should return [] when no duplicates", function() {
  98. assert.deepEqual([], SetHelper.Duplicates([]))
  99. assert.deepEqual([], SetHelper.Duplicates([1]))
  100. assert.deepEqual([], SetHelper.Duplicates([1, 2]))
  101. })
  102. it("Should return the duplicates when there are any", function() {
  103. assert.deepEqual([1], SetHelper.Duplicates([1, 1]))
  104. assert.deepEqual([1], SetHelper.Duplicates([1, 2, 1]))
  105. assert.deepEqual([1, 2], SetHelper.Duplicates([1, 2, 1, 2]))
  106. })
  107. })
  108. describe("Pluck", function() {
  109. it("Should pluck out the values in the given positions", function() {
  110. assert.deepEqual([], SetHelper.Pluck([1,2,3], []))
  111. assert.deepEqual([1], SetHelper.Pluck([1,2,3], [0]))
  112. assert.deepEqual([2], SetHelper.Pluck([1,2,3], [1]))
  113. assert.deepEqual([3], SetHelper.Pluck([1,2,3], [2]))
  114. assert.deepEqual([1,2], SetHelper.Pluck([1,2,3], [0,1]))
  115. assert.deepEqual([2,3], SetHelper.Pluck([1,2,3], [1,2]))
  116. assert.deepEqual([1,2,3], SetHelper.Pluck([1,2,3], [0,1,2]))
  117. })
  118. it("Should ignore positions that are not in the set", function() {
  119. assert.deepEqual([], SetHelper.Pluck([1,2,3], [3]))
  120. assert.deepEqual([1,], SetHelper.Pluck([1,2,3], [0,3]))
  121. })
  122. })
  123. })
  124. })