diff options
author | Vincent Ambo <mail@tazj.in> | 2022-08-10T16·31+0300 |
---|---|---|
committer | tazjin <tazjin@tvl.su> | 2022-08-24T23·11+0000 |
commit | 96e9f750c59153f8d6353e3831ffd55ea810d08a (patch) | |
tree | 5ab8ad97e9c94122a6f038c4082454807db51070 /tvix/eval/src/tests | |
parent | 3671056640dc2dfe339bbb044c7bccca2ada9901 (diff) |
test(tvix/eval): add identity tests for literal evaluation r/4467
Change-Id: Id3f37fbe341e15e9428ef1d579d61a514232c0e8 Reviewed-on: https://cl.tvl.fyi/c/depot/+/6132 Tested-by: BuildkiteCI Reviewed-by: grfn <grfn@gws.fyi>
Diffstat (limited to 'tvix/eval/src/tests')
19 files changed, 56 insertions, 2 deletions
diff --git a/tvix/eval/src/tests/mod.rs b/tvix/eval/src/tests/mod.rs index 75b3d9bb7c68..c51acfab976f 100644 --- a/tvix/eval/src/tests/mod.rs +++ b/tvix/eval/src/tests/mod.rs @@ -2,14 +2,32 @@ use crate::eval::interpret; use test_generator::test_resources; +// identity-* tests contain Nix code snippets which should evaluate to +// themselves exactly (i.e. literals). +#[test_resources("src/tests/tvix_tests/identity-*.nix")] +fn identity(code_path: &str) { + let code = std::fs::read_to_string(code_path).expect("should be able to read test code"); + + let result = interpret(&code).expect("evaluation of identity test should succeed"); + let result_str = format!("{}", result); + + assert_eq!( + code.trim(), + result_str, + "result value representation (right) must match expectation (left)" + ) +} + // eval-okay-* tests contain a snippet of Nix code, and an expectation // of the produced string output of the evaluator. // // These evaluations are always supposed to succeed, i.e. all snippets // are guaranteed to be valid Nix code. + +// eval-okay-* tests from the original Nix test suite. #[cfg(feature = "nix_tests")] #[test_resources("src/tests/nix_tests/eval-okay-*.nix")] -fn eval_okay(code_path: &str) { +fn nix_eval_okay(code_path: &str) { let base = code_path .strip_suffix("nix") .expect("test files always end in .nix"); @@ -24,6 +42,6 @@ fn eval_okay(code_path: &str) { assert_eq!( exp.trim(), result_str, - "result value (and its representation) must match expectation" + "result value representation (right) must match expectation (left)" ); } diff --git a/tvix/eval/src/tests/tvix_tests/README.md b/tvix/eval/src/tests/tvix_tests/README.md new file mode 100644 index 000000000000..b493aa81f12f --- /dev/null +++ b/tvix/eval/src/tests/tvix_tests/README.md @@ -0,0 +1,19 @@ +These tests are "native" to Tvix and exist in addition to the Nix test +suite. + +All of these are straightforward code snippets which are expected to +produce a certain result. + +# `identity-*` tests + +Files named `identity-*.nix` contain code that is supposed to produce +itself exactly after evaluation. + +These are useful for testing literals. + +# `eval-okay-*` tests + +Files named `eval-okay-*.nix` contain code which is supposed to +evaluate to the output in the corresponding `eval-okay-*.exp` file. + +This convention is taken from the original Nix test suite. diff --git a/tvix/eval/src/tests/tvix_tests/identity-bool-false.nix b/tvix/eval/src/tests/tvix_tests/identity-bool-false.nix new file mode 100644 index 000000000000..c508d5366f70 --- /dev/null +++ b/tvix/eval/src/tests/tvix_tests/identity-bool-false.nix @@ -0,0 +1 @@ +false diff --git a/tvix/eval/src/tests/tvix_tests/identity-bool-true.nix b/tvix/eval/src/tests/tvix_tests/identity-bool-true.nix new file mode 100644 index 000000000000..27ba77ddaf61 --- /dev/null +++ b/tvix/eval/src/tests/tvix_tests/identity-bool-true.nix @@ -0,0 +1 @@ +true diff --git a/tvix/eval/src/tests/tvix_tests/identity-empty-attrs.nix b/tvix/eval/src/tests/tvix_tests/identity-empty-attrs.nix new file mode 100644 index 000000000000..ffcd4415b08f --- /dev/null +++ b/tvix/eval/src/tests/tvix_tests/identity-empty-attrs.nix @@ -0,0 +1 @@ +{ } diff --git a/tvix/eval/src/tests/tvix_tests/identity-empty-list.nix b/tvix/eval/src/tests/tvix_tests/identity-empty-list.nix new file mode 100644 index 000000000000..1e3ec7217afb --- /dev/null +++ b/tvix/eval/src/tests/tvix_tests/identity-empty-list.nix @@ -0,0 +1 @@ +[ ] diff --git a/tvix/eval/src/tests/tvix_tests/identity-flat-attrs.nix b/tvix/eval/src/tests/tvix_tests/identity-flat-attrs.nix new file mode 100644 index 000000000000..e7c2ae18a661 --- /dev/null +++ b/tvix/eval/src/tests/tvix_tests/identity-flat-attrs.nix @@ -0,0 +1 @@ +{ a = 15; b = "string"; c = null; } diff --git a/tvix/eval/src/tests/tvix_tests/identity-float.nix b/tvix/eval/src/tests/tvix_tests/identity-float.nix new file mode 100644 index 000000000000..bf77d549685a --- /dev/null +++ b/tvix/eval/src/tests/tvix_tests/identity-float.nix @@ -0,0 +1 @@ +4.2 diff --git a/tvix/eval/src/tests/tvix_tests/identity-heterogeneous-list.nix b/tvix/eval/src/tests/tvix_tests/identity-heterogeneous-list.nix new file mode 100644 index 000000000000..87f7fb0d0668 --- /dev/null +++ b/tvix/eval/src/tests/tvix_tests/identity-heterogeneous-list.nix @@ -0,0 +1 @@ +[ 1 2.1 "three" null ] diff --git a/tvix/eval/src/tests/tvix_tests/identity-homogeneous-float-list.nix b/tvix/eval/src/tests/tvix_tests/identity-homogeneous-float-list.nix new file mode 100644 index 000000000000..48e6655fb169 --- /dev/null +++ b/tvix/eval/src/tests/tvix_tests/identity-homogeneous-float-list.nix @@ -0,0 +1 @@ +[ 4.2 6.9 13.37 ] diff --git a/tvix/eval/src/tests/tvix_tests/identity-homogeneous-int-list.nix b/tvix/eval/src/tests/tvix_tests/identity-homogeneous-int-list.nix new file mode 100644 index 000000000000..d23a5c38147b --- /dev/null +++ b/tvix/eval/src/tests/tvix_tests/identity-homogeneous-int-list.nix @@ -0,0 +1 @@ +[ 0 1 2 3 4 5 7 8 9 ] diff --git a/tvix/eval/src/tests/tvix_tests/identity-homogeneous-string-list.nix b/tvix/eval/src/tests/tvix_tests/identity-homogeneous-string-list.nix new file mode 100644 index 000000000000..d78a54e5b002 --- /dev/null +++ b/tvix/eval/src/tests/tvix_tests/identity-homogeneous-string-list.nix @@ -0,0 +1 @@ +[ "string" "list" ] diff --git a/tvix/eval/src/tests/tvix_tests/identity-int.nix b/tvix/eval/src/tests/tvix_tests/identity-int.nix new file mode 100644 index 000000000000..d81cc0710eb6 --- /dev/null +++ b/tvix/eval/src/tests/tvix_tests/identity-int.nix @@ -0,0 +1 @@ +42 diff --git a/tvix/eval/src/tests/tvix_tests/identity-kv-attrs.nix b/tvix/eval/src/tests/tvix_tests/identity-kv-attrs.nix new file mode 100644 index 000000000000..f1398b8d0592 --- /dev/null +++ b/tvix/eval/src/tests/tvix_tests/identity-kv-attrs.nix @@ -0,0 +1 @@ +{ name = "foo"; value = 12; } diff --git a/tvix/eval/src/tests/tvix_tests/identity-nested-attrs.nix b/tvix/eval/src/tests/tvix_tests/identity-nested-attrs.nix new file mode 100644 index 000000000000..6a139452ef28 --- /dev/null +++ b/tvix/eval/src/tests/tvix_tests/identity-nested-attrs.nix @@ -0,0 +1 @@ +{ a = { b = null; }; } diff --git a/tvix/eval/src/tests/tvix_tests/identity-null.nix b/tvix/eval/src/tests/tvix_tests/identity-null.nix new file mode 100644 index 000000000000..19765bd501b6 --- /dev/null +++ b/tvix/eval/src/tests/tvix_tests/identity-null.nix @@ -0,0 +1 @@ +null diff --git a/tvix/eval/src/tests/tvix_tests/identity-signed-float.nix b/tvix/eval/src/tests/tvix_tests/identity-signed-float.nix new file mode 100644 index 000000000000..50c9d06aa52c --- /dev/null +++ b/tvix/eval/src/tests/tvix_tests/identity-signed-float.nix @@ -0,0 +1 @@ +-4.2 diff --git a/tvix/eval/src/tests/tvix_tests/identity-signed-int.nix b/tvix/eval/src/tests/tvix_tests/identity-signed-int.nix new file mode 100644 index 000000000000..6a0e60d48b17 --- /dev/null +++ b/tvix/eval/src/tests/tvix_tests/identity-signed-int.nix @@ -0,0 +1 @@ +-42 diff --git a/tvix/eval/src/tests/tvix_tests/identity-string.nix b/tvix/eval/src/tests/tvix_tests/identity-string.nix new file mode 100644 index 000000000000..d71ddbcf823f --- /dev/null +++ b/tvix/eval/src/tests/tvix_tests/identity-string.nix @@ -0,0 +1 @@ +"test string" |