about summary refs log tree commit diff
path: root/users/glittershark/achilles/tests/compile.rs
diff options
context:
space:
mode:
authorGriffin Smith <grfn@gws.fyi>2021-03-20T00·46-0400
committerglittershark <grfn@gws.fyi>2021-03-20T20·20+0000
commit2c838ab845bc54c5ef6cb0561332c84f34249368 (patch)
treec54c95ebc7f503a1db255566b3e25494bbaa28b3 /users/glittershark/achilles/tests/compile.rs
parentfec6595d211e7e3ea616d8335fe5d143a4a7507d (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/compile.rs')
-rw-r--r--users/glittershark/achilles/tests/compile.rs53
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");
     }
 }