36 lines
841 B
Rust
36 lines
841 B
Rust
use super::CrabSub;
|
|
use crate::parsing::parse_number;
|
|
use yap::Tokens;
|
|
|
|
pub fn parse_crab_sub(tokens: &mut impl Tokens<Item = char>) -> Option<CrabSub> {
|
|
parse_number(tokens).map(|num| CrabSub { location: num })
|
|
}
|
|
|
|
pub fn parse_crab_sub_swarm(tokens: &mut impl Tokens<Item = char>) -> Vec<CrabSub> {
|
|
tokens
|
|
.sep_by(|t| parse_crab_sub(t), |t| t.token(','))
|
|
.collect()
|
|
}
|
|
|
|
#[cfg(test)]
|
|
mod test {
|
|
use super::super::CrabSub;
|
|
use yap::IntoTokens;
|
|
|
|
#[test]
|
|
fn parse_crab_sub() {
|
|
assert_eq!(
|
|
Some(CrabSub { location: 1 }),
|
|
super::parse_crab_sub(&mut "1".into_tokens())
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn parse_crab_sub_swarm() {
|
|
assert_eq!(
|
|
10,
|
|
super::parse_crab_sub_swarm(&mut "16,1,2,0,4,2,7,1,2,14".into_tokens()).len()
|
|
);
|
|
}
|
|
}
|