#include #include #include namespace { int fail() { return 1; } bool all_zero(const std::vector& values) { for (const double value : values) { if (value != 0.0) { return false; } } return true; } } // namespace int main() { fesa::analysis::AnalysisState state{3}; if (state.displacement().size() != 3 || state.velocity().size() != 3 || state.acceleration().size() != 3 || state.temperature().size() != 3 || state.external_force().size() != 3 || state.internal_force().size() != 3 || state.residual().size() != 3) { return fail(); } if (!all_zero(state.displacement()) || !all_zero(state.residual())) { return fail(); } state.set_displacement({1.0, 2.0, 3.0}); if (state.displacement()[2] != 3.0) { return fail(); } state.set_external_force({10.0, 20.0, 30.0}); state.set_internal_force({1.0, 2.0, 3.0}); state.update_residual(); if (state.residual()[0] != 9.0 || state.residual()[1] != 18.0 || state.residual()[2] != 27.0) { return fail(); } try { state.set_displacement({1.0}); return fail(); } catch (const std::invalid_argument&) { } state.iteration_state().time = 1.25; state.iteration_state().increment = 2; state.iteration_state().iteration = 3; if (state.iteration_state().time != 1.25 || state.iteration_state().increment != 2 || state.iteration_state().iteration != 3) { return fail(); } state.set_element_state(fesa::core::ElementId{7}, {4.0, 5.0}); const auto* element_state = state.element_state(fesa::core::ElementId{7}); if (element_state == nullptr || element_state->size() != 2 || (*element_state)[1] != 5.0) { return fail(); } if (state.element_state(fesa::core::ElementId{8}) != nullptr) { return fail(); } return 0; }