From 42d7133a2b0f845d9e78366fc9760919ba292d8f Mon Sep 17 00:00:00 2001 From: Alexander Belyaev <32522095+pifon2a@users.noreply.github.com> Date: Fri, 20 Jul 2018 09:30:03 +0200 Subject: [PATCH] [GenericPoseGraph] Move ParseProto and Near to test_helpers.h (#1307) --- .../relative_pose_cost_2d_test.cc | 16 ++++++-------- .../relative_pose_cost_3d_test.cc | 20 ++++++------------ .../internal/testing/test_helpers.h | 21 ++++++++++++++----- .../optimizer/ceres_optimizer_test.cc | 14 +++---------- 4 files changed, 31 insertions(+), 40 deletions(-) diff --git a/cartographer/pose_graph/constraint/cost_function/relative_pose_cost_2d_test.cc b/cartographer/pose_graph/constraint/cost_function/relative_pose_cost_2d_test.cc index 180c42e..9a1cb10 100644 --- a/cartographer/pose_graph/constraint/cost_function/relative_pose_cost_2d_test.cc +++ b/cartographer/pose_graph/constraint/cost_function/relative_pose_cost_2d_test.cc @@ -18,8 +18,7 @@ #include "cartographer/common/make_unique.h" #include "cartographer/mapping/internal/optimization/cost_functions/cost_helpers.h" -#include "gmock/gmock.h" -#include "google/protobuf/text_format.h" +#include "cartographer/pose_graph/internal/testing/test_helpers.h" namespace cartographer { namespace pose_graph { @@ -30,8 +29,10 @@ constexpr int kResidualsCount = 3; constexpr int kParameterBlocksCount = 2; constexpr int kJacobianColDimension = kResidualsCount * kPoseDimension; -using ::google::protobuf::TextFormat; using ::testing::ElementsAre; +using testing::Near; +using testing::ParseProto; + using ResidualType = std::array; using JacobianType = std::array, kParameterBlocksCount>; @@ -67,7 +68,6 @@ class AutoDiffRelativePoseCost { class RelativePoseCost2DTest : public ::testing::Test { public: RelativePoseCost2DTest() { - proto::RelativePose2D::Parameters parameters; constexpr char kParameters[] = R"PROTO( first_t_second { translation: { x: 1 y: 1 } @@ -76,8 +76,9 @@ class RelativePoseCost2DTest : public ::testing::Test { translation_weight: 1 rotation_weight: 10 )PROTO"; - EXPECT_TRUE(TextFormat::ParseFromString(kParameters, ¶meters)); + auto parameters = + ParseProto(kParameters); auto_diff_cost_ = common::make_unique(parameters); analytical_cost_ = common::make_unique< ceres::AutoDiffCostFunction analytical_cost_; }; -::testing::Matcher Near(double expected) { - constexpr double kPrecision = 1e-05; - return ::testing::DoubleNear(expected, kPrecision); -} - TEST_F(RelativePoseCost2DTest, CompareAutoDiffAndAnalytical) { std::array start_pose{{1., 1., 1.}}; std::array end_pose{{10., 1., 100.}}; diff --git a/cartographer/pose_graph/constraint/cost_function/relative_pose_cost_3d_test.cc b/cartographer/pose_graph/constraint/cost_function/relative_pose_cost_3d_test.cc index 62c92f7..102241f 100644 --- a/cartographer/pose_graph/constraint/cost_function/relative_pose_cost_3d_test.cc +++ b/cartographer/pose_graph/constraint/cost_function/relative_pose_cost_3d_test.cc @@ -17,26 +17,20 @@ #include "cartographer/pose_graph/constraint/cost_function/relative_pose_cost_3d.h" #include "cartographer/pose_graph/internal/testing/test_helpers.h" -#include "gmock/gmock.h" -#include "google/protobuf/text_format.h" namespace cartographer { namespace pose_graph { namespace { -using ::google::protobuf::TextFormat; using ::testing::ElementsAre; using testing::EqualsProto; +using testing::Near; +using testing::ParseProto; using PositionType = std::array; using RotationType = std::array; using ResidualType = std::array; -::testing::Matcher Near(double expected) { - constexpr double kPrecision = 1e-05; - return ::testing::DoubleNear(expected, kPrecision); -} - constexpr char kParameters[] = R"PROTO( first_t_second { translation: { x: 1 y: 2 z: 3 } @@ -47,18 +41,16 @@ constexpr char kParameters[] = R"PROTO( )PROTO"; TEST(RelativePoseCost3DTest, SerializesCorrectly) { - proto::RelativePose3D::Parameters relative_pose_parameters; - ASSERT_TRUE( - TextFormat::ParseFromString(kParameters, &relative_pose_parameters)); + auto relative_pose_parameters = + ParseProto(kParameters); RelativePoseCost3D relative_pose_cost_3d(relative_pose_parameters); const auto actual_proto = relative_pose_cost_3d.ToProto(); EXPECT_THAT(actual_proto, EqualsProto(kParameters)); } TEST(RelativePoseCost3DTest, EvaluatesCorrectly) { - proto::RelativePose3D::Parameters relative_pose_parameters; - ASSERT_TRUE( - TextFormat::ParseFromString(kParameters, &relative_pose_parameters)); + auto relative_pose_parameters = + ParseProto(kParameters); RelativePoseCost3D relative_pose_cost_3d(relative_pose_parameters); const PositionType kPosition1{{1., 1., 1.}}; diff --git a/cartographer/pose_graph/internal/testing/test_helpers.h b/cartographer/pose_graph/internal/testing/test_helpers.h index 13664d8..50861e3 100644 --- a/cartographer/pose_graph/internal/testing/test_helpers.h +++ b/cartographer/pose_graph/internal/testing/test_helpers.h @@ -24,14 +24,25 @@ namespace cartographer { namespace testing { +template +ProtoType ParseProto(const std::string& proto_string) { + ProtoType proto; + EXPECT_TRUE( + ::google::protobuf::TextFormat::ParseFromString(proto_string, &proto)); + return proto; +} + MATCHER_P(EqualsProto, expected_proto_string, "") { using ConstProtoType = typename std::remove_reference::type; + using ProtoType = typename std::remove_cv::type; - typename std::remove_cv::type expected_proto; - EXPECT_TRUE(google::protobuf::TextFormat::ParseFromString( - expected_proto_string, &expected_proto)); - return google::protobuf::util::MessageDifferencer::Equals(arg, - expected_proto); + return google::protobuf::util::MessageDifferencer::Equals( + arg, ParseProto(expected_proto_string)); +} + +::testing::Matcher Near(double expected) { + constexpr double kPrecision = 1e-05; + return ::testing::DoubleNear(expected, kPrecision); } } // namespace testing diff --git a/cartographer/pose_graph/optimizer/ceres_optimizer_test.cc b/cartographer/pose_graph/optimizer/ceres_optimizer_test.cc index 4f4c8fa..b49a391 100644 --- a/cartographer/pose_graph/optimizer/ceres_optimizer_test.cc +++ b/cartographer/pose_graph/optimizer/ceres_optimizer_test.cc @@ -18,14 +18,14 @@ #include "cartographer/common/make_unique.h" #include "cartographer/pose_graph/constraint/relative_pose_constraint_2d.h" -#include "google/protobuf/text_format.h" - -#include "gtest/gtest.h" +#include "cartographer/pose_graph/internal/testing/test_helpers.h" namespace cartographer { namespace pose_graph { namespace { +using testing::ParseProto; + // TODO(pifon): Use the factory function, when the factory is done. Pose2D GetPose2D(const proto::Node& proto) { return {NodeId(proto.id()), proto.constant(), @@ -33,14 +33,6 @@ Pose2D GetPose2D(const proto::Node& proto) { proto.parameters().pose_2d().rotation()}; } -template -ProtoType ParseProto(const std::string& proto_string) { - ProtoType proto; - EXPECT_TRUE( - ::google::protobuf::TextFormat::ParseFromString(proto_string, &proto)); - return proto; -} - constexpr char kStartNode[] = R"PROTO( id { object_id: "start_node" timestamp: 1 } constant: false