@@ -18,6 +18,48 @@ it('Should return previous value after update', () => {
1818 rerender ( 1 ) ;
1919 expect ( result . current ) . toBe ( 0 ) ;
2020
21- rerender ( 2 ) ;
21+ rerender ( Number . NaN ) ;
2222 expect ( result . current ) . toBe ( 1 ) ;
23+
24+ rerender ( 0 ) ;
25+ expect ( result . current ) . toBe ( Number . NaN ) ;
26+
27+ rerender ( - 0 ) ;
28+ expect ( result . current ) . toBe ( 0 ) ;
29+
30+ rerender ( 1 ) ;
31+ expect ( result . current ) . toBe ( - 0 ) ;
32+ } ) ;
33+
34+ it ( 'Should return previous object value after update' , ( ) => {
35+ const { result, rerender } = renderHook ( ( state ) => usePrevious ( state ) , {
36+ initialProps : { count : 0 }
37+ } ) ;
38+
39+ expect ( result . current ) . toBe ( undefined ) ;
40+
41+ rerender ( { count : 1 } ) ;
42+ expect ( result . current ) . toStrictEqual ( { count : 0 } ) ;
43+
44+ rerender ( { count : 2 } ) ;
45+ expect ( result . current ) . toStrictEqual ( { count : 1 } ) ;
46+ } ) ;
47+
48+ it ( 'Should return previous object with custom options.equality' , ( ) => {
49+ const equality = ( prev : any , next : any ) => JSON . stringify ( prev ) === JSON . stringify ( next ) ; // Deep equality check
50+
51+ const { result, rerender } = renderHook ( ( state ) => usePrevious ( state , { equality } ) , {
52+ initialProps : { count : 0 , data : [ 1 , 2 , 3 ] }
53+ } ) ;
54+
55+ expect ( result . current ) . toBe ( undefined ) ;
56+
57+ rerender ( { count : 0 , data : [ 1 , 2 , 3 ] } ) ;
58+ expect ( result . current ) . toBe ( undefined ) ;
59+
60+ rerender ( { count : 1 , data : [ 1 , 2 , 3 ] } ) ;
61+ expect ( result . current ) . toStrictEqual ( { count : 0 , data : [ 1 , 2 , 3 ] } ) ;
62+
63+ rerender ( { count : 2 , data : [ 4 , 5 , 6 ] } ) ;
64+ expect ( result . current ) . toStrictEqual ( { count : 1 , data : [ 1 , 2 , 3 ] } ) ;
2365} ) ;
0 commit comments