uni_core/primitives/
cr.rs

1// RUST CONCEPT: Forth-style carriage return
2// Outputs a newline character
3use crate::interpreter::Interpreter;
4use crate::value::RuntimeError;
5
6// RUST CONCEPT: CR (carriage return) builtin
7// Outputs a newline to the terminal
8// Stack effect: ( -- )
9pub fn cr_builtin(interp: &mut Interpreter) -> Result<(), RuntimeError> {
10    let _ = interp.write_str("\n");
11    Ok(())
12}
13
14#[cfg(test)]
15mod tests {
16    use super::*;
17
18    fn setup_interpreter() -> Interpreter {
19        Interpreter::new()
20    }
21
22    #[test]
23    fn test_cr_basic() {
24        let mut interp = setup_interpreter();
25
26        // CR should succeed
27        let result = cr_builtin(&mut interp);
28        assert!(result.is_ok());
29
30        // Stack should remain unchanged (empty)
31        assert!(interp.stack.is_empty());
32    }
33
34    #[test]
35    fn test_cr_with_values_on_stack() {
36        let mut interp = setup_interpreter();
37
38        // Put some values on stack
39        interp.push(crate::value::Value::Int32(42));
40        interp.push(crate::value::Value::Int32(100));
41
42        // CR should not affect stack
43        cr_builtin(&mut interp).unwrap();
44
45        assert_eq!(interp.stack.len(), 2);
46    }
47}