diff --git a/build.py b/build.py index 92f36c5fc4..4bffd4733c 100755 --- a/build.py +++ b/build.py @@ -214,18 +214,22 @@ def use_python_env(folder): step_end() if build_cli: - step_start("Building the command line compiler") - cargo_build_args = ["cargo", "build"] - if build_type == "release": - cargo_build_args.append("--release") - subprocess.run(cargo_build_args, check=True, text=True, cwd=root_dir) - if run_tests: - print("Running tests for the command line compiler") + step_start("Running Rust unit tests") cargo_test_args = ["cargo", "test"] if build_type == "release": cargo_test_args.append("--release") + # Disable LTO for release tests to speed up compilation + cargo_test_args.append("--config") + cargo_test_args.append('profile.release.lto="off"') subprocess.run(cargo_test_args, check=True, text=True, cwd=root_dir) + step_end() + + step_start("Building the command line compiler") + cargo_build_args = ["cargo", "build", "--bin", "qsc"] + if build_type == "release": + cargo_build_args.append("--release") + subprocess.run(cargo_build_args, check=True, text=True, cwd=root_dir) step_end() diff --git a/compiler/qsc/Cargo.toml b/compiler/qsc/Cargo.toml index bb34ddb6ed..2ac3c7b98e 100644 --- a/compiler/qsc/Cargo.toml +++ b/compiler/qsc/Cargo.toml @@ -51,14 +51,17 @@ doctest = false [[bin]] name = "qsc" bench = false +test = false [[bin]] name = "qsi" bench = false +test = false [[bin]] name = "memtest" bench = false +test = false [[bench]] name = "large" diff --git a/compiler/qsc_formatter/Cargo.toml b/compiler/qsc_formatter/Cargo.toml index dcb40ad17a..0a1dc450fb 100644 --- a/compiler/qsc_formatter/Cargo.toml +++ b/compiler/qsc_formatter/Cargo.toml @@ -19,3 +19,9 @@ indoc = { workspace = true } [lib] doctest = false + +[[bin]] +name = "qsc_formatter" +bench = false +test = false + diff --git a/compiler/qsc_formatter/src/main.rs b/compiler/qsc_formatter/src/bin/qsc_formatter.rs similarity index 99% rename from compiler/qsc_formatter/src/main.rs rename to compiler/qsc_formatter/src/bin/qsc_formatter.rs index ca65e0ace8..99938b9d94 100644 --- a/compiler/qsc_formatter/src/main.rs +++ b/compiler/qsc_formatter/src/bin/qsc_formatter.rs @@ -1,14 +1,13 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. +use clap::{crate_version, Parser}; +use qsc_formatter::formatter::{calculate_format_edits, format_str}; use std::{ env, fmt::Display, path::{Path, PathBuf}, }; -mod formatter; -use clap::{crate_version, Parser}; -use formatter::{calculate_format_edits, format_str}; #[derive(Debug, Parser)] #[command(name = "fmt", version = crate_version!())] diff --git a/compiler/qsc_partial_eval/src/lib.rs b/compiler/qsc_partial_eval/src/lib.rs index 401abc5331..c0981367bb 100644 --- a/compiler/qsc_partial_eval/src/lib.rs +++ b/compiler/qsc_partial_eval/src/lib.rs @@ -5,6 +5,9 @@ //! It does this by evaluating all purely classical expressions and generating RIR instructions for expressions that are //! not purely classical. +#[cfg(test)] +mod tests; + mod evaluation_context; mod management; diff --git a/compiler/qsc_partial_eval/tests/test_utils.rs b/compiler/qsc_partial_eval/src/tests.rs similarity index 94% rename from compiler/qsc_partial_eval/tests/test_utils.rs rename to compiler/qsc_partial_eval/src/tests.rs index de75525e68..2205097542 100644 --- a/compiler/qsc_partial_eval/tests/test_utils.rs +++ b/compiler/qsc_partial_eval/src/tests.rs @@ -1,13 +1,29 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. +mod arrays; +mod assigns; +mod bindings; +mod branching; +mod calls; +mod classical_args; +mod dynamic_vars; +mod intrinsics; +mod loops; +mod misc; +mod operators; +mod output_recording; +mod qubits; +mod results; +mod returns; + +use crate::{partially_evaluate, Error, ProgramEntry}; use expect_test::Expect; use qsc::{incremental::Compiler, PackageType}; use qsc_data_structures::{language_features::LanguageFeatures, target::TargetCapabilityFlags}; use qsc_fir::fir::PackageStore; use qsc_frontend::compile::{PackageStore as HirPackageStore, SourceMap}; use qsc_lowerer::{map_hir_package_to_fir, Lowerer}; -use qsc_partial_eval::{partially_evaluate, Error, ProgramEntry}; use qsc_rca::{Analyzer, PackageStoreComputeProperties}; use qsc_rir::{ passes::check_and_transform, diff --git a/compiler/qsc_partial_eval/tests/arrays.rs b/compiler/qsc_partial_eval/src/tests/arrays.rs similarity index 99% rename from compiler/qsc_partial_eval/tests/arrays.rs rename to compiler/qsc_partial_eval/src/tests/arrays.rs index 8b9b736fec..a470378978 100644 --- a/compiler/qsc_partial_eval/tests/arrays.rs +++ b/compiler/qsc_partial_eval/src/tests/arrays.rs @@ -7,15 +7,13 @@ clippy::too_many_lines )] -pub mod test_utils; - -use expect_test::expect; -use indoc::indoc; -use qsc_rir::rir::{BlockId, CallableId}; -use test_utils::{ +use super::{ assert_block_instructions, assert_callable, assert_error, get_partial_evaluation_error, get_rir_program, }; +use expect_test::expect; +use indoc::indoc; +use qsc_rir::rir::{BlockId, CallableId}; #[test] fn array_with_dynamic_content() { diff --git a/compiler/qsc_partial_eval/tests/assigns.rs b/compiler/qsc_partial_eval/src/tests/assigns.rs similarity index 99% rename from compiler/qsc_partial_eval/tests/assigns.rs rename to compiler/qsc_partial_eval/src/tests/assigns.rs index ab10edad80..3a0e8e2ae3 100644 --- a/compiler/qsc_partial_eval/tests/assigns.rs +++ b/compiler/qsc_partial_eval/src/tests/assigns.rs @@ -7,15 +7,13 @@ clippy::too_many_lines )] -pub mod test_utils; - -use expect_test::expect; -use indoc::indoc; -use qsc_rir::rir::{BlockId, CallableId}; -use test_utils::{ +use super::{ assert_block_instructions, assert_blocks, assert_callable, assert_error, get_partial_evaluation_error, get_rir_program, }; +use expect_test::expect; +use indoc::indoc; +use qsc_rir::rir::{BlockId, CallableId}; #[test] fn assigning_result_literal_updates_value() { diff --git a/compiler/qsc_partial_eval/tests/bindings.rs b/compiler/qsc_partial_eval/src/tests/bindings.rs similarity index 99% rename from compiler/qsc_partial_eval/tests/bindings.rs rename to compiler/qsc_partial_eval/src/tests/bindings.rs index c55f568255..a669d879c8 100644 --- a/compiler/qsc_partial_eval/tests/bindings.rs +++ b/compiler/qsc_partial_eval/src/tests/bindings.rs @@ -7,12 +7,10 @@ clippy::too_many_lines )] -pub mod test_utils; - +use super::{assert_block_instructions, assert_blocks, assert_callable, get_rir_program}; use expect_test::expect; use indoc::indoc; use qsc_rir::rir::{BlockId, CallableId}; -use test_utils::{assert_block_instructions, assert_blocks, assert_callable, get_rir_program}; #[test] fn immutable_result_binding_does_not_generate_store_instruction() { diff --git a/compiler/qsc_partial_eval/tests/branching.rs b/compiler/qsc_partial_eval/src/tests/branching.rs similarity index 99% rename from compiler/qsc_partial_eval/tests/branching.rs rename to compiler/qsc_partial_eval/src/tests/branching.rs index 415cf9fcb3..a3cbf18104 100644 --- a/compiler/qsc_partial_eval/tests/branching.rs +++ b/compiler/qsc_partial_eval/src/tests/branching.rs @@ -7,14 +7,12 @@ clippy::too_many_lines )] -pub mod test_utils; - +use super::{ + assert_blocks, assert_callable, assert_error, get_partial_evaluation_error, get_rir_program, +}; use expect_test::expect; use indoc::indoc; use qsc_rir::rir::CallableId; -use test_utils::{ - assert_blocks, assert_callable, assert_error, get_partial_evaluation_error, get_rir_program, -}; #[test] fn if_expression_with_true_condition() { diff --git a/compiler/qsc_partial_eval/tests/calls.rs b/compiler/qsc_partial_eval/src/tests/calls.rs similarity index 99% rename from compiler/qsc_partial_eval/tests/calls.rs rename to compiler/qsc_partial_eval/src/tests/calls.rs index 515f64934c..9dfa3c7c77 100644 --- a/compiler/qsc_partial_eval/tests/calls.rs +++ b/compiler/qsc_partial_eval/src/tests/calls.rs @@ -7,17 +7,15 @@ clippy::too_many_lines )] -pub mod test_utils; - -use expect_test::expect; -use indoc::indoc; -use qsc::TargetCapabilityFlags; -use qsc_rir::rir::{BlockId, CallableId}; -use test_utils::{ +use super::{ assert_block_instructions, assert_blocks, assert_callable, assert_error, get_partial_evaluation_error_with_capabilities, get_rir_program, get_rir_program_with_capabilities, }; +use expect_test::expect; +use indoc::indoc; +use qsc::TargetCapabilityFlags; +use qsc_rir::rir::{BlockId, CallableId}; #[test] fn call_to_single_qubit_unitary_with_two_calls_to_the_same_intrinsic() { diff --git a/compiler/qsc_partial_eval/tests/classical_args.rs b/compiler/qsc_partial_eval/src/tests/classical_args.rs similarity index 97% rename from compiler/qsc_partial_eval/tests/classical_args.rs rename to compiler/qsc_partial_eval/src/tests/classical_args.rs index fd9bdbfc76..12179764c9 100644 --- a/compiler/qsc_partial_eval/tests/classical_args.rs +++ b/compiler/qsc_partial_eval/src/tests/classical_args.rs @@ -3,12 +3,10 @@ #![allow(clippy::needless_raw_string_hashes)] -pub mod test_utils; - +use super::{assert_block_instructions, assert_callable, get_rir_program}; use expect_test::expect; use indoc::indoc; use qsc_rir::rir::{BlockId, CallableId}; -use test_utils::{assert_block_instructions, assert_callable, get_rir_program}; #[test] fn call_to_intrinsic_operation_using_double_literal() { diff --git a/compiler/qsc_partial_eval/tests/dynamic_vars.rs b/compiler/qsc_partial_eval/src/tests/dynamic_vars.rs similarity index 97% rename from compiler/qsc_partial_eval/tests/dynamic_vars.rs rename to compiler/qsc_partial_eval/src/tests/dynamic_vars.rs index 8281c13844..d0b580f863 100644 --- a/compiler/qsc_partial_eval/tests/dynamic_vars.rs +++ b/compiler/qsc_partial_eval/src/tests/dynamic_vars.rs @@ -3,14 +3,10 @@ #![allow(clippy::needless_raw_string_hashes, clippy::similar_names)] -pub mod test_utils; - +use super::{assert_blocks, assert_callable, get_rir_program}; use expect_test::expect; use indoc::indoc; use qsc_rir::rir::CallableId; -use test_utils::{assert_callable, get_rir_program}; - -use crate::test_utils::assert_blocks; #[test] fn dynamic_int_from_if_expression_with_single_measurement_comparison_and_classical_blocks() { diff --git a/compiler/qsc_partial_eval/tests/intrinsics.rs b/compiler/qsc_partial_eval/src/tests/intrinsics.rs similarity index 99% rename from compiler/qsc_partial_eval/tests/intrinsics.rs rename to compiler/qsc_partial_eval/src/tests/intrinsics.rs index 6133f70d63..8cff8f37f3 100644 --- a/compiler/qsc_partial_eval/tests/intrinsics.rs +++ b/compiler/qsc_partial_eval/src/tests/intrinsics.rs @@ -3,12 +3,10 @@ #![allow(clippy::needless_raw_string_hashes)] -pub mod test_utils; - +use super::{assert_block_instructions, assert_blocks, assert_callable, get_rir_program}; use expect_test::{expect, Expect}; use indoc::{formatdoc, indoc}; use qsc_rir::rir::{BlockId, CallableId}; -use test_utils::{assert_block_instructions, assert_blocks, assert_callable, get_rir_program}; fn check_call_to_single_qubit_instrinsic_adds_callable_and_generates_instruction( intrinsic_name: &str, diff --git a/compiler/qsc_partial_eval/tests/loops.rs b/compiler/qsc_partial_eval/src/tests/loops.rs similarity index 99% rename from compiler/qsc_partial_eval/tests/loops.rs rename to compiler/qsc_partial_eval/src/tests/loops.rs index 47eda097df..22cc160891 100644 --- a/compiler/qsc_partial_eval/tests/loops.rs +++ b/compiler/qsc_partial_eval/src/tests/loops.rs @@ -3,12 +3,10 @@ #![allow(clippy::needless_raw_string_hashes)] -pub mod test_utils; - +use super::{assert_block_instructions, assert_callable, get_rir_program}; use expect_test::expect; use indoc::indoc; use qsc_rir::rir::{BlockId, CallableId}; -use test_utils::{assert_block_instructions, assert_callable, get_rir_program}; #[test] fn unitary_call_within_a_for_loop() { diff --git a/compiler/qsc_partial_eval/tests/misc.rs b/compiler/qsc_partial_eval/src/tests/misc.rs similarity index 99% rename from compiler/qsc_partial_eval/tests/misc.rs rename to compiler/qsc_partial_eval/src/tests/misc.rs index 417f45a6a7..d05ea68a2a 100644 --- a/compiler/qsc_partial_eval/tests/misc.rs +++ b/compiler/qsc_partial_eval/src/tests/misc.rs @@ -3,15 +3,13 @@ #![allow(clippy::needless_raw_string_hashes, clippy::similar_names)] -pub mod test_utils; - -use expect_test::expect; -use indoc::indoc; -use qsc_rir::rir::{BlockId, CallableId}; -use test_utils::{ +use super::{ assert_block_instructions, assert_blocks, assert_callable, assert_error, get_partial_evaluation_error, get_rir_program, }; +use expect_test::expect; +use indoc::indoc; +use qsc_rir::rir::{BlockId, CallableId}; #[test] fn unitary_call_within_an_if_with_classical_condition_within_a_for_loop() { diff --git a/compiler/qsc_partial_eval/tests/operators.rs b/compiler/qsc_partial_eval/src/tests/operators.rs similarity index 99% rename from compiler/qsc_partial_eval/tests/operators.rs rename to compiler/qsc_partial_eval/src/tests/operators.rs index 5cf801a3f1..393239d1e6 100644 --- a/compiler/qsc_partial_eval/tests/operators.rs +++ b/compiler/qsc_partial_eval/src/tests/operators.rs @@ -3,15 +3,13 @@ #![allow(clippy::needless_raw_string_hashes)] -pub mod test_utils; - -use expect_test::expect; -use indoc::indoc; -use qsc_rir::rir::{BlockId, CallableId}; -use test_utils::{ +use super::{ assert_block_instructions, assert_blocks, assert_callable, assert_error, get_partial_evaluation_error, get_rir_program, }; +use expect_test::expect; +use indoc::indoc; +use qsc_rir::rir::{BlockId, CallableId}; #[test] fn leading_positive_unary_operator_does_not_generate_rir_instruction() { diff --git a/compiler/qsc_partial_eval/tests/output_recording.rs b/compiler/qsc_partial_eval/src/tests/output_recording.rs similarity index 99% rename from compiler/qsc_partial_eval/tests/output_recording.rs rename to compiler/qsc_partial_eval/src/tests/output_recording.rs index f80524827c..126b54fb86 100644 --- a/compiler/qsc_partial_eval/tests/output_recording.rs +++ b/compiler/qsc_partial_eval/src/tests/output_recording.rs @@ -3,11 +3,9 @@ #![allow(clippy::needless_raw_string_hashes)] +use super::{assert_error, get_partial_evaluation_error, get_rir_program}; use expect_test::expect; use indoc::indoc; -use test_utils::{assert_error, get_partial_evaluation_error, get_rir_program}; - -pub mod test_utils; #[test] fn output_recording_for_tuple_of_different_types() { diff --git a/compiler/qsc_partial_eval/tests/qubits.rs b/compiler/qsc_partial_eval/src/tests/qubits.rs similarity index 98% rename from compiler/qsc_partial_eval/tests/qubits.rs rename to compiler/qsc_partial_eval/src/tests/qubits.rs index 172c8ae3d9..495772bd7a 100644 --- a/compiler/qsc_partial_eval/tests/qubits.rs +++ b/compiler/qsc_partial_eval/src/tests/qubits.rs @@ -3,12 +3,10 @@ #![allow(clippy::needless_raw_string_hashes)] -pub mod test_utils; - +use super::{assert_block_instructions, assert_callable, get_rir_program}; use expect_test::expect; use indoc::indoc; use qsc_rir::rir::{BlockId, CallableId}; -use test_utils::{assert_block_instructions, assert_callable, get_rir_program}; #[test] fn qubit_ids_are_correct_for_allocate_use_release_one_qubit() { diff --git a/compiler/qsc_partial_eval/tests/results.rs b/compiler/qsc_partial_eval/src/tests/results.rs similarity index 99% rename from compiler/qsc_partial_eval/tests/results.rs rename to compiler/qsc_partial_eval/src/tests/results.rs index f2d82b95fa..dd0e2a2df4 100644 --- a/compiler/qsc_partial_eval/tests/results.rs +++ b/compiler/qsc_partial_eval/src/tests/results.rs @@ -3,12 +3,10 @@ #![allow(clippy::needless_raw_string_hashes)] -pub mod test_utils; - +use super::{assert_block_instructions, assert_callable, get_rir_program}; use expect_test::expect; use indoc::indoc; use qsc_rir::rir::{BlockId, CallableId}; -use test_utils::{assert_block_instructions, assert_callable, get_rir_program}; #[test] fn result_ids_are_correct_for_measuring_and_resetting_one_qubit() { diff --git a/compiler/qsc_partial_eval/tests/returns.rs b/compiler/qsc_partial_eval/src/tests/returns.rs similarity index 99% rename from compiler/qsc_partial_eval/tests/returns.rs rename to compiler/qsc_partial_eval/src/tests/returns.rs index f8b5d5613d..8aeb6b3f6f 100644 --- a/compiler/qsc_partial_eval/tests/returns.rs +++ b/compiler/qsc_partial_eval/src/tests/returns.rs @@ -7,15 +7,13 @@ clippy::too_many_lines )] -pub mod test_utils; - -use expect_test::expect; -use indoc::indoc; -use qsc_rir::rir::{BlockId, CallableId}; -use test_utils::{ +use super::{ assert_block_instructions, assert_blocks, assert_callable, assert_error, get_partial_evaluation_error, get_rir_program, }; +use expect_test::expect; +use indoc::indoc; +use qsc_rir::rir::{BlockId, CallableId}; #[test] fn non_classical_entry_point_with_classical_implicit_return() { diff --git a/compiler/qsc_project/src/lib.rs b/compiler/qsc_project/src/lib.rs index 3f7c3baf3e..f8b2d34634 100644 --- a/compiler/qsc_project/src/lib.rs +++ b/compiler/qsc_project/src/lib.rs @@ -5,6 +5,9 @@ //! This includes locating a manifest file in the filesystem, loading and parsing //! the manifest, and determining which files are members of the project. +#[cfg(test)] +mod tests; + mod error; #[cfg(feature = "fs")] mod fs; diff --git a/compiler/qsc_project/tests/tests.rs b/compiler/qsc_project/src/tests.rs similarity index 100% rename from compiler/qsc_project/tests/tests.rs rename to compiler/qsc_project/src/tests.rs diff --git a/compiler/qsc_project/tests/harness.rs b/compiler/qsc_project/src/tests/harness.rs similarity index 90% rename from compiler/qsc_project/tests/harness.rs rename to compiler/qsc_project/src/tests/harness.rs index 34ea90dbee..774e273db1 100644 --- a/compiler/qsc_project/tests/harness.rs +++ b/compiler/qsc_project/src/tests/harness.rs @@ -7,8 +7,11 @@ use expect_test::Expect; use qsc_project::{FileSystem, Manifest, StdFs}; pub fn check(project_path: &PathBuf, expect: &Expect) { + // use the path to the src folder as the root path let mut root_path = PathBuf::from(env!("CARGO_MANIFEST_DIR")); - root_path.push(PathBuf::from("tests/projects")); + root_path.push("src"); + root_path.push("tests"); + root_path.push("projects"); let mut absolute_project_path = root_path.clone(); absolute_project_path.push(project_path); let manifest = Manifest::load_from_path(absolute_project_path) diff --git a/compiler/qsc_project/tests/projects/basic_manifest/qsharp.json b/compiler/qsc_project/src/tests/projects/basic_manifest/qsharp.json similarity index 100% rename from compiler/qsc_project/tests/projects/basic_manifest/qsharp.json rename to compiler/qsc_project/src/tests/projects/basic_manifest/qsharp.json diff --git a/compiler/qsc_project/tests/projects/basic_manifest/src/Dependency1.qs b/compiler/qsc_project/src/tests/projects/basic_manifest/src/Dependency1.qs similarity index 100% rename from compiler/qsc_project/tests/projects/basic_manifest/src/Dependency1.qs rename to compiler/qsc_project/src/tests/projects/basic_manifest/src/Dependency1.qs diff --git a/compiler/qsc_project/tests/projects/basic_manifest/src/Dependency2.qs b/compiler/qsc_project/src/tests/projects/basic_manifest/src/Dependency2.qs similarity index 100% rename from compiler/qsc_project/tests/projects/basic_manifest/src/Dependency2.qs rename to compiler/qsc_project/src/tests/projects/basic_manifest/src/Dependency2.qs diff --git a/compiler/qsc_project/tests/projects/basic_manifest/src/Main.qs b/compiler/qsc_project/src/tests/projects/basic_manifest/src/Main.qs similarity index 100% rename from compiler/qsc_project/tests/projects/basic_manifest/src/Main.qs rename to compiler/qsc_project/src/tests/projects/basic_manifest/src/Main.qs diff --git a/compiler/qsc_project/tests/projects/circular_imports/qsharp.json b/compiler/qsc_project/src/tests/projects/circular_imports/qsharp.json similarity index 100% rename from compiler/qsc_project/tests/projects/circular_imports/qsharp.json rename to compiler/qsc_project/src/tests/projects/circular_imports/qsharp.json diff --git a/compiler/qsc_project/tests/projects/circular_imports/src/Evens.qs b/compiler/qsc_project/src/tests/projects/circular_imports/src/Evens.qs similarity index 100% rename from compiler/qsc_project/tests/projects/circular_imports/src/Evens.qs rename to compiler/qsc_project/src/tests/projects/circular_imports/src/Evens.qs diff --git a/compiler/qsc_project/tests/projects/circular_imports/src/Main.qs b/compiler/qsc_project/src/tests/projects/circular_imports/src/Main.qs similarity index 100% rename from compiler/qsc_project/tests/projects/circular_imports/src/Main.qs rename to compiler/qsc_project/src/tests/projects/circular_imports/src/Main.qs diff --git a/compiler/qsc_project/tests/projects/circular_imports/src/Odds.qs b/compiler/qsc_project/src/tests/projects/circular_imports/src/Odds.qs similarity index 100% rename from compiler/qsc_project/tests/projects/circular_imports/src/Odds.qs rename to compiler/qsc_project/src/tests/projects/circular_imports/src/Odds.qs diff --git a/compiler/qsc_project/tests/projects/different_files_same_manifest/qsharp.json b/compiler/qsc_project/src/tests/projects/different_files_same_manifest/qsharp.json similarity index 100% rename from compiler/qsc_project/tests/projects/different_files_same_manifest/qsharp.json rename to compiler/qsc_project/src/tests/projects/different_files_same_manifest/qsharp.json diff --git a/compiler/qsc_project/tests/projects/different_files_same_manifest/src/Dependency1.qs b/compiler/qsc_project/src/tests/projects/different_files_same_manifest/src/Dependency1.qs similarity index 100% rename from compiler/qsc_project/tests/projects/different_files_same_manifest/src/Dependency1.qs rename to compiler/qsc_project/src/tests/projects/different_files_same_manifest/src/Dependency1.qs diff --git a/compiler/qsc_project/tests/projects/different_files_same_manifest/src/Dependency2.qs b/compiler/qsc_project/src/tests/projects/different_files_same_manifest/src/Dependency2.qs similarity index 100% rename from compiler/qsc_project/tests/projects/different_files_same_manifest/src/Dependency2.qs rename to compiler/qsc_project/src/tests/projects/different_files_same_manifest/src/Dependency2.qs diff --git a/compiler/qsc_project/tests/projects/different_files_same_manifest/src/Main.qs b/compiler/qsc_project/src/tests/projects/different_files_same_manifest/src/Main.qs similarity index 100% rename from compiler/qsc_project/tests/projects/different_files_same_manifest/src/Main.qs rename to compiler/qsc_project/src/tests/projects/different_files_same_manifest/src/Main.qs diff --git a/compiler/qsc_project/tests/projects/empty_manifest/qsharp.json b/compiler/qsc_project/src/tests/projects/empty_manifest/qsharp.json similarity index 100% rename from compiler/qsc_project/tests/projects/empty_manifest/qsharp.json rename to compiler/qsc_project/src/tests/projects/empty_manifest/qsharp.json diff --git a/compiler/qsc_project/tests/projects/empty_manifest/src/Main.qs b/compiler/qsc_project/src/tests/projects/empty_manifest/src/Main.qs similarity index 100% rename from compiler/qsc_project/tests/projects/empty_manifest/src/Main.qs rename to compiler/qsc_project/src/tests/projects/empty_manifest/src/Main.qs diff --git a/compiler/qsc_project/tests/projects/folder_structure/qsharp.json b/compiler/qsc_project/src/tests/projects/folder_structure/qsharp.json similarity index 100% rename from compiler/qsc_project/tests/projects/folder_structure/qsharp.json rename to compiler/qsc_project/src/tests/projects/folder_structure/qsharp.json diff --git a/compiler/qsc_project/tests/projects/folder_structure/src/Project.qs b/compiler/qsc_project/src/tests/projects/folder_structure/src/Project.qs similarity index 100% rename from compiler/qsc_project/tests/projects/folder_structure/src/Project.qs rename to compiler/qsc_project/src/tests/projects/folder_structure/src/Project.qs diff --git a/compiler/qsc_project/tests/projects/folder_structure/src/utils/ops/Add.qs b/compiler/qsc_project/src/tests/projects/folder_structure/src/utils/ops/Add.qs similarity index 100% rename from compiler/qsc_project/tests/projects/folder_structure/src/utils/ops/Add.qs rename to compiler/qsc_project/src/tests/projects/folder_structure/src/utils/ops/Add.qs diff --git a/compiler/qsc_project/tests/projects/folder_structure/src/utils/ops/Subtract.qs b/compiler/qsc_project/src/tests/projects/folder_structure/src/utils/ops/Subtract.qs similarity index 100% rename from compiler/qsc_project/tests/projects/folder_structure/src/utils/ops/Subtract.qs rename to compiler/qsc_project/src/tests/projects/folder_structure/src/utils/ops/Subtract.qs diff --git a/compiler/qsc_project/tests/projects/folder_structure/src/utils/strings/Concat.qs b/compiler/qsc_project/src/tests/projects/folder_structure/src/utils/strings/Concat.qs similarity index 100% rename from compiler/qsc_project/tests/projects/folder_structure/src/utils/strings/Concat.qs rename to compiler/qsc_project/src/tests/projects/folder_structure/src/utils/strings/Concat.qs diff --git a/compiler/qsc_project/tests/projects/hidden_files/qsharp.json b/compiler/qsc_project/src/tests/projects/hidden_files/qsharp.json similarity index 100% rename from compiler/qsc_project/tests/projects/hidden_files/qsharp.json rename to compiler/qsc_project/src/tests/projects/hidden_files/qsharp.json diff --git a/compiler/qsc_project/tests/projects/hidden_files/src/.HiddenFile.qs b/compiler/qsc_project/src/tests/projects/hidden_files/src/.HiddenFile.qs similarity index 100% rename from compiler/qsc_project/tests/projects/hidden_files/src/.HiddenFile.qs rename to compiler/qsc_project/src/tests/projects/hidden_files/src/.HiddenFile.qs diff --git a/compiler/qsc_project/tests/projects/hidden_files/src/Project.qs b/compiler/qsc_project/src/tests/projects/hidden_files/src/Project.qs similarity index 100% rename from compiler/qsc_project/tests/projects/hidden_files/src/Project.qs rename to compiler/qsc_project/src/tests/projects/hidden_files/src/Project.qs diff --git a/compiler/qsc_project/tests/projects/hidden_files/src/utils/.strings/Concat.qs b/compiler/qsc_project/src/tests/projects/hidden_files/src/utils/.strings/Concat.qs similarity index 100% rename from compiler/qsc_project/tests/projects/hidden_files/src/utils/.strings/Concat.qs rename to compiler/qsc_project/src/tests/projects/hidden_files/src/utils/.strings/Concat.qs diff --git a/compiler/qsc_project/tests/projects/hidden_files/src/utils/ops/Add.qs b/compiler/qsc_project/src/tests/projects/hidden_files/src/utils/ops/Add.qs similarity index 100% rename from compiler/qsc_project/tests/projects/hidden_files/src/utils/ops/Add.qs rename to compiler/qsc_project/src/tests/projects/hidden_files/src/utils/ops/Add.qs diff --git a/compiler/qsc_project/tests/projects/hidden_files/src/utils/ops/Subtract.qs b/compiler/qsc_project/src/tests/projects/hidden_files/src/utils/ops/Subtract.qs similarity index 100% rename from compiler/qsc_project/tests/projects/hidden_files/src/utils/ops/Subtract.qs rename to compiler/qsc_project/src/tests/projects/hidden_files/src/utils/ops/Subtract.qs diff --git a/compiler/qsc_project/tests/projects/language_feature/qsharp.json b/compiler/qsc_project/src/tests/projects/language_feature/qsharp.json similarity index 100% rename from compiler/qsc_project/tests/projects/language_feature/qsharp.json rename to compiler/qsc_project/src/tests/projects/language_feature/qsharp.json diff --git a/compiler/qsc_project/tests/projects/language_feature/src/Project.qs b/compiler/qsc_project/src/tests/projects/language_feature/src/Project.qs similarity index 100% rename from compiler/qsc_project/tests/projects/language_feature/src/Project.qs rename to compiler/qsc_project/src/tests/projects/language_feature/src/Project.qs diff --git a/compiler/qsc_project/tests/projects/peer_file/ShouldNotBeIncluded.qs b/compiler/qsc_project/src/tests/projects/peer_file/ShouldNotBeIncluded.qs similarity index 100% rename from compiler/qsc_project/tests/projects/peer_file/ShouldNotBeIncluded.qs rename to compiler/qsc_project/src/tests/projects/peer_file/ShouldNotBeIncluded.qs diff --git a/compiler/qsc_project/tests/projects/peer_file/qsharp.json b/compiler/qsc_project/src/tests/projects/peer_file/qsharp.json similarity index 100% rename from compiler/qsc_project/tests/projects/peer_file/qsharp.json rename to compiler/qsc_project/src/tests/projects/peer_file/qsharp.json diff --git a/compiler/qsc_project/tests/projects/peer_file/src/Project.qs b/compiler/qsc_project/src/tests/projects/peer_file/src/Project.qs similarity index 100% rename from compiler/qsc_project/tests/projects/peer_file/src/Project.qs rename to compiler/qsc_project/src/tests/projects/peer_file/src/Project.qs diff --git a/compiler/qsc_project/tests/projects/peer_file/src/utils/ops/Add.qs b/compiler/qsc_project/src/tests/projects/peer_file/src/utils/ops/Add.qs similarity index 100% rename from compiler/qsc_project/tests/projects/peer_file/src/utils/ops/Add.qs rename to compiler/qsc_project/src/tests/projects/peer_file/src/utils/ops/Add.qs diff --git a/compiler/qsc_project/tests/projects/peer_file/src/utils/ops/Subtract.qs b/compiler/qsc_project/src/tests/projects/peer_file/src/utils/ops/Subtract.qs similarity index 100% rename from compiler/qsc_project/tests/projects/peer_file/src/utils/ops/Subtract.qs rename to compiler/qsc_project/src/tests/projects/peer_file/src/utils/ops/Subtract.qs diff --git a/compiler/qsc_project/tests/projects/peer_file/src/utils/strings/Concat.qs b/compiler/qsc_project/src/tests/projects/peer_file/src/utils/strings/Concat.qs similarity index 100% rename from compiler/qsc_project/tests/projects/peer_file/src/utils/strings/Concat.qs rename to compiler/qsc_project/src/tests/projects/peer_file/src/utils/strings/Concat.qs diff --git a/compiler/qsc_rca/src/lib.rs b/compiler/qsc_rca/src/lib.rs index 449978f605..7f23a6e3f9 100644 --- a/compiler/qsc_rca/src/lib.rs +++ b/compiler/qsc_rca/src/lib.rs @@ -6,6 +6,9 @@ //! execution on a quantum kernel and does not consider these elements when determining the capabilities. Additionally, //! this implementation also provides details on why the program requires each capability. +#[cfg(test)] +mod tests; + mod analyzer; mod applications; mod common; diff --git a/compiler/qsc_rca/tests/test_utils.rs b/compiler/qsc_rca/src/tests.rs similarity index 94% rename from compiler/qsc_rca/tests/test_utils.rs rename to compiler/qsc_rca/src/tests.rs index b129af0eb2..f301a1b233 100644 --- a/compiler/qsc_rca/tests/test_utils.rs +++ b/compiler/qsc_rca/src/tests.rs @@ -1,6 +1,26 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. +mod arrays; +mod assigns; +mod bindings; +mod binops; +mod callables; +mod calls; +mod cycles; +mod ifs; +mod intrinsics; +mod loops; +mod measurements; +mod overrides; +mod qubits; +mod strings; +mod structs; +mod types; +mod udts; +mod vars; + +use crate::{Analyzer, ComputePropertiesLookup, PackageStoreComputeProperties}; use expect_test::Expect; use qsc::incremental::Compiler; use qsc_data_structures::{language_features::LanguageFeatures, target::TargetCapabilityFlags}; @@ -8,7 +28,6 @@ use qsc_fir::fir::{ItemKind, LocalItemId, Package, PackageStore, StoreItemId}; use qsc_frontend::compile::{PackageStore as HirPackageStore, SourceMap}; use qsc_lowerer::{map_hir_package_to_fir, Lowerer}; use qsc_passes::PackageType; -use qsc_rca::{Analyzer, ComputePropertiesLookup, PackageStoreComputeProperties}; pub struct CompilationContext { pub compiler: Compiler, diff --git a/compiler/qsc_rca/tests/arrays.rs b/compiler/qsc_rca/src/tests/arrays.rs similarity index 99% rename from compiler/qsc_rca/tests/arrays.rs rename to compiler/qsc_rca/src/tests/arrays.rs index 3e5155cd07..f7ada8b4ef 100644 --- a/compiler/qsc_rca/tests/arrays.rs +++ b/compiler/qsc_rca/src/tests/arrays.rs @@ -3,10 +3,8 @@ #![allow(clippy::needless_raw_string_hashes)] -pub mod test_utils; - +use super::{check_last_statement_compute_properties, CompilationContext}; use expect_test::expect; -use test_utils::{check_last_statement_compute_properties, CompilationContext}; #[test] fn check_rca_for_array_with_classical_elements() { diff --git a/compiler/qsc_rca/tests/assigns.rs b/compiler/qsc_rca/src/tests/assigns.rs similarity index 99% rename from compiler/qsc_rca/tests/assigns.rs rename to compiler/qsc_rca/src/tests/assigns.rs index 81dd032d56..56adf48083 100644 --- a/compiler/qsc_rca/tests/assigns.rs +++ b/compiler/qsc_rca/src/tests/assigns.rs @@ -3,10 +3,8 @@ #![allow(clippy::needless_raw_string_hashes)] -pub mod test_utils; - +use super::{check_last_statement_compute_properties, CompilationContext}; use expect_test::expect; -use test_utils::{check_last_statement_compute_properties, CompilationContext}; #[test] fn check_rca_for_classical_int_assign_to_local() { diff --git a/compiler/qsc_rca/tests/bindings.rs b/compiler/qsc_rca/src/tests/bindings.rs similarity index 98% rename from compiler/qsc_rca/tests/bindings.rs rename to compiler/qsc_rca/src/tests/bindings.rs index 116ddeef97..18e5b0400d 100644 --- a/compiler/qsc_rca/tests/bindings.rs +++ b/compiler/qsc_rca/src/tests/bindings.rs @@ -5,10 +5,8 @@ #![allow(clippy::needless_raw_string_hashes)] -pub mod test_utils; - +use super::{check_last_statement_compute_properties, CompilationContext}; use expect_test::expect; -use test_utils::{check_last_statement_compute_properties, CompilationContext}; #[test] fn check_rca_for_immutable_classical_result_binding() { diff --git a/compiler/qsc_rca/tests/binops.rs b/compiler/qsc_rca/src/tests/binops.rs similarity index 98% rename from compiler/qsc_rca/tests/binops.rs rename to compiler/qsc_rca/src/tests/binops.rs index eea51bce19..aa285a70a8 100644 --- a/compiler/qsc_rca/tests/binops.rs +++ b/compiler/qsc_rca/src/tests/binops.rs @@ -3,10 +3,8 @@ #![allow(clippy::needless_raw_string_hashes)] -pub mod test_utils; - +use super::{check_last_statement_compute_properties, CompilationContext}; use expect_test::expect; -use test_utils::{check_last_statement_compute_properties, CompilationContext}; #[test] fn check_rca_for_bin_op_with_classical_lhs_and_classical_rhs() { diff --git a/compiler/qsc_rca/tests/callables.rs b/compiler/qsc_rca/src/tests/callables.rs similarity index 99% rename from compiler/qsc_rca/tests/callables.rs rename to compiler/qsc_rca/src/tests/callables.rs index 2d090dd66f..ea778bf4c0 100644 --- a/compiler/qsc_rca/tests/callables.rs +++ b/compiler/qsc_rca/src/tests/callables.rs @@ -3,13 +3,11 @@ #![allow(clippy::needless_raw_string_hashes)] -pub mod test_utils; - -use expect_test::expect; -use qsc::TargetCapabilityFlags; -use test_utils::{ +use super::{ check_callable_compute_properties, check_last_statement_compute_properties, CompilationContext, }; +use expect_test::expect; +use qsc::TargetCapabilityFlags; #[test] fn check_rca_for_closure_function_with_classical_captured_value() { diff --git a/compiler/qsc_rca/tests/calls.rs b/compiler/qsc_rca/src/tests/calls.rs similarity index 98% rename from compiler/qsc_rca/tests/calls.rs rename to compiler/qsc_rca/src/tests/calls.rs index 2ba236f705..dfbded07a9 100644 --- a/compiler/qsc_rca/tests/calls.rs +++ b/compiler/qsc_rca/src/tests/calls.rs @@ -3,10 +3,8 @@ #![allow(clippy::needless_raw_string_hashes)] -pub mod test_utils; - +use super::{check_last_statement_compute_properties, CompilationContext}; use expect_test::expect; -use test_utils::{check_last_statement_compute_properties, CompilationContext}; #[test] fn check_rca_for_call_to_cyclic_function_with_classical_argument() { diff --git a/compiler/qsc_rca/tests/cycles.rs b/compiler/qsc_rca/src/tests/cycles.rs similarity index 99% rename from compiler/qsc_rca/tests/cycles.rs rename to compiler/qsc_rca/src/tests/cycles.rs index 47864d4bf2..e8cf28694b 100644 --- a/compiler/qsc_rca/tests/cycles.rs +++ b/compiler/qsc_rca/src/tests/cycles.rs @@ -3,10 +3,8 @@ #![allow(clippy::needless_raw_string_hashes)] -pub mod test_utils; - +use super::{check_callable_compute_properties, CompilationContext}; use expect_test::expect; -use test_utils::{check_callable_compute_properties, CompilationContext}; #[test] fn check_rca_for_one_function_cycle() { diff --git a/compiler/qsc_rca/tests/ifs.rs b/compiler/qsc_rca/src/tests/ifs.rs similarity index 98% rename from compiler/qsc_rca/tests/ifs.rs rename to compiler/qsc_rca/src/tests/ifs.rs index 2f586b8e0c..0b671f67c8 100644 --- a/compiler/qsc_rca/tests/ifs.rs +++ b/compiler/qsc_rca/src/tests/ifs.rs @@ -3,12 +3,10 @@ #![allow(clippy::needless_raw_string_hashes)] -pub mod test_utils; - -use expect_test::expect; -use test_utils::{ +use super::{ check_callable_compute_properties, check_last_statement_compute_properties, CompilationContext, }; +use expect_test::expect; #[test] fn check_rca_for_if_stmt_with_classic_condition_and_classic_if_true_block() { diff --git a/compiler/qsc_rca/tests/intrinsics.rs b/compiler/qsc_rca/src/tests/intrinsics.rs similarity index 99% rename from compiler/qsc_rca/tests/intrinsics.rs rename to compiler/qsc_rca/src/tests/intrinsics.rs index 37b3926580..b976a0fc98 100644 --- a/compiler/qsc_rca/tests/intrinsics.rs +++ b/compiler/qsc_rca/src/tests/intrinsics.rs @@ -3,10 +3,8 @@ #![allow(clippy::needless_raw_string_hashes)] -pub mod test_utils; - +use super::{check_callable_compute_properties, CompilationContext}; use expect_test::expect; -use test_utils::{check_callable_compute_properties, CompilationContext}; #[test] fn check_rca_for_quantum_rt_qubit_allocate() { diff --git a/compiler/qsc_rca/tests/loops.rs b/compiler/qsc_rca/src/tests/loops.rs similarity index 98% rename from compiler/qsc_rca/tests/loops.rs rename to compiler/qsc_rca/src/tests/loops.rs index d69f4d866a..906b1550c8 100644 --- a/compiler/qsc_rca/tests/loops.rs +++ b/compiler/qsc_rca/src/tests/loops.rs @@ -3,10 +3,8 @@ #![allow(clippy::needless_raw_string_hashes)] -pub mod test_utils; - +use super::{check_last_statement_compute_properties, CompilationContext}; use expect_test::expect; -use test_utils::{check_last_statement_compute_properties, CompilationContext}; #[test] fn check_rca_for_classical_for_loop() { @@ -158,7 +156,7 @@ fn check_rca_for_dynamic_repeat_until_loop_with_initial_classical_condition_and_ r#" use q = Qubit(); mutable r = Zero; - let loop = + let loop = repeat { } until r == One fixup { diff --git a/compiler/qsc_rca/tests/measurements.rs b/compiler/qsc_rca/src/tests/measurements.rs similarity index 97% rename from compiler/qsc_rca/tests/measurements.rs rename to compiler/qsc_rca/src/tests/measurements.rs index 1000a6e070..2e4622881f 100644 --- a/compiler/qsc_rca/tests/measurements.rs +++ b/compiler/qsc_rca/src/tests/measurements.rs @@ -3,10 +3,8 @@ #![allow(clippy::needless_raw_string_hashes)] -pub mod test_utils; - +use super::{check_last_statement_compute_properties, CompilationContext}; use expect_test::expect; -use test_utils::{check_last_statement_compute_properties, CompilationContext}; #[test] fn check_rca_for_static_single_qubit_measurement() { diff --git a/compiler/qsc_rca/tests/overrides.rs b/compiler/qsc_rca/src/tests/overrides.rs similarity index 96% rename from compiler/qsc_rca/tests/overrides.rs rename to compiler/qsc_rca/src/tests/overrides.rs index b8a5391595..b93298a6af 100644 --- a/compiler/qsc_rca/tests/overrides.rs +++ b/compiler/qsc_rca/src/tests/overrides.rs @@ -3,10 +3,8 @@ #![allow(clippy::needless_raw_string_hashes)] -pub mod test_utils; - +use super::{check_last_statement_compute_properties, CompilationContext}; use expect_test::expect; -use test_utils::{check_last_statement_compute_properties, CompilationContext}; #[test] fn check_rca_for_length_of_statically_sized_array_with_static_content() { diff --git a/compiler/qsc_rca/tests/qubits.rs b/compiler/qsc_rca/src/tests/qubits.rs similarity index 99% rename from compiler/qsc_rca/tests/qubits.rs rename to compiler/qsc_rca/src/tests/qubits.rs index e52598ee9b..961eaa96f0 100644 --- a/compiler/qsc_rca/tests/qubits.rs +++ b/compiler/qsc_rca/src/tests/qubits.rs @@ -3,12 +3,10 @@ #![allow(clippy::needless_raw_string_hashes)] -pub mod test_utils; - -use expect_test::expect; -use test_utils::{ +use super::{ check_callable_compute_properties, check_last_statement_compute_properties, CompilationContext, }; +use expect_test::expect; #[test] fn check_rca_for_static_single_qubit_allcation() { diff --git a/compiler/qsc_rca/tests/strings.rs b/compiler/qsc_rca/src/tests/strings.rs similarity index 98% rename from compiler/qsc_rca/tests/strings.rs rename to compiler/qsc_rca/src/tests/strings.rs index ba0ef20e5e..a33ed7ef31 100644 --- a/compiler/qsc_rca/tests/strings.rs +++ b/compiler/qsc_rca/src/tests/strings.rs @@ -3,10 +3,8 @@ #![allow(clippy::needless_raw_string_hashes)] -pub mod test_utils; - +use super::{check_last_statement_compute_properties, CompilationContext}; use expect_test::expect; -use test_utils::{check_last_statement_compute_properties, CompilationContext}; #[test] fn check_rca_for_classical_string() { diff --git a/compiler/qsc_rca/tests/structs.rs b/compiler/qsc_rca/src/tests/structs.rs similarity index 97% rename from compiler/qsc_rca/tests/structs.rs rename to compiler/qsc_rca/src/tests/structs.rs index c21fdd32ee..0b7d04e757 100644 --- a/compiler/qsc_rca/tests/structs.rs +++ b/compiler/qsc_rca/src/tests/structs.rs @@ -3,10 +3,8 @@ #![allow(clippy::needless_raw_string_hashes)] -pub mod test_utils; - +use super::{check_last_statement_compute_properties, CompilationContext}; use expect_test::expect; -use test_utils::{check_last_statement_compute_properties, CompilationContext}; #[test] fn check_rca_for_struct_constructor_with_classical_values() { diff --git a/compiler/qsc_rca/tests/types.rs b/compiler/qsc_rca/src/tests/types.rs similarity index 98% rename from compiler/qsc_rca/tests/types.rs rename to compiler/qsc_rca/src/tests/types.rs index b9846221ca..1bd2714cf3 100644 --- a/compiler/qsc_rca/tests/types.rs +++ b/compiler/qsc_rca/src/tests/types.rs @@ -3,10 +3,8 @@ #![allow(clippy::needless_raw_string_hashes)] -pub mod test_utils; - +use super::{check_last_statement_compute_properties, CompilationContext}; use expect_test::expect; -use test_utils::{check_last_statement_compute_properties, CompilationContext}; #[test] fn check_rca_for_classical_result() { diff --git a/compiler/qsc_rca/tests/udts.rs b/compiler/qsc_rca/src/tests/udts.rs similarity index 96% rename from compiler/qsc_rca/tests/udts.rs rename to compiler/qsc_rca/src/tests/udts.rs index 334f995fde..8b00582ab4 100644 --- a/compiler/qsc_rca/tests/udts.rs +++ b/compiler/qsc_rca/src/tests/udts.rs @@ -3,10 +3,8 @@ #![allow(clippy::needless_raw_string_hashes)] -pub mod test_utils; - +use super::{check_last_statement_compute_properties, CompilationContext}; use expect_test::expect; -use test_utils::{check_last_statement_compute_properties, CompilationContext}; #[test] fn check_rca_for_udt_constructor_with_classical_values() { diff --git a/compiler/qsc_rca/tests/vars.rs b/compiler/qsc_rca/src/tests/vars.rs similarity index 96% rename from compiler/qsc_rca/tests/vars.rs rename to compiler/qsc_rca/src/tests/vars.rs index b5ea4df695..7816e63659 100644 --- a/compiler/qsc_rca/tests/vars.rs +++ b/compiler/qsc_rca/src/tests/vars.rs @@ -3,10 +3,8 @@ #![allow(clippy::needless_raw_string_hashes)] -pub mod test_utils; - +use super::{check_last_statement_compute_properties, CompilationContext}; use expect_test::expect; -use test_utils::{check_last_statement_compute_properties, CompilationContext}; #[test] fn check_rca_for_callable_var() {