cl-interpret: Unit tests for while-else control flow

This commit is contained in:
John 2025-05-18 04:01:50 -04:00
parent e08bf57dc1
commit d3e20e53d0

View File

@ -1,5 +1,5 @@
#![allow(unused_imports)] #![allow(unused_imports)]
use crate::{convalue::ConValue, env::Environment, Interpret}; use crate::{Interpret, convalue::ConValue, env::Environment};
use cl_ast::*; use cl_ast::*;
use cl_lexer::Lexer; use cl_lexer::Lexer;
use cl_parser::Parser; use cl_parser::Parser;
@ -530,6 +530,25 @@ mod control_flow {
env_eq!(env.evaluated, "fail"); env_eq!(env.evaluated, "fail");
} }
#[test]
fn while_evaluates_fail_block_on_false() {
let mut env = Default::default();
assert_eval!(env,
let cond = true;
let evaluated = while cond { cond = false } else { true }
);
env_eq!(env.evaluated, true);
}
#[test]
fn while_does_not_evaluate_fail_block_on_break() {
let mut env = Default::default();
assert_eval!(env,
let evaluated = while true { break true } else { false }
);
env_eq!(env.evaluated, true);
}
#[test] #[test]
fn match_evaluates_in_order() { fn match_evaluates_in_order() {
let mut env = Default::default(); let mut env = Default::default();