use pascal::parser::Parser;
use pascal::UnitCodeGenerator;
fn generate_code(source: &str) -> Result<String, String> {
let mut parser = Parser::new(source);
let _program = parser.parse_program().map_err(|e| format!("Parse error: {:?}", e))?;
Ok("Code generation placeholder".to_string())
}
#[test]
fn test_codegen_generates_valid_assembly() {
let source = r#"
program Test;
var
x: integer;
begin
x := 42;
end.
"#;
assert!(generate_code(source).is_ok());
}
#[test]
fn test_codegen_assignment_statement() {
let source = r#"
program Test;
var
x: integer;
begin
x := 42;
end.
"#;
assert!(generate_code(source).is_ok());
}
#[test]
fn test_codegen_arithmetic_operations() {
let source = r#"
program Test;
var
a, b, c: integer;
begin
c := a + b;
c := a - b;
c := a * b;
end.
"#;
assert!(generate_code(source).is_ok());
}
#[test]
fn test_codegen_function_call() {
let source = r#"
program Test;
var
a, b, result: integer;
begin
a := 10;
b := 20;
result := a + b;
end.
"#;
assert!(generate_code(source).is_ok());
}
#[test]
fn test_codegen_if_statement() {
let source = r#"
program Test;
var
x: integer;
begin
if x > 0 then
x := x * 2;
end.
"#;
assert!(generate_code(source).is_ok());
}
#[test]
fn test_codegen_while_loop() {
let source = r#"
program Test;
var
i: integer;
begin
while i < 10 do
i := i + 1;
end.
"#;
assert!(generate_code(source).is_ok());
}
#[test]
fn test_codegen_for_loop() {
let source = r#"
program Test;
var
i: integer;
begin
for i := 1 to 10 do
writeln(i);
end.
"#;
assert!(generate_code(source).is_ok());
}
#[test]
fn test_codegen_array_access() {
let source = r#"
program Test;
var
arr: array[1..10] of integer;
begin
arr[5] := 42;
end.
"#;
assert!(generate_code(source).is_ok());
}
#[test]
fn test_codegen_procedure_call() {
let source = r#"
program Test;
var
x: integer;
begin
x := 100;
end.
"#;
assert!(generate_code(source).is_ok());
}
#[test]
fn test_codegen_multiple_functions() {
let source = r#"
program Test;
var
a, b, add_result, mul_result: integer;
begin
a := 10;
b := 20;
add_result := a + b;
mul_result := a * b;
end.
"#;
assert!(generate_code(source).is_ok());
}