diff --git a/crates/nargo_cli/build.rs b/crates/nargo_cli/build.rs index 68ae2b31efd..2a3b80b3ab6 100644 --- a/crates/nargo_cli/build.rs +++ b/crates/nargo_cli/build.rs @@ -40,7 +40,7 @@ fn main() { let test_dir = manifest_dir.join("tests"); generate_execution_success_tests(&mut test_file, &test_dir); - generate_compile_success_tests(&mut test_file, &test_dir); + generate_compile_success_empty_tests(&mut test_file, &test_dir); generate_compile_failure_tests(&mut test_file, &test_dir); } @@ -81,8 +81,8 @@ fn execution_success_{test_name}() {{ } } -fn generate_compile_success_tests(test_file: &mut File, test_data_dir: &Path) { - let test_sub_dir = "compile_success"; +fn generate_compile_success_empty_tests(test_file: &mut File, test_data_dir: &Path) { + let test_sub_dir = "compile_success_empty"; let test_data_dir = test_data_dir.join(test_sub_dir); let test_case_dirs = @@ -102,14 +102,14 @@ fn generate_compile_success_tests(test_file: &mut File, test_data_dir: &Path) { test_file, r#" #[test] -fn compile_success_{test_name}() {{ +fn compile_success_empty_{test_name}() {{ let test_program_dir = PathBuf::from("{test_dir}"); let mut cmd = Command::cargo_bin("nargo").unwrap(); cmd.arg("--program-dir").arg(test_program_dir); cmd.arg("info"); - // `compile_success` tests should be able to compile down to an empty circuit. + // `compile_success_empty` tests should be able to compile down to an empty circuit. cmd.assert().stdout(predicate::str::contains("| Package") .and(predicate::str::contains("| Language")) .and(predicate::str::contains("| ACIR Opcodes | Backend Circuit Size |")) diff --git a/crates/nargo_cli/tests/README.md b/crates/nargo_cli/tests/README.md new file mode 100644 index 00000000000..5ead2e4c4ed --- /dev/null +++ b/crates/nargo_cli/tests/README.md @@ -0,0 +1,38 @@ +# Integration test directory structure + +Integration tests for the Noir compiler are broken down into the following directories: + +- `compile_failure`: programs which are not valid or unsatisfiable Noir code and so the compiler should reject. +- `compile_success_empty`: programs which are valid satisfiable Noir code but have no opcodes. +- `execution_success`: programs which are valid Noir satisfiable code and have opcodes. + +The current testing flow can be thought of as shown: +```mermaid +flowchart TD + + subgraph compile_failure + A1[Attempt to compile] --> A2[Assert compilation fails] + end + + subgraph compile_success_empty + B1[Attempt to compile] --> B2[Assert compilation succeeds] + B2 --> B3[Assert empty circuit] + end + + subgraph execution_success + C1[Attempt to compile] --> C2[Assert compilation succeeds] + C2 --> C3[Write circuit to file] + C3 --> C4[Assert execution succeeds] + C4 --> C5[Write witness to file] + + C6[Publish witness + circuit as artifact] + C3 --> C6 + C5 --> C6 + end +``` + +## `execution_success` vs `compile_success_empty` + +Note that `execution_success` and `compile_success_empty` are distinct as `compile_success_empty` is expected to compile down to an empty circuit. This may not be possible for some argument-less circuits in the situation where instructions have side-effects or certain compiler optimizations are missing, but once moved to `compile_success_empty` a program compiling down to a non-empty circuit is a compiler regression. + + diff --git a/crates/nargo_cli/tests/compile_success/comptime_sort/Nargo.toml b/crates/nargo_cli/tests/compile_success_empty/comptime_sort/Nargo.toml similarity index 100% rename from crates/nargo_cli/tests/compile_success/comptime_sort/Nargo.toml rename to crates/nargo_cli/tests/compile_success_empty/comptime_sort/Nargo.toml diff --git a/crates/nargo_cli/tests/compile_success/comptime_sort/src/main.nr b/crates/nargo_cli/tests/compile_success_empty/comptime_sort/src/main.nr similarity index 100% rename from crates/nargo_cli/tests/compile_success/comptime_sort/src/main.nr rename to crates/nargo_cli/tests/compile_success_empty/comptime_sort/src/main.nr diff --git a/crates/nargo_cli/tests/compile_success/ec_baby_jubjub/Nargo.toml b/crates/nargo_cli/tests/compile_success_empty/ec_baby_jubjub/Nargo.toml similarity index 100% rename from crates/nargo_cli/tests/compile_success/ec_baby_jubjub/Nargo.toml rename to crates/nargo_cli/tests/compile_success_empty/ec_baby_jubjub/Nargo.toml diff --git a/crates/nargo_cli/tests/compile_success/ec_baby_jubjub/src/main.nr b/crates/nargo_cli/tests/compile_success_empty/ec_baby_jubjub/src/main.nr similarity index 100% rename from crates/nargo_cli/tests/compile_success/ec_baby_jubjub/src/main.nr rename to crates/nargo_cli/tests/compile_success_empty/ec_baby_jubjub/src/main.nr diff --git a/crates/nargo_cli/tests/compile_success/higher_order_fn_selector/Nargo.toml b/crates/nargo_cli/tests/compile_success_empty/higher_order_fn_selector/Nargo.toml similarity index 100% rename from crates/nargo_cli/tests/compile_success/higher_order_fn_selector/Nargo.toml rename to crates/nargo_cli/tests/compile_success_empty/higher_order_fn_selector/Nargo.toml diff --git a/crates/nargo_cli/tests/compile_success/higher_order_fn_selector/src/main.nr b/crates/nargo_cli/tests/compile_success_empty/higher_order_fn_selector/src/main.nr similarity index 100% rename from crates/nargo_cli/tests/compile_success/higher_order_fn_selector/src/main.nr rename to crates/nargo_cli/tests/compile_success_empty/higher_order_fn_selector/src/main.nr diff --git a/crates/nargo_cli/tests/compile_success/inner_outer_cl/Nargo.toml b/crates/nargo_cli/tests/compile_success_empty/inner_outer_cl/Nargo.toml similarity index 100% rename from crates/nargo_cli/tests/compile_success/inner_outer_cl/Nargo.toml rename to crates/nargo_cli/tests/compile_success_empty/inner_outer_cl/Nargo.toml diff --git a/crates/nargo_cli/tests/compile_success/inner_outer_cl/src/main.nr b/crates/nargo_cli/tests/compile_success_empty/inner_outer_cl/src/main.nr similarity index 100% rename from crates/nargo_cli/tests/compile_success/inner_outer_cl/src/main.nr rename to crates/nargo_cli/tests/compile_success_empty/inner_outer_cl/src/main.nr diff --git a/crates/nargo_cli/tests/compile_success/let_stmt/Nargo.toml b/crates/nargo_cli/tests/compile_success_empty/let_stmt/Nargo.toml similarity index 100% rename from crates/nargo_cli/tests/compile_success/let_stmt/Nargo.toml rename to crates/nargo_cli/tests/compile_success_empty/let_stmt/Nargo.toml diff --git a/crates/nargo_cli/tests/compile_success_empty/let_stmt/Prover.toml b/crates/nargo_cli/tests/compile_success_empty/let_stmt/Prover.toml new file mode 100644 index 00000000000..e69de29bb2d diff --git a/crates/nargo_cli/tests/compile_success/let_stmt/src/main.nr b/crates/nargo_cli/tests/compile_success_empty/let_stmt/src/main.nr similarity index 100% rename from crates/nargo_cli/tests/compile_success/let_stmt/src/main.nr rename to crates/nargo_cli/tests/compile_success_empty/let_stmt/src/main.nr diff --git a/crates/nargo_cli/tests/compile_success/numeric_generics/Nargo.toml b/crates/nargo_cli/tests/compile_success_empty/numeric_generics/Nargo.toml similarity index 100% rename from crates/nargo_cli/tests/compile_success/numeric_generics/Nargo.toml rename to crates/nargo_cli/tests/compile_success_empty/numeric_generics/Nargo.toml diff --git a/crates/nargo_cli/tests/compile_success_empty/numeric_generics/Prover.toml b/crates/nargo_cli/tests/compile_success_empty/numeric_generics/Prover.toml new file mode 100644 index 00000000000..e69de29bb2d diff --git a/crates/nargo_cli/tests/compile_success/numeric_generics/src/main.nr b/crates/nargo_cli/tests/compile_success_empty/numeric_generics/src/main.nr similarity index 100% rename from crates/nargo_cli/tests/compile_success/numeric_generics/src/main.nr rename to crates/nargo_cli/tests/compile_success_empty/numeric_generics/src/main.nr diff --git a/crates/nargo_cli/tests/compile_success/option/Nargo.toml b/crates/nargo_cli/tests/compile_success_empty/option/Nargo.toml similarity index 100% rename from crates/nargo_cli/tests/compile_success/option/Nargo.toml rename to crates/nargo_cli/tests/compile_success_empty/option/Nargo.toml diff --git a/crates/nargo_cli/tests/compile_success/option/src/main.nr b/crates/nargo_cli/tests/compile_success_empty/option/src/main.nr similarity index 100% rename from crates/nargo_cli/tests/compile_success/option/src/main.nr rename to crates/nargo_cli/tests/compile_success_empty/option/src/main.nr diff --git a/crates/nargo_cli/tests/compile_success/to_bits/Nargo.toml b/crates/nargo_cli/tests/compile_success_empty/to_bits/Nargo.toml similarity index 100% rename from crates/nargo_cli/tests/compile_success/to_bits/Nargo.toml rename to crates/nargo_cli/tests/compile_success_empty/to_bits/Nargo.toml diff --git a/crates/nargo_cli/tests/compile_success/to_bits/src/main.nr b/crates/nargo_cli/tests/compile_success_empty/to_bits/src/main.nr similarity index 100% rename from crates/nargo_cli/tests/compile_success/to_bits/src/main.nr rename to crates/nargo_cli/tests/compile_success_empty/to_bits/src/main.nr diff --git a/crates/nargo_cli/tests/compile_success/unit/Nargo.toml b/crates/nargo_cli/tests/compile_success_empty/unit/Nargo.toml similarity index 100% rename from crates/nargo_cli/tests/compile_success/unit/Nargo.toml rename to crates/nargo_cli/tests/compile_success_empty/unit/Nargo.toml diff --git a/crates/nargo_cli/tests/compile_success/unit/src/main.nr b/crates/nargo_cli/tests/compile_success_empty/unit/src/main.nr similarity index 100% rename from crates/nargo_cli/tests/compile_success/unit/src/main.nr rename to crates/nargo_cli/tests/compile_success_empty/unit/src/main.nr diff --git a/crates/nargo_cli/tests/compile_success/unused_variables/Nargo.toml b/crates/nargo_cli/tests/compile_success_empty/unused_variables/Nargo.toml similarity index 100% rename from crates/nargo_cli/tests/compile_success/unused_variables/Nargo.toml rename to crates/nargo_cli/tests/compile_success_empty/unused_variables/Nargo.toml diff --git a/crates/nargo_cli/tests/compile_success/unused_variables/src/main.nr b/crates/nargo_cli/tests/compile_success_empty/unused_variables/src/main.nr similarity index 100% rename from crates/nargo_cli/tests/compile_success/unused_variables/src/main.nr rename to crates/nargo_cli/tests/compile_success_empty/unused_variables/src/main.nr