Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
No results found
Show changes
import sympy as sp
from pystencils import TypedSymbol, fields, kernel
from pystencilssfg import SourceFileGenerator, SfgConfiguration
from pystencilssfg import SourceFileGenerator
with SourceFileGenerator() as sfg:
α = TypedSymbol("alpha", "float32")
......
......@@ -9,6 +9,7 @@ import subprocess
THIS_DIR = path.split(__file__)[0]
SCRIPTS_DIR = path.join(THIS_DIR, "scripts")
CONFIG_DIR = path.join(THIS_DIR, "config")
EXPECTED_DIR = path.join(THIS_DIR, "expected")
......@@ -30,6 +31,12 @@ class ScriptInfo:
Output files will all be placed in the ``out`` folder.
"""
args: tuple[str, ...] = ()
"""Command-line arguments to be passed to the generator script"""
should_fail: bool = False
"""Whether the exeuction of this script should fail."""
compilable_output: str | None = None
"""File extension of the output file that can be compiled.
......@@ -50,10 +57,41 @@ When adding new generator scripts to the `scripts` directory,
do not forget to include them here.
"""
SCRIPTS = [
ScriptInfo.make("Structural", ("h", "cpp")),
ScriptInfo.make("SimpleJacobi", ("h", "cpp"), compilable_output="cpp"),
ScriptInfo.make("SimpleClasses", ("h", "cpp")),
ScriptInfo.make("Variables", ("h", "cpp"), compilable_output="cpp"),
ScriptInfo.make(
"TestConfigModule",
("h++", "c++"),
args=(
"--sfg-file-extensions",
".c++,.h++",
"--sfg-config-module",
path.join(CONFIG_DIR, "TestConfigModule_cfg.py"),
),
),
ScriptInfo.make(
"TestIllegalArgs",
("h++", "c++"),
args=(
"--sfg-file-extensionss",
".c++,.h++",
),
should_fail=True
),
ScriptInfo.make(
"TestExtraCommandLineArgs",
("h++", "c++"),
args=(
"--sfg-file-extensions",
".c++,.h++",
"--precision",
"float32",
"test1",
"test2"
),
),
ScriptInfo.make("Structural", ("hpp", "cpp")),
ScriptInfo.make("SimpleJacobi", ("hpp", "cpp"), compilable_output="cpp"),
ScriptInfo.make("SimpleClasses", ("hpp", "cpp")),
ScriptInfo.make("Variables", ("hpp", "cpp"), compilable_output="cpp"),
]
......@@ -75,12 +113,17 @@ def test_generator_script(script_info: ScriptInfo):
shutil.rmtree(output_dir)
os.makedirs(output_dir, exist_ok=True)
args = ["python", script_file, "--sfg-output-dir", output_dir]
args = ["python", script_file, "--sfg-output-dir", output_dir] + list(script_info.args)
result = subprocess.run(args)
if script_info.should_fail:
if result.returncode == 0:
pytest.fail(f"Generator script {script_name} was supposed to fail, but didn't.")
return
if result.returncode != 0:
raise AssertionError(f"Generator script {script_name} failed.")
pytest.fail(f"Generator script {script_name} failed.")
# Check generated files
expected_files = set(
......
import subprocess
def test_list_files():
output_dir = "/my/output/directory"
args = [
"sfg-cli",
"list-files",
"--sfg-output-dir",
output_dir,
"--sfg-file-extensions",
"cu, cuh",
"genscript.py",
]
result = subprocess.run(args, capture_output=True, text=True)
assert result.returncode == 0
assert (
result.stdout
== "/my/output/directory/genscript.cuh /my/output/directory/genscript.cu\n"
)
def test_list_files_headeronly():
output_dir = "/my/output/directory"
args = [
"python", "-m", "pystencilssfg",
"list-files",
"--sfg-output-dir",
output_dir,
"--sfg-output-mode",
"header-only",
"genscript.py",
]
result = subprocess.run(args, capture_output=True, text=True)
assert result.returncode == 0
assert result.stdout == "/my/output/directory/genscript.hpp\n"
def test_list_files_with_config_module(sample_config_module):
args = [
"sfg-cli",
"list-files",
"--sfg-config-module",
sample_config_module,
"genscript.py",
]
result = subprocess.run(args, capture_output=True, text=True)
assert result.returncode == 0
assert (
result.stdout
== "generated_sources/genscript.hpp generated_sources/genscript.cpp\n"
)
def test_make_find_module(tmp_path):
args = ["sfg-cli", "cmake", "make-find-module"]
result = subprocess.run(args, cwd=str(tmp_path))
assert result.returncode == 0
expected_path = tmp_path / "FindPystencilsSfg.cmake"
assert expected_path.exists()