test(tests): added test suite
The test suite is extensive. Note that LLMs were used to aid in the development of the test suite. All LLM generated code was manually reviewed.
This commit is contained in:
38
tests/solver/archive.cpp
Normal file
38
tests/solver/archive.cpp
Normal file
@@ -0,0 +1,38 @@
|
||||
#include <sstream>
|
||||
#include <catch2/catch_test_macros.hpp>
|
||||
#include "serif/tests/solver/archive.hpp"
|
||||
|
||||
TEST_CASE("Validation rechecks reject missing mismatched and repeated coordinate identities", "[unit][solver][validation_archive]") {
|
||||
namespace archive = serif::tests::solver::archive;
|
||||
const std::string identity = "coordinates=density_primal_v1;density=0:8;potential=8:8";
|
||||
std::istringstream valid("stage=seed\n" + identity + "\nstage=complete_converged\n");
|
||||
CHECK_NOTHROW(archive::require_preparation_identity(valid, identity));
|
||||
for (const std::string& text : {
|
||||
std::string{"stage=complete_converged\n"},
|
||||
std::string{"coordinates=mixed_gravity_v1;density=0:8;potential=8:8\n"},
|
||||
std::string{"coordinates=density_primal_v1;density=8:8;potential=0:8\n"},
|
||||
identity + '\n' + identity + '\n'}) {
|
||||
std::istringstream invalid(text);
|
||||
CHECK_THROWS(archive::require_preparation_identity(invalid, identity));
|
||||
}
|
||||
const std::string mapping = "mapping=kelvin_mesh_radii_v1,r_star_ref=1,r_inf_ref=5";
|
||||
std::istringstream correct_map(mapping + '\n');
|
||||
CHECK_NOTHROW(archive::require_preparation_identity(correct_map, mapping));
|
||||
std::istringstream wrong_map("mapping=kelvin_mesh_radii_v1,r_star_ref=1,r_inf_ref=2\n");
|
||||
CHECK_THROWS(archive::require_preparation_identity(wrong_map, mapping));
|
||||
std::istringstream missing_map(identity + '\n');
|
||||
CHECK_THROWS(archive::require_preparation_identity(missing_map, mapping));
|
||||
}
|
||||
|
||||
TEST_CASE("Validation coordinate identities distinguish equal-length layouts and meshes", "[unit][solver][validation_archive]") {
|
||||
namespace fixture = serif::tests::solver;
|
||||
namespace archive = fixture::archive;
|
||||
using Fields = serif::utils::dependencies::KeyList<fixture::Density, fixture::Potential, fixture::Constant, fixture::Omega, fixture::Shape>;
|
||||
using SwappedFields = serif::utils::dependencies::KeyList<fixture::Potential, fixture::Density, fixture::Constant, fixture::Omega, fixture::Shape>;
|
||||
const serif::discretization::blocks::SystemLayout<Fields, Fields> layout{.state_sizes = {8, 8, 1, 1, 25}, .residual_sizes = {8, 8, 1, 1, 25}};
|
||||
const serif::discretization::blocks::SystemLayout<SwappedFields, SwappedFields> swapped{.state_sizes = layout.state_sizes, .residual_sizes = layout.residual_sizes};
|
||||
const std::string identity = archive::coordinate_identity(layout, "mesh-a");
|
||||
CHECK(identity != archive::coordinate_identity(swapped, "mesh-a"));
|
||||
CHECK(identity != archive::coordinate_identity(layout, "mesh-b"));
|
||||
CHECK(identity.find("density=0:8;potential=8:8;surface_level=16:1;angular_velocity=17:1;shape=18:25") != std::string::npos);
|
||||
}
|
||||
Reference in New Issue
Block a user