test_spatem_ts_access.cpp
Go to the documentation of this file.
1 #include <gtest/gtest.h>
2 #include <cmath>
3 
5 
6 TEST(etsi_its_spatem_ts_msgs, test_set_get_spatem) {
7 
8  spatem_ts_msgs::IntersectionState intsct;
9  unsigned int id = randomInt(spatem_ts_msgs::IntersectionID::MIN, spatem_ts_msgs::IntersectionID::MAX);
11  EXPECT_EQ(id, spatem_ts_access::getIntersectionID(intsct));
12 
13  unsigned int moy = randomInt(spatem_ts_msgs::MinuteOfTheYear::MIN, spatem_ts_msgs::MinuteOfTheYear::MAX);
15  EXPECT_EQ(moy, spatem_ts_access::getMinuteOfTheYear(intsct).value);
16  EXPECT_EQ(true, intsct.moy_is_present);
17  // Generate dummy time: 04.01.2007 1:15
18  struct tm timeinfo;
19  timeinfo.tm_sec = 0;
20  timeinfo.tm_min = 15;
21  timeinfo.tm_hour = 1;
22  timeinfo.tm_mday = 4;
23  timeinfo.tm_mon = 0;
24  timeinfo.tm_year = 107; //years since 1900
25  uint64_t unix_stamp = timegm(&timeinfo);
26  // Set time to beginning of 2007: 01.01.2007 0:00
27  timeinfo.tm_sec = 0;
28  timeinfo.tm_min = 0;
29  timeinfo.tm_hour = 0;
30  timeinfo.tm_mday = 1;
31  timeinfo.tm_mon = 0;
32  timeinfo.tm_year = 107; //years since 1900
33  EXPECT_EQ((timegm(&timeinfo)+60*moy)*1e9, spatem_ts_access::getUnixNanosecondsFromMinuteOfTheYear(spatem_ts_access::getMinuteOfTheYear(intsct), unix_stamp*1e9));
34 
35  unsigned int dsecond = randomInt(spatem_ts_msgs::DSecond::MIN, spatem_ts_msgs::DSecond::MAX);
36  spatem_ts_access::setDSecond(intsct, dsecond);
37  EXPECT_EQ(dsecond, spatem_ts_access::getDSecond(intsct).value);
38  EXPECT_EQ(true, intsct.time_stamp_is_present);
39 
40  double dsecond_double = randomDouble(((double)spatem_ts_msgs::DSecond::MIN)*1e-3, ((double)spatem_ts_msgs::DSecond::MAX)*1e-3);
41  spatem_ts_access::setDSecond(intsct, dsecond_double);
42  EXPECT_NEAR(dsecond_double, spatem_ts_access::getDSecondValue(intsct), 1e-3);
43  EXPECT_EQ(true, intsct.time_stamp_is_present);
44 
45  spatem_ts_msgs::MovementState movement_state;
46  unsigned int signal_group_id = randomInt(spatem_ts_msgs::SignalGroupID::MIN, spatem_ts_msgs::SignalGroupID::MAX);
47  spatem_ts_access::setSignalGroupID(movement_state, signal_group_id);
48  EXPECT_EQ(signal_group_id, spatem_ts_access::getSignalGroupID(movement_state));
49  movement_state.state_time_speed.array.resize(1);
50  unsigned int event_state = randomInt(spatem_ts_msgs::MovementPhaseState::UNAVAILABLE, spatem_ts_msgs::MovementPhaseState::CAUTION_CONFLICTING_TRAFFIC);
51  movement_state.state_time_speed.array[0].event_state.value = event_state;
52  EXPECT_EQ(event_state, spatem_ts_access::getCurrentMovementPhaseStateValue(movement_state));
53 
54  std::array<float, 4> movement_phase_state_color = spatem_ts_access::interpretMovementPhaseStateAsColor(5);
55  EXPECT_EQ(movement_phase_state_color[0], 0.18f); // color green
56  EXPECT_EQ(movement_phase_state_color[1], 0.79f);
57  EXPECT_EQ(movement_phase_state_color[2], 0.21f);
58  EXPECT_EQ(movement_phase_state_color[3], 1.0f);
59 
60  std::array<float, 4> movement_phase_state_color2 = spatem_ts_access::interpretMovementPhaseStateAsColor(9);
61  EXPECT_EQ(movement_phase_state_color2[0], 0.9f); // color orange
62  EXPECT_EQ(movement_phase_state_color2[1], 0.7f);
63  EXPECT_EQ(movement_phase_state_color2[2], 0.09f);
64  EXPECT_EQ(movement_phase_state_color2[3], 1.0f);
65 
66  std::array<float, 4> movement_phase_state_color3 = spatem_ts_access::interpretMovementPhaseStateAsColor(10);
67  EXPECT_EQ(movement_phase_state_color3[0], 0.5f); // color grey (out of definition range)
68  EXPECT_EQ(movement_phase_state_color3[1], 0.5f);
69  EXPECT_EQ(movement_phase_state_color3[2], 0.5f);
70  EXPECT_EQ(movement_phase_state_color3[3], 1.0f);
71 
72  float confidence_as_float = spatem_ts_access::interpretTimeIntervalConfidenceAsFloat(0);
73  EXPECT_EQ(confidence_as_float, 0.21f);
74 
75  float confidence_as_float2 = spatem_ts_access::interpretTimeIntervalConfidenceAsFloat(15);
76  EXPECT_EQ(confidence_as_float2, 1.0f);
77 
78  int random_int_time = randomInt(0, 35990);
79  int random_int_seconds = randomInt(0, 3599);
80  float time_mark_as_seconds = spatem_ts_access::interpretTimeMarkValueAsSeconds(random_int_time, random_int_seconds, 0);
81  EXPECT_EQ(time_mark_as_seconds, (float)random_int_time * 0.1f - random_int_seconds);
82 
83  int random_int_time2 = randomInt(0, 35990);
84  int random_int_seconds2 = randomInt(0, 3599);
85  uint random_uint_nanosecs2 = (uint)randomInt(0, 1e3 - 1) * 1e6;
86  double tolerance = 1e-4;
87 
88  float time_mark_as_seconds2 = spatem_ts_access::interpretTimeMarkValueAsSeconds(random_int_time2, random_int_seconds2, random_uint_nanosecs2);
89  EXPECT_NEAR(time_mark_as_seconds2, (float)random_int_time2 * 0.1f - (random_int_seconds2 + (float)random_uint_nanosecs2 * 1e-9), tolerance);
90 
92  EXPECT_EQ(time_mark_value_type, spatem_ts_access::time_mark_value_interpretation::undefined);
93 
96 
98  EXPECT_EQ(time_mark_value_type3, spatem_ts_access::time_mark_value_interpretation::leap_second);
99 
101  EXPECT_EQ(time_mark_value_type4, spatem_ts_access::time_mark_value_interpretation::normal);
102 
103  std::string time_mark_as_string = spatem_ts_access::parseTimeMarkValueToString(36001, 0, 0);
104  EXPECT_EQ(time_mark_as_string, std::string("undefined"));
105 
106  std::string time_mark_as_string2 = spatem_ts_access::parseTimeMarkValueToString(36000, 0, 0);
107  EXPECT_EQ(time_mark_as_string2, std::string(">36000s"));
108 
109  std::string time_mark_as_string3 = spatem_ts_access::parseTimeMarkValueToString(35991, 0, 0);
110  EXPECT_EQ(time_mark_as_string3, std::string("leap second"));
111 
112  std::string time_mark_as_string4 = spatem_ts_access::parseTimeMarkValueToString(55, 0, 0);
113  EXPECT_EQ(time_mark_as_string4, std::string("5.5s"));
114 }
etsi_its_spatem_ts_msgs::access
Definition: spatem_ts_getters.h:36
etsi_its_spatem_ts_msgs::access::time_mark_value_interpretation
time_mark_value_interpretation
Definition: spatem_ts_utils.h:45
etsi_its_spatem_ts_msgs::access::interpretTimeIntervalConfidenceAsFloat
float interpretTimeIntervalConfidenceAsFloat(const uint16_t encoded_probability)
Interprets the TimeIntervalConfidence type as a float value (see etsi definition)
Definition: spatem_ts_utils.h:88
etsi_its_mapem_ts_msgs::access::setMinuteOfTheYear
void setMinuteOfTheYear(MinuteOfTheYear &moy, const uint32_t moy_value)
Set the MinuteOfTheYear object.
Definition: mapem_ts_setters.h:49
etsi_its_mapem_ts_msgs::access::setIntersectionID
void setIntersectionID(IntersectionID &intsct_id, const uint16_t id_value)
Set the IntersectionID value.
Definition: mapem_ts_setters.h:80
randomInt
int randomInt(int min, int max)
Definition: test_access.cpp:28
etsi_its_mapem_ts_msgs::access::getMinuteOfTheYear
MinuteOfTheYear getMinuteOfTheYear(const MapData &map)
Get the value of MinuteOfTheYear object MapData object.
Definition: mapem_ts_getters.h:47
etsi_its_mapem_ts_msgs::access::getIntersectionID
uint16_t getIntersectionID(const IntersectionID &intsct_id)
Get the IntersectionID value.
Definition: mapem_ts_getters.h:89
etsi_its_spatem_ts_msgs::access::undefined
@ undefined
Definition: spatem_ts_utils.h:45
etsi_its_spatem_ts_msgs::access::normal
@ normal
Definition: spatem_ts_utils.h:45
f
f
etsi_its_spatem_ts_msgs::access::interpretMovementPhaseStateAsColor
std::array< float, 4 > interpretMovementPhaseStateAsColor(const uint8_t value)
Interprets the MovementPhaseState type as a color (see etsi definition)
Definition: spatem_ts_utils.h:152
etsi_its_spatem_ts_msgs::access::getDSecond
DSecond getDSecond(const IntersectionState &intsct)
Get the DSecond object from a given IntersectionState object.
Definition: spatem_ts_getters.h:87
etsi_its_spatem_ts_msgs::access::leap_second
@ leap_second
Definition: spatem_ts_utils.h:45
etsi_its_spatem_ts_msgs::access::getCurrentMovementPhaseStateValue
uint8_t getCurrentMovementPhaseStateValue(const MovementState &mvmt_state)
Get the Current MovementPhaseState object of a given MovementState object.
Definition: spatem_ts_getters.h:161
TEST
TEST(etsi_its_spatem_ts_msgs, test_set_get_spatem)
Definition: test_spatem_ts_access.cpp:6
etsi_its_spatem_ts_msgs::access::setSignalGroupID
void setSignalGroupID(SignalGroupID &signal_group_id, const uint8_t id)
Sets the SignalGroupID value.
Definition: spatem_ts_setters.h:154
etsi_its_spatem_ts_msgs::access::getDSecondValue
double getDSecondValue(const DSecond &dsecond)
Get the value of a DSecond object in seconds.
Definition: spatem_ts_getters.h:98
randomDouble
double randomDouble(double min, double max)
Definition: test_access.cpp:24
etsi_its_spatem_ts_msgs
Definition: spatem_ts_getters.h:34
etsi_its_spatem_ts_msgs::access::interpretTimeMarkValueAsSeconds
float interpretTimeMarkValueAsSeconds(const uint16_t time, const int32_t seconds, const uint32_t nanosec)
Calculate the amount of seconds until the given time is reached.
Definition: spatem_ts_utils.h:230
etsi_its_spatem_ts_msgs::access::getSignalGroupID
uint8_t getSignalGroupID(const SignalGroupID &signal_group_id)
Get the Signal Group-ID of an SignalGroupID object.
Definition: spatem_ts_getters.h:118
etsi_its_spatem_ts_msgs::access::parseTimeMarkValueToString
std::string parseTimeMarkValueToString(const uint16_t time, const int32_t seconds, const uint32_t nanosec)
Converts a value from message type TimeMarkValue into a string representation.
Definition: spatem_ts_utils.h:246
etsi_its_mapem_ts_msgs::access::getUnixNanosecondsFromMinuteOfTheYear
uint64_t getUnixNanosecondsFromMinuteOfTheYear(const MinuteOfTheYear &moy, const uint64_t unix_nanoseconds_estimate)
Get the unix nanoseconds from MinuteOfTheYear object.
Definition: mapem_ts_utils.h:72
etsi_its_spatem_ts_msgs::access::setDSecond
void setDSecond(DSecond &dsecond, const uint32_t dsecond_value)
Sets the DSecond value.
Definition: spatem_ts_setters.h:106
etsi_its_spatem_ts_msgs::access::over_an_hour
@ over_an_hour
Definition: spatem_ts_utils.h:45
etsi_its_spatem_ts_msgs::access::interpretTimeMarkValueType
time_mark_value_interpretation interpretTimeMarkValueType(const uint16_t time)
Interprets the type of a TimeMark message See etsi ASNI1 - IS TS 103 301 documentation for for the en...
Definition: spatem_ts_utils.h:203


etsi_its_msgs_utils
Author(s): Jean-Pierre Busch , Guido Küppers , Lennart Reiher
autogenerated on Sun May 18 2025 02:32:12