@@ -115,7 +115,9 @@ impl PartialEq for Expression {
115
115
match ( self , other) {
116
116
( Self :: Address ( left) , Self :: Address ( right) ) => left == right,
117
117
( Self :: Infix ( left) , Self :: Infix ( right) ) => left == right,
118
- ( Self :: Number ( left) , Self :: Number ( right) ) => left == right,
118
+ ( Self :: Number ( left) , Self :: Number ( right) ) => {
119
+ ( left. re == right. re || left. re . is_nan ( ) && right. re . is_nan ( ) ) && ( left. im == right. im || left. im . is_nan ( ) && right. im . is_nan ( ) )
120
+ } ,
119
121
( Self :: Prefix ( left) , Self :: Prefix ( right) ) => left == right,
120
122
( Self :: FunctionCall ( left) , Self :: FunctionCall ( right) ) => left == right,
121
123
( Self :: Variable ( left) , Self :: Variable ( right) ) => left == right,
@@ -990,6 +992,7 @@ mod tests {
990
992
prop_assert!( p. is_ok( ) ) ;
991
993
let p = p. unwrap( ) ;
992
994
let simple_p = p. clone( ) . into_simplified( ) ;
995
+
993
996
prop_assert_eq!(
994
997
simple_p. clone( ) ,
995
998
simple_e. clone( ) ,
@@ -1018,13 +1021,21 @@ mod tests {
1018
1021
assert_eq ! ( input, & restring) ;
1019
1022
}
1020
1023
}
1024
+
1025
+ #[ test]
1026
+ fn test_nan_is_equal ( ) {
1027
+ let left = Expression :: Number ( f64:: NAN . into ( ) ) ;
1028
+ let right = left. clone ( ) ;
1029
+ assert_eq ! ( left, right) ;
1030
+ }
1021
1031
1022
1032
#[ test]
1023
1033
fn specific_simplification_tests ( ) {
1024
1034
for ( input, expected) in vec ! [
1025
1035
( "pi" , Expression :: Number ( PI . into( ) ) ) ,
1026
1036
( "pi/2" , Expression :: Number ( ( PI / 2.0 ) . into( ) ) ) ,
1027
1037
( "pi * pi" , Expression :: Number ( ( PI . powi( 2 ) ) . into( ) ) ) ,
1038
+ ( "1.0/(1.0-1.0)" , Expression :: Number ( f64 :: NAN . into( ) ) ) ,
1028
1039
(
1029
1040
"(a[0]*2*pi)/6.283185307179586" ,
1030
1041
Expression :: Address ( MemoryReference {
0 commit comments