data-structure-typed 1.52.9 → 1.53.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/README.md +13 -13
  3. package/benchmark/report.html +13 -13
  4. package/benchmark/report.json +162 -162
  5. package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.d.ts +21 -21
  6. package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.js +63 -46
  7. package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.js.map +1 -1
  8. package/dist/cjs/data-structures/binary-tree/avl-tree.d.ts +20 -20
  9. package/dist/cjs/data-structures/binary-tree/avl-tree.js +28 -26
  10. package/dist/cjs/data-structures/binary-tree/avl-tree.js.map +1 -1
  11. package/dist/cjs/data-structures/binary-tree/binary-tree.d.ts +186 -144
  12. package/dist/cjs/data-structures/binary-tree/binary-tree.js +375 -264
  13. package/dist/cjs/data-structures/binary-tree/binary-tree.js.map +1 -1
  14. package/dist/cjs/data-structures/binary-tree/bst.d.ts +56 -56
  15. package/dist/cjs/data-structures/binary-tree/bst.js +105 -77
  16. package/dist/cjs/data-structures/binary-tree/bst.js.map +1 -1
  17. package/dist/cjs/data-structures/binary-tree/rb-tree.d.ts +13 -13
  18. package/dist/cjs/data-structures/binary-tree/rb-tree.js +35 -33
  19. package/dist/cjs/data-structures/binary-tree/rb-tree.js.map +1 -1
  20. package/dist/cjs/data-structures/binary-tree/tree-multi-map.d.ts +21 -21
  21. package/dist/cjs/data-structures/binary-tree/tree-multi-map.js +58 -48
  22. package/dist/cjs/data-structures/binary-tree/tree-multi-map.js.map +1 -1
  23. package/dist/cjs/data-structures/trie/trie.js +3 -3
  24. package/dist/cjs/interfaces/binary-tree.d.ts +5 -5
  25. package/dist/cjs/types/data-structures/binary-tree/binary-tree.d.ts +13 -13
  26. package/dist/cjs/types/data-structures/binary-tree/bst.d.ts +3 -3
  27. package/dist/mjs/data-structures/binary-tree/avl-tree-multi-map.d.ts +21 -21
  28. package/dist/mjs/data-structures/binary-tree/avl-tree-multi-map.js +63 -45
  29. package/dist/mjs/data-structures/binary-tree/avl-tree.d.ts +20 -20
  30. package/dist/mjs/data-structures/binary-tree/avl-tree.js +28 -25
  31. package/dist/mjs/data-structures/binary-tree/binary-tree.d.ts +186 -144
  32. package/dist/mjs/data-structures/binary-tree/binary-tree.js +375 -263
  33. package/dist/mjs/data-structures/binary-tree/bst.d.ts +56 -56
  34. package/dist/mjs/data-structures/binary-tree/bst.js +105 -75
  35. package/dist/mjs/data-structures/binary-tree/rb-tree.d.ts +13 -13
  36. package/dist/mjs/data-structures/binary-tree/rb-tree.js +35 -32
  37. package/dist/mjs/data-structures/binary-tree/tree-multi-map.d.ts +21 -21
  38. package/dist/mjs/data-structures/binary-tree/tree-multi-map.js +58 -47
  39. package/dist/mjs/data-structures/trie/trie.js +3 -3
  40. package/dist/mjs/interfaces/binary-tree.d.ts +5 -5
  41. package/dist/mjs/types/data-structures/binary-tree/binary-tree.d.ts +13 -13
  42. package/dist/mjs/types/data-structures/binary-tree/bst.d.ts +3 -3
  43. package/dist/umd/data-structure-typed.js +583 -461
  44. package/dist/umd/data-structure-typed.min.js +5 -5
  45. package/dist/umd/data-structure-typed.min.js.map +1 -1
  46. package/package.json +6 -6
  47. package/src/data-structures/binary-tree/avl-tree-multi-map.ts +59 -53
  48. package/src/data-structures/binary-tree/avl-tree.ts +31 -34
  49. package/src/data-structures/binary-tree/binary-tree.ts +439 -359
  50. package/src/data-structures/binary-tree/bst.ts +142 -112
  51. package/src/data-structures/binary-tree/rb-tree.ts +37 -41
  52. package/src/data-structures/binary-tree/tree-multi-map.ts +56 -60
  53. package/src/data-structures/trie/trie.ts +3 -3
  54. package/src/interfaces/binary-tree.ts +6 -6
  55. package/src/types/data-structures/binary-tree/binary-tree.ts +14 -15
  56. package/src/types/data-structures/binary-tree/bst.ts +4 -4
  57. package/test/performance/data-structures/binary-tree/avl-tree.test.ts +1 -1
  58. package/test/performance/data-structures/binary-tree/binary-tree-overall.test.ts +2 -2
  59. package/test/performance/data-structures/binary-tree/binary-tree.test.ts +1 -1
  60. package/test/performance/data-structures/binary-tree/bst.test.ts +1 -1
  61. package/test/performance/data-structures/binary-tree/rb-tree.test.ts +1 -1
  62. package/test/unit/data-structures/binary-tree/avl-tree-multi-map.test.ts +113 -1
  63. package/test/unit/data-structures/binary-tree/avl-tree.test.ts +87 -1
  64. package/test/unit/data-structures/binary-tree/binary-tree.test.ts +162 -39
  65. package/test/unit/data-structures/binary-tree/bst.test.ts +315 -15
  66. package/test/unit/data-structures/binary-tree/tree-multi-map.test.ts +139 -1
@@ -1,5 +1,5 @@
1
1
  import { BinaryTreeNode, BST, BSTNode } from '../../../../src';
2
- import { isDebugTest, SYSTEM_MAX_CALL_STACK, isTestStackOverflow } from '../../../config';
2
+ import { isDebugTest, isTestStackOverflow, SYSTEM_MAX_CALL_STACK } from '../../../config';
3
3
 
4
4
  const isDebug = isDebugTest;
5
5
 
@@ -450,22 +450,25 @@ describe('BST operations test', () => {
450
450
  expect(bfsNodes[2].key).toBe(16);
451
451
  });
452
452
 
453
- it('should keyValueOrEntryOrRawElementToNode', () => {
453
+ it('should keyValueNodeEntryRawToNodeAndValue', () => {
454
454
  const bst = new BST<number>();
455
- const node0 = bst.keyValueOrEntryOrRawElementToNode(0);
456
- expect(node0).toEqual({
457
- _left: undefined,
458
- _right: undefined,
459
- key: 0,
460
- parent: undefined,
461
- value: undefined
462
- });
455
+ const node0 = bst.keyValueNodeEntryRawToNodeAndValue(0);
456
+ expect(node0).toEqual([
457
+ {
458
+ _left: undefined,
459
+ _right: undefined,
460
+ key: 0,
461
+ parent: undefined,
462
+ value: undefined
463
+ },
464
+ undefined
465
+ ]);
463
466
 
464
- const nodeUndefined = bst.keyValueOrEntryOrRawElementToNode(undefined);
465
- expect(nodeUndefined).toBe(undefined);
467
+ const nodeUndefined = bst.keyValueNodeEntryRawToNodeAndValue(undefined);
468
+ expect(nodeUndefined).toEqual([undefined, undefined]);
466
469
 
467
- const nodeNull = bst.keyValueOrEntryOrRawElementToNode(null);
468
- expect(nodeNull).toBe(undefined);
470
+ const nodeNull = bst.keyValueNodeEntryRawToNodeAndValue(null);
471
+ expect(nodeNull).toEqual([undefined, undefined]);
469
472
  });
470
473
  });
471
474
 
@@ -496,7 +499,7 @@ describe('BST operations test recursively', () => {
496
499
  expect(nodeId10?.key).toBe(10);
497
500
 
498
501
  const nodeVal9 = bst.getNode(node => node.value === 9);
499
- expect(nodeVal9?.key).toBe(undefined);
502
+ expect(bst.get(nodeVal9?.key)).toBe(undefined);
500
503
 
501
504
  const leftMost = bst.getLeftMost();
502
505
  expect(leftMost).toBe(1);
@@ -1210,3 +1213,300 @@ describe('BST iterative methods test', () => {
1210
1213
  expect(balanced.leaves(node => node?.value)).toEqual(['a', 'f', 'd', 'i']);
1211
1214
  });
1212
1215
  });
1216
+
1217
+ describe('BST operations map mode test', () => {
1218
+ it('should perform various operations on a Binary Search Tree with numeric values', () => {
1219
+ const bst = new BST<number, number>([], { isMapMode: true });
1220
+ expect(bst).toBeInstanceOf(BST);
1221
+ bst.add([11, 11]);
1222
+ bst.add([3, 3]);
1223
+ const idsAndValues: [number, number][] = [
1224
+ [15, 15],
1225
+ [1, 1],
1226
+ [8, 8],
1227
+ [13, 13],
1228
+ [16, 16],
1229
+ [2, 2],
1230
+ [6, 6],
1231
+ [9, 9],
1232
+ [12, 12],
1233
+ [14, 14],
1234
+ [4, 4],
1235
+ [7, 7],
1236
+ [10, 10],
1237
+ [5, 5]
1238
+ ];
1239
+ bst.addMany(idsAndValues, undefined, false);
1240
+ expect(bst.root).toBeInstanceOf(BSTNode);
1241
+
1242
+ if (bst.root) expect(bst.root.key).toBe(11);
1243
+
1244
+ expect(bst.size).toBe(16);
1245
+
1246
+ expect(bst.has(6)).toBe(true);
1247
+
1248
+ const node6 = bst.getNode(6);
1249
+ expect(node6 && bst.getHeight(6)).toBe(2);
1250
+ expect(node6 && bst.getDepth(6)).toBe(3);
1251
+
1252
+ const nodeId10 = bst.getNode(10);
1253
+ expect(nodeId10?.key).toBe(10);
1254
+
1255
+ const nodeVal9 = bst.getNode(node => node.key === 9);
1256
+ expect(nodeVal9?.key).toBe(9);
1257
+
1258
+ const leftMost = bst.getLeftMost();
1259
+ expect(leftMost).toBe(1);
1260
+
1261
+ expect(bst.isBST()).toBe(true);
1262
+
1263
+ const node15 = bst.getNode(15);
1264
+ const minNodeBySpecificNode = node15 && bst.getLeftMost(node => node, node15);
1265
+ expect(minNodeBySpecificNode?.key).toBe(12);
1266
+
1267
+ const nodes = bst.getNodes(node => node.key === 15);
1268
+ expect(nodes.map(node => node.key)).toEqual([15]);
1269
+ });
1270
+
1271
+ it('should perform various operations on a Binary Search Tree with object values', () => {
1272
+ const objBST = new BST<number, { name: string; age: number }>([], { isMapMode: true });
1273
+ expect(objBST).toBeInstanceOf(BST);
1274
+ objBST.add([11, { name: '11', age: 11 }]);
1275
+ objBST.add([3, { name: '3', age: 3 }]);
1276
+
1277
+ objBST.addMany(
1278
+ [15, 1, 8, 13, 16, 2, 6, 9, 12, 14, 4, 7, 10, 5],
1279
+ [
1280
+ { name: 'Alice', age: 15 },
1281
+ { name: 'Bob', age: 1 },
1282
+ { name: 'Charlie', age: 8 },
1283
+ { name: 'David', age: 13 },
1284
+ { name: 'Emma', age: 16 },
1285
+ { name: 'Frank', age: 2 },
1286
+ { name: 'Grace', age: 6 },
1287
+ { name: 'Hannah', age: 9 },
1288
+ { name: 'Isaac', age: 12 },
1289
+ { name: 'Jack', age: 14 },
1290
+ { name: 'Katie', age: 4 },
1291
+ { name: 'Liam', age: 7 },
1292
+ { name: 'Mia', age: 10 },
1293
+ { name: 'Noah', age: 5 }
1294
+ ],
1295
+ false
1296
+ );
1297
+
1298
+ expect(objBST.root).toBeInstanceOf(BSTNode);
1299
+
1300
+ if (objBST.root) expect(objBST.root.key).toBe(11);
1301
+
1302
+ expect(objBST.has(6)).toBe(true);
1303
+
1304
+ const node6 = objBST.getNode(6);
1305
+ expect(node6 && objBST.getHeight(node6)).toBe(2);
1306
+ expect(node6 && objBST.getDepth(node6)).toBe(3);
1307
+
1308
+ const nodeId10 = objBST.getNode(10);
1309
+ expect(nodeId10?.key).toBe(10);
1310
+
1311
+ const nodeVal9 = objBST.getNode(9);
1312
+ expect(nodeVal9?.key).toBe(9);
1313
+
1314
+ const leftMost = objBST.getLeftMost();
1315
+ expect(leftMost).toBe(1);
1316
+
1317
+ const node15 = objBST.getNode(15);
1318
+ expect(objBST.get(node15)).toEqual({
1319
+ name: 'Alice',
1320
+ age: 15
1321
+ });
1322
+ });
1323
+
1324
+ it('should keyValueNodeEntryRawToNodeAndValue', () => {
1325
+ const bst = new BST<number>([], { isMapMode: true });
1326
+ const node0 = bst.keyValueNodeEntryRawToNodeAndValue(0);
1327
+ expect(node0).toEqual([
1328
+ {
1329
+ _left: undefined,
1330
+ _right: undefined,
1331
+ key: 0,
1332
+ parent: undefined,
1333
+ value: undefined
1334
+ },
1335
+ undefined
1336
+ ]);
1337
+
1338
+ const nodeUndefined = bst.keyValueNodeEntryRawToNodeAndValue(undefined);
1339
+ expect(nodeUndefined).toEqual([undefined, undefined]);
1340
+
1341
+ const nodeNull = bst.keyValueNodeEntryRawToNodeAndValue(null);
1342
+ expect(nodeNull).toEqual([undefined, undefined]);
1343
+ });
1344
+ });
1345
+
1346
+ describe('BST operations map mode test recursively', () => {
1347
+ it('should perform various operations on a Binary Search Tree with numeric values', () => {
1348
+ const bst = new BST<number>([], {
1349
+ iterationType: 'RECURSIVE',
1350
+ isMapMode: true
1351
+ });
1352
+ expect(bst).toBeInstanceOf(BST);
1353
+ bst.add([11, 11]);
1354
+ bst.add([3, 3]);
1355
+ const idsAndValues = [15, 1, 8, 13, 16, 2, 6, 9, 12, 14, 4, 7, 10, 5];
1356
+ bst.addMany(idsAndValues, undefined, false);
1357
+ expect(bst.root).toBeInstanceOf(BSTNode);
1358
+
1359
+ if (bst.root) expect(bst.root.key).toBe(11);
1360
+
1361
+ expect(bst.size).toBe(16);
1362
+
1363
+ expect(bst.has(6)).toBe(true);
1364
+
1365
+ const node6 = bst.getNode(6);
1366
+ expect(node6 && bst.getHeight(6)).toBe(2);
1367
+ expect(node6 && bst.getDepth(6)).toBe(3);
1368
+
1369
+ const nodeId10 = bst.getNode(10);
1370
+ expect(bst.get(10)).toBe(undefined);
1371
+ expect(nodeId10?.key).toBe(10);
1372
+
1373
+ const nodeVal9 = bst.getNode(node => node.key === 9);
1374
+ expect(bst.get(nodeVal9?.key)).toBe(undefined);
1375
+ });
1376
+
1377
+ it('should perform various operations on a Binary Search Tree with object values', () => {
1378
+ const objBST = new BST<number, { key: number; keyA: number }>([], { isMapMode: true });
1379
+ expect(objBST).toBeInstanceOf(BST);
1380
+ objBST.add([11, { key: 11, keyA: 11 }]);
1381
+ objBST.add([3, { key: 3, keyA: 3 }]);
1382
+ const entries: [number, { key: number; keyA: number }][] = [
1383
+ [15, { key: 15, keyA: 15 }],
1384
+ [1, { key: 1, keyA: 1 }],
1385
+ [8, { key: 8, keyA: 8 }],
1386
+ [13, { key: 13, keyA: 13 }],
1387
+ [16, { key: 16, keyA: 16 }],
1388
+ [2, { key: 2, keyA: 2 }],
1389
+ [6, { key: 6, keyA: 6 }],
1390
+ [9, { key: 9, keyA: 9 }],
1391
+ [12, { key: 12, keyA: 12 }],
1392
+ [14, { key: 14, keyA: 14 }],
1393
+ [4, { key: 4, keyA: 4 }],
1394
+ [7, { key: 7, keyA: 7 }],
1395
+ [10, { key: 10, keyA: 10 }],
1396
+ [5, { key: 5, keyA: 5 }]
1397
+ ];
1398
+
1399
+ objBST.addMany(entries, undefined, false);
1400
+
1401
+ expect(objBST.root).toBeInstanceOf(BSTNode);
1402
+
1403
+ if (objBST.root) expect(objBST.root.key).toBe(11);
1404
+
1405
+ expect(objBST.has(6)).toBe(true);
1406
+
1407
+ const node6 = objBST.getNode(6);
1408
+ expect(objBST.get(6)).toEqual({
1409
+ key: 6,
1410
+ keyA: 6
1411
+ });
1412
+ expect(node6 && objBST.getHeight(node6)).toBe(2);
1413
+ expect(node6 && objBST.getDepth(node6)).toBe(3);
1414
+
1415
+ const nodeId10 = objBST.getNode(10);
1416
+ expect(nodeId10?.key).toBe(10);
1417
+
1418
+ const nodeVal9 = objBST.getNode(9);
1419
+ expect(nodeVal9?.key).toBe(9);
1420
+
1421
+ const leftMost = objBST.getLeftMost();
1422
+ expect(leftMost).toBe(1);
1423
+
1424
+ const node15 = objBST.getNode(15);
1425
+ expect(objBST.get(node15)).toEqual({
1426
+ key: 15,
1427
+ keyA: 15
1428
+ });
1429
+ });
1430
+ });
1431
+
1432
+ describe('BST iterative methods map mode test', () => {
1433
+ let bst: BST<number, string>;
1434
+ beforeEach(() => {
1435
+ bst = new BST();
1436
+ bst.addMany(
1437
+ [
1438
+ [1, 'a'],
1439
+ [2, 'b'],
1440
+ [3, 'c']
1441
+ ],
1442
+ [],
1443
+ false
1444
+ );
1445
+ });
1446
+
1447
+ it('should clone work well', () => {
1448
+ const cloned = bst.clone();
1449
+ expect(cloned.root?.left).toBe(undefined);
1450
+ expect(cloned.get(cloned.root?.right)).toBe('b');
1451
+ });
1452
+
1453
+ it('should collapsed, unbalanced, balanced bst leaves', () => {
1454
+ const collapsedToLinkedList = new BST();
1455
+ collapsedToLinkedList.addMany(
1456
+ [
1457
+ [1, 'a'],
1458
+ [2, 'b'],
1459
+ [3, 'c'],
1460
+ [4, 'd'],
1461
+ [5, 'e'],
1462
+ [6, 'f'],
1463
+ [7, 'g'],
1464
+ [8, 'h'],
1465
+ [9, 'i']
1466
+ ],
1467
+ [],
1468
+ false
1469
+ );
1470
+
1471
+ expect(collapsedToLinkedList.leaves()).toEqual([9]);
1472
+
1473
+ const unbalanced = new BST();
1474
+ unbalanced.addMany(
1475
+ [
1476
+ [2, 'b'],
1477
+ [1, 'a'],
1478
+ [3, 'c'],
1479
+ [4, 'd'],
1480
+ [5, 'e'],
1481
+ [6, 'f'],
1482
+ [7, 'g'],
1483
+ [8, 'h'],
1484
+ [9, 'i']
1485
+ ],
1486
+ [],
1487
+ false
1488
+ );
1489
+
1490
+ expect(unbalanced.leaves()).toEqual([1, 9]);
1491
+
1492
+ const balanced = new BST();
1493
+ balanced.addMany(
1494
+ [
1495
+ [2, 'b'],
1496
+ [1, 'a'],
1497
+ [3, 'c'],
1498
+ [4, 'd'],
1499
+ [5, 'e'],
1500
+ [6, 'f'],
1501
+ [7, 'g'],
1502
+ [8, 'h'],
1503
+ [9, 'i']
1504
+ ],
1505
+ [],
1506
+ true
1507
+ );
1508
+
1509
+ expect(balanced.leaves()).toEqual([1, 6, 4, 9]);
1510
+ expect(balanced.leaves(node => balanced.get(node?.key))).toEqual(['a', 'f', 'd', 'i']);
1511
+ });
1512
+ });
@@ -817,7 +817,8 @@ describe('TreeMultiMap iterative methods test', () => {
817
817
  expect(treeMM.getComputedCount()).toBe(21);
818
818
  const cloned = treeMM.clone();
819
819
  expect(cloned.root?.left?.key).toBe(1);
820
- expect(cloned.root?.right?.value).toBe('c');
820
+ if (cloned.isMapMode) expect(cloned.get(cloned.root?.right)).toBe('c');
821
+ else expect(cloned.root?.right?.value).toBe(undefined);
821
822
  });
822
823
 
823
824
  it('should keys', () => {
@@ -835,3 +836,140 @@ describe('TreeMultiMap iterative methods test', () => {
835
836
  expect(leaves).toEqual([1, 3]);
836
837
  });
837
838
  });
839
+
840
+ describe('TreeMultiMap count map mode', () => {
841
+ let tmm: TreeMultiMap<number>;
842
+ beforeEach(() => {
843
+ tmm = new TreeMultiMap<number>([], { isMapMode: true });
844
+ });
845
+
846
+ it('Should added node count ', () => {
847
+ tmm.addMany([
848
+ [1, 1],
849
+ [2, 2],
850
+ [3, 3],
851
+ [4, 4],
852
+ [5, 5]
853
+ ]);
854
+ const newNode = new TreeMultiMapNode(3, undefined, 10);
855
+ tmm.add(newNode, 33, 20);
856
+ // TODO expect(tmm.count).toBe(25);
857
+ expect(tmm.count).toBe(15);
858
+ expect(tmm.getComputedCount()).toBe(15);
859
+ expect(tmm.getNode(3)?.count).toBe(11);
860
+ });
861
+ });
862
+
863
+ describe('TreeMultiMap operations test1 map mode', () => {
864
+ it('should perform various operations on a Binary Search Tree with numeric values1', () => {
865
+ const tmm = new TreeMultiMap<number, number>([], { isMapMode: true });
866
+
867
+ expect(tmm instanceof TreeMultiMap);
868
+
869
+ tmm.add([11, 11]);
870
+ tmm.add([3, 3]);
871
+ const idAndValues: [number, number][] = [
872
+ [11, 11],
873
+ [3, 3],
874
+ [15, 15],
875
+ [1, 1],
876
+ [8, 8],
877
+ [13, 13],
878
+ [16, 16],
879
+ [2, 2],
880
+ [6, 6],
881
+ [9, 9],
882
+ [12, 12],
883
+ [14, 14],
884
+ [4, 4],
885
+ [7, 7],
886
+ [10, 10],
887
+ [5, 5]
888
+ ];
889
+ tmm.addMany(idAndValues);
890
+ expect(tmm.root instanceof TreeMultiMapNode);
891
+
892
+ if (tmm.root) expect(tmm.root.key == 11);
893
+
894
+ expect(tmm.size).toBe(16);
895
+ expect(tmm.count).toBe(18);
896
+ expect(tmm.getComputedCount()).toBe(18);
897
+
898
+ expect(tmm.has(6));
899
+ if (isDebug) tmm.print();
900
+ expect(tmm.getHeight(6)).toBe(1);
901
+ expect(tmm.getDepth(6)).toBe(3);
902
+ const nodeId10 = tmm.getNode(10);
903
+ expect(nodeId10?.key).toBe(10);
904
+
905
+ const nodeVal9 = tmm.getNode(node => node.key === 9);
906
+ expect(nodeVal9?.key).toBe(9);
907
+ });
908
+ });
909
+
910
+ describe('TreeMultiMap operations test recursively1 map mode', () => {
911
+ it('should perform various operations on a Binary Search Tree with numeric values1', () => {
912
+ const tmm = new TreeMultiMap<number>([], {
913
+ iterationType: 'RECURSIVE',
914
+ isMapMode: true
915
+ });
916
+
917
+ expect(tmm instanceof TreeMultiMap);
918
+ tmm.add([11, 11]);
919
+ tmm.add([3, 3]);
920
+ const idAndValues: [number, number][] = [
921
+ [11, 11],
922
+ [3, 3],
923
+ [15, 15],
924
+ [1, 1],
925
+ [8, 8],
926
+ [13, 13],
927
+ [16, 16],
928
+ [2, 2],
929
+ [6, 6],
930
+ [9, 9],
931
+ [12, 12],
932
+ [14, 14],
933
+ [4, 4],
934
+ [7, 7],
935
+ [10, 10],
936
+ [5, 5]
937
+ ];
938
+ tmm.addMany(idAndValues);
939
+ expect(tmm.root).toBeInstanceOf(TreeMultiMapNode);
940
+
941
+ if (tmm.root) expect(tmm.root.key).toBe(5);
942
+
943
+ expect(tmm.size).toBe(16);
944
+ expect(tmm.count).toBe(18);
945
+ expect(tmm.getComputedCount()).toBe(18);
946
+
947
+ expect(tmm.has(6));
948
+
949
+ expect(tmm.getHeight(6)).toBe(1);
950
+ expect(tmm.getDepth(6)).toBe(3);
951
+ const nodeId10 = tmm.getNode(10);
952
+ expect(nodeId10?.key).toBe(10);
953
+
954
+ const nodeVal9 = tmm.getNode(node => node.key === 9);
955
+ expect(nodeVal9?.key).toBe(9);
956
+ });
957
+ });
958
+
959
+ describe('TreeMultiMap iterative methods testm ap mode', () => {
960
+ let treeMM: TreeMultiMap<number, string>;
961
+ beforeEach(() => {
962
+ treeMM = new TreeMultiMap<number, string>([], { isMapMode: true });
963
+ treeMM.add(1, 'a', 10);
964
+ treeMM.add([2, 'b'], undefined, 10);
965
+ treeMM.add([3, 'c'], undefined, 1);
966
+ });
967
+
968
+ it('should clone work well', () => {
969
+ expect(treeMM.count).toBe(21);
970
+ expect(treeMM.getComputedCount()).toBe(21);
971
+ const cloned = treeMM.clone();
972
+ expect(cloned.root?.left?.key).toBe(1);
973
+ expect(cloned.get(cloned.root?.right)).toBe('c');
974
+ });
975
+ });