tuplet parser
This commit is contained in:
parent
28bd727090
commit
fb39301b31
1 changed files with 49 additions and 1 deletions
|
@ -259,7 +259,7 @@ mod tests {
|
|||
|
||||
use crate::{
|
||||
compiler::{
|
||||
Loop, LoopCount, Marker, Note, Silence, Slope, Token, TokenVec, VariableChange,
|
||||
Loop, LoopCount, Marker, Note, Silence, Slope, Token, TokenVec, Tuplet, VariableChange,
|
||||
},
|
||||
parser::expression_parser,
|
||||
};
|
||||
|
@ -483,4 +483,52 @@ mod tests {
|
|||
);
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn tuplet() {
|
||||
let slopes = Default::default();
|
||||
fn parser_builder<'s>(
|
||||
slopes: &'s HashMap<String, VariableChange>,
|
||||
) -> impl Fn(&str) -> IResult<&str, Tuplet<'s>> {
|
||||
move |input: &str| {
|
||||
Tuplet::parser(
|
||||
&ParserBuilder::create_empty()
|
||||
.notes(&["do", "ré", "mi"])
|
||||
.slopes(slopes)
|
||||
.variables(&['n'])
|
||||
.build()
|
||||
.unwrap(),
|
||||
)
|
||||
.parse(input)
|
||||
}
|
||||
}
|
||||
let parser = parser_builder(&slopes);
|
||||
let mut working_cases = vec![
|
||||
(
|
||||
"[.%]",
|
||||
(
|
||||
"",
|
||||
Tuplet(TokenVec(vec![Box::new(Silence), Box::new(Marker)])),
|
||||
),
|
||||
),
|
||||
("[]", ("", Tuplet(TokenVec(vec![])))),
|
||||
("[do]f", ("f", Tuplet(TokenVec(vec![Box::new(Note(0))])))),
|
||||
];
|
||||
let mut not_working_cases = vec!["", "[", "]", "[2", "[p]"];
|
||||
for (test, expected) in working_cases.drain(..) {
|
||||
let output = parser(test);
|
||||
if let Ok(result) = output {
|
||||
assert_eq!(expected, result, "case \"{test}\"");
|
||||
} else {
|
||||
panic!("result of \"{test}\" was not Ok: {output:?}");
|
||||
}
|
||||
}
|
||||
for test in not_working_cases.drain(..) {
|
||||
let output = parser(test);
|
||||
assert!(
|
||||
output.is_err(),
|
||||
"result of \"{test}\" was not Err: {output:?}"
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue