inst::test
This commit is contained in:
parent
6183009481
commit
6b3497c5fc
2 changed files with 56 additions and 0 deletions
12
examples/play.puyo
Normal file
12
examples/play.puyo
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
1 ->i
|
||||
(
|
||||
i println
|
||||
i 2 * ->i
|
||||
|
||||
i 1e100 <
|
||||
loop
|
||||
()
|
||||
ite
|
||||
)->loop
|
||||
|
||||
loop!
|
||||
44
src/inst.rs
44
src/inst.rs
|
|
@ -23,6 +23,7 @@ impl fmt::Display for Inst<'_> {
|
|||
} else if !insts.is_empty() {
|
||||
for window in insts.windows(2) {
|
||||
match window {
|
||||
[a @ Inst::Set(_), Inst::Call] => write!(f, "{a} ")?,
|
||||
[a, Inst::Call] => write!(f, "{a}")?,
|
||||
[a, _] => write!(f, "{a} ")?,
|
||||
[last] => write!(f, "{last}")?,
|
||||
|
|
@ -36,3 +37,46 @@ impl fmt::Display for Inst<'_> {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod test {
|
||||
use super::Inst::*;
|
||||
|
||||
#[test]
|
||||
fn display_trivial() {
|
||||
assert_eq!(Set("hello").to_string(), "→hello");
|
||||
assert_eq!(Var("hello").to_string(), "hello");
|
||||
for n in [-1., 1., 1e100, 10_949_102_470_912., -2_189_024.] {
|
||||
assert_eq!(Num(n).to_string(), n.to_string());
|
||||
}
|
||||
assert_eq!(Call.to_string(), "!");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn display_block() {
|
||||
assert_eq!(Block(vec![]).to_string(), "()");
|
||||
|
||||
assert_eq!(Block(vec![Var("x")]).to_string(), "(x)");
|
||||
assert_eq!(Block(vec![Set("x")]).to_string(), "(→x)");
|
||||
|
||||
assert_eq!(Block(vec![Var("x"), Block(vec![])]).to_string(), "(x ())");
|
||||
|
||||
assert_eq!(Block(vec![Var("x"), Call]).to_string(), "(x!)");
|
||||
assert_eq!(Block(vec![Block(vec![]), Call]).to_string(), "(()!)");
|
||||
assert_eq!(Block(vec![Set("x"), Call]).to_string(), "(→x !)");
|
||||
|
||||
assert_eq!(
|
||||
Block(vec![Set("x"), Var("a"), Var("b")]).to_string(),
|
||||
"(→x a b)"
|
||||
);
|
||||
|
||||
assert_eq!(Block(vec![Call, Call, Call]).to_string(), "(!!!)");
|
||||
assert_eq!(Block(vec![Var("x"), Call, Call]).to_string(), "(x!!)");
|
||||
assert_eq!(Block(vec![Set("x"), Call, Call]).to_string(), "(→x !!)");
|
||||
|
||||
assert_eq!(
|
||||
Block(vec![Num(3.), Set("x"), Call, Var("x"), Call, Call]).to_string(),
|
||||
"(3 →x ! x!!)"
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue