File indexing completed on 2025-02-23 09:16:28
0001
0002
0003
0004
0005
0006
0007
0008
0009 #include <boost/test/data/test_case.hpp>
0010 #include <boost/test/unit_test.hpp>
0011
0012 #include "Acts/Plugins/Json/ActsJson.hpp"
0013 #include "Acts/Plugins/Json/ProtoAxisJsonConverter.hpp"
0014 #include "Acts/Tests/CommonHelpers/FloatComparisons.hpp"
0015 #include "Acts/Utilities/Axis.hpp"
0016 #include "Acts/Utilities/AxisDefinitions.hpp"
0017 #include "Acts/Utilities/ProtoAxis.hpp"
0018
0019 BOOST_AUTO_TEST_SUITE(ProtoAxisJsonConversion)
0020
0021 BOOST_AUTO_TEST_CASE(EquidistantProtoAxisJsonConversion) {
0022 using enum Acts::AxisBoundaryType;
0023 using enum Acts::AxisDirection;
0024 using enum Acts::AxisType;
0025
0026
0027 Acts::ProtoAxis epab(AxisX, Bound, 0.0, 1.0, 10);
0028
0029 nlohmann::json jProtoAxis = Acts::ProtoAxisJsonConverter::toJson(epab);
0030
0031 BOOST_CHECK(jProtoAxis.contains("axis"));
0032 BOOST_CHECK(jProtoAxis.contains("axis_dir"));
0033 BOOST_CHECK(jProtoAxis.contains("autorange"));
0034
0035 Acts::ProtoAxis epabRead = Acts::ProtoAxisJsonConverter::fromJson(jProtoAxis);
0036
0037 BOOST_CHECK_EQUAL(epabRead.getAxisDirection(), epab.getAxisDirection());
0038 BOOST_CHECK_EQUAL(epabRead.getAxis(), epab.getAxis());
0039 BOOST_CHECK_EQUAL(epabRead.isAutorange(), epab.isAutorange());
0040 BOOST_CHECK_EQUAL(epabRead.toString(), epab.toString());
0041 }
0042
0043 BOOST_AUTO_TEST_CASE(AutorangeProtoAxisJsonConversion) {
0044 using enum Acts::AxisBoundaryType;
0045 using enum Acts::AxisDirection;
0046 using enum Acts::AxisType;
0047
0048
0049 Acts::ProtoAxis epa(AxisX, Bound, 10);
0050
0051 nlohmann::json jProtoAxis = Acts::ProtoAxisJsonConverter::toJson(epa);
0052
0053 BOOST_CHECK(jProtoAxis.contains("axis"));
0054 BOOST_CHECK(jProtoAxis.contains("axis_dir"));
0055 BOOST_CHECK(jProtoAxis.contains("autorange"));
0056
0057 Acts::ProtoAxis epaRead = Acts::ProtoAxisJsonConverter::fromJson(jProtoAxis);
0058
0059 BOOST_CHECK_EQUAL(epaRead.getAxisDirection(), epa.getAxisDirection());
0060 BOOST_CHECK_EQUAL(epaRead.getAxis(), epa.getAxis());
0061 BOOST_CHECK_EQUAL(epaRead.isAutorange(), epa.isAutorange());
0062 BOOST_CHECK_EQUAL(epaRead.toString(), epa.toString());
0063 }
0064
0065 BOOST_AUTO_TEST_CASE(VariableProtoAxisJsonConversion) {
0066 using enum Acts::AxisBoundaryType;
0067 using enum Acts::AxisDirection;
0068 using enum Acts::AxisType;
0069
0070
0071 Acts::ProtoAxis vpab(AxisX, Bound, {0.0, 1.0, 10});
0072
0073 nlohmann::json jProtoAxis = Acts::ProtoAxisJsonConverter::toJson(vpab);
0074 BOOST_CHECK(jProtoAxis.contains("axis"));
0075 BOOST_CHECK(jProtoAxis.contains("axis_dir"));
0076 BOOST_CHECK(jProtoAxis.contains("autorange"));
0077
0078 Acts::ProtoAxis vpabRead = Acts::ProtoAxisJsonConverter::fromJson(jProtoAxis);
0079
0080 BOOST_CHECK_EQUAL(vpabRead.getAxisDirection(), vpab.getAxisDirection());
0081 BOOST_CHECK_EQUAL(vpabRead.getAxis(), vpab.getAxis());
0082 BOOST_CHECK_EQUAL(vpabRead.isAutorange(), vpab.isAutorange());
0083 BOOST_CHECK_EQUAL(vpabRead.toString(), vpab.toString());
0084 }
0085
0086 BOOST_AUTO_TEST_CASE(InvalidAndValidInputJson) {
0087
0088 nlohmann::json jValidEqAxis = {{"bins", 10},
0089 {"boundary_type", "Bound"},
0090 {"range", std::array<double, 2>{0.0, 1.0}},
0091 {"type", "Equidistant"}};
0092
0093
0094 nlohmann::json jValidEq = {
0095 {"axis", jValidEqAxis}, {"axis_dir", "AxisX"}, {"autorange", false}};
0096
0097 BOOST_CHECK_NO_THROW(Acts::ProtoAxisJsonConverter::fromJson(jValidEq));
0098
0099
0100 nlohmann::json jInvalidEqAxis = jValidEqAxis;
0101 jInvalidEqAxis["bins"] = 0;
0102
0103 nlohmann::json jInvalidEq = {
0104 {"axis", jInvalidEqAxis}, {"axis_dir", "AxisX"}, {"autorange", false}};
0105
0106 BOOST_CHECK_THROW(Acts::ProtoAxisJsonConverter::fromJson(jInvalidEq),
0107 std::invalid_argument);
0108
0109
0110 jInvalidEq = {
0111 {"axis", jInvalidEqAxis}, {"axis_dir", "AxisX"}, {"autorange", true}};
0112 BOOST_CHECK_THROW(Acts::ProtoAxisJsonConverter::fromJson(jInvalidEq),
0113 std::invalid_argument);
0114
0115
0116 jInvalidEqAxis = jValidEqAxis;
0117 jInvalidEqAxis["range"] = std::array<double, 2>{1.0, 0.0};
0118
0119 jInvalidEq = {
0120 {"axis", jInvalidEqAxis}, {"axis_dir", "AxisX"}, {"autorange", false}};
0121
0122 BOOST_CHECK_THROW(Acts::ProtoAxisJsonConverter::fromJson(jInvalidEq),
0123 std::invalid_argument);
0124
0125 nlohmann::json jValidVarAxis = {
0126 {"boundary_type", "Bound"},
0127 {"boundaries", std::vector<double>{0.0, 0.25, 0.75, 1.0}},
0128 {"type", "Variable"}};
0129
0130
0131 nlohmann::json jValidVar = {
0132 {"axis", jValidVarAxis}, {"axis_dir", "AxisX"}, {"autorange", false}};
0133 BOOST_CHECK_NO_THROW(Acts::ProtoAxisJsonConverter::fromJson(jValidVar));
0134
0135
0136 nlohmann::json jInvalidVarAxis = jValidVarAxis;
0137 jInvalidVarAxis["boundaries"] = std::vector<double>{0.0};
0138
0139 nlohmann::json jInvalidVar = {
0140 {"axis", jInvalidVarAxis}, {"axis_dir", "AxisX"}, {"autorange", false}};
0141 BOOST_CHECK_THROW(Acts::ProtoAxisJsonConverter::fromJson(jInvalidVar),
0142 std::invalid_argument);
0143
0144
0145 jInvalidVarAxis = jValidVarAxis;
0146 jInvalidVarAxis["boundaries"] = std::vector<double>{0.0, 0.75, 0.25, 1.0};
0147
0148 jInvalidVar = {
0149 {"axis", jInvalidVarAxis}, {"axis_dir", "AxisX"}, {"autorange", false}};
0150
0151 BOOST_CHECK_THROW(Acts::ProtoAxisJsonConverter::fromJson(jInvalidVar),
0152 std::invalid_argument);
0153 }
0154
0155 BOOST_AUTO_TEST_SUITE_END()