1+ const HashMap = require ( './hash-map' ) ;
2+ // import HashMap from './hash-map';
3+
4+
5+ describe ( 'without collisions' , ( ) => {
6+ let hashMap ;
7+
8+ beforeEach ( ( ) => {
9+ hashMap = new HashMap ( ) ;
10+ } ) ;
11+
12+ it ( 'gets values' , ( ) => {
13+ hashMap . set ( 'test' , 'one' ) ;
14+ expect ( hashMap . get ( 'test' ) ) . toBe ( 'one' ) ;
15+ } ) ;
16+
17+ it ( 'should increase load factor and size' , ( ) => {
18+ expect ( hashMap . getLoadFactor ( ) ) . toBe ( 0 ) ;
19+ expect ( hashMap . size ) . toBe ( 0 ) ;
20+ hashMap . set ( 'test' , 'one' ) ;
21+ expect ( hashMap . getLoadFactor ( ) ) . toBe ( 1 / 16 ) ;
22+ expect ( hashMap . size ) . toBe ( 1 ) ;
23+ } ) ;
24+
25+ it ( 'should overwrite values and keep same size' , ( ) => {
26+ hashMap . set ( 'test' , 'uno' ) ;
27+ expect ( hashMap . get ( 'test' ) ) . toBe ( 'uno' ) ;
28+ hashMap . set ( 'test' , 'dos' ) ;
29+ expect ( hashMap . get ( 'test' ) ) . toBe ( 'dos' ) ;
30+ expect ( hashMap . size ) . toBe ( 1 ) ;
31+ } ) ;
32+
33+ it ( 'should return with has' , ( ) => {
34+ expect ( hashMap . has ( 'test' ) ) . toBe ( false ) ;
35+ hashMap . set ( 'test' , 'uno' ) ;
36+ expect ( hashMap . has ( 'test' ) ) . toBe ( true ) ;
37+ } ) ;
38+ } ) ;
39+
40+ describe ( 'with many collisions' , ( ) => {
41+ let hashMap ;
42+
43+ beforeEach ( ( ) => {
44+ hashMap = new HashMap ( 2 , 0 ) ;
45+
46+ hashMap . set ( 'Pineapple' , 'Pen Pineapple Apple Pen' ) ;
47+ hashMap . set ( 'Despacito' , 'Luis Fonsi' ) ;
48+ hashMap . set ( 'Bailando' , 'Enrique Iglesias' ) ;
49+ hashMap . set ( 'Dura' , 'Daddy Yankee' ) ;
50+ hashMap . set ( 'Lean On' , 'Major Lazer' ) ;
51+ hashMap . set ( 'Hello' , 'Adele' ) ;
52+ hashMap . set ( 'All About That Bass' , 'Meghan Trainor' ) ;
53+ hashMap . set ( 'This Is What You Came For' , 'Calvin Harris ' ) ;
54+ } ) ;
55+
56+ it ( 'gets values' , ( ) => {
57+ hashMap . set ( 'test' , 'one' ) ;
58+ expect ( hashMap . get ( 'test' ) ) . toBe ( 'one' ) ;
59+ expect ( hashMap . get ( 'Dura' ) ) . toBe ( 'Daddy Yankee' ) ;
60+ expect ( hashMap . get ( 'Bailando' ) ) . toBe ( 'Enrique Iglesias' ) ;
61+ } ) ;
62+
63+ it ( 'should increase load factor and size' , ( ) => {
64+ expect ( hashMap . getLoadFactor ( ) ) . toBe ( 4 ) ;
65+ expect ( hashMap . size ) . toBe ( 8 ) ;
66+ hashMap . set ( 'test' , 'one' ) ;
67+ expect ( hashMap . getLoadFactor ( ) ) . toBe ( 9 / 2 ) ;
68+ expect ( hashMap . size ) . toBe ( 9 ) ;
69+ } ) ;
70+
71+ it ( 'should overwrite values and keep same size' , ( ) => {
72+ hashMap . set ( 'test' , 'uno' ) ;
73+ expect ( hashMap . get ( 'test' ) ) . toBe ( 'uno' ) ;
74+ hashMap . set ( 'test' , 'dos' ) ;
75+ expect ( hashMap . get ( 'test' ) ) . toBe ( 'dos' ) ;
76+ expect ( hashMap . size ) . toBe ( 9 ) ;
77+ } ) ;
78+
79+ it ( 'should return with has' , ( ) => {
80+ expect ( hashMap . has ( 'test' ) ) . toBe ( false ) ;
81+ hashMap . set ( 'test' , 'uno' ) ;
82+ expect ( hashMap . has ( 'test' ) ) . toBe ( true ) ;
83+ } ) ;
84+ } ) ;
85+
86+ describe ( '#rehash' , ( ) => {
87+ let hashMap ;
88+
89+ beforeEach ( ( ) => {
90+ hashMap = new HashMap ( ) ;
91+
92+ hashMap . set ( 'Pineapple' , 'Pen Pineapple Apple Pen' ) ;
93+ hashMap . set ( 'Despacito' , 'Luis Fonsi' ) ;
94+ hashMap . set ( 'Bailando' , 'Enrique Iglesias' ) ;
95+ hashMap . set ( 'Dura' , 'Daddy Yankee' ) ;
96+ hashMap . set ( 'Lean On' , 'Major Lazer' ) ;
97+ hashMap . set ( 'Hello' , 'Adele' ) ;
98+ hashMap . set ( 'All About That Bass' , 'Meghan Trainor' ) ;
99+ hashMap . set ( 'Wake Me Up' , 'Avicii' ) ;
100+ hashMap . set ( 'Brother' , 'Avicii' ) ;
101+ hashMap . set ( 'Faded' , 'Alan Walker' ) ;
102+ hashMap . set ( 'The Spectre' , 'Alan Walker' ) ;
103+ } ) ;
104+
105+ it ( 'should rehash after 12 items by default' , ( ) => {
106+ expect ( hashMap . getLoadFactor ( ) ) . toBe ( 11 / 16 ) ;
107+ expect ( hashMap . buckets . length ) . toBe ( 16 ) ;
108+ hashMap . set ( 'Alone' , 'Alan Walker' ) ;
109+ expect ( hashMap . getLoadFactor ( ) ) . toBe ( 0.75 ) ;
110+
111+ hashMap . set ( 'Levels' , 'Avicii' ) ;
112+
113+ expect ( hashMap . getLoadFactor ( ) ) . toBe ( 13 / 32 ) ;
114+ expect ( hashMap . buckets . length ) . toBe ( 32 ) ;
115+
116+ expect ( hashMap . get ( 'Dura' ) ) . toBe ( 'Daddy Yankee' ) ;
117+ expect ( hashMap . get ( 'Bailando' ) ) . toBe ( 'Enrique Iglesias' ) ;
118+ expect ( hashMap . get ( 'Levels' ) ) . toBe ( 'Avicii' ) ;
119+ } ) ;
120+ } ) ;
0 commit comments