@@ -74,6 +74,56 @@ describe('usePrevious', () => {
7474 expect ( previousValue ) . toBe ( true ) ;
7575 } ) ;
7676
77+ it ( 'should treat NaN as unchanged' , ( ) => {
78+ let previousValue : any ;
79+ const { setProps } = render (
80+ < TestComponent value = { Number . NaN } >
81+ { ( previous ) => {
82+ previousValue = previous ;
83+ return null ;
84+ } }
85+ </ TestComponent > ,
86+ ) ;
87+
88+ expect ( previousValue ) . toBe ( null ) ;
89+
90+ setProps ( { value : Number . NaN , unrelatedProp : 1 } ) ;
91+ expect ( previousValue ) . toBe ( null ) ;
92+ } ) ;
93+
94+ it ( 'should return the previous value when changing to NaN' , ( ) => {
95+ let previousValue : any ;
96+ const { setProps } = render (
97+ < TestComponent value = { 1 } >
98+ { ( previous ) => {
99+ previousValue = previous ;
100+ return null ;
101+ } }
102+ </ TestComponent > ,
103+ ) ;
104+
105+ setProps ( { value : Number . NaN } ) ;
106+ expect ( previousValue ) . toBe ( 1 ) ;
107+ } ) ;
108+
109+ it ( 'should distinguish positive and negative zero' , ( ) => {
110+ let previousValue : any ;
111+ const { setProps } = render (
112+ < TestComponent value = { 0 } >
113+ { ( previous ) => {
114+ previousValue = previous ;
115+ return null ;
116+ } }
117+ </ TestComponent > ,
118+ ) ;
119+
120+ setProps ( { value : - 0 } ) ;
121+ expect ( previousValue ) . toBe ( 0 ) ;
122+
123+ setProps ( { value : 0 } ) ;
124+ expect ( previousValue ) . toBe ( - 0 ) ;
125+ } ) ;
126+
77127 it ( 'should ignore renders where the value does not change' , ( ) => {
78128 let previousValue : any ;
79129 const { setProps } = render (
0 commit comments