#pragma once #include #include #include #include #include #include #include namespace fesa { enum class ReferenceQuantity { displacement, reaction, internal_force, centroid_stress }; struct Tolerance final { double relative; double absolute_scale; }; struct ResultPosition final { std::string instance_name; std::int64_t entity_label; std::optional end_node_label; }; struct ComparisonSample final { ReferenceQuantity quantity; ResultPosition position; std::vector reference; std::vector actual; Tolerance tolerance; }; struct ComparisonReport final { bool passed; double maximum_normalized_error; std::vector failures; }; struct ComparisonSampleMatch final { std::optional sample; std::vector failures; }; [[nodiscard]] ComparisonSampleMatch make_comparison_sample( const ResultFrame& frame, ReferenceQuantity quantity, const ResultPosition& position, std::span reference, Tolerance tolerance); [[nodiscard]] ComparisonReport compare_samples( std::span samples); } // namespace fesa