41 lines
1.1 KiB
Rust
41 lines
1.1 KiB
Rust
use std::{fs, path::Path, process::Command};
|
|
|
|
#[test]
|
|
fn add_fixture_emits_expected_llvm_shape() {
|
|
let compiler = env!("CARGO_BIN_EXE_glagol");
|
|
let fixture = Path::new("../examples/add.slo");
|
|
let expected = fs::read_to_string("../tests/add.expected.ll").expect("read add.expected.ll");
|
|
|
|
let output = Command::new(compiler)
|
|
.arg(fixture)
|
|
.output()
|
|
.expect("run glagol on add fixture");
|
|
|
|
assert!(
|
|
output.status.success(),
|
|
"compiler failed\nstdout:\n{}\nstderr:\n{}",
|
|
String::from_utf8_lossy(&output.stdout),
|
|
String::from_utf8_lossy(&output.stderr),
|
|
);
|
|
|
|
let actual = String::from_utf8(output.stdout).expect("LLVM output is UTF-8");
|
|
|
|
for required in required_shapes(&expected) {
|
|
assert!(
|
|
actual.contains(required),
|
|
"LLVM output did not contain expected shape `{}`\nactual:\n{}",
|
|
required,
|
|
actual,
|
|
);
|
|
}
|
|
}
|
|
|
|
fn required_shapes(expected: &str) -> Vec<&str> {
|
|
expected
|
|
.lines()
|
|
.map(str::trim)
|
|
.filter(|line| !line.is_empty())
|
|
.filter(|line| !line.starts_with(';'))
|
|
.collect()
|
|
}
|