LinqArray.test.js 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. "use strict";
  2. exports.__esModule = true;
  3. require("../index");
  4. var assert = require('assert');
  5. describe('LinqArray', function () {
  6. it('distinct', function () {
  7. assert.deepEqual([1, 1, 2, 3, 2, 3, 3, 2, 3, 1, 3, 4, 2, 5, 3, 4, 3, 1, 4, 5, 1, 2, 3, 4, 5, 1, 4, 3, 1, 3, 2, 4, 1, 5, 3].distinct(), [1, 2, 3, 4, 5]);
  8. assert.deepEqual([1, '2', true, null, undefined, {}, [1, 2, 3], 1, '2', true, null, undefined, {}, [1, 2, 3]].distinct(), [1, '2', true, null, undefined, {}, [1, 2, 3], {}, [1, 2, 3]]);
  9. });
  10. it('max', function () {
  11. assert.equal([4, 9, 5, 1, 3].max(), 9);
  12. assert.equal([4, 9, 5, 1, 3].max(function (v) { return v * 2; }), 18);
  13. assert.equal([999999, 1, 2, 3, 6].max(function (v, i) { return v * i; }), 24);
  14. assert.equal([4, 9, 5, 1, 3].max(function (v, i, arr) { return arr[i] + 1; }), 10);
  15. });
  16. it('min', function () {
  17. assert.equal([4, 9, 5, 1, 3].min(), 1);
  18. assert.equal([4, 9, 5, 1, 3].min(function (v) { return v * 2; }), 2);
  19. assert.equal([999999, 1, 2, 3, 6].min(function (v, i) { return v * i; }), 0);
  20. assert.equal([4, 9, 5, 1, 3].min(function (v, i, arr) { return arr[i] + 1; }), 2);
  21. });
  22. it('filterIndex', function () {
  23. assert.deepEqual([10, 20, 30, 40, 50].filterIndex(function (v) { return v > 30; }), [3, 4]);
  24. assert.deepEqual([13, 14, 16, 18, 20].filterIndex(function (v, i, arr) { return (v + i * arr.length) % 2 == 1; }), [0, 1, 3]);
  25. });
  26. it('count', function () {
  27. assert.equal([1, 3, 5, 7, 9, 2, 4, 6, 8, 0].count(function (v) { return v % 2 > 0; }), 5);
  28. assert.equal([0, 1, 2, 3, 4, 555, 555, 555, 555].count(function (v, i) { return v === i; }), 5);
  29. });
  30. it('sum', function () {
  31. assert.equal([1, 2, 3, 4].sum(), 10);
  32. assert.equal([{ v: 1 }, { v: 2 }, { v: 3 }, { v: 4 }].sum(function (v) { return v.v; }), 10);
  33. });
  34. it('average', function () {
  35. assert.equal([1, 2, 3, 4].average(), 2.5);
  36. assert.equal([{ v: 1 }, { v: 2 }, { v: 3 }, { v: 4 }].average(function (v) { return v.v; }), 2.5);
  37. });
  38. it('orderBy', function () {
  39. var a = [
  40. { a: 6, b: 5 },
  41. { a: 4, b: 3 },
  42. { a: 6, b: 1 },
  43. { a: 2, b: 9 },
  44. { a: 4, b: 7 }
  45. ];
  46. assert.deepEqual(a.orderBy(function (v) { return v.a; }), [
  47. { a: 2, b: 9 },
  48. { a: 4, b: 3 },
  49. { a: 4, b: 7 },
  50. { a: 6, b: 5 },
  51. { a: 6, b: 1 }
  52. ]);
  53. assert.deepEqual(a.orderBy(function (v) { return v.a; }, function (v) { return v.b; }), [
  54. { a: 2, b: 9 },
  55. { a: 4, b: 3 },
  56. { a: 4, b: 7 },
  57. { a: 6, b: 1 },
  58. { a: 6, b: 5 }
  59. ]);
  60. assert.deepEqual(a.orderByDesc(function (v) { return v.b; }), [
  61. { a: 2, b: 9 },
  62. { a: 4, b: 7 },
  63. { a: 6, b: 5 },
  64. { a: 4, b: 3 },
  65. { a: 6, b: 1 }
  66. ]);
  67. assert.deepEqual(a.orderByDesc(function (v) { return v.a; }, function (v) { return v.b; }), [
  68. { a: 6, b: 5 },
  69. { a: 6, b: 1 },
  70. { a: 4, b: 7 },
  71. { a: 4, b: 3 },
  72. { a: 2, b: 9 }
  73. ]);
  74. });
  75. describe('binarySearch', function () {
  76. it('normal', function () {
  77. var arr = [1, 1, 20, 20, 20, 21, 30, 30, 40, 50, 50, 50];
  78. assert.equal(arr.binarySearch(30), 6);
  79. assert.equal(arr.binarySearch(31), -1);
  80. assert.equal(arr.binarySearch(1), 0);
  81. assert.equal(arr.binarySearch(50), 10);
  82. assert.equal(arr.binarySearch(20), 2);
  83. });
  84. it('keyMapper', function () {
  85. var arr = [1, 1, 20, 20, 20, 21, 30, 30, 40, 50, 50, 50].map(function (v) { return ({ a: v }); });
  86. assert.equal(arr.binarySearch(30, function (v) { return v.a; }), 6);
  87. assert.equal(arr.binarySearch(31, function (v) { return v.a; }), -1);
  88. assert.equal(arr.binarySearch(1, function (v) { return v.a; }), 0);
  89. assert.equal(arr.binarySearch(50, function (v) { return v.a; }), 10);
  90. assert.equal(arr.binarySearch(20, function (v) { return v.a; }), 2);
  91. });
  92. });
  93. describe('binaryInsert', function () {
  94. describe('unique', function () {
  95. it('normal', function () {
  96. var arr = [10, 20, 30, 40, 50];
  97. assert.equal(arr.binaryInsert(20, true), 1);
  98. assert.deepEqual(arr, [10, 20, 30, 40, 50]);
  99. assert.equal(arr.binaryInsert(21, true), 2);
  100. assert.deepEqual(arr, [10, 20, 21, 30, 40, 50]);
  101. assert.equal(arr.binaryInsert(22, true), 3);
  102. assert.deepEqual(arr, [10, 20, 21, 22, 30, 40, 50]);
  103. assert.equal(arr.binaryInsert(2, true), 0);
  104. assert.deepEqual(arr, [2, 10, 20, 21, 22, 30, 40, 50]);
  105. assert.equal(arr.binaryInsert(52, true), 8);
  106. assert.deepEqual(arr, [2, 10, 20, 21, 22, 30, 40, 50, 52]);
  107. });
  108. it('keyMapper', function () {
  109. var arr = [10, 20, 30, 40, 50].map(function (v) { return ({ value: v }); });
  110. assert.equal(arr.binaryInsert({ value: 20 }, function (v) { return v.value; }, true), 1);
  111. assert.deepEqual(arr, [10, 20, 30, 40, 50].map(function (v) { return ({ value: v }); }));
  112. assert.equal(arr.binaryInsert({ value: 21 }, function (v) { return v.value; }, true), 2);
  113. assert.deepEqual(arr, [10, 20, 21, 30, 40, 50].map(function (v) { return ({ value: v }); }));
  114. assert.equal(arr.binaryInsert({ value: 22 }, function (v) { return v.value; }, true), 3);
  115. assert.deepEqual(arr, [10, 20, 21, 22, 30, 40, 50].map(function (v) { return ({ value: v }); }));
  116. assert.equal(arr.binaryInsert({ value: 2 }, function (v) { return v.value; }, true), 0);
  117. assert.deepEqual(arr, [2, 10, 20, 21, 22, 30, 40, 50].map(function (v) { return ({ value: v }); }));
  118. assert.equal(arr.binaryInsert({ value: 52 }, function (v) { return v.value; }, true), 8);
  119. assert.deepEqual(arr, [2, 10, 20, 21, 22, 30, 40, 50, 52].map(function (v) { return ({ value: v }); }));
  120. });
  121. });
  122. describe('not unique', function () {
  123. it('normal', function () {
  124. var arr = [10, 20, 30, 40, 50];
  125. assert.equal(arr.binaryInsert(20), 1);
  126. assert.deepEqual(arr, [10, 20, 20, 30, 40, 50]);
  127. assert.equal(arr.binaryInsert(21), 3);
  128. assert.deepEqual(arr, [10, 20, 20, 21, 30, 40, 50]);
  129. assert.equal(arr.binaryInsert(22), 4);
  130. assert.deepEqual(arr, [10, 20, 20, 21, 22, 30, 40, 50]);
  131. assert.equal(arr.binaryInsert(2), 0);
  132. assert.deepEqual(arr, [2, 10, 20, 20, 21, 22, 30, 40, 50]);
  133. assert.equal(arr.binaryInsert(52), 9);
  134. assert.deepEqual(arr, [2, 10, 20, 20, 21, 22, 30, 40, 50, 52]);
  135. });
  136. it('keyMapper', function () {
  137. var arr = [10, 20, 30, 40, 50].map(function (v) { return ({ value: v }); });
  138. assert.equal(arr.binaryInsert({ value: 20 }, function (v) { return v.value; }), 1);
  139. assert.deepEqual(arr, [10, 20, 20, 30, 40, 50].map(function (v) { return ({ value: v }); }));
  140. assert.equal(arr.binaryInsert({ value: 21 }, function (v) { return v.value; }), 3);
  141. assert.deepEqual(arr, [10, 20, 20, 21, 30, 40, 50].map(function (v) { return ({ value: v }); }));
  142. assert.equal(arr.binaryInsert({ value: 22 }, function (v) { return v.value; }), 4);
  143. assert.deepEqual(arr, [10, 20, 20, 21, 22, 30, 40, 50].map(function (v) { return ({ value: v }); }));
  144. assert.equal(arr.binaryInsert({ value: 2 }, function (v) { return v.value; }), 0);
  145. assert.deepEqual(arr, [2, 10, 20, 20, 21, 22, 30, 40, 50].map(function (v) { return ({ value: v }); }));
  146. assert.equal(arr.binaryInsert({ value: 52 }, function (v) { return v.value; }), 9);
  147. assert.deepEqual(arr, [2, 10, 20, 20, 21, 22, 30, 40, 50, 52].map(function (v) { return ({ value: v }); }));
  148. });
  149. });
  150. });
  151. it('binaryDistinct', function () {
  152. var arr = [3, 2, 3, 2, 1];
  153. assert.notDeepEqual(arr.binaryDistinct(), [1, 2, 3]);
  154. assert.deepEqual(arr.orderBy(function (v) { return v; }).binaryDistinct(), [1, 2, 3]);
  155. });
  156. it('findLast', function () {
  157. assert.deepEqual([0, 0, 0, 0, 1, 2, 3, 4, 5].findLast(function (v) { return v % 2 == 0; }), 4);
  158. assert.deepEqual([0, 0, 0, 0, 1, 2, 3, 4, 5].map(function (v) { return ({ value: v }); }).findLast(function (v) { return v.value % 2 == 0; }), { value: 4 });
  159. });
  160. it('findLastIndex', function () {
  161. assert.deepEqual([0, 0, 0, 0, 1, 2, 3, 4, 5].findLastIndex(function (v) { return v % 2 == 0; }), 7);
  162. assert.deepEqual([0, 0, 0, 0, 1, 2, 3, 4, 5].map(function (v) { return ({ value: v }); }).findLastIndex(function (v) { return v.value % 2 == 0; }), 7);
  163. });
  164. it('groupBy', function () {
  165. assert.deepEqual(['a1', 'a3', 'a2', 'a3', 'a2', 'a3'].groupBy(function (v) { return v; }).map(function (v) { return [v.key, v.length]; }), [['a1', 1], ['a3', 3], ['a2', 2]]);
  166. assert.deepEqual(['a1', 'a3', 'a2', 'a3', 'a2', 'a3'].map(function (v) { return ({ value: v }); }).groupBy(function (v) { return v.value; }).map(function (v) { return [v.key, v.length]; }), [['a1', 1], ['a3', 3], ['a2', 2]]);
  167. //数字Key顺序按数字
  168. assert.deepEqual(['1', '3', '2', '3', '2', '3'].groupBy(function (v) { return v; }).map(function (v) { return [v.key, v.length]; }), [['1', 1], ['2', 2], ['3', 3]]);
  169. });
  170. });