diff --git a/tests/runtime/compiled.py b/src/mccode_antlr/test.py similarity index 55% rename from tests/runtime/compiled.py rename to src/mccode_antlr/test.py index 19a41be..ba34f62 100644 --- a/tests/runtime/compiled.py +++ b/src/mccode_antlr/test.py @@ -1,6 +1,5 @@ from __future__ import annotations from functools import cache -from mccode_antlr import Flavor import pytest from mccode_antlr.compiler.check import simple_instr_compiles @@ -45,22 +44,3 @@ def no_cc(*args, **kwargs): return method(*args, **kwargs) return method - -def compile_and_run(instr, - parameters, - run=True, - dump_source=True, - target: dict | None = None, - config: dict | None = None, - flavor: Flavor = Flavor.MCSTAS): - from pathlib import Path - from tempfile import TemporaryDirectory - from mccode_antlr.run import mccode_compile, mccode_run_compiled - - kwargs = dict(target=target, config=config, dump_source=dump_source) - - with TemporaryDirectory() as directory: - binary, target = mccode_compile(instr, directory, flavor=flavor, **kwargs) - # The runtime output directory used *can not* exist for McStas/McXtrace to work properly. - # So find a name inside this directory that doesn't exist (any name should work) - return mccode_run_compiled(binary, target, Path(directory).joinpath('t'), parameters) if run else (None, None) diff --git a/src/mccode_antlr/utils.py b/src/mccode_antlr/utils.py index 4faa310..5143cfe 100644 --- a/src/mccode_antlr/utils.py +++ b/src/mccode_antlr/utils.py @@ -1,3 +1,7 @@ +from __future__ import annotations + +from mccode_antlr import Flavor + def run_prog_message_output(prog: list[str]): """Run a program and return its output @@ -24,4 +28,36 @@ def run_prog_message_output(prog: list[str]): else: message = f'{prog[0]} not found' - return message, output \ No newline at end of file + return message, output + + +def make_assembler(name: str, flavor: Flavor = Flavor.MCSTAS): + from mccode_antlr.assembler import Assembler + from mccode_antlr.reader.registry import default_registries + return Assembler(name, registries=default_registries(flavor)) + + +def parse_instr_string(instr_source: str): + from mccode_antlr.loader import parse_mcstas_instr + return parse_mcstas_instr(instr_source) + + + +def compile_and_run(instr, + parameters, + run=True, + dump_source=True, + target: dict | None = None, + config: dict | None = None, + flavor: Flavor = Flavor.MCSTAS): + from pathlib import Path + from tempfile import TemporaryDirectory + from mccode_antlr.run import mccode_compile, mccode_run_compiled + + kwargs = dict(target=target, config=config, dump_source=dump_source) + + with TemporaryDirectory() as directory: + binary, target = mccode_compile(instr, directory, flavor=flavor, **kwargs) + # The runtime output directory used *can not* exist for McStas/McXtrace to work properly. + # So find a name inside this directory that doesn't exist (any name should work) + return mccode_run_compiled(binary, target, Path(directory).joinpath('t'), parameters) if run else (None, None) diff --git a/tests/instr/test_copy.py b/tests/instr/test_copy.py index 6563f10..6800178 100644 --- a/tests/instr/test_copy.py +++ b/tests/instr/test_copy.py @@ -1,11 +1,11 @@ from unittest import TestCase -from .utils import parse_instr_string class TestInstrCopy(TestCase): def test_copy(self): from mccode_antlr.instr import Instr - from mccode_antlr.common import InstrumentParameter, Expr, Value, DataType + from mccode_antlr.common import InstrumentParameter, Expr + from mccode_antlr.utils import parse_instr_string instr_source = """ DEFINE INSTRUMENT test_copy(par0=3.14159, double par1 = 49, int par2 = 1010110 , string par3="this is a long string with spaces", diff --git a/tests/instr/test_empty_trace.py b/tests/instr/test_empty_trace.py index 5ce0808..16d1d14 100644 --- a/tests/instr/test_empty_trace.py +++ b/tests/instr/test_empty_trace.py @@ -1,5 +1,4 @@ from unittest import TestCase -from .utils import make_assembler class TestInstrEmptyTrace(TestCase): @@ -32,6 +31,7 @@ def test_parse_empty_trace(self): def test_assemble_empty_trace(self): from mccode_antlr.instr import Instr from mccode_antlr.common import InstrumentParameter, Expr, Value, DataType + from mccode_antlr.utils import make_assembler assembler = make_assembler('test_assemble') diff --git a/tests/instr/test_instance_parameters.py b/tests/instr/test_instance_parameters.py index 172d477..77cfd15 100644 --- a/tests/instr/test_instance_parameters.py +++ b/tests/instr/test_instance_parameters.py @@ -1,11 +1,10 @@ from unittest import TestCase from loguru import logger -from .utils import make_assembler - class TestInstrInstanceParameters(TestCase): def test_assemble_identifier_instance_parameter(self): + from mccode_antlr.utils import make_assembler assembler = make_assembler('fake_bifrost') parameters = [ diff --git a/tests/instr/test_positioning.py b/tests/instr/test_positioning.py index eaf4c3a..27e573c 100644 --- a/tests/instr/test_positioning.py +++ b/tests/instr/test_positioning.py @@ -1,5 +1,4 @@ from unittest import TestCase -from .utils import make_assembler, parse_instr_string class TestInstrPositioning(TestCase): @@ -38,6 +37,8 @@ def _positioning_evaluator(self, instr): self.assertEqual(v5, last.orientation.position() - up.orientation.position()) def test_assemble_positioning(self): + from mccode_antlr.utils import make_assembler + """Equivalent test to `test_read_positioning` but using an assembled instrument""" assembler = make_assembler('orientation_test') origin = assembler.component("origin", "Progress_bar", at=[0, 0, 0]) @@ -47,6 +48,8 @@ def test_assemble_positioning(self): self._positioning_evaluator(assembler.instrument) def test_read_positioning(self): + from mccode_antlr.utils import parse_instr_string + """Equivalent test to `test_assemble_positioning` but using a parsed instrument""" instr_source = """DEFINE INSTRUMENT orientation_test() TRACE COMPONENT origin = Arm() AT (0, 0, 0) ABSOLUTE @@ -66,6 +69,7 @@ def _simple_position_tests(self, instr, positions: dict): self.assertEqual(positions[instance.name], instance.orientation.position('coordinates')) def test_simple_positioning(self): + from mccode_antlr.utils import parse_instr_string from math import pi, cos, sin instr_source = """DEFINE INSTRUMENT simple_test() TRACE diff --git a/tests/instr/test_split.py b/tests/instr/test_split.py index c76d872..7b763c4 100644 --- a/tests/instr/test_split.py +++ b/tests/instr/test_split.py @@ -1,5 +1,4 @@ from unittest import TestCase -from .utils import parse_instr_string from mccode_antlr.instr import Instr, Instance from mccode_antlr.common.expression import Expr @@ -8,6 +7,8 @@ class TestInstrSplit(TestCase): def test_mcpl_split(self): + from mccode_antlr.utils import parse_instr_string + instr_source = """ DEFINE INSTRUMENT test_copy() TRACE @@ -52,6 +53,8 @@ def test_mcpl_split(self): self.assertEqual(before.get_component('second').rotate_relative[1], first) def test_split_broken_reference(self): + from mccode_antlr.utils import parse_instr_string + from textwrap import dedent instr = dedent("""\ DEFINE INSTRUMENT test_tof(phase/"degree"=0) diff --git a/tests/instr/utils.py b/tests/instr/utils.py deleted file mode 100644 index 92ab4d1..0000000 --- a/tests/instr/utils.py +++ /dev/null @@ -1,11 +0,0 @@ -from mccode_antlr import Flavor - -def make_assembler(name: str, flavor: Flavor = Flavor.MCSTAS): - from mccode_antlr.assembler import Assembler - from mccode_antlr.reader.registry import default_registries - return Assembler(name, registries=default_registries(flavor)) - - -def parse_instr_string(instr_source: str): - from mccode_antlr.loader import parse_mcstas_instr - return parse_mcstas_instr(instr_source) \ No newline at end of file diff --git a/tests/runtime/test_c_runtime.py b/tests/runtime/test_c_runtime.py index 52a41ed..b85d57e 100644 --- a/tests/runtime/test_c_runtime.py +++ b/tests/runtime/test_c_runtime.py @@ -1,11 +1,12 @@ import unittest from textwrap import dedent from mccode_antlr.loader import parse_mcstas_instr -from .compiled import compile_and_run, compiled_test, gpu_compiled_test +from mccode_antlr.test import compiled_test, gpu_compiled_test class CRuntimeTestCase(unittest.TestCase): def _do_trace_tests(self, with_acc): + from mccode_antlr.utils import compile_and_run instr = parse_mcstas_instr(dedent( """\ DEFINE INSTRUMENT test_component_traces_visited() @@ -37,6 +38,7 @@ def test_funnel_raytrace_traces_visited(self): self._do_trace_tests(with_acc=True) def _do_jump_tests(self, contents: str, jumps: int): + from mccode_antlr.utils import compile_and_run instr = parse_mcstas_instr(contents) results, data = compile_and_run(instr, f"-n 1 jumps={jumps}") lines = results.decode('utf-8').splitlines() @@ -77,6 +79,7 @@ def test_jump_when(self): @compiled_test def test_split(self): + from mccode_antlr.utils import compile_and_run contents = dedent("""\ define instrument test_split(int splits) trace component a = Arm() AT (0,0,0) ABSOLUTE EXTEND %{printf("a\\n");%} @@ -98,6 +101,7 @@ def test_split(self): @compiled_test def test_when(self): + from mccode_antlr.utils import compile_and_run instr = parse_mcstas_instr(dedent("""\ define instrument test_when(dummy) declare %{int count;%} @@ -117,6 +121,7 @@ def test_when(self): @compiled_test def test_group(self): + from mccode_antlr.utils import compile_and_run instr = parse_mcstas_instr(dedent("""\ define instrument test_group(dummy) declare %{int count;%} diff --git a/tests/runtime/test_examples.py b/tests/runtime/test_examples.py index 26dc9ee..c80114b 100644 --- a/tests/runtime/test_examples.py +++ b/tests/runtime/test_examples.py @@ -3,11 +3,12 @@ from mccode_antlr.loader.loader import parse_mcstas_instr from textwrap import dedent -from .compiled import compile_and_run, compiled_test +from mccode_antlr.test import compiled_test @compiled_test def test_without_components(): + from mccode_antlr.utils import compile_and_run instr = parse_mcstas_instr(dedent("""\ DEFINE INSTRUMENT without_components(int dummy=0) DECLARE %{ @@ -34,6 +35,7 @@ def test_template_instr(): """ This test failed previously because its name is a reserved word in C++ (template) """ + from mccode_antlr.utils import compile_and_run instr = parse_mcstas_instr(dedent("""\ DEFINE INSTRUMENT template(Par1=1) DECLARE %{ %} @@ -53,6 +55,7 @@ def test_template_instr(): reason='This test fails to compile on Windows due to https://github.com/McStasMcXtrace/McCode/issues/1817' ) def test_component_declare_variable_initialised(): + from mccode_antlr.utils import compile_and_run instr = parse_mcstas_instr(dedent("""\ DEFINE INSTRUMENT namedsomething(dummy=0) DECLARE %{ @@ -72,6 +75,7 @@ def test_component_declare_variable_initialised(): @compiled_test def test_function_pointer_declare_parameter(): + from mccode_antlr.utils import compile_and_run instr = parse_mcstas_instr(dedent("""\ DEFINE INSTRUMENT with_function_pointers(int which=0) DECLARE %{ @@ -119,6 +123,7 @@ def test_function_pointer_declare_parameter(): @compiled_test def test_function_pointer_component_declare_parameter(): + from mccode_antlr.utils import compile_and_run from mccode_antlr.reader.registry import InMemoryRegistry in_memory_registry = InMemoryRegistry('test_components') comp_name = 'declares_function_pointer' @@ -185,6 +190,7 @@ def test_function_pointer_component_declare_parameter(): @compiled_test def test_struct_instance_parameter(): + from mccode_antlr.utils import compile_and_run instr = parse_mcstas_instr(dedent(r""" DEFINE INSTRUMENT test_template_TAS(DM=3.3539) DECLARE @@ -245,6 +251,7 @@ def test_struct_instance_parameter(): @compiled_test def test_copy_extend_instance_parameter(): + from mccode_antlr.utils import compile_and_run from mccode_antlr.reader.registry import InMemoryRegistry in_memory_registry = InMemoryRegistry('test_components') comp_name = 'has_parameter' diff --git a/tests/runtime/test_instr.py b/tests/runtime/test_instr.py index 2d0dd34..dd8ce80 100644 --- a/tests/runtime/test_instr.py +++ b/tests/runtime/test_instr.py @@ -1,6 +1,7 @@ from unittest import TestCase from loguru import logger -from .compiled import compiled_test, mcpl_compiled_test, compile_and_run +from mccode_antlr.test import compiled_test, mcpl_compiled_test +from mccode_antlr.utils import compile_and_run from mccode_antlr import Flavor class TestCompiledInstr(TestCase): diff --git a/tests/runtime/test_mcxtrace.py b/tests/runtime/test_mcxtrace.py index 3817af4..4f57e74 100644 --- a/tests/runtime/test_mcxtrace.py +++ b/tests/runtime/test_mcxtrace.py @@ -1,6 +1,7 @@ from textwrap import dedent from mccode_antlr.loader import parse_mcstas_instr, parse_mcxtrace_instr -from .compiled import compiled_test, compile_and_run, Flavor +from mccode_antlr.test import compiled_test +from mccode_antlr.utils import compile_and_run, Flavor from mccode_antlr.reader.registry import InMemoryRegistry in_memory = InMemoryRegistry( diff --git a/tests/runtime/test_multiple_copy.py b/tests/runtime/test_multiple_copy.py index 59c26d4..bbcecba 100644 --- a/tests/runtime/test_multiple_copy.py +++ b/tests/runtime/test_multiple_copy.py @@ -1,6 +1,7 @@ from textwrap import dedent from mccode_antlr.loader import parse_mcstas_instr -from .compiled import compiled_test, compile_and_run +from mccode_antlr.test import compiled_test +from mccode_antlr.utils import compile_and_run from mccode_antlr.reader.registry import InMemoryRegistry diff --git a/tests/runtime/test_nexus.py b/tests/runtime/test_nexus.py index 29203b8..22ff0a3 100644 --- a/tests/runtime/test_nexus.py +++ b/tests/runtime/test_nexus.py @@ -1,6 +1,7 @@ from textwrap import dedent from mccode_antlr.loader import parse_mcstas_instr -from .compiled import compiled_test, compile_and_run +from mccode_antlr.test import compiled_test +from mccode_antlr.utils import compile_and_run from mccode_antlr.reader.registry import InMemoryRegistry diff --git a/tests/runtime/test_parameters.py b/tests/runtime/test_parameters.py index 7c918a3..d6abd4f 100644 --- a/tests/runtime/test_parameters.py +++ b/tests/runtime/test_parameters.py @@ -1,4 +1,5 @@ -from .compiled import compile_and_run, compiled_test +from mccode_antlr.test import compiled_test +from mccode_antlr.utils import compile_and_run @compiled_test def test_parameters(): diff --git a/tests/runtime/test_raytrace.py b/tests/runtime/test_raytrace.py index 35c5637..33f828f 100644 --- a/tests/runtime/test_raytrace.py +++ b/tests/runtime/test_raytrace.py @@ -1,7 +1,7 @@ from textwrap import dedent from mccode_antlr.loader import parse_mcstas_instr -from .compiled import compiled_test, gpu_compiled_test, compile_and_run -from mccode_antlr.config import config +from mccode_antlr.test import gpu_compiled_test +from mccode_antlr.utils import compile_and_run from mccode_antlr.reader.registry import InMemoryRegistry diff --git a/tests/runtime/test_when.py b/tests/runtime/test_when.py index 162e2b0..37ded4b 100644 --- a/tests/runtime/test_when.py +++ b/tests/runtime/test_when.py @@ -1,6 +1,7 @@ from textwrap import dedent from mccode_antlr.loader import parse_mcstas_instr -from .compiled import compiled_test, compile_and_run +from mccode_antlr.test import compiled_test +from mccode_antlr.utils import compile_and_run @compiled_test def test_when_logical_parses(): diff --git a/tests/test_component_vector_parameter.py b/tests/test_component_vector_parameter.py index ab078ae..2202471 100644 --- a/tests/test_component_vector_parameter.py +++ b/tests/test_component_vector_parameter.py @@ -1,6 +1,6 @@ import unittest -from tests.runtime.compiled import compiled_test +from mccode_antlr.test import compiled_test FAKE_COMPONENTS = dict(component_with_vector_parameter=""" DEFINE COMPONENT component_with_vector_parameter