uni_core/primitives/
clear.rs1use crate::interpreter::Interpreter;
4use crate::value::RuntimeError;
5
6pub fn clear_builtin(interp: &mut Interpreter) -> Result<(), RuntimeError> {
9 interp.stack.clear();
10 Ok(())
11}
12
13#[cfg(test)]
14mod tests {
15 use super::*;
16 use crate::value::Value;
17
18 fn setup_interpreter() -> Interpreter {
19 Interpreter::new()
20 }
21
22 #[test]
23 fn test_clear_builtin_empty_stack() {
24 let mut interp = setup_interpreter();
25
26 let result = clear_builtin(&mut interp);
28 assert!(result.is_ok());
29 assert!(interp.stack.is_empty());
30 }
31
32 #[test]
33 fn test_clear_builtin_with_values() {
34 let mut interp = setup_interpreter();
35
36 interp.push(Value::Number(1.0));
38 interp.push(Value::Number(2.0));
39 interp.push(Value::Number(3.0));
40
41 assert_eq!(interp.stack.len(), 3);
42
43 let result = clear_builtin(&mut interp);
45 assert!(result.is_ok());
46 assert!(interp.stack.is_empty());
47 }
48
49 #[test]
50 fn test_clear_builtin_multiple_times() {
51 let mut interp = setup_interpreter();
52
53 interp.push(Value::Number(1.0));
55 interp.push(Value::Number(2.0));
56
57 clear_builtin(&mut interp).unwrap();
59 assert!(interp.stack.is_empty());
60
61 interp.push(Value::Number(3.0));
63 interp.push(Value::Number(4.0));
64
65 clear_builtin(&mut interp).unwrap();
67 assert!(interp.stack.is_empty());
68 }
69
70 #[test]
71 fn test_clear_builtin_many_items() {
72 let mut interp = setup_interpreter();
73
74 for i in 0..100 {
76 interp.push(Value::Number(i as f64));
77 }
78
79 assert_eq!(interp.stack.len(), 100);
80
81 let result = clear_builtin(&mut interp);
83 assert!(result.is_ok());
84 assert!(interp.stack.is_empty());
85 }
86}