65 lines
1.1 KiB
Rust
65 lines
1.1 KiB
Rust
use super::harness::*;
|
|
|
|
#[test]
|
|
fn if_then_true() {
|
|
expect_int("1 if 42 then", 42);
|
|
}
|
|
|
|
#[test]
|
|
fn if_then_false() {
|
|
let f = run("0 if 42 then");
|
|
assert!(f.stack().is_empty());
|
|
}
|
|
|
|
#[test]
|
|
fn if_then_with_base() {
|
|
expect_int("100 0 if 50 + then", 100);
|
|
}
|
|
|
|
#[test]
|
|
fn if_else_true() {
|
|
expect_int("1 if 42 else 99 then", 42);
|
|
}
|
|
|
|
#[test]
|
|
fn if_else_false() {
|
|
expect_int("0 if 42 else 99 then", 99);
|
|
}
|
|
|
|
#[test]
|
|
fn nested_tt() {
|
|
expect_int("1 if 1 if 100 else 200 then else 300 then", 100);
|
|
}
|
|
|
|
#[test]
|
|
fn nested_tf() {
|
|
expect_int("1 if 0 if 100 else 200 then else 300 then", 200);
|
|
}
|
|
|
|
#[test]
|
|
fn nested_f() {
|
|
expect_int("0 if 1 if 100 else 200 then else 300 then", 300);
|
|
}
|
|
|
|
#[test]
|
|
fn if_with_computation() {
|
|
expect_int("3 2 gt if 42 else 99 then", 42);
|
|
}
|
|
|
|
#[test]
|
|
fn missing_then() {
|
|
expect_error("1 if 42", "missing 'then'");
|
|
}
|
|
|
|
#[test]
|
|
fn deeply_nested() {
|
|
expect_int("1 if 1 if 1 if 42 then then then", 42);
|
|
}
|
|
|
|
#[test]
|
|
fn chained_conditionals() {
|
|
// First if leaves nothing, second if runs
|
|
let f = run("0 if 1 then 1 if 42 then");
|
|
assert_eq!(stack_int(&f), 42);
|
|
}
|