Merge pull request #224 from HigherOrderCO/feature/sc-496/add-cli-tests-for-hvm-lang

[sc-496] Add CLI tests for hvm-lang
This commit is contained in:
imaqtkatt 2024-03-07 08:26:09 -03:00 committed by GitHub
commit 12f4806b82
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
49 changed files with 249 additions and 1 deletions

View File

@ -15,6 +15,7 @@ use std::{
collections::HashMap,
fmt::Write,
fs,
io::Read,
path::{Path, PathBuf},
str::FromStr,
sync::{Arc, RwLock},
@ -72,7 +73,7 @@ fn run_golden_test_dir_multiple(test_name: &str, run: &[&dyn Fn(&str, &Path) ->
let walker = WalkDir::new(&root).sort_by_file_name().max_depth(2).into_iter().filter_entry(|e| {
let path = e.path();
path == root || (path.is_file() && path.extension().is_some_and(|x| x == "hvm"))
path == root || path.is_dir() || (path.is_file() && path.extension().is_some_and(|x| x == "hvm"))
});
for entry in walker {
@ -305,3 +306,21 @@ fn run_entrypoint() {
Ok(format!("{}{}", display_readback_errors(&info.readback_errors), res))
})
}
#[test]
fn cli() {
run_golden_test_dir(function_name!(), &|_code, path| {
let mut args_path = PathBuf::from(path);
assert!(args_path.set_extension("args"));
let mut args_buf = String::with_capacity(16);
let mut args_file = fs::File::open(args_path).expect("File exists");
args_file.read_to_string(&mut args_buf).expect("Read args");
let args = args_buf.lines();
let output =
std::process::Command::new("cargo").arg("run").arg("-q").args(args).output().expect("Run process");
Ok(format!("{}\n{}", String::from_utf8_lossy(&output.stderr), String::from_utf8_lossy(&output.stdout)))
})
}

View File

@ -0,0 +1,3 @@
compile
tests/golden_tests/cli/compile_all.hvm
-Oall

View File

@ -0,0 +1,6 @@
data Pair
= (Pair fst snd)
Pair.get f (Pair fst snd) = (f fst snd)
main = (Pair.get @x @y (+ x y) (Pair 40 2))

View File

@ -0,0 +1,11 @@
compile
tests/golden_tests/cli/compile_no_opts.hvm
-Ono-all
-Ono-eta
-Ono-prune
-Ono-ref-to-ref
-Ono-pre-reduce
-Ono-float-combinators
-Ono-simplify-main
-Ono-merge
-Ono-inline

View File

@ -0,0 +1 @@
main = *

View File

@ -0,0 +1,3 @@
compile
tests/golden_tests/cli/compile_pre_reduce.hvm
-Opre-reduce

View File

@ -0,0 +1,3 @@
I = (+ 2 3)
main = *

View File

@ -0,0 +1,3 @@
compile
tests/golden_tests/cli/compile_wrong_opt.hvm
-Ofoo

View File

@ -0,0 +1 @@
main = *

View File

@ -0,0 +1,3 @@
desugar
tests/golden_tests/cli/desugar_bool_scott.hvm
-Oadt-scott

View File

@ -0,0 +1,3 @@
data Boolean = True | False
main = True

View File

@ -0,0 +1,3 @@
desugar
tests/golden_tests/cli/desugar_bool_tagged.hvm
-Oadt-tagged-scott

View File

@ -0,0 +1,3 @@
data Boolean = True | False
main = True

View File

@ -0,0 +1,3 @@
desugar
tests/golden_tests/cli/desugar_eta.hvm
-Oeta

View File

@ -0,0 +1,4 @@
id x = x
id2 x = (id x)
main = (id2 42)

View File

@ -0,0 +1,3 @@
desugar
tests/golden_tests/cli/desugar_float_combinators.hvm
-Ofloat-combinators

View File

@ -0,0 +1,6 @@
Z = @s @z z
S = @x @s @z (s (x s z))
get = @Nat (Nat @x (+ x 1) 0)
main = (get (S (S Z)))

View File

@ -0,0 +1,3 @@
desugar
tests/golden_tests/cli/desugar_inline.hvm
-Oinline

View File

@ -0,0 +1,3 @@
id x = x
main = (id id)

View File

@ -0,0 +1,3 @@
desugar
tests/golden_tests/cli/desugar_linearize_matches.hvm
-Olinearize-matches

View File

@ -0,0 +1 @@
main = λa λb match a { 0: b; 1+: b }

View File

@ -0,0 +1,3 @@
desugar
tests/golden_tests/cli/desugar_linearize_matches_extra.hvm
-Olinearize-matches-extra

View File

@ -0,0 +1 @@
main = λa λb λc match a { 0: b; 1+: c }

View File

@ -0,0 +1,3 @@
desugar
tests/golden_tests/cli/desugar_merge.hvm
-Omerge

View File

@ -0,0 +1,4 @@
F = @t @f f
Z = @s @z z
main = (F)

View File

@ -0,0 +1,3 @@
desugar
tests/golden_tests/cli/desugar_prune.hvm
-Oprune

View File

@ -0,0 +1,3 @@
id x = x
main = *

View File

@ -0,0 +1,3 @@
desugar
tests/golden_tests/cli/desugar_ref_to_ref.hvm
-Oref-to-ref

View File

@ -0,0 +1,5 @@
Foo = λ* 0
Bar = Foo
Main = (Bar *)

View File

@ -0,0 +1,3 @@
desugar
tests/golden_tests/cli/desugar_simplify_main.hvm
-Osimplify-main

View File

@ -0,0 +1,3 @@
id = λx x
main = id

View File

@ -0,0 +1,4 @@
run
tests/golden_tests/cli/run_add.hvm
3
6

View File

@ -0,0 +1 @@
main a b = (+ a b)

View File

@ -0,0 +1,10 @@
---
source: tests/golden_tests.rs
input_file: tests/golden_tests/cli/compile_all.hvm
---
@Pair = (a (b {2 {2 a {2 b c}} c}))
@Pair.get = (a ({2 @Pair.get$S0 (a b)} b))
@Pair.get$S0 = {2 a {2 b ((a (b c)) c)}}
@main = a
& @Pair.get ~ ((<+ b c> (b c)) (d a))
& @Pair ~ (#40 (#2 d))

View File

@ -0,0 +1,5 @@
---
source: tests/golden_tests.rs
input_file: tests/golden_tests/cli/compile_no_opts.hvm
---
@main = *

View File

@ -0,0 +1,9 @@
---
source: tests/golden_tests.rs
input_file: tests/golden_tests/cli/compile_pre_reduce.hvm
---
Warnings:
Unused definition 'I'.
@I = #5
@main = *

View File

@ -0,0 +1,10 @@
---
source: tests/golden_tests.rs
input_file: tests/golden_tests/cli/compile_wrong_opt.hvm
---
error: invalid value 'foo' for '-O <COMP_OPTS>'
[possible values: all, no-all, eta, no-eta, prune, no-prune, ref-to-ref, no-ref-to-ref, pre-reduce, no-pre-reduce, linearize-matches, linearize-matches-extra, no-linearize-matches, float-combinators, no-float-combinators, simplify-main, no-simplify-main, merge, no-merge, inline, no-inline, adt-scott, adt-tagged-scott]
tip: a similar value exists: 'float-combinators'
For more information, try '--help'.

View File

@ -0,0 +1,9 @@
---
source: tests/golden_tests.rs
input_file: tests/golden_tests/cli/desugar_bool_scott.hvm
---
(main) = True
(False) = λ* λb b
(True) = λa λ* a

View File

@ -0,0 +1,9 @@
---
source: tests/golden_tests.rs
input_file: tests/golden_tests/cli/desugar_bool_tagged.hvm
---
(main) = True
(False) = #Boolean λ* #Boolean λb b
(True) = #Boolean λa #Boolean λ* a

View File

@ -0,0 +1,9 @@
---
source: tests/golden_tests.rs
input_file: tests/golden_tests/cli/desugar_eta.hvm
---
(id) = λa a
(id2) = id
(main) = (id2 42)

View File

@ -0,0 +1,13 @@
---
source: tests/golden_tests.rs
input_file: tests/golden_tests/cli/desugar_float_combinators.hvm
---
(Z) = λ* λb b
(S) = λa λb let {b b_2} = b; λc (b (a b_2 c))
(get) = λa (a get$S0 0)
(main) = (get (S (S Z)))
(get$S0) = λb (+ b 1)

View File

@ -0,0 +1,7 @@
---
source: tests/golden_tests.rs
input_file: tests/golden_tests/cli/desugar_inline.hvm
---
(id) = λa a
(main) = (λa a λa a)

View File

@ -0,0 +1,5 @@
---
source: tests/golden_tests.rs
input_file: tests/golden_tests/cli/desugar_linearize_matches.hvm
---
(main) = λa λb (match a { 0: λc c; 1+: λ* λf f } b)

View File

@ -0,0 +1,5 @@
---
source: tests/golden_tests.rs
input_file: tests/golden_tests/cli/desugar_linearize_matches_extra.hvm
---
(main) = λa λb λc (match a { 0: λd λ* d; 1+: λ* λ* λi i } b c)

View File

@ -0,0 +1,7 @@
---
source: tests/golden_tests.rs
input_file: tests/golden_tests/cli/desugar_merge.hvm
---
(F_$_Z) = λ* λb b
(main) = F_$_Z

View File

@ -0,0 +1,5 @@
---
source: tests/golden_tests.rs
input_file: tests/golden_tests/cli/desugar_prune.hvm
---
(main) = *

View File

@ -0,0 +1,9 @@
---
source: tests/golden_tests.rs
input_file: tests/golden_tests/cli/desugar_ref_to_ref.hvm
---
(Foo) = λ* 0
(Bar) = Foo
(Main) = (Foo *)

View File

@ -0,0 +1,7 @@
---
source: tests/golden_tests.rs
input_file: tests/golden_tests/cli/desugar_simplify_main.hvm
---
(id) = λa a
(main) = λa a

View File

@ -0,0 +1,5 @@
---
source: tests/golden_tests.rs
input_file: tests/golden_tests/cli/run_add.hvm
---
9