mirror of
https://github.com/HigherOrderCO/Bend.git
synced 2024-11-05 04:51:40 +03:00
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:
commit
12f4806b82
@ -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)))
|
||||
})
|
||||
}
|
||||
|
3
tests/golden_tests/cli/compile_all.args
Normal file
3
tests/golden_tests/cli/compile_all.args
Normal file
@ -0,0 +1,3 @@
|
||||
compile
|
||||
tests/golden_tests/cli/compile_all.hvm
|
||||
-Oall
|
6
tests/golden_tests/cli/compile_all.hvm
Normal file
6
tests/golden_tests/cli/compile_all.hvm
Normal 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))
|
11
tests/golden_tests/cli/compile_no_opts.args
Normal file
11
tests/golden_tests/cli/compile_no_opts.args
Normal 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
|
1
tests/golden_tests/cli/compile_no_opts.hvm
Normal file
1
tests/golden_tests/cli/compile_no_opts.hvm
Normal file
@ -0,0 +1 @@
|
||||
main = *
|
3
tests/golden_tests/cli/compile_pre_reduce.args
Normal file
3
tests/golden_tests/cli/compile_pre_reduce.args
Normal file
@ -0,0 +1,3 @@
|
||||
compile
|
||||
tests/golden_tests/cli/compile_pre_reduce.hvm
|
||||
-Opre-reduce
|
3
tests/golden_tests/cli/compile_pre_reduce.hvm
Normal file
3
tests/golden_tests/cli/compile_pre_reduce.hvm
Normal file
@ -0,0 +1,3 @@
|
||||
I = (+ 2 3)
|
||||
|
||||
main = *
|
3
tests/golden_tests/cli/compile_wrong_opt.args
Normal file
3
tests/golden_tests/cli/compile_wrong_opt.args
Normal file
@ -0,0 +1,3 @@
|
||||
compile
|
||||
tests/golden_tests/cli/compile_wrong_opt.hvm
|
||||
-Ofoo
|
1
tests/golden_tests/cli/compile_wrong_opt.hvm
Normal file
1
tests/golden_tests/cli/compile_wrong_opt.hvm
Normal file
@ -0,0 +1 @@
|
||||
main = *
|
3
tests/golden_tests/cli/desugar_bool_scott.args
Normal file
3
tests/golden_tests/cli/desugar_bool_scott.args
Normal file
@ -0,0 +1,3 @@
|
||||
desugar
|
||||
tests/golden_tests/cli/desugar_bool_scott.hvm
|
||||
-Oadt-scott
|
3
tests/golden_tests/cli/desugar_bool_scott.hvm
Normal file
3
tests/golden_tests/cli/desugar_bool_scott.hvm
Normal file
@ -0,0 +1,3 @@
|
||||
data Boolean = True | False
|
||||
|
||||
main = True
|
3
tests/golden_tests/cli/desugar_bool_tagged.args
Normal file
3
tests/golden_tests/cli/desugar_bool_tagged.args
Normal file
@ -0,0 +1,3 @@
|
||||
desugar
|
||||
tests/golden_tests/cli/desugar_bool_tagged.hvm
|
||||
-Oadt-tagged-scott
|
3
tests/golden_tests/cli/desugar_bool_tagged.hvm
Normal file
3
tests/golden_tests/cli/desugar_bool_tagged.hvm
Normal file
@ -0,0 +1,3 @@
|
||||
data Boolean = True | False
|
||||
|
||||
main = True
|
3
tests/golden_tests/cli/desugar_eta.args
Normal file
3
tests/golden_tests/cli/desugar_eta.args
Normal file
@ -0,0 +1,3 @@
|
||||
desugar
|
||||
tests/golden_tests/cli/desugar_eta.hvm
|
||||
-Oeta
|
4
tests/golden_tests/cli/desugar_eta.hvm
Normal file
4
tests/golden_tests/cli/desugar_eta.hvm
Normal file
@ -0,0 +1,4 @@
|
||||
id x = x
|
||||
id2 x = (id x)
|
||||
|
||||
main = (id2 42)
|
3
tests/golden_tests/cli/desugar_float_combinators.args
Normal file
3
tests/golden_tests/cli/desugar_float_combinators.args
Normal file
@ -0,0 +1,3 @@
|
||||
desugar
|
||||
tests/golden_tests/cli/desugar_float_combinators.hvm
|
||||
-Ofloat-combinators
|
6
tests/golden_tests/cli/desugar_float_combinators.hvm
Normal file
6
tests/golden_tests/cli/desugar_float_combinators.hvm
Normal 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)))
|
3
tests/golden_tests/cli/desugar_inline.args
Normal file
3
tests/golden_tests/cli/desugar_inline.args
Normal file
@ -0,0 +1,3 @@
|
||||
desugar
|
||||
tests/golden_tests/cli/desugar_inline.hvm
|
||||
-Oinline
|
3
tests/golden_tests/cli/desugar_inline.hvm
Normal file
3
tests/golden_tests/cli/desugar_inline.hvm
Normal file
@ -0,0 +1,3 @@
|
||||
id x = x
|
||||
|
||||
main = (id id)
|
3
tests/golden_tests/cli/desugar_linearize_matches.args
Normal file
3
tests/golden_tests/cli/desugar_linearize_matches.args
Normal file
@ -0,0 +1,3 @@
|
||||
desugar
|
||||
tests/golden_tests/cli/desugar_linearize_matches.hvm
|
||||
-Olinearize-matches
|
1
tests/golden_tests/cli/desugar_linearize_matches.hvm
Normal file
1
tests/golden_tests/cli/desugar_linearize_matches.hvm
Normal file
@ -0,0 +1 @@
|
||||
main = λa λb match a { 0: b; 1+: b }
|
@ -0,0 +1,3 @@
|
||||
desugar
|
||||
tests/golden_tests/cli/desugar_linearize_matches_extra.hvm
|
||||
-Olinearize-matches-extra
|
@ -0,0 +1 @@
|
||||
main = λa λb λc match a { 0: b; 1+: c }
|
3
tests/golden_tests/cli/desugar_merge.args
Normal file
3
tests/golden_tests/cli/desugar_merge.args
Normal file
@ -0,0 +1,3 @@
|
||||
desugar
|
||||
tests/golden_tests/cli/desugar_merge.hvm
|
||||
-Omerge
|
4
tests/golden_tests/cli/desugar_merge.hvm
Normal file
4
tests/golden_tests/cli/desugar_merge.hvm
Normal file
@ -0,0 +1,4 @@
|
||||
F = @t @f f
|
||||
Z = @s @z z
|
||||
|
||||
main = (F)
|
3
tests/golden_tests/cli/desugar_prune.args
Normal file
3
tests/golden_tests/cli/desugar_prune.args
Normal file
@ -0,0 +1,3 @@
|
||||
desugar
|
||||
tests/golden_tests/cli/desugar_prune.hvm
|
||||
-Oprune
|
3
tests/golden_tests/cli/desugar_prune.hvm
Normal file
3
tests/golden_tests/cli/desugar_prune.hvm
Normal file
@ -0,0 +1,3 @@
|
||||
id x = x
|
||||
|
||||
main = *
|
3
tests/golden_tests/cli/desugar_ref_to_ref.args
Normal file
3
tests/golden_tests/cli/desugar_ref_to_ref.args
Normal file
@ -0,0 +1,3 @@
|
||||
desugar
|
||||
tests/golden_tests/cli/desugar_ref_to_ref.hvm
|
||||
-Oref-to-ref
|
5
tests/golden_tests/cli/desugar_ref_to_ref.hvm
Normal file
5
tests/golden_tests/cli/desugar_ref_to_ref.hvm
Normal file
@ -0,0 +1,5 @@
|
||||
Foo = λ* 0
|
||||
|
||||
Bar = Foo
|
||||
|
||||
Main = (Bar *)
|
3
tests/golden_tests/cli/desugar_simplify_main.args
Normal file
3
tests/golden_tests/cli/desugar_simplify_main.args
Normal file
@ -0,0 +1,3 @@
|
||||
desugar
|
||||
tests/golden_tests/cli/desugar_simplify_main.hvm
|
||||
-Osimplify-main
|
3
tests/golden_tests/cli/desugar_simplify_main.hvm
Normal file
3
tests/golden_tests/cli/desugar_simplify_main.hvm
Normal file
@ -0,0 +1,3 @@
|
||||
id = λx x
|
||||
|
||||
main = id
|
4
tests/golden_tests/cli/run_add.args
Normal file
4
tests/golden_tests/cli/run_add.args
Normal file
@ -0,0 +1,4 @@
|
||||
run
|
||||
tests/golden_tests/cli/run_add.hvm
|
||||
3
|
||||
6
|
1
tests/golden_tests/cli/run_add.hvm
Normal file
1
tests/golden_tests/cli/run_add.hvm
Normal file
@ -0,0 +1 @@
|
||||
main a b = (+ a b)
|
10
tests/snapshots/cli__compile_all.hvm.snap
Normal file
10
tests/snapshots/cli__compile_all.hvm.snap
Normal 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))
|
5
tests/snapshots/cli__compile_no_opts.hvm.snap
Normal file
5
tests/snapshots/cli__compile_no_opts.hvm.snap
Normal file
@ -0,0 +1,5 @@
|
||||
---
|
||||
source: tests/golden_tests.rs
|
||||
input_file: tests/golden_tests/cli/compile_no_opts.hvm
|
||||
---
|
||||
@main = *
|
9
tests/snapshots/cli__compile_pre_reduce.hvm.snap
Normal file
9
tests/snapshots/cli__compile_pre_reduce.hvm.snap
Normal 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 = *
|
10
tests/snapshots/cli__compile_wrong_opt.hvm.snap
Normal file
10
tests/snapshots/cli__compile_wrong_opt.hvm.snap
Normal 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'.
|
9
tests/snapshots/cli__desugar_bool_scott.hvm.snap
Normal file
9
tests/snapshots/cli__desugar_bool_scott.hvm.snap
Normal 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
|
9
tests/snapshots/cli__desugar_bool_tagged.hvm.snap
Normal file
9
tests/snapshots/cli__desugar_bool_tagged.hvm.snap
Normal 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
|
9
tests/snapshots/cli__desugar_eta.hvm.snap
Normal file
9
tests/snapshots/cli__desugar_eta.hvm.snap
Normal 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)
|
13
tests/snapshots/cli__desugar_float_combinators.hvm.snap
Normal file
13
tests/snapshots/cli__desugar_float_combinators.hvm.snap
Normal 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)
|
7
tests/snapshots/cli__desugar_inline.hvm.snap
Normal file
7
tests/snapshots/cli__desugar_inline.hvm.snap
Normal 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)
|
5
tests/snapshots/cli__desugar_linearize_matches.hvm.snap
Normal file
5
tests/snapshots/cli__desugar_linearize_matches.hvm.snap
Normal 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)
|
@ -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)
|
7
tests/snapshots/cli__desugar_merge.hvm.snap
Normal file
7
tests/snapshots/cli__desugar_merge.hvm.snap
Normal 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
|
5
tests/snapshots/cli__desugar_prune.hvm.snap
Normal file
5
tests/snapshots/cli__desugar_prune.hvm.snap
Normal file
@ -0,0 +1,5 @@
|
||||
---
|
||||
source: tests/golden_tests.rs
|
||||
input_file: tests/golden_tests/cli/desugar_prune.hvm
|
||||
---
|
||||
(main) = *
|
9
tests/snapshots/cli__desugar_ref_to_ref.hvm.snap
Normal file
9
tests/snapshots/cli__desugar_ref_to_ref.hvm.snap
Normal 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 *)
|
7
tests/snapshots/cli__desugar_simplify_main.hvm.snap
Normal file
7
tests/snapshots/cli__desugar_simplify_main.hvm.snap
Normal 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
|
5
tests/snapshots/cli__run_add.hvm.snap
Normal file
5
tests/snapshots/cli__run_add.hvm.snap
Normal file
@ -0,0 +1,5 @@
|
||||
---
|
||||
source: tests/golden_tests.rs
|
||||
input_file: tests/golden_tests/cli/run_add.hvm
|
||||
---
|
||||
9
|
Loading…
Reference in New Issue
Block a user