diff options
author | Griffin Smith <grfn@gws.fyi> | 2021-03-20T00·46-0400 |
---|---|---|
committer | glittershark <grfn@gws.fyi> | 2021-03-20T20·20+0000 |
commit | 2c838ab845bc54c5ef6cb0561332c84f34249368 (patch) | |
tree | c54c95ebc7f503a1db255566b3e25494bbaa28b3 /users/glittershark/achilles/tests | |
parent | fec6595d211e7e3ea616d8335fe5d143a4a7507d (diff) |
feat(gs/achilles): Implement extern decls, for glibc functions r/2293
Implement extern decls, which codegen to LLVM as forward-declared functions, and use these as a hook into calling glibc functions. We can print to the terminal now! The integration tests can test this now. Change-Id: I70af4546b417b888ad9fbb18798db240f77f4e71 Reviewed-on: https://cl.tvl.fyi/c/depot/+/2614 Tested-by: BuildkiteCI Reviewed-by: glittershark <grfn@gws.fyi>
Diffstat (limited to 'users/glittershark/achilles/tests')
-rw-r--r-- | users/glittershark/achilles/tests/compile.rs | 53 |
1 files changed, 37 insertions, 16 deletions
diff --git a/users/glittershark/achilles/tests/compile.rs b/users/glittershark/achilles/tests/compile.rs index 7fa15ad9653e..1b4da463a980 100644 --- a/users/glittershark/achilles/tests/compile.rs +++ b/users/glittershark/achilles/tests/compile.rs @@ -2,7 +2,30 @@ use std::process::Command; use crate_root::root; -const FIXTURES: &[(&str, i32)] = &[("simple", 5), ("functions", 9)]; +struct Fixture { + name: &'static str, + exit_code: i32, + expected_output: &'static str, +} + +const FIXTURES: &[Fixture] = &[ + Fixture { + name: "simple", + exit_code: 5, + expected_output: "", + }, + // TODO(grfn): needs monomorphization + // Fixture { + // name: "functions", + // exit_code: 9, + // expected_output: "", + // }, + Fixture { + name: "externs", + exit_code: 0, + expected_output: "foobar\n", + }, +]; #[test] fn compile_and_run_files() { @@ -21,13 +44,18 @@ fn compile_and_run_files() { "make clean failed" ); - for (fixture, exit_code) in FIXTURES { - println!(">>> Testing: {}", fixture); + for Fixture { + name, + exit_code, + expected_output, + } in FIXTURES + { + println!(">>> Testing: {}", name); - println!(" Running: `make {}`", fixture); + println!(" Running: `make {}`", name); assert!( Command::new("make") - .arg(fixture) + .arg(name) .current_dir(&ach) .spawn() .unwrap() @@ -37,18 +65,11 @@ fn compile_and_run_files() { "make failed" ); - let out_path = ach.join(fixture); + let out_path = ach.join(name); println!(" Running: `{}`", out_path.to_str().unwrap()); - assert_eq!( - Command::new(out_path) - .spawn() - .unwrap() - .wait() - .unwrap() - .code() - .unwrap(), - *exit_code, - ); + let output = Command::new(out_path).output().unwrap(); + assert_eq!(output.status.code().unwrap(), *exit_code,); + assert_eq!(output.stdout, expected_output.as_bytes()); println!(" OK"); } } |