test: strengthen core harness guardrails
This commit is contained in:
+34
-5
@@ -3,10 +3,17 @@
|
||||
#include <cmath>
|
||||
#include <functional>
|
||||
#include <iostream>
|
||||
#include <type_traits>
|
||||
#include <stdexcept>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
static_assert(std::is_same_v<fesa::Real, double>, "Real must remain double");
|
||||
static_assert(std::is_same_v<fesa::GlobalId, std::int64_t>, "GlobalId must remain int64");
|
||||
static_assert(std::is_same_v<fesa::LocalIndex, std::int64_t>, "LocalIndex must remain int64");
|
||||
static_assert(std::is_same_v<fesa::EquationId, std::int64_t>, "EquationId must remain int64");
|
||||
static_assert(std::is_same_v<fesa::SparseIndex, std::int64_t>, "SparseIndex must remain int64");
|
||||
|
||||
namespace {
|
||||
|
||||
using TestFn = std::function<void()>;
|
||||
@@ -103,11 +110,24 @@ fesa::Domain parsedPhase1Domain() {
|
||||
FESA_TEST(core_types_and_dof_mapping_are_stable) {
|
||||
FESA_CHECK(sizeof(fesa::Real) == 8);
|
||||
FESA_CHECK(sizeof(fesa::GlobalId) == 8);
|
||||
FESA_CHECK(sizeof(fesa::LocalIndex) == 8);
|
||||
FESA_CHECK(sizeof(fesa::EquationId) == 8);
|
||||
FESA_CHECK(fesa::abaqusDofNumber(fesa::Dof::UX) == 1);
|
||||
FESA_CHECK(fesa::abaqusDofNumber(fesa::Dof::RZ) == 6);
|
||||
FESA_CHECK(fesa::dofFromAbaqus(3).value() == fesa::Dof::UZ);
|
||||
FESA_CHECK(std::string(fesa::dofLabel(fesa::Dof::RY)) == "RY");
|
||||
FESA_CHECK(sizeof(fesa::SparseIndex) == 8);
|
||||
FESA_CHECK(std::numeric_limits<fesa::GlobalId>::is_signed);
|
||||
FESA_CHECK(std::numeric_limits<fesa::LocalIndex>::is_signed);
|
||||
FESA_CHECK(std::numeric_limits<fesa::EquationId>::is_signed);
|
||||
FESA_CHECK(std::numeric_limits<fesa::SparseIndex>::is_signed);
|
||||
|
||||
const auto dofs = fesa::allDofs();
|
||||
FESA_CHECK(dofs.size() == 6);
|
||||
for (std::size_t i = 0; i < dofs.size(); ++i) {
|
||||
const int abaqus_number = static_cast<int>(i + 1);
|
||||
FESA_CHECK(fesa::abaqusDofNumber(dofs[i]) == abaqus_number);
|
||||
FESA_CHECK(fesa::dofFromAbaqus(abaqus_number).value() == dofs[i]);
|
||||
FESA_CHECK(std::string(fesa::dofLabel(dofs[i])) == fesa::displacementComponentLabels()[i]);
|
||||
}
|
||||
FESA_CHECK(!fesa::dofFromAbaqus(0).has_value());
|
||||
FESA_CHECK(!fesa::dofFromAbaqus(7).has_value());
|
||||
}
|
||||
|
||||
FESA_TEST(parser_accepts_phase1_subset) {
|
||||
@@ -176,11 +196,20 @@ FESA_TEST(domain_validation_reports_missing_property_and_targets) {
|
||||
domain.nodes[2] = {2, {1, 0, 0}};
|
||||
domain.nodes[3] = {3, {1, 1, 0}};
|
||||
domain.nodes[4] = {4, {0, 1, 0}};
|
||||
domain.elements[1] = {1, fesa::ElementType::MITC4, {1, 2, 3, 4}, ""};
|
||||
domain.elements[1] = {1, fesa::ElementType::MITC4, {1, 2, 3, 99}, ""};
|
||||
domain.shell_sections.push_back({"MISSING_ELSET", "MISSING_MAT", 0.1});
|
||||
domain.loads.push_back({"MISSING", 3, 1.0});
|
||||
auto diagnostics = fesa::validateDomain(domain);
|
||||
FESA_CHECK(fesa::containsDiagnostic(diagnostics, "FESA-VALIDATION-ELEMENT-MISSING-NODE"));
|
||||
FESA_CHECK(fesa::containsDiagnostic(diagnostics, "FESA-VALIDATION-MISSING-PROPERTY"));
|
||||
FESA_CHECK(fesa::containsDiagnostic(diagnostics, "FESA-VALIDATION-MISSING-ELSET"));
|
||||
FESA_CHECK(fesa::containsDiagnostic(diagnostics, "FESA-VALIDATION-MISSING-MATERIAL"));
|
||||
FESA_CHECK(fesa::containsDiagnostic(diagnostics, "FESA-VALIDATION-MISSING-NSET"));
|
||||
for (const auto& diagnostic : diagnostics) {
|
||||
FESA_CHECK(!diagnostic.code.empty());
|
||||
FESA_CHECK(!diagnostic.message.empty());
|
||||
FESA_CHECK(!diagnostic.source.keyword.empty());
|
||||
}
|
||||
}
|
||||
|
||||
FESA_TEST(dof_manager_owns_equation_numbering_and_reconstruction) {
|
||||
|
||||
Reference in New Issue
Block a user