rl_lang/interpreter/stdlib/debug/
assert_eq.rs1use crate::{
2 interpreter::{
3 evaluator::Evaluator,
4 stdlib::{common::extract_string, debug::common::assert_eq_message},
5 values::Value,
6 },
7 utils::{errors::Error, span::Span},
8};
9
10pub fn func(eval: &mut Evaluator, args: Vec<Value>, span: Span) -> Result<Value, Error> {
11 if args.len() < 2 || args.len() > 3 {
12 return Err(eval.err(
13 format!("assert_eq: expects 2 or 3 arguments, got {}", args.len()),
14 span,
15 ));
16 }
17
18 let (a, b) = (&args[0], &args[1]);
19 if a != b {
20 let err = match assert_eq_message(a, b, args.get(2), "assert_eq", true) {
21 Value::Ok(k) => *k,
22 Value::Err(e) => *e,
23 _ => {
24 unreachable!()
25 }
26 };
27 let err_string = match extract_string(err, "assert_eq") {
28 Err(a) | Ok(a) => a,
29 };
30
31 return Err(eval.err(err_string, span));
32 }
33 Ok(Value::Null)
34}