cl-interpret: Tests for new pattern matching behavior
TODO: Expand control flow tests
This commit is contained in:
parent
6ee9bbd72e
commit
80e1219808
@ -178,6 +178,45 @@ mod let_declarations {
|
|||||||
env_eq!(env.x, 10);
|
env_eq!(env.x, 10);
|
||||||
env_eq!(env.y, 10);
|
env_eq!(env.y, 10);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn let_destructuring_tuple() {
|
||||||
|
let mut env = Environment::new();
|
||||||
|
assert_eval!(env,
|
||||||
|
let (x, y) = (10, 20);
|
||||||
|
);
|
||||||
|
|
||||||
|
env_eq!(env.x, 10);
|
||||||
|
env_eq!(env.y, 20);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn let_destructuring_array() {
|
||||||
|
let mut env = Environment::new();
|
||||||
|
assert_eval!(env,
|
||||||
|
let [x, y] = [10, 20];
|
||||||
|
);
|
||||||
|
|
||||||
|
env_eq!(env.x, 10);
|
||||||
|
env_eq!(env.y, 20);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn let_destructuring_nested() {
|
||||||
|
let mut env = Environment::new();
|
||||||
|
assert_eval!(env,
|
||||||
|
let (x, [one, two, three], (a, b, c))
|
||||||
|
= ('x', [1, 2, 3], ('a', 'b', 'c'));
|
||||||
|
);
|
||||||
|
|
||||||
|
env_eq!(env.x, 'x');
|
||||||
|
env_eq!(env.one, 1);
|
||||||
|
env_eq!(env.two, 2);
|
||||||
|
env_eq!(env.three, 3);
|
||||||
|
env_eq!(env.a, 'a');
|
||||||
|
env_eq!(env.b, 'b');
|
||||||
|
env_eq!(env.c, 'c');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mod fn_declarations {
|
mod fn_declarations {
|
||||||
@ -470,6 +509,56 @@ mod operators {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mod control_flow {
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn if_evaluates_pass_block_on_true() {
|
||||||
|
let mut env = Default::default();
|
||||||
|
assert_eval!(env,
|
||||||
|
let evaluated = if true { "pass" } else { "fail" }
|
||||||
|
);
|
||||||
|
env_eq!(env.evaluated, "pass");
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn if_evaluates_fail_block_on_false() {
|
||||||
|
let mut env = Default::default();
|
||||||
|
assert_eval!(env,
|
||||||
|
let evaluated = if false { "pass" } else { "fail" }
|
||||||
|
);
|
||||||
|
env_eq!(env.evaluated, "fail");
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn match_evaluates_in_order() {
|
||||||
|
let mut env = Default::default();
|
||||||
|
assert_eval!(env,
|
||||||
|
let x = '\u{1f988}';
|
||||||
|
let passed = match x {
|
||||||
|
'\u{1f988}' => true,
|
||||||
|
_ => false,
|
||||||
|
};
|
||||||
|
);
|
||||||
|
env_eq!(env.passed, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn match_sinkoles_underscore_patterns() {
|
||||||
|
let mut env = Default::default();
|
||||||
|
assert_eval!(env,
|
||||||
|
let x = '\u{1f988}';
|
||||||
|
let passed = match x {
|
||||||
|
_ => true,
|
||||||
|
'\u{1f988}' => false,
|
||||||
|
};
|
||||||
|
);
|
||||||
|
env_eq!(env.passed, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
//TODO: test other control flow constructs like loops, while-else, etc.
|
||||||
|
}
|
||||||
|
|
||||||
#[allow(dead_code)]
|
#[allow(dead_code)]
|
||||||
fn test_template() {
|
fn test_template() {
|
||||||
let mut env = Default::default();
|
let mut env = Default::default();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user