scenario_simulator_v2 C++ API
expect_eq_macros.hpp
Go to the documentation of this file.
1 // Copyright 2015 TIER IV, Inc. All rights reserved.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 
15 #ifndef TRAFFIC_SIMULATOR__TEST__EXPECT_EQ_MACROS_HPP_
16 #define TRAFFIC_SIMULATOR__TEST__EXPECT_EQ_MACROS_HPP_
17 
18 #include <gtest/gtest.h>
19 
20 #include <geometry_msgs/msg/point.hpp>
21 #include <geometry_msgs/msg/vector3.hpp>
22 
23 #define EXPECT_DECIMAL_EQ(DATA0, DATA1, TOLERANCE) \
24  EXPECT_TRUE(std::fabs(DATA0 - DATA1) <= std::fabs(TOLERANCE));
25 
26 #define EXPECT_POINT_EQ(DATA0, DATA1) \
27  EXPECT_DOUBLE_EQ(DATA0.x, DATA1.x); \
28  EXPECT_DOUBLE_EQ(DATA0.y, DATA1.y); \
29  EXPECT_DOUBLE_EQ(DATA0.z, DATA1.z);
30 
31 #define EXPECT_POINT_EQ_STREAM(DATA0, DATA1, STREAM_MESSAGE) \
32  EXPECT_DOUBLE_EQ(DATA0.x, DATA1.x) << STREAM_MESSAGE; \
33  EXPECT_DOUBLE_EQ(DATA0.y, DATA1.y) << STREAM_MESSAGE; \
34  EXPECT_DOUBLE_EQ(DATA0.z, DATA1.z) << STREAM_MESSAGE;
35 
36 #define EXPECT_POINT_NEAR(DATA0, DATA1, EPS) \
37  EXPECT_NEAR(DATA0.x, DATA1.x, EPS); \
38  EXPECT_NEAR(DATA0.y, DATA1.y, EPS); \
39  EXPECT_NEAR(DATA0.z, DATA1.z, EPS);
40 
41 #define EXPECT_POINT_NEAR_STREAM(DATA0, DATA1, EPS, STREAM_MESSAGE) \
42  EXPECT_NEAR(DATA0.x, DATA1.x, EPS) << STREAM_MESSAGE; \
43  EXPECT_NEAR(DATA0.y, DATA1.y, EPS) << STREAM_MESSAGE; \
44  EXPECT_NEAR(DATA0.z, DATA1.z, EPS) << STREAM_MESSAGE;
45 
46 #define EXPECT_VECTOR3_EQ(DATA0, DATA1) \
47  EXPECT_DOUBLE_EQ(DATA0.x, DATA1.x); \
48  EXPECT_DOUBLE_EQ(DATA0.y, DATA1.y); \
49  EXPECT_DOUBLE_EQ(DATA0.z, DATA1.z);
50 
51 #define EXPECT_VECTOR3_NEAR(DATA0, DATA1, EPS) \
52  EXPECT_NEAR(DATA0.x, DATA1.x, EPS); \
53  EXPECT_NEAR(DATA0.y, DATA1.y, EPS); \
54  EXPECT_NEAR(DATA0.z, DATA1.z, EPS);
55 
56 #define EXPECT_QUATERNION_EQ(DATA0, DATA1) \
57  EXPECT_DOUBLE_EQ(DATA0.x, DATA1.x); \
58  EXPECT_DOUBLE_EQ(DATA0.y, DATA1.y); \
59  EXPECT_DOUBLE_EQ(DATA0.z, DATA1.z); \
60  EXPECT_DOUBLE_EQ(DATA0.w, DATA1.w);
61 
62 #define EXPECT_QUATERNION_NEAR(DATA0, DATA1, EPS) \
63  EXPECT_NEAR(DATA0.x, DATA1.x, EPS); \
64  EXPECT_NEAR(DATA0.y, DATA1.y, EPS); \
65  EXPECT_NEAR(DATA0.z, DATA1.z, EPS); \
66  EXPECT_NEAR(DATA0.w, DATA1.w, EPS);
67 
68 #define EXPECT_POSE_EQ(DATA0, DATA1) \
69  EXPECT_POINT_EQ(DATA0.position, DATA1.position); \
70  EXPECT_QUATERNION_EQ(DATA0.orientation, DATA1.orientation);
71 
72 #define EXPECT_POSE_NEAR(DATA0, DATA1, EPS) \
73  EXPECT_POINT_NEAR(DATA0.position, DATA1.position, EPS); \
74  EXPECT_QUATERNION_NEAR(DATA0.orientation, DATA1.orientation, EPS);
75 
76 #define EXPECT_LANELET_POSE_EQ(DATA0, DATA1) \
77  EXPECT_EQ(DATA0.lanelet_id, DATA1.lanelet_id); \
78  EXPECT_DOUBLE_EQ(DATA0.s, DATA1.s); \
79  EXPECT_DOUBLE_EQ(DATA0.offset, DATA1.offset); \
80  EXPECT_VECTOR3_EQ(DATA0.rpy, DATA1.rpy);
81 
82 #define EXPECT_LANELET_POSE_NEAR(DATA0, DATA1, EPS) \
83  EXPECT_EQ(DATA0.lanelet_id, DATA1.lanelet_id); \
84  EXPECT_NEAR(DATA0.s, DATA1.s, EPS); \
85  EXPECT_NEAR(DATA0.offset, DATA1.offset, EPS); \
86  EXPECT_VECTOR3_NEAR(DATA0.rpy, DATA1.rpy, EPS);
87 
88 #define EXPECT_TWIST_EQ(DATA0, DATA1) \
89  EXPECT_VECTOR3_EQ(DATA0.linear, DATA1.linear); \
90  EXPECT_VECTOR3_EQ(DATA0.angular, DATA1.angular);
91 
92 #define EXPECT_ACCEL_EQ(DATA0, DATA1) \
93  EXPECT_VECTOR3_EQ(DATA0.linear, DATA1.linear); \
94  EXPECT_VECTOR3_EQ(DATA0.angular, DATA1.angular);
95 
96 #define EXPECT_ACTION_STATUS_EQ(DATA0, DATA1) \
97  EXPECT_ACCEL_EQ(DATA0.accel, DATA1.accel); \
98  EXPECT_TWIST_EQ(DATA0.twist, DATA1.twist); \
99  EXPECT_STREQ(DATA0.current_action.c_str(), DATA1.current_action.c_str());
100 
101 #define EXPECT_DETECTION_SENSOR_CONFIGURATION_EQ(DATA0, DATA1) \
102  EXPECT_STREQ(DATA0.entity().c_str(), DATA1.entity().c_str()); \
103  EXPECT_STREQ(DATA0.architecture_type().c_str(), DATA1.architecture_type().c_str()); \
104  EXPECT_DOUBLE_EQ(DATA0.update_duration(), DATA1.update_duration());
105 
106 #define EXPECT_DYNAMIC_CONSTRAINTS_EQ(DATA0, DATA1) \
107  EXPECT_EQ(DATA0.max_speed, DATA1.max_speed); \
108  EXPECT_EQ(DATA0.max_acceleration, DATA1.max_acceleration); \
109  EXPECT_EQ(DATA0.max_deceleration, DATA1.max_deceleration); \
110  EXPECT_EQ(DATA0.max_acceleration_rate, DATA1.max_acceleration_rate); \
111  EXPECT_EQ(DATA0.max_deceleration_rate, DATA1.max_deceleration_rate);
112 
113 #define EXPECT_LANE_CHANGE_ABSOLUTE_TARGET_EQ(DATA0, DATA1) \
114  EXPECT_EQ(DATA0.lanelet_id, DATA1.lanelet_id); \
115  EXPECT_DOUBLE_EQ(DATA0.offset, DATA1.offset);
116 
117 #define EXPECT_LANE_CHANGE_RELATIVE_TARGET_EQ(DATA0, DATA1) \
118  EXPECT_EQ(DATA0.entity_name, DATA1.entity_name); \
119  EXPECT_EQ(DATA0.direction, DATA1.direction); \
120  EXPECT_EQ(DATA0.shift, DATA1.shift); \
121  EXPECT_DOUBLE_EQ(DATA0.offset, DATA1.offset);
122 
123 #define EXPECT_LANE_CHANGE_CONSTRAINT_EQ(DATA0, DATA1) \
124  EXPECT_EQ(DATA0.type, DATA1.type); \
125  EXPECT_DOUBLE_EQ(DATA0.value, DATA1.value); \
126  EXPECT_EQ(DATA0.policy, DATA1.policy);
127 
128 #define EXPECT_LANE_CHANGE_PARAMETER_EQ(DATA0, DATA1) \
129  EXPECT_LANE_CHANGE_ABSOLUTE_TARGET_EQ(DATA0.target, DATA1.target); \
130  EXPECT_EQ(DATA0.trajectory_shape, DATA1.trajectory_shape); \
131  EXPECT_LANE_CHANGE_CONSTRAINT_EQ(DATA0.constraint, DATA1.constraint);
132 
133 #endif // TRAFFIC_SIMULATOR__TEST__EXPECT_EQ_MACROS_HPP_