diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/conftest.py b/tests/conftest.py index a122369..08cdf79 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -3,10 +3,13 @@ from __future__ import annotations from copy import deepcopy +from dataclasses import dataclass +from typing import Any import pytest -from qadence2_ir.irast import AST +from qadence2_ir.factory import IRBuilder +from qadence2_ir.irast import AST, Attributes from qadence2_ir.types import Alloc, AllocQubits, Assign, Model, QuInstruct, Support @@ -59,3 +62,34 @@ def model_with_directives_settings(simple_model: Model) -> Model: @pytest.fixture def asts_for_arithmetic() -> tuple[AST, AST]: return (AST.numeric(0.5 + 1j), AST.quantum_op("CNOT", (0,), (1,))) + + +@dataclass +class InputTypeTest: + qubit_count: int + directives: dict[str, Any] + settings: dict[str, Any] + ast: AST + + +class IRBuilderTest(IRBuilder[InputTypeTest]): + @staticmethod + def set_register(input_obj: InputTypeTest) -> AllocQubits: + return AllocQubits(input_obj.qubit_count) + + @staticmethod + def set_directives(input_obj: InputTypeTest) -> Attributes: + return input_obj.directives + + @staticmethod + def settings(input_obj: InputTypeTest) -> Attributes: + return input_obj.settings + + @staticmethod + def parse_sequence(input_obj: InputTypeTest) -> AST: + return input_obj.ast + + +@pytest.fixture +def builder() -> IRBuilderTest: + return IRBuilderTest() diff --git a/tests/test_factory.py b/tests/test_factory.py new file mode 100644 index 0000000..3e830f7 --- /dev/null +++ b/tests/test_factory.py @@ -0,0 +1,24 @@ +from __future__ import annotations + +from qadence2_ir import AST, AllocQubits, ir_compiler_factory +from qadence2_ir.types import Alloc, Assign, Call, Load, Model, QuInstruct, Support + +from .conftest import InputTypeTest, IRBuilderTest + + +def test_init(quantum_ast: AST, builder: IRBuilderTest) -> None: + ir_compiler = ir_compiler_factory(builder) + input_ = InputTypeTest(10, {"my-directive": False}, {"my-setting": 8}, quantum_ast) + model = ir_compiler(input_) + expected = Model( + AllocQubits(10), + {"x": Alloc(1, False)}, + [ + Assign("%0", Call("div", Load("x"), 3)), + Assign("%1", Call("fn", Load("%0"), Load("x"))), + QuInstruct("rx", Support((0,), (1,)), Load("%1")), + ], + {"my-directive": False}, + {"my-setting": 8}, + ) + assert model == expected