@@ -41,7 +41,7 @@ describe('HashMap Tests', () => {
4141 expect ( hashMap . getLoadFactor ( ) ) . toBe ( 0 ) ;
4242 expect ( hashMap . size ) . toBe ( 0 ) ;
4343 hashMap . set ( 'test' , 'one' ) ;
44- expect ( hashMap . getLoadFactor ( ) ) . toBe ( 1 / 16 ) ;
44+ expect ( hashMap . getLoadFactor ( ) ) . toBeGreaterThan ( 0 ) ;
4545 expect ( hashMap . size ) . toBe ( 1 ) ;
4646 } ) ;
4747
@@ -68,7 +68,7 @@ describe('HashMap Tests', () => {
6868 let hashMap ;
6969
7070 beforeEach ( ( ) => {
71- hashMap = new HashMap ( 1 , 0 ) ;
71+ hashMap = new HashMap ( 1 , Number . MAX_SAFE_INTEGER ) ;
7272
7373 hashMap . set ( 'Pineapple' , 'Pen Pineapple Apple Pen' ) ;
7474 hashMap . set ( 'Despacito' , 'Luis Fonsi' ) ;
@@ -143,11 +143,11 @@ describe('HashMap Tests', () => {
143143 } ) ;
144144 } ) ;
145145
146- xdescribe ( '#rehash' , ( ) => {
146+ describe ( '#rehash' , ( ) => {
147147 let hashMap ;
148148
149149 beforeEach ( ( ) => {
150- hashMap = new HashMap ( ) ;
150+ hashMap = new HashMap ( 1 , 11 ) ;
151151
152152 hashMap . set ( 'Pineapple' , 'Pen Pineapple Apple Pen' ) ;
153153 hashMap . set ( 'Despacito' , 'Luis Fonsi' ) ;
@@ -162,20 +162,43 @@ describe('HashMap Tests', () => {
162162 hashMap . set ( 'The Spectre' , 'Alan Walker' ) ;
163163 } ) ;
164164
165- it ( 'should rehash after 12 items by default' , ( ) => {
166- expect ( hashMap . getLoadFactor ( ) ) . toBe ( 11 / 16 ) ;
167- expect ( hashMap . buckets . length ) . toBe ( 16 ) ;
165+ it ( 'should rehash' , ( ) => {
166+ expect ( hashMap . collisions ) . toBe ( 10 ) ;
167+ expect ( hashMap . getLoadFactor ( ) ) . toBe ( 11 ) ;
168+ expect ( hashMap . buckets . length ) . toBe ( 1 ) ;
169+
170+ expect ( hashMap . keysTrackerIndex ) . toBe ( 11 ) ;
171+ hashMap . delete ( 'All About That Bass' ) ;
172+ hashMap . set ( 'All About That Bass' , 'Meghan Trainor' ) ;
173+ expect ( hashMap . keysTrackerIndex ) . toBe ( 12 ) ;
174+ // should hava a hole
175+ expect ( hashMap . keysTrackerArray ) . toEqual ( [ 'Pineapple' , 'Despacito' , 'Bailando' , 'Dura' , 'Lean On' , 'Hello' ,
176+ undefined ,
177+ 'Wake Me Up' , 'Brother' , 'Faded' , 'The Spectre' , 'All About That Bass' ] ) ;
178+
179+ hashMap . loadFactor = 0.75 ;
168180 hashMap . set ( 'Alone' , 'Alan Walker' ) ;
169- expect ( hashMap . getLoadFactor ( ) ) . toBe ( 0.75 ) ;
170181
171- hashMap . set ( 'Levels' , 'Avicii' ) ;
182+ // rehash
183+ expect ( hashMap . keysTrackerIndex ) . toBe ( 12 ) ;
184+ expect ( hashMap . collisions ) . toBeLessThan ( 10 ) ;
185+ expect ( hashMap . buckets . length ) . toBe ( 29 ) ; // <- next prime
186+ expect ( hashMap . getLoadFactor ( ) ) . toBe ( 12 / 29 ) ;
172187
173- expect ( hashMap . getLoadFactor ( ) ) . toBe ( 13 / 32 ) ;
174- expect ( hashMap . buckets . length ) . toBe ( 32 ) ;
188+ hashMap . set ( 'Rolling in the Deep' , 'Adele' ) ;
175189
176190 expect ( hashMap . get ( 'Dura' ) ) . toBe ( 'Daddy Yankee' ) ;
177191 expect ( hashMap . get ( 'Bailando' ) ) . toBe ( 'Enrique Iglesias' ) ;
178- expect ( hashMap . get ( 'Levels' ) ) . toBe ( 'Avicii' ) ;
192+ expect ( hashMap . get ( 'Alone' ) ) . toBe ( 'Alan Walker' ) ;
193+
194+ expect ( hashMap . keys ( ) . length ) . toBe ( 13 ) ;
195+ expect ( hashMap . size ) . toBe ( 13 ) ;
196+ expect ( hashMap . keysTrackerIndex ) . toBe ( 13 ) ;
197+ // after the rehash the hole should have been removed
198+ expect ( hashMap . keysTrackerArray ) . toEqual ( [ "Pineapple" , "Despacito" ,
199+ "Bailando" , "Dura" , "Lean On" , "Hello" , "Wake Me Up" , "Brother" ,
200+ "Faded" , "The Spectre" , "All About That Bass" , "Alone" ,
201+ "Rolling in the Deep" ] ) ;
179202 } ) ;
180203 } ) ;
181204} ) ;
0 commit comments