diff --git a/src/ascii/mod.rs b/src/ascii/mod.rs index a5dd1c31..0aacf271 100644 --- a/src/ascii/mod.rs +++ b/src/ascii/mod.rs @@ -1367,8 +1367,12 @@ where alt(( recognize_float, crate::token::tag_no_case("nan"), - crate::token::tag_no_case("infinity"), - crate::token::tag_no_case("inf"), + ( + opt(one_of(['+', '-'])), + crate::token::tag_no_case("infinity"), + ) + .recognize(), + (opt(one_of(['+', '-'])), crate::token::tag_no_case("inf")).recognize(), )) .parse_next(input) } diff --git a/src/ascii/tests.rs b/src/ascii/tests.rs index 02868be8..4f4c7f6b 100644 --- a/src/ascii/tests.rs +++ b/src/ascii/tests.rs @@ -566,24 +566,17 @@ mod complete { println!("now parsing: {} -> {}", test, expected32); - if (test.starts_with('-') || test.starts_with('+')) && expected32.is_infinite() { - assert!(float::<_, f32, ()>.parse_peek(test.as_bytes()).is_err()); - assert!(float::<_, f32, ()>.parse_peek(test).is_err()); - assert!(float::<_, f64, ()>.parse_peek(test.as_bytes()).is_err()); - assert!(float::<_, f64, ()>.parse_peek(test).is_err()); - } else { - assert_parse!( - float.parse_peek(test.as_bytes()), - Ok((&b""[..], expected32)) - ); - assert_parse!(float.parse_peek(test), Ok(("", expected32))); - - assert_parse!( - float.parse_peek(test.as_bytes()), - Ok((&b""[..], expected64)) - ); - assert_parse!(float.parse_peek(test), Ok(("", expected64))); - } + assert_parse!( + float.parse_peek(test.as_bytes()), + Ok((&b""[..], expected32)) + ); + assert_parse!(float.parse_peek(test), Ok(("", expected32))); + + assert_parse!( + float.parse_peek(test.as_bytes()), + Ok((&b""[..], expected64)) + ); + assert_parse!(float.parse_peek(test), Ok(("", expected64))); } let remaining_exponent = "-1.234E-";