From 96e9f750c59153f8d6353e3831ffd55ea810d08a Mon Sep 17 00:00:00 2001 From: Vincent Ambo Date: Wed, 10 Aug 2022 19:31:18 +0300 Subject: test(tvix/eval): add identity tests for literal evaluation Change-Id: Id3f37fbe341e15e9428ef1d579d61a514232c0e8 Reviewed-on: https://cl.tvl.fyi/c/depot/+/6132 Tested-by: BuildkiteCI Reviewed-by: grfn --- tvix/eval/src/tests/mod.rs | 22 ++++++++++++++++++++-- tvix/eval/src/tests/tvix_tests/README.md | 19 +++++++++++++++++++ .../src/tests/tvix_tests/identity-bool-false.nix | 1 + .../src/tests/tvix_tests/identity-bool-true.nix | 1 + .../src/tests/tvix_tests/identity-empty-attrs.nix | 1 + .../src/tests/tvix_tests/identity-empty-list.nix | 1 + .../src/tests/tvix_tests/identity-flat-attrs.nix | 1 + tvix/eval/src/tests/tvix_tests/identity-float.nix | 1 + .../tvix_tests/identity-heterogeneous-list.nix | 1 + .../tvix_tests/identity-homogeneous-float-list.nix | 1 + .../tvix_tests/identity-homogeneous-int-list.nix | 1 + .../identity-homogeneous-string-list.nix | 1 + tvix/eval/src/tests/tvix_tests/identity-int.nix | 1 + .../src/tests/tvix_tests/identity-kv-attrs.nix | 1 + .../src/tests/tvix_tests/identity-nested-attrs.nix | 1 + tvix/eval/src/tests/tvix_tests/identity-null.nix | 1 + .../src/tests/tvix_tests/identity-signed-float.nix | 1 + .../src/tests/tvix_tests/identity-signed-int.nix | 1 + tvix/eval/src/tests/tvix_tests/identity-string.nix | 1 + 19 files changed, 56 insertions(+), 2 deletions(-) create mode 100644 tvix/eval/src/tests/tvix_tests/README.md create mode 100644 tvix/eval/src/tests/tvix_tests/identity-bool-false.nix create mode 100644 tvix/eval/src/tests/tvix_tests/identity-bool-true.nix create mode 100644 tvix/eval/src/tests/tvix_tests/identity-empty-attrs.nix create mode 100644 tvix/eval/src/tests/tvix_tests/identity-empty-list.nix create mode 100644 tvix/eval/src/tests/tvix_tests/identity-flat-attrs.nix create mode 100644 tvix/eval/src/tests/tvix_tests/identity-float.nix create mode 100644 tvix/eval/src/tests/tvix_tests/identity-heterogeneous-list.nix create mode 100644 tvix/eval/src/tests/tvix_tests/identity-homogeneous-float-list.nix create mode 100644 tvix/eval/src/tests/tvix_tests/identity-homogeneous-int-list.nix create mode 100644 tvix/eval/src/tests/tvix_tests/identity-homogeneous-string-list.nix create mode 100644 tvix/eval/src/tests/tvix_tests/identity-int.nix create mode 100644 tvix/eval/src/tests/tvix_tests/identity-kv-attrs.nix create mode 100644 tvix/eval/src/tests/tvix_tests/identity-nested-attrs.nix create mode 100644 tvix/eval/src/tests/tvix_tests/identity-null.nix create mode 100644 tvix/eval/src/tests/tvix_tests/identity-signed-float.nix create mode 100644 tvix/eval/src/tests/tvix_tests/identity-signed-int.nix create mode 100644 tvix/eval/src/tests/tvix_tests/identity-string.nix (limited to 'tvix/eval/src/tests') diff --git a/tvix/eval/src/tests/mod.rs b/tvix/eval/src/tests/mod.rs index 75b3d9bb7c..c51acfab97 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 0000000000..b493aa81f1 --- /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 0000000000..c508d5366f --- /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 0000000000..27ba77ddaf --- /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 0000000000..ffcd4415b0 --- /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 0000000000..1e3ec7217a --- /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 0000000000..e7c2ae18a6 --- /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 0000000000..bf77d54968 --- /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 0000000000..87f7fb0d06 --- /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 0000000000..48e6655fb1 --- /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 0000000000..d23a5c3814 --- /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 0000000000..d78a54e5b0 --- /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 0000000000..d81cc0710e --- /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 0000000000..f1398b8d05 --- /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 0000000000..6a139452ef --- /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 0000000000..19765bd501 --- /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 0000000000..50c9d06aa5 --- /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 0000000000..6a0e60d48b --- /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 0000000000..d71ddbcf82 --- /dev/null +++ b/tvix/eval/src/tests/tvix_tests/identity-string.nix @@ -0,0 +1 @@ +"test string" -- cgit 1.4.1