Added parser for signed integers.
Not used at the moment, but was simple to add while I was in the headspace for it, and it will likely be useful in the future.
This commit is contained in:
parent
e23fe4bb36
commit
df6aaeb527
|
@ -4,10 +4,10 @@
|
||||||
use std::str::{self, FromStr};
|
use std::str::{self, FromStr};
|
||||||
|
|
||||||
use nom::{
|
use nom::{
|
||||||
character::complete::{digit1, multispace0},
|
character::complete::{digit1, multispace0, one_of},
|
||||||
combinator::map_res,
|
combinator::{map_res, opt, recognize},
|
||||||
number::complete::float,
|
number::complete::float,
|
||||||
sequence::delimited,
|
sequence::{delimited, tuple},
|
||||||
IResult,
|
IResult,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -25,16 +25,16 @@ pub fn ws_usize(input: &str) -> IResult<&str, usize, ()> {
|
||||||
map_res(delimited(multispace0, digit1, multispace0), usize::from_str)(input)
|
map_res(delimited(multispace0, digit1, multispace0), usize::from_str)(input)
|
||||||
}
|
}
|
||||||
|
|
||||||
// pub fn ws_i32(input: &str) -> IResult<&str, u32, ()> {
|
pub fn ws_i32(input: &str) -> IResult<&str, i32, ()> {
|
||||||
// map_res(
|
map_res(
|
||||||
// delimited(
|
delimited(
|
||||||
// multispace0,
|
multispace0,
|
||||||
// digit1,
|
recognize(tuple((opt(one_of("-")), digit1))),
|
||||||
// multispace0,
|
multispace0,
|
||||||
// ),
|
),
|
||||||
// u32::from_str,
|
i32::from_str,
|
||||||
// )(input)
|
)(input)
|
||||||
// }
|
}
|
||||||
|
|
||||||
// ========================================================
|
// ========================================================
|
||||||
|
|
||||||
|
@ -61,6 +61,25 @@ mod test {
|
||||||
assert_eq!(ws_usize(" 42 53"), Ok((&"53"[..], 42)));
|
assert_eq!(ws_usize(" 42 53"), Ok((&"53"[..], 42)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn ws_i32_1() {
|
||||||
|
assert_eq!(ws_i32("42"), Ok((&""[..], 42)));
|
||||||
|
assert_eq!(ws_i32(" 42"), Ok((&""[..], 42)));
|
||||||
|
assert_eq!(ws_i32("42 "), Ok((&""[..], 42)));
|
||||||
|
assert_eq!(ws_i32(" 42"), Ok((&""[..], 42)));
|
||||||
|
assert_eq!(ws_i32(" 42 53"), Ok((&"53"[..], 42)));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn ws_i32_2() {
|
||||||
|
assert_eq!(ws_i32("-42"), Ok((&""[..], -42)));
|
||||||
|
assert_eq!(ws_i32(" -42"), Ok((&""[..], -42)));
|
||||||
|
assert_eq!(ws_i32("-42 "), Ok((&""[..], -42)));
|
||||||
|
assert_eq!(ws_i32(" -42"), Ok((&""[..], -42)));
|
||||||
|
assert_eq!(ws_i32(" -42 53"), Ok((&"53"[..], -42)));
|
||||||
|
assert_eq!(ws_i32("--42").is_err(), true);
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn ws_f32_1() {
|
fn ws_f32_1() {
|
||||||
assert_eq!(ws_f32("42"), Ok((&""[..], 42.0)));
|
assert_eq!(ws_f32("42"), Ok((&""[..], 42.0)));
|
||||||
|
|
Loading…
Reference in New Issue
Block a user