glyph-runtime 0.0.1

Runtime execution engine for the Glyph programming language
Documentation
#[cfg(test)]
mod tests {
    use crate::compiler::compile_and_run;
    use glyph_types::Value;

    #[test]
    fn test_while_loop() {
        let source = r#"
@program(name="while_test", version="1.0", requires=[])

def main():
    let count = 0
    let sum = 0
    
    while count < 5:
        sum = sum + count
        count = count + 1
    
    return sum
"#;

        let result = compile_and_run(source).unwrap();
        assert_eq!(result, Value::Int(10)); // 0 + 1 + 2 + 3 + 4 = 10
    }

    #[test]
    fn test_for_loop() {
        let source = r#"
@program(name="for_test", version="1.0", requires=[])

def main():
    let numbers = [1, 2, 3, 4, 5]
    let sum = 0
    
    for num in numbers:
        sum = sum + num
    
    return sum
"#;

        let result = compile_and_run(source).unwrap();
        assert_eq!(result, Value::Int(15)); // 1 + 2 + 3 + 4 + 5 = 15
    }

    #[test]
    fn test_break_statement() {
        let source = r#"
@program(name="break_test", version="1.0", requires=[])

def main():
    let count = 0
    let sum = 0
    
    while count < 10:
        if count == 5:
            break
        sum = sum + count
        count = count + 1
    
    return sum
"#;

        let result = compile_and_run(source).unwrap();
        assert_eq!(result, Value::Int(10)); // 0 + 1 + 2 + 3 + 4 = 10
    }

    #[test]
    fn test_continue_statement() {
        let source = r#"
@program(name="continue_test", version="1.0", requires=[])

def main():
    let count = 0
    let sum = 0
    
    while count < 5:
        count = count + 1
        if count == 3:
            continue
        sum = sum + count
    
    return sum
"#;

        let result = compile_and_run(source).unwrap();
        assert_eq!(result, Value::Int(12)); // 1 + 2 + 4 + 5 = 12 (skips 3)
    }

    #[test]
    fn test_nested_loops() {
        let source = r#"
@program(name="nested_loops", version="1.0", requires=[])

def main():
    let sum = 0
    let i = 0
    
    while i < 3:
        let j = 0
        while j < 2:
            sum = sum + i * 10 + j
            j = j + 1
        i = i + 1
    
    return sum
"#;

        let result = compile_and_run(source).unwrap();
        assert_eq!(result, Value::Int(63)); // 0 + 1 + 10 + 11 + 20 + 21 = 63
    }
}