From 9e78d061e46cbb3584be3d235f6499fc73b45d13 Mon Sep 17 00:00:00 2001
From: Lars Bilke <lars.bilke@ufz.de>
Date: Wed, 24 Jul 2024 09:50:53 +0200
Subject: [PATCH] [T] Rewritten ExtractBoundary snakemake test to pytest.

---
 Applications/Utils/ExtractBoundary.smk        | 44 -------------------
 Applications/Utils/Tests.cmake                | 16 +------
 .../square_10_1x1_quad_boundary.vtu           |  0
 .../square_10_1x1_tri_boundary.vtu            |  0
 .../ExtractBoundary/test_extract_boundary.py  | 39 ++++++++++++++++
 5 files changed, 40 insertions(+), 59 deletions(-)
 delete mode 100644 Applications/Utils/ExtractBoundary.smk
 rename Tests/Data/{FileIO => Utils/ExtractBoundary}/square_10_1x1_quad_boundary.vtu (100%)
 rename Tests/Data/{FileIO => Utils/ExtractBoundary}/square_10_1x1_tri_boundary.vtu (100%)
 create mode 100644 Tests/Data/Utils/ExtractBoundary/test_extract_boundary.py

diff --git a/Applications/Utils/ExtractBoundary.smk b/Applications/Utils/ExtractBoundary.smk
deleted file mode 100644
index 687dd36cad0..00000000000
--- a/Applications/Utils/ExtractBoundary.smk
+++ /dev/null
@@ -1,44 +0,0 @@
-# Usage, e.g.:
-#   snakemake -s ExtractBoundary.smk -j 1 --configfile $HOME/code/ogs6/build/buildinfo.yaml
-#
-# buildinfo.yaml contains variables such as Data_BINARY_DIR
-
-output_path = "FileIO"
-
-import os
-os.environ["PATH"] += os.pathsep + os.pathsep.join([config['BIN_DIR']])
-workdir: f"{config['Data_BINARY_DIR']}/{output_path}"
-
-# "entry point", otherwise one would had to specify output files as snakemake
-# arguments
-elem_types = ['tri', 'quad']
-rule all:
-    input:
-        expand("square_10_1x1_{type}_boundary_diff.out", type=elem_types)
-
-include: f"{config['SOURCE_DIR']}/scripts/snakemake/modules/meshes.smk"
-
-rule extract_boundary:
-    input:
-        rules.generate_square_mesh.output
-    output:
-        "{mesh_name_prefix}_{size}_{lx}x{ly}_{type}_boundary.vtu"
-    shell:
-        "ExtractBoundary -i {input} -o {output}"
-
-rule vtkdiff:
-    input:
-        a = rules.extract_boundary.output,
-        b = f"{config['Data_SOURCE_DIR']}/{output_path}/{rules.extract_boundary.output}"
-    output:
-        "{mesh_name_prefix}_{size}_{lx}x{ly}_{type}_boundary_diff.out"
-    params:
-        check_mesh = True,
-        fields = [
-            # second field name can be omitted if identical
-            ["bulk_node_ids", 0, 0],
-            ["bulk_element_ids", 0, 0],
-            ["bulk_face_ids", 0, 0]
-        ]
-    wrapper:
-        f"file://{config['SOURCE_DIR']}/scripts/snakemake/vtkdiff"
diff --git a/Applications/Utils/Tests.cmake b/Applications/Utils/Tests.cmake
index 2113161ab35..41281936309 100644
--- a/Applications/Utils/Tests.cmake
+++ b/Applications/Utils/Tests.cmake
@@ -681,21 +681,7 @@ AddTest(
 )
 
 if(SNAKEMAKE AND TEE_TOOL_PATH)
-    add_test(NAME snakemake_ExtractBoundary
-        COMMAND ${SNAKEMAKE} -j 1
-            --configfile ${PROJECT_BINARY_DIR}/buildinfo.yaml
-            -s ${CMAKE_CURRENT_SOURCE_DIR}/ExtractBoundary.smk
-    )
-
-    add_test(NAME snakemake_VoxelGridFromLayers
-        COMMAND ${SNAKEMAKE} -j 1
-            --configfile ${PROJECT_BINARY_DIR}/buildinfo.yaml
-            -s ${CMAKE_CURRENT_SOURCE_DIR}/VoxelGridFromLayers.smk
-    )
-    set_tests_properties(snakemake_ExtractBoundary snakemake_VoxelGridFromLayers
-        PROPERTIES LABELS "default"
-    )
-    add_dependencies(ctest ExtractBoundary Layers2Grid AddFaultToVoxelGrid generateStructuredMesh)
+    add_dependencies(ctest Layers2Grid AddFaultToVoxelGrid)
 endif()
 
 AddTest(
diff --git a/Tests/Data/FileIO/square_10_1x1_quad_boundary.vtu b/Tests/Data/Utils/ExtractBoundary/square_10_1x1_quad_boundary.vtu
similarity index 100%
rename from Tests/Data/FileIO/square_10_1x1_quad_boundary.vtu
rename to Tests/Data/Utils/ExtractBoundary/square_10_1x1_quad_boundary.vtu
diff --git a/Tests/Data/FileIO/square_10_1x1_tri_boundary.vtu b/Tests/Data/Utils/ExtractBoundary/square_10_1x1_tri_boundary.vtu
similarity index 100%
rename from Tests/Data/FileIO/square_10_1x1_tri_boundary.vtu
rename to Tests/Data/Utils/ExtractBoundary/square_10_1x1_tri_boundary.vtu
diff --git a/Tests/Data/Utils/ExtractBoundary/test_extract_boundary.py b/Tests/Data/Utils/ExtractBoundary/test_extract_boundary.py
new file mode 100644
index 00000000000..9880e46c9a8
--- /dev/null
+++ b/Tests/Data/Utils/ExtractBoundary/test_extract_boundary.py
@@ -0,0 +1,39 @@
+import os
+from pathlib import Path
+
+import pytest
+from ogs import cli
+
+
+@pytest.mark.parametrize(("element_type"), [("tri"), ("quad")])
+def test_extract_boundary(tmp_path, element_type):
+    os.chdir(Path(__file__).resolve().parent)
+    mesh_basename = f"square_10_1x1_{element_type}"
+    mesh_file = Path(f"{tmp_path}/{mesh_basename}.vtu")
+    cli.generateStructuredMesh(
+        e=element_type,
+        lx=1,
+        ly=1,
+        nx=10,
+        ny=10,
+        o=mesh_file,
+    )
+    assert mesh_file.exists()
+
+    boundary_file = Path(f"{tmp_path}/{mesh_basename}_boundary.vtu")
+    cli.ExtractBoundary(i=mesh_file, o=boundary_file)
+    assert boundary_file.exists()
+
+    assert cli.vtkdiff(boundary_file, boundary_file.name, mesh_check=True) == 0
+    for field in ["bulk_node_ids", "bulk_element_ids", "bulk_face_ids"]:
+        assert (
+            cli.vtkdiff(
+                boundary_file,
+                boundary_file.name,
+                a=field,
+                b=field,
+                abs=0,
+                rel=0,
+            )
+            == 0
+        )
-- 
GitLab