uni_core/primitives/
space.rs

1// RUST CONCEPT: Forth-style space output
2// Outputs a single space character
3use crate::interpreter::Interpreter;
4use crate::value::RuntimeError;
5
6// RUST CONCEPT: SPACE builtin
7// Outputs a space character to the terminal
8// Stack effect: ( -- )
9pub fn space_builtin(interp: &mut Interpreter) -> Result<(), RuntimeError> {
10    let _ = interp.write_str(" ");
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_space_basic() {
24        let mut interp = setup_interpreter();
25
26        // SPACE should succeed
27        let result = space_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_space_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        // SPACE should not affect stack
43        space_builtin(&mut interp).unwrap();
44
45        assert_eq!(interp.stack.len(), 2);
46    }
47}