diff --git a/src/csg/tests/meson.build b/src/csg/tests/meson.build index 555396dc50c50f763c81cc5e9ef1706b78ef552e..82895dac4a19912bd27e566778ecf118edaddc1f 100644 --- a/src/csg/tests/meson.build +++ b/src/csg/tests/meson.build @@ -1,5 +1,5 @@ -unit_exe = executable( - 'unit_tests', +test_csg = executable( + 'unit_tests_csg', 'levelset/boolean.t.cpp', 'levelset/primitives.t.cpp', 'levelset/transform.t.cpp', @@ -15,4 +15,4 @@ unit_exe = executable( link_with: lib_csg_parser, override_options: 'cpp_std=c++2a', ) -test('unit_test', unit_exe) +test('unit_test_csg', test_csg) diff --git a/src/inputs/geometry.cpp b/src/inputs/geometry.cpp index 97cdc75ab69cf6a241403061b4242e7be02ab473..f21ae135363457a8ceac9a343a4cdd946237d5a7 100644 --- a/src/inputs/geometry.cpp +++ b/src/inputs/geometry.cpp @@ -1,9 +1,11 @@ +#include "solver.hpp" #include "solver_impl.hpp" namespace solver { -solver::GeometrySettings make_geometry(solver::InputInfo ii, - std::vector &messages) { +std::pair> +make_geometry(solver::InputInfo ii) { + std::vector messages; solver::GeometrySettings geo; geo.csg_filename = ""; @@ -51,6 +53,6 @@ solver::GeometrySettings make_geometry(solver::InputInfo ii, std::get<1>(geo.axes).periodic = is_periodic[1]; std::get<2>(geo.axes).periodic = is_periodic[2]; } - return geo; + return std::make_pair(geo, messages); } } // namespace solver diff --git a/src/inputs/mesh.cpp b/src/inputs/mesh.cpp index d507fda1cec3ab3fce1f49f1a194833593757035..db021b85cb677e08c162c3af859fdcfbb5b95c24 100644 --- a/src/inputs/mesh.cpp +++ b/src/inputs/mesh.cpp @@ -1,9 +1,11 @@ +#include "solver.hpp" #include "solver_impl.hpp" namespace solver { -solver::MeshSettings make_mesh(solver::InputInfo ii, - std::vector &messages) { +std::pair> +make_mesh(solver::InputInfo ii) { + std::vector messages; solver::MeshSettings mesh; auto [mx, my, mz] = mesh.axes; @@ -99,6 +101,6 @@ solver::MeshSettings make_mesh(solver::InputInfo ii, mesh.axes[1] = my; mesh.axes[2] = mz; - return mesh; + return std::make_pair(mesh, messages); } } // namespace solver diff --git a/src/inputs/solver.cpp b/src/inputs/solver.cpp index c80a919ecd7b18b0d26938e7f9fffb910794d1a4..8576946d5b158b60f4e9f42d5ec29db1f29cbaa5 100644 --- a/src/inputs/solver.cpp +++ b/src/inputs/solver.cpp @@ -51,11 +51,20 @@ void add_msg(std::string key, std::vector &messages, std::pair> make_solver(solver::InputInfo ii) { - std::vector messages; solver::SolverSettings ss; - ss.geometry = make_geometry(ii, messages); - ss.mesh = make_mesh(ii, messages); - ss.time = make_time(ii, messages); + auto [geometry, msgs] = make_geometry(ii); + auto [mesh, msgs2] = make_mesh(ii); + auto [time, msgs3] = make_time(ii); + ss.geometry = geometry; + ss.mesh = mesh; + ss.time = time; + std::vector messages; + for (auto msgz : + std::vector>{msgs, msgs2, msgs3}) { + for (auto msg : msgz) { + messages.push_back(msg); + } + } return std::make_pair(ss, messages); } diff --git a/src/inputs/solver_impl.hpp b/src/inputs/solver_impl.hpp index b7e0c0ab9a13ceeedd8521b151ad2a0929c0ccc9..f854566dceeff31908c8afbd86552437f742db79 100644 --- a/src/inputs/solver_impl.hpp +++ b/src/inputs/solver_impl.hpp @@ -1,9 +1,12 @@ #include namespace solver { -GeometrySettings make_geometry(solver::InputInfo, std::vector &); -MeshSettings make_mesh(solver::InputInfo, std::vector &); -TimeSettings make_time(solver::InputInfo, std::vector &); +std::pair> + make_geometry(solver::InputInfo); +std::pair> + make_mesh(solver::InputInfo); +std::pair> + make_time(solver::InputInfo); void add_missing_msg(std::string key, std::vector &, Array); void add_msg(std::string key, std::vector &, Array); } // namespace solver diff --git a/src/inputs/tests/meson.build b/src/inputs/tests/meson.build index 74f0aa91a640b4e78f172f2575977308cf691c48..2a9d2a85ad9dfefba7ec13db11fd8b8b5d6a26e5 100644 --- a/src/inputs/tests/meson.build +++ b/src/inputs/tests/meson.build @@ -1,9 +1,9 @@ -unit_exe = executable( - 'unit_tests', +test_inputs = executable( + 'unit_tests_inputs', 'parser.t.cpp', 'solver.t.cpp', 'main.cpp', include_directories: [parser_inc, catch2_inc], link_with: lib_inputs_parser ) -test('unit_test', unit_exe) +test('unit_test_inputs', test_inputs) diff --git a/src/inputs/tests/solver.t.cpp b/src/inputs/tests/solver.t.cpp index e0ed6f74fee04ad5edaf28d60dd9e6b234289cab..c7343f4fb9073b39da0237c36fc31775460c804c 100644 --- a/src/inputs/tests/solver.t.cpp +++ b/src/inputs/tests/solver.t.cpp @@ -1,18 +1,35 @@ -// tests - #include "catch2/catch.hpp" #include -#include +#include -TEST_CASE("from_origin", "[]") { +TEST_CASE("GeometrySettings", "[]") { solver::InputInfo ii; - // Geometry ii[PROB_LO] = std::vector({-4, -5, -6}); ii[PROB_HI] = solver::NumberArray({0.004, 0.001, 0.001}); - ii[PERIODIC] = solver::NumberArray({0, 0, 0}); - ii[CSG_FILENAME] = solver::StringArray({"geometry.csg",}); + ii[PERIODIC] = solver::NumberArray({1, 0, 0}); + ii[CSG_FILENAME] = solver::StringArray({ + "geometry.csg", + }); + + auto [geo, messages] = solver::make_geometry(ii); + + auto [xx, yy, zz] = geo.axes; + CHECK(xx.high == 0.004); + CHECK(xx.low == -4); + CHECK(yy.high == 0.001); + CHECK(yy.low == -5); + CHECK(zz.high == 0.001); + CHECK(zz.low == -6); + CHECK(xx.periodic); + CHECK_FALSE(yy.periodic); + CHECK_FALSE(zz.periodic); + CHECK(geo.csg_filename == "geometry.csg"); +} + +TEST_CASE("MeshSettings", "[]") { + solver::InputInfo ii; // Mesh ii[N_CELL] = solver::NumberArray({11, 22, 33}); @@ -27,32 +44,11 @@ TEST_CASE("from_origin", "[]") { ii[PARTICLE_GRID_SIZE_Y] = solver::NumberArray({95}); ii[PARTICLE_GRID_SIZE_Z] = solver::NumberArray({96}); - // Time - ii[DT_MAX] = solver::NumberArray({99.99}); - ii[DT_MIN] = solver::NumberArray({0.001}); - ii[MAXSTEP] = solver::NumberArray({39}); - ii[TSTOP] = solver::NumberArray({3.14}); - ii[FIXED_DT] = solver::NumberArray({1}); - ii[CFL] = solver::NumberArray({0.77}); - ii[TCOLL_RATIO] = solver::NumberArray({49.2}); + auto [mesh, messages] = solver::make_mesh(ii); - auto [sv, messages] = solver::make_solver(ii); - - SECTION(" Geometry fields ") { - auto [xx, yy, zz] = sv.geometry.axes; - CHECK(xx.high == 0.004); - CHECK(xx.low == -4); - CHECK(yy.high == 0.001); - CHECK(yy.low == -5); - CHECK(zz.high == 0.001); - CHECK(zz.low == -6); - CHECK_FALSE(xx.periodic); - CHECK_FALSE(yy.periodic); - CHECK_FALSE(zz.periodic); - } SECTION(" Mesh fields ") { - CHECK(sv.mesh.blocking_factor == 222); - auto [mx, my, mz] = sv.mesh.axes; + CHECK(mesh.blocking_factor == 222); + auto [mx, my, mz] = mesh.axes; CHECK(mx.n_cell == 11); CHECK(my.n_cell == 22); CHECK(mz.n_cell == 33); @@ -69,15 +65,30 @@ TEST_CASE("from_origin", "[]") { CHECK(my.fluid_max_tile_size == 4567); CHECK(mz.fluid_max_tile_size == 7890); } +} + +TEST_CASE("TimeSettings", "[]") { + solver::InputInfo ii; + + // Time + ii[DT_MAX] = solver::NumberArray({99.99}); + ii[DT_MIN] = solver::NumberArray({0.001}); + ii[MAXSTEP] = solver::NumberArray({39}); + ii[TSTOP] = solver::NumberArray({3.14}); + ii[FIXED_DT] = solver::NumberArray({1}); + ii[CFL] = solver::NumberArray({0.77}); + ii[TCOLL_RATIO] = solver::NumberArray({49.2}); + + auto [time, messages] = solver::make_time(ii); SECTION(" Time fields ") { - CHECK(sv.time.dt_max == 99.99); - CHECK(sv.time.dt_min == 0.001); - CHECK(sv.time.max_step == 39); - CHECK(sv.time.tstop == 3.14); - CHECK(sv.time.fixed_dt); - CHECK(sv.time.cfl == 0.77); - CHECK(sv.time.tcoll_ratio == 49.2); + CHECK(time.dt_max == 99.99); + CHECK(time.dt_min == 0.001); + CHECK(time.max_step == 39); + CHECK(time.tstop == 3.14); + CHECK(time.fixed_dt); + CHECK(time.cfl == 0.77); + CHECK(time.tcoll_ratio == 49.2); } } diff --git a/src/inputs/time.cpp b/src/inputs/time.cpp index 3748610be5a3e488bb1c6c2cdac0c17cabcbde2e..000dda197e02b54954841320fb1f9587a0fa23ed 100644 --- a/src/inputs/time.cpp +++ b/src/inputs/time.cpp @@ -2,8 +2,9 @@ namespace solver { -solver::TimeSettings make_time(solver::InputInfo ii, - std::vector &messages) { +std::pair> +make_time(solver::InputInfo ii) { + std::vector messages; solver::TimeSettings time; auto dt_max = std::get(ii[DT_MAX]); @@ -58,6 +59,6 @@ solver::TimeSettings make_time(solver::InputInfo ii, time.tcoll_ratio = tcoll_ratio[0]; } - return time; + return std::make_pair(time, messages); } } // namespace solver