40 lines
653 B
Rust
40 lines
653 B
Rust
use nom::{
|
|
bytes::complete::tag,
|
|
multi::{many0, many0_count},
|
|
};
|
|
|
|
#[test]
|
|
fn parse() {
|
|
let mut counter = 0;
|
|
|
|
let res = {
|
|
let mut parser = many0::<_, _, (), _>(|i| {
|
|
counter += 1;
|
|
tag("abc")(i)
|
|
});
|
|
|
|
parser("abcabcabcabc").unwrap()
|
|
};
|
|
|
|
println!("res: {:?}", res);
|
|
assert_eq!(counter, 5);
|
|
}
|
|
|
|
#[test]
|
|
fn accumulate() {
|
|
let mut v = Vec::new();
|
|
|
|
let (_, count) = {
|
|
let mut parser = many0_count::<_, _, (), _>(|i| {
|
|
let (i, o) = tag("abc")(i)?;
|
|
v.push(o);
|
|
Ok((i, ()))
|
|
});
|
|
parser("abcabcabcabc").unwrap()
|
|
};
|
|
|
|
println!("v: {:?}", v);
|
|
assert_eq!(count, 4);
|
|
assert_eq!(v.len(), 4);
|
|
}
|