Skip to content

[29/N] Add unit tests for BTree, TreeMap, SkipList, and DisjointSet algorithms - #120

Open
karkir0003 wants to merge 29 commits into
csvistool:masterfrom
karkir0003:karthik/kar-36-add-unit-tests-for-btree-treemap-skiplist-and-disjointset
Open

karkir0003 wants to merge 29 commits into
csvistool:masterfrom
karkir0003:karthik/kar-36-add-unit-tests-for-btree-treemap-skiplist-and-disjointset

Conversation

@karkir0003

@karkir0003 karkir0003 commented Oct 3, 2026 •

Copy link
Copy Markdown
Contributor

🥞 Stack

  1. ⬅️ [1/N] Update CI to run frontend unit tests #91 (Add test infrastructure and Jest setup)
  2. ⬅️ [2/N] Configure React Testing Library and Setup Tests #92 (Add unit tests for Footer, Header, and Blob components)
  3. ⬅️ [3/N] Add unit tests for SideButton component #94 (Add unit tests for AlgorithmNotFound404 component)
  4. ⬅️ [4/N] Add unit tests for SearchFilter component #95 (Add unit tests for Pseudocode component)
  5. ⬅️ [5/N] Add unit tests for Header and Footer components #96 (Add unit tests for AlgoSection component)
  6. ⬅️ [6/N] Add unit tests for Blob mascot component #97 (Add unit tests for ModalSidebarSectionTab component)
  7. ⬅️ [7/N] Add unit tests for AboutScreen screen #98 (Add unit tests for BigOModal component)
  8. ⬅️ [8/N] Add integration tests for HomeScreen screen #99 (Add unit tests for InfoModals component)
  9. ⬅️ [9/N] Add unit tests for AlgorithmNotFound404 component #100 (Add unit tests for SideButton component)
  10. ⬅️ [10/N] Add integration tests for AlgoScreen screen #101 (Add unit tests for SearchFilter component)
  11. ⬅️ [11/N] Add unit tests for ModalSidebarSectionTab component #102 (Add unit tests for HomeScreen)
  12. ⬅️ [12/N] Add unit tests for BigOModal component #103 (Add unit tests for AboutScreen)
  13. ⬅️ [13/N] Add unit tests for Pseudocode component #104 (Add unit tests for AlgoScreen)
  14. ⬅️ [14/N] Add unit and integration tests for AlgoSection component #105 (Add unit tests for AlgoList registry)
  15. ⬅️ [15/N] Add unit and integration tests for root App component #106 (Add unit and integration tests for root App component)
  16. ⬅️ [16/N] Add unit tests for animation events and undo functions #107 (Add unit tests for animation events and undo functions)
  17. ⬅️ [17/N] Add unit tests for AnimatedObject, AnimatedCircle, and AnimatedHighlightCircle #108 (Add unit tests for AnimatedObject, AnimatedCircle, and AnimatedHighlightCircle)
  18. ⬅️ [18/N] Add unit tests for AnimatedRectangle, AnimatedLabel, and AnimatedLine #109 (Add unit tests for AnimatedRectangle, AnimatedLabel, and AnimatedLine)
  19. ⬅️ [19/N] Add unit tests for AnimatedLinkedListNode, AnimatedDoublyLinkedListNode, and AnimatedCircularlyLinkedListNode #110 (Add unit tests for AnimatedLinkedListNode, AnimatedDoublyLinkedListNode, and AnimatedCircularlyLinkedListNode)
  20. ⬅️ [20/N] Add unit tests for AnimatedBTreeNode and AnimatedSkipListNode #111 (Add unit tests for AnimatedBTreeNode and AnimatedSkipListNode)
  21. ⬅️ [21/N] Add unit tests for ObjectManager #112 (Add unit tests for ObjectManager)
  22. ⬅️ [22/N] Add unit tests for AnimationMain #113 (Add unit tests for AnimationMain)
  23. ⬅️ [23/N] Add unit tests for algo util helpers (PriorityQueue, SkipListHeads, GraphValues) #114 (Add unit tests for algo util helpers (PriorityQueue, SkipListHeads, GraphValues))
  24. ⬅️ [24/N] Add unit tests for base Algorithm class and control bar helpers #115 (Add unit tests for base Algorithm class and control bar helpers)
  25. ⬅️ [25/N] Add unit tests for ArrayList algorithm #116 (Add unit tests for ArrayList algorithm)
  26. ⬅️ [26/N] Add unit tests for LinkedList, DoublyLinkedList, and CircularlyLinkedList algorithms #117 (Add unit tests for LinkedList, DoublyLinkedList, and CircularlyLinkedList algorithms)
  27. ⬅️ [27/N] Add unit tests for Stack, Queue, and Deque algorithms (Array and LL variants) #118 (Add unit tests for Stack, Queue, and Deque algorithms (Array and LL variants))
  28. ⬅️ [28/N] Add unit tests for BST, AVL, Heap, and SplayTree algorithms #119 (Add unit tests for BST, AVL, Heap, and SplayTree algorithms)
  29. 👉 #CURRENT — Add unit tests for BTree, TreeMap, SkipList, and DisjointSet algorithms (this PR)
  30. ➡️ [30/N] Add unit tests for Hash, OpenHash, ClosedHash, and NonLinearProbing algorithms #121 (Add unit tests for Hash, OpenHash, ClosedHash, and NonLinearProbing algorithms)

Addresses #93

Context

Adds comprehensive unit test coverage for the advanced search tree, skip list, and disjoint set algorithm visualizers:

  • BTree.js: B-Tree multi-element search tree with node splits, promotions, searches, predecessor/successor deletions, and custom tree string builder.
  • TreeMap.js: Key-value balanced map (AVL-backed) with put, get, remove, and rotation rebalancing.
  • SkipList.js: Multi-level probabilistic skip list with tower additions, coin flips, forward/down pointer traversal, and deletions.
  • DisjointSet.js: Disjoint set / union-find visualizer with dual array and tree representations, union-by-rank, and path compression.

Changes Made

  • Introduced src/algo/__tests__/BTree.test.js:
    • Control registration (insert, delete, find, print, random, clear, split index, pred/succ, build tree).
    • Multi-element node insertions causing splits and tree growth.
    • Preemptive split on full nodes.
    • Search (find present, miss, boundary bounds).
    • Deletions: leaf keys, internal keys with predecessor / successor replacement.
    • buildTree parsing pipe-and-comma format ("2,9,13|1|5,6,7|11,12|14,16") and problem detection (treeHasProblem).
    • URL parameter deserialization (promote, predSucc, data).
  • Introduced src/algo/__tests__/TreeMap.test.js:
    • Key-value pair insertion, duplicate key updates.
    • LL, RR, LR, and RL rotations maintaining AVL balance properties.
    • Key search (hits and misses across subtrees).
    • Deletions: leaf nodes, single-child nodes, two-child nodes with predecessor or successor.
    • Dynamic resizing, string vs numeric key comparisons, URL data loading.
  • Introduced src/algo/__tests__/SkipList.test.js:
    • Skip list tower initialization with negative and positive infinity headers.
    • Insertion with specified heads (addWithHeads) and random coin flips (addRandomly).
    • Sorted multi-level link maintenance and duplicate key handling.
    • Column shifting on node removal.
    • Key search (get), random population, and reset.
  • Introduced src/algo/__tests__/DisjointSet.test.js:
    • Array and tree dual visualizer representations for 16 elements.
    • Union operations merging disjoint sets, self-unions.
    • Union-by-rank (rank as number of nodes and rank as estimated height).
    • Find operations with path compression updating root references and links.
    • Component size computation (getSizes), reset, and clear.

Test Plan

  • Ran npm test -- --watchAll=false (all 4 new test suites pass, 59 unit tests passing).
  • Ran npm run lint and npm run prettier (0 errors, 0 warnings).

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant