Skip to content

[30/N] Add unit tests for Hash, OpenHash, ClosedHash, and NonLinearProbing algorithms - #121

Open
karkir0003 wants to merge 30 commits into
csvistool:masterfrom
karkir0003:karthik/kar-37-add-unit-tests-for-hash-openhash-closedhash-and-nonlinearprobing
Open

karkir0003 wants to merge 30 commits into
csvistool:masterfrom
karkir0003:karthik/kar-37-add-unit-tests-for-hash-openhash-closedhash-and-nonlinearprobing

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. ⬅️ [29/N] Add unit tests for BTree, TreeMap, SkipList, and DisjointSet algorithms #120 (Add unit tests for BTree, TreeMap, SkipList, and DisjointSet algorithms)
  30. 👉 #CURRENT — Add unit tests for Hash, OpenHash, ClosedHash, and NonLinearProbing algorithms (this PR)
  31. ➡️ [31/N] Add unit tests for BruteForce, BoyerMoore, KMP, RabinKarp, and LCS pattern matching algorithms #122 (Add unit tests for BruteForce, BoyerMoore, KMP, RabinKarp, and LCS pattern matching algorithms)

Addresses #93

Context

Adds comprehensive unit test coverage for the hash table algorithm visualizers:

  • Hash.js: Base hash table controller, key/value input fields, initial capacity controls, integer and string hashing arithmetic (doHash), and URL serialization.
  • OpenHash.js: Open addressing hash table supporting linear probing, quadratic probing, and double hashing collision strategies with tombstone markers and table resizing.
  • ClosedHash.js: Separate chaining hash table using linked bucket chains, handling head insertion, duplicate updates, chain traversal, deletion, and capacity expansion.
  • NonLinearProbing.js: Non-linear mathematical probing functions (sin, exponential, quadratic, logarithmic, multiplicative inverse), map filling, and collision management.

Changes Made

  • Introduced src/algo/__tests__/Hash.test.js:
    • Control registration (key, value, insert, delete, find, load factor, initial capacity, restart).
    • Key types (integers, strings, true) switching and keyboard submission event wiring.
    • Integer modulo hashing and string character bitwise hashing animation routines.
    • Parameter parsing via setURLData (initialCapacity, loadFactor, hashType, key:val data pairs).
  • Introduced src/algo/__tests__/OpenHash.test.js:
    • Open addressing table setup with empty flags and deleted tombstones.
    • Probing modes: linear ($i_0 + i$), quadratic ($i_0 + i^2$), and double hashing ($i_0 + i \cdot \text{hash}_2$).
    • Collisions, probing sequences, duplicate key updates, and search hits/misses.
    • Deleted element marking and reuse of earliest deleted index.
    • Dynamic resizing upon crossing load factor threshold.
  • Introduced src/algo/__tests__/ClosedHash.test.js:
    • Separate chaining array of pointer heads with linked list nodes.
    • Node collision chaining (inserting multiple colliding keys into same bucket chain).
    • Updating existing keys in-place within bucket chains.
    • Deletions: removing head node, unlinking middle/tail nodes, empty chain checks.
    • Capacity resets and load factor threshold resizing.
  • Introduced src/algo/__tests__/NonLinearProbing.test.js:
    • Non-linear probing mathematical equations.
    • Key insertion, collisions, and updates.
    • Deletion with tombstone flags and search traversal.
    • Map filling (fillCallback).

Test Plan

  • Ran npm test -- --watchAll=false (all 4 new test suites pass, 36 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