#ifndef FESA_TESTS_REFERENCE_MITC4_DRILLING_REPORT_H_ #define FESA_TESTS_REFERENCE_MITC4_DRILLING_REPORT_H_ #include #include #include #include #include #include #include namespace fesa::test { struct Mitc4DrillingFrameReport { std::string storage_step; std::uint64_t frame_index; std::array raw_equilibrium; std::array drilling_moment; std::array equilibrium_with_drilling; }; struct Mitc4DrillingDiagnosticsReport { std::string formulation; std::uint64_t version; std::vector frames; }; inline void WriteDrillingDiagnosticsJson( std::ostream& stream, const std::optional& report) { if (!report) { stream << "null"; return; } stream << "{\"formulation\":\"" << report->formulation << "\",\"version\":" << report->version << ",\"frames\":["; const auto numbers = [&](const auto& values) { stream << '['; for (std::size_t i = 0; i < values.size(); ++i) { if (i != 0U) stream << ','; stream << values[i]; } stream << ']'; }; for (std::size_t i = 0; i < report->frames.size(); ++i) { if (i != 0U) stream << ','; const auto& frame = report->frames[i]; stream << "{\"storage_step\":\"Step-1\",\"frame_index\":" << frame.frame_index << ",\"raw_equilibrium\":"; numbers(frame.raw_equilibrium); stream << ",\"drilling_moment\":"; numbers(frame.drilling_moment); stream << ",\"equilibrium_with_drilling\":"; numbers(frame.equilibrium_with_drilling); stream << '}'; } stream << "]}"; } } // namespace fesa::test #endif // FESA_TESTS_REFERENCE_MITC4_DRILLING_REPORT_H_