#[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)); }
#[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)); }
#[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)); }
#[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)); }
#[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)); }
}