File tree 2 files changed +24
-8
lines changed
2 files changed +24
-8
lines changed Original file line number Diff line number Diff line change @@ -123,7 +123,8 @@ macro_rules! from_str_float_impl {
123
123
/// * '2.5E-10'
124
124
/// * '5.'
125
125
/// * '.5', or, equivalently, '0.5'
126
- /// * 'inf', '-inf', 'NaN'
126
+ /// * 'inf', `-inf`, or equivalently 'infinity', `-infinity` (case-insensitive)
127
+ /// * 'NaN' (case-insensitive)
127
128
///
128
129
/// Leading and trailing whitespace represent an error.
129
130
///
@@ -215,10 +216,17 @@ fn dec2flt<T: RawFloat>(s: &str) -> Result<T, ParseFloatError> {
215
216
ParseResult :: Valid ( decimal) => convert ( decimal) ?,
216
217
ParseResult :: ShortcutToInf => T :: INFINITY ,
217
218
ParseResult :: ShortcutToZero => T :: ZERO ,
218
- ParseResult :: Invalid => match s {
219
- "inf" => T :: INFINITY ,
220
- "NaN" => T :: NAN ,
221
- _ => { return Err ( pfe_invalid ( ) ) ; }
219
+ ParseResult :: Invalid => {
220
+ let buf = [ 0 ; 8 ]
221
+ . get_mut ( ..s. len ( ) )
222
+ . ok_or_else ( pfe_invalid) ?;
223
+ buf. copy_from_slice ( s. as_bytes ( ) ) ;
224
+ buf. make_ascii_uppercase ( ) ;
225
+ match & * buf {
226
+ b"INFINITY" | b"INF" => T :: INFINITY ,
227
+ b"NAN" => T :: NAN ,
228
+ _ => { return Err ( pfe_invalid ( ) ) ; }
229
+ }
222
230
}
223
231
} ;
224
232
Original file line number Diff line number Diff line change @@ -122,15 +122,23 @@ fn whitespace() {
122
122
#[ test]
123
123
fn nan ( ) {
124
124
assert ! ( "NaN" . parse:: <f32 >( ) . unwrap( ) . is_nan( ) ) ;
125
+ assert ! ( "NAN" . parse:: <f32 >( ) . unwrap( ) . is_nan( ) ) ;
126
+ assert ! ( "nan" . parse:: <f32 >( ) . unwrap( ) . is_nan( ) ) ;
125
127
assert ! ( "NaN" . parse:: <f64 >( ) . unwrap( ) . is_nan( ) ) ;
128
+ assert ! ( "NAN" . parse:: <f64 >( ) . unwrap( ) . is_nan( ) ) ;
129
+ assert ! ( "nan" . parse:: <f64 >( ) . unwrap( ) . is_nan( ) ) ;
126
130
}
127
131
128
132
#[ test]
129
133
fn inf ( ) {
130
- assert_eq ! ( "inf" . parse( ) , Ok ( f64 :: INFINITY ) ) ;
131
- assert_eq ! ( "-inf" . parse( ) , Ok ( f64 :: NEG_INFINITY ) ) ;
132
- assert_eq ! ( "inf" . parse( ) , Ok ( f32 :: INFINITY ) ) ;
134
+ assert_eq ! ( "INF" . parse( ) , Ok ( f32 :: INFINITY ) ) ;
133
135
assert_eq ! ( "-inf" . parse( ) , Ok ( f32 :: NEG_INFINITY ) ) ;
136
+ assert_eq ! ( "INFINITy" . parse( ) , Ok ( f32 :: INFINITY ) ) ;
137
+ assert_eq ! ( "-infinitY" . parse( ) , Ok ( f32 :: NEG_INFINITY ) ) ;
138
+ assert_eq ! ( "INF" . parse( ) , Ok ( f64 :: INFINITY ) ) ;
139
+ assert_eq ! ( "-inf" . parse( ) , Ok ( f64 :: NEG_INFINITY ) ) ;
140
+ assert_eq ! ( "INFINITy" . parse( ) , Ok ( f64 :: INFINITY ) ) ;
141
+ assert_eq ! ( "-infinitY" . parse( ) , Ok ( f64 :: NEG_INFINITY ) ) ;
134
142
}
135
143
136
144
#[ test]
You can’t perform that action at this time.
0 commit comments