Skip to content

Commit d7475f9

Browse files
committed
Testing, linting, version bump (0.2.2)
Signed-off-by: Arne Nordmann <arne.nordmann@de.bosch.com>
1 parent 940d13b commit d7475f9

9 files changed

Lines changed: 137 additions & 132 deletions

File tree

system_modes/include/system_modes/mode_impl.hpp

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -29,21 +29,22 @@ namespace system_modes
2929

3030
static const char DEFAULT_MODE[] = "__DEFAULT__";
3131

32-
struct StateAndMode {
32+
struct StateAndMode
33+
{
3334
unsigned int state;
3435
std::string mode;
3536

36-
StateAndMode(unsigned int newstate = 0, const std::string& newmode = "")
37+
explicit StateAndMode(unsigned int newstate = 0, const std::string & newmode = "")
3738
{
3839
state = newstate;
3940
mode = newmode;
4041
}
41-
bool operator!=(const StateAndMode& cmp) const
42+
bool operator!=(const StateAndMode & cmp) const
4243
{
43-
return (cmp.state == state // same state
44-
&& (cmp.mode.compare(mode) == 0 // same mode
45-
|| (cmp.mode.compare(DEFAULT_MODE) == 0 && mode.empty()) // we consider empty and
46-
|| (mode.compare(DEFAULT_MODE) == 0 && cmp.mode.empty()))); // DEFAULT_MODE the same
44+
return cmp.state == state && // same state
45+
(cmp.mode.compare(mode) == 0 || // same mode
46+
(cmp.mode.compare(DEFAULT_MODE) == 0 && mode.empty()) || // we consider empty and
47+
(mode.compare(DEFAULT_MODE) == 0 && cmp.mode.empty())); // DEFAULT_MODE the same
4748
}
4849
};
4950

system_modes/include/system_modes/mode_inference.hpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,9 @@
3131
namespace system_modes
3232
{
3333

34-
typedef std::map<std::string, StateAndMode > StatesMap;
35-
typedef std::map<std::string, std::map<std::string, rclcpp::Parameter> > ParametersMap;
36-
typedef std::map<std::string, std::pair<StateAndMode, StateAndMode > > Deviation;
34+
typedef std::map<std::string, StateAndMode> StatesMap;
35+
typedef std::map<std::string, std::map<std::string, rclcpp::Parameter>> ParametersMap;
36+
typedef std::map<std::string, std::pair<StateAndMode, StateAndMode>> Deviation;
3737

3838
class ModeInference
3939
{

system_modes/package.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
33
<package format="3">
44
<name>system_modes</name>
5-
<version>0.2.0</version>
5+
<version>0.2.2</version>
66
<description>Model-based distributed configuration handling.</description>
77
<maintainer email="arne.nordmann@bosch.com">Arne Nordmann</maintainer>
88
<license>Apache License 2.0</license>
@@ -24,7 +24,7 @@
2424
<test_depend>ament_cmake_cppcheck</test_depend>
2525
<test_depend>ament_cmake_uncrustify</test_depend>
2626
<test_depend>ament_lint_auto</test_depend>
27-
27+
2828
<member_of_group>rosidl_interface_packages</member_of_group>
2929

3030
<export>

system_modes/src/system_modes/mode_impl.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ ModeImpl::add_part_mode(
139139
const std::string & part,
140140
const StateAndMode stateAndMode)
141141
{
142-
this->part_modes_[part] = {stateAndMode.state, stateAndMode.mode};
142+
this->part_modes_[part] = StateAndMode(stateAndMode.state, stateAndMode.mode);
143143
}
144144

145145
void
@@ -173,8 +173,8 @@ ModeImpl::get_part_mode(const std::string & part) const
173173
return this->part_modes_.at(part);
174174
} else {
175175
throw std::out_of_range(
176-
"Can't receive modes for part '" + part +
177-
"', part not specified.");
176+
"Can't receive modes for part '" + part +
177+
"', part not specified.");
178178
}
179179
}
180180

system_modes/src/system_modes/mode_inference.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ ModeInference::update_state(const string & node, unsigned int state)
7373
} else {
7474
// TODO(anordman): Explicit message, when trying to update system
7575
throw std::out_of_range(
76-
"Can't update state of '" + node + "', unknown node.");
76+
"Can't update state of '" + node + "', unknown node.");
7777
}
7878
}
7979

@@ -88,7 +88,7 @@ ModeInference::update_mode(const string & node, const string & mode)
8888
} else {
8989
// TODO(anordman): Explicit message, when trying to update system
9090
throw std::out_of_range(
91-
"Can't update mode of '" + node + "', unknown node.");
91+
"Can't update mode of '" + node + "', unknown node.");
9292
}
9393
}
9494

system_modes/test/test_mode_inference.cpp

Lines changed: 116 additions & 112 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
// you may not use this file except in compliance with the License.
66
// You may obtain a copy of the License at
77
//
8-
// http://www.apache.org/licenses/LICENSE-2.0
8+
// http://www.apache.org/licenses/LICENSE-2.0
99
//
1010
// Unless required by applicable law or agreed to in writing, software
1111
// distributed under the License is distributed on an "AS IS" BASIS,
@@ -22,141 +22,145 @@
2222
#include <memory>
2323
#include <vector>
2424

25-
#include "modefiles.h"
25+
#include "system_modes/modefiles.h"
2626
#include "system_modes/mode_inference.hpp"
2727

2828
using std::string;
2929
using std::vector;
3030
using rclcpp::Parameter;
3131

32-
using namespace system_modes;
32+
using system_modes::ModeInference;
33+
using system_modes::StateAndMode;
3334
using lifecycle_msgs::msg::State;
3435

3536
/*
3637
Testing parsing of mode files
3738
*/
38-
TEST(TestModeFilesParse, wrong) {
39-
ModeInference * inference;
39+
TEST(TestModeFilesParse, parsing) {
40+
ModeInference * inference;
4041

41-
EXPECT_THROW(
42-
inference = new ModeInference(MODE_FILE_WRONG),
43-
std::out_of_range);
42+
EXPECT_THROW(
43+
inference = new ModeInference(MODE_FILE_WRONG),
44+
std::out_of_range);
45+
46+
EXPECT_NO_THROW(inference = new ModeInference(MODE_FILE_CORRECT));
47+
EXPECT_EQ(3u, inference->get_all_parts().size());
4448
}
4549

46-
TEST(TestModeFilesParse, correct) {
47-
ModeInference * inference;
48-
49-
EXPECT_NO_THROW(inference = new ModeInference(MODE_FILE_CORRECT));
50-
51-
// parts
52-
EXPECT_EQ(3, inference->get_all_parts().size());
53-
EXPECT_EQ(2, inference->get_nodes().size());
54-
EXPECT_EQ(1, inference->get_systems().size());
55-
56-
// number of modes
57-
EXPECT_EQ(3, inference->get_available_modes("system").size());
58-
EXPECT_EQ(3, inference->get_available_modes("part0").size());
59-
EXPECT_EQ(3, inference->get_available_modes("part1").size());
60-
61-
// default modes
62-
auto mode = inference->get_mode("system", "__DEFAULT__");
63-
EXPECT_EQ(2, mode->get_parts().size());
64-
EXPECT_EQ(State::PRIMARY_STATE_INACTIVE, mode->get_part_mode("part0").state);
65-
EXPECT_EQ(State::PRIMARY_STATE_ACTIVE, mode->get_part_mode("part1").state);
66-
mode = inference->get_mode("part0", "__DEFAULT__");
67-
EXPECT_EQ(2, mode->get_parameters().size());
68-
EXPECT_EQ(0.1, mode->get_parameter("foo").as_double());
69-
EXPECT_EQ("WARN", mode->get_parameter("bar").as_string());
70-
EXPECT_THROW(mode->get_parameter("baz"), std::out_of_range);
50+
TEST(TestModeFilesParse, initialization) {
51+
ModeInference * inference;
52+
53+
EXPECT_NO_THROW(inference = new ModeInference(MODE_FILE_CORRECT));
54+
55+
// parts
56+
EXPECT_EQ(3u, inference->get_all_parts().size());
57+
EXPECT_EQ(2u, inference->get_nodes().size());
58+
EXPECT_EQ(1u, inference->get_systems().size());
59+
60+
// number of modes
61+
EXPECT_EQ(3u, inference->get_available_modes("system").size());
62+
EXPECT_EQ(3u, inference->get_available_modes("part0").size());
63+
EXPECT_EQ(3u, inference->get_available_modes("part1").size());
64+
65+
// default modes
66+
auto mode = inference->get_mode("system", "__DEFAULT__");
67+
EXPECT_EQ(2u, mode->get_parts().size());
68+
EXPECT_EQ(State::PRIMARY_STATE_INACTIVE, mode->get_part_mode("part0").state);
69+
EXPECT_EQ(State::PRIMARY_STATE_ACTIVE, mode->get_part_mode("part1").state);
70+
mode = inference->get_mode("part0", "__DEFAULT__");
71+
EXPECT_EQ(2u, mode->get_parameters().size());
72+
EXPECT_EQ(0.1, mode->get_parameter("foo").as_double());
73+
EXPECT_EQ("WARN", mode->get_parameter("bar").as_string());
74+
EXPECT_THROW(mode->get_parameter("baz"), std::out_of_range);
7175
}
7276

7377
TEST(TestModeInference, update_target) {
74-
ModeInference inference(MODE_FILE_CORRECT);
75-
76-
StateAndMode active_default(State::PRIMARY_STATE_ACTIVE, "__DEFAULT__");
77-
StateAndMode inactive(State::PRIMARY_STATE_INACTIVE, "");
78-
79-
// system
80-
inference.update_target("system", active_default);
81-
auto target = inference.get_target("system");
82-
EXPECT_EQ(active_default.state, target.state);
83-
EXPECT_EQ(active_default.mode, target.mode);
84-
inference.update_target("system", inactive);
85-
target = inference.get_target("system");
86-
EXPECT_EQ(inactive.state, target.state);
87-
EXPECT_EQ(inactive.mode, target.mode);
88-
89-
// node
90-
inference.update_target("part0", active_default);
91-
target = inference.get_target("part0");
92-
EXPECT_EQ(active_default.state, target.state);
93-
EXPECT_EQ(active_default.mode, target.mode);
94-
inference.update_target("part0", inactive);
95-
target = inference.get_target("part0");
96-
EXPECT_EQ(inactive.state, target.state);
97-
EXPECT_EQ(inactive.mode, target.mode);
78+
ModeInference inference(MODE_FILE_CORRECT);
79+
80+
StateAndMode active_default(State::PRIMARY_STATE_ACTIVE, "__DEFAULT__");
81+
StateAndMode inactive(State::PRIMARY_STATE_INACTIVE, "");
82+
83+
// system
84+
inference.update_target("system", active_default);
85+
auto target = inference.get_target("system");
86+
EXPECT_EQ(active_default.state, target.state);
87+
EXPECT_EQ(active_default.mode, target.mode);
88+
inference.update_target("system", inactive);
89+
target = inference.get_target("system");
90+
EXPECT_EQ(inactive.state, target.state);
91+
EXPECT_EQ(inactive.mode, target.mode);
92+
93+
// node
94+
inference.update_target("part0", active_default);
95+
target = inference.get_target("part0");
96+
EXPECT_EQ(active_default.state, target.state);
97+
EXPECT_EQ(active_default.mode, target.mode);
98+
inference.update_target("part0", inactive);
99+
target = inference.get_target("part0");
100+
EXPECT_EQ(inactive.state, target.state);
101+
EXPECT_EQ(inactive.mode, target.mode);
98102
}
99103

100104
TEST(TestModeInference, update_state_and_mode) {
101-
ModeInference inference(MODE_FILE_CORRECT);
102-
103-
StateAndMode active_default(State::PRIMARY_STATE_ACTIVE, "__DEFAULT__");
104-
StateAndMode inactive(State::PRIMARY_STATE_INACTIVE, "");
105-
106-
inference.update_target("system", active_default);
107-
EXPECT_THROW(inference.update_state("system", active_default.state), std::out_of_range);
108-
EXPECT_THROW(inference.update_mode("system", active_default.mode), std::out_of_range);
109-
inference.update("part0", inactive);
110-
inference.update_state("part1", active_default.state);
111-
inference.update_mode("part1", active_default.mode);
112-
EXPECT_EQ(active_default.state, inference.get_or_infer("system").state);
113-
EXPECT_EQ(active_default.mode, inference.get_or_infer("system").mode);
105+
ModeInference inference(MODE_FILE_CORRECT);
106+
107+
StateAndMode active_default(State::PRIMARY_STATE_ACTIVE, "__DEFAULT__");
108+
StateAndMode inactive(State::PRIMARY_STATE_INACTIVE, "");
109+
110+
inference.update_target("system", active_default);
111+
EXPECT_THROW(inference.update_state("system", active_default.state), std::out_of_range);
112+
EXPECT_THROW(inference.update_mode("system", active_default.mode), std::out_of_range);
113+
inference.update("part0", inactive);
114+
inference.update_state("part1", active_default.state);
115+
inference.update_mode("part1", active_default.mode);
116+
EXPECT_EQ(active_default.state, inference.get_or_infer("system").state);
117+
EXPECT_EQ(active_default.mode, inference.get_or_infer("system").mode);
114118
}
115119

116120
TEST(TestModeInference, update_parameters) {
117-
ModeInference inference(MODE_FILE_CORRECT);
118-
119-
StateAndMode active_default(State::PRIMARY_STATE_ACTIVE, "__DEFAULT__");
120-
Parameter foo("foo", 0.1);
121-
Parameter bar("bar", "WARN");
122-
123-
inference.update_target("part0", active_default);
124-
EXPECT_THROW(inference.get_or_infer("part0"), std::runtime_error);
125-
inference.update_param("part0", foo);
126-
inference.update_param("part0", bar);
127-
EXPECT_EQ(active_default.state, inference.get_or_infer("part0").state);
128-
EXPECT_EQ(active_default.mode, inference.get_or_infer("part0").mode);
121+
ModeInference inference(MODE_FILE_CORRECT);
122+
123+
StateAndMode active_default(State::PRIMARY_STATE_ACTIVE, "__DEFAULT__");
124+
Parameter foo("foo", 0.1);
125+
Parameter bar("bar", "WARN");
126+
127+
inference.update_target("part0", active_default);
128+
EXPECT_THROW(inference.get_or_infer("part0"), std::runtime_error);
129+
inference.update_param("part0", foo);
130+
inference.update_param("part0", bar);
131+
EXPECT_EQ(active_default.state, inference.get_or_infer("part0").state);
132+
EXPECT_EQ(active_default.mode, inference.get_or_infer("part0").mode);
129133
}
130134

131135
TEST(TestModeInference, inference) {
132-
ModeInference inference(MODE_FILE_CORRECT);
133-
134-
// update node modes, test inferred system mode
135-
StateAndMode active_default(State::PRIMARY_STATE_ACTIVE, "__DEFAULT__");
136-
StateAndMode inactive(State::PRIMARY_STATE_INACTIVE, "");
137-
inference.update_target("system", active_default);
138-
inference.update("part0", inactive);
139-
inference.update("part1", active_default);
140-
printf("-----------------\n");
141-
StateAndMode sm = inference.get_or_infer("system");
142-
EXPECT_EQ(State::PRIMARY_STATE_ACTIVE, sm.state);
143-
EXPECT_EQ("__DEFAULT__", sm.mode);
144-
145-
// Node inference
146-
Parameter foo("foo", 0.2);
147-
Parameter bar("bar", "DBG");
148-
inference.update_param("part1", foo);
149-
inference.update_param("part1", bar);
150-
EXPECT_EQ(active_default.state, inference.infer("part1").state);
151-
EXPECT_EQ("AAA", inference.infer("part1").mode);
152-
Parameter foo2("foo", 0.1);
153-
Parameter bar2("bar", "DBG");
154-
inference.update_state("part0", State::PRIMARY_STATE_ACTIVE);
155-
inference.update_param("part0", foo2);
156-
inference.update_param("part0", bar2);
157-
EXPECT_EQ(active_default.state, inference.infer("part0").state);
158-
EXPECT_EQ("FOO", inference.infer("part0").mode);
159-
160-
// System inference
161-
EXPECT_EQ(State::TRANSITION_STATE_ACTIVATING, inference.infer("system").state);
136+
ModeInference inference(MODE_FILE_CORRECT);
137+
138+
// update node modes, test inferred system mode
139+
StateAndMode active_default(State::PRIMARY_STATE_ACTIVE, "__DEFAULT__");
140+
StateAndMode inactive(State::PRIMARY_STATE_INACTIVE, "");
141+
inference.update_target("system", active_default);
142+
inference.update("part0", inactive);
143+
inference.update("part1", active_default);
144+
printf("-----------------\n");
145+
StateAndMode sm = inference.get_or_infer("system");
146+
EXPECT_EQ(State::PRIMARY_STATE_ACTIVE, sm.state);
147+
EXPECT_EQ("__DEFAULT__", sm.mode);
148+
149+
// Node inference
150+
Parameter foo("foo", 0.2);
151+
Parameter bar("bar", "DBG");
152+
inference.update_param("part1", foo);
153+
inference.update_param("part1", bar);
154+
EXPECT_EQ(active_default.state, inference.infer("part1").state);
155+
EXPECT_EQ("AAA", inference.infer("part1").mode);
156+
Parameter foo2("foo", 0.1);
157+
Parameter bar2("bar", "DBG");
158+
inference.update_state("part0", State::PRIMARY_STATE_ACTIVE);
159+
inference.update_param("part0", foo2);
160+
inference.update_param("part0", bar2);
161+
EXPECT_EQ(active_default.state, inference.infer("part0").state);
162+
EXPECT_EQ("FOO", inference.infer("part0").mode);
163+
164+
// System inference
165+
EXPECT_EQ(State::TRANSITION_STATE_ACTIVATING, inference.infer("system").state);
162166
}

system_modes_examples/package.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
33
<package format="3">
44
<name>system_modes_examples</name>
5-
<version>0.2.0</version>
5+
<version>0.2.2</version>
66
<description>Simple example system for system_modes package.</description>
77
<maintainer email="arne.nordmann@bosch.com">Arne Nordmann</maintainer>
88
<license>Apache License 2.0</license>

system_modes_examples/src/drive_base.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ class DriveBase : public LifecycleNode
4343
: LifecycleNode("drive_base")
4444
{
4545
RCLCPP_INFO(get_logger(), "Constructed lifecycle node '%s'", this->get_name());
46-
46+
4747
// Parameter declaration
4848
this->declare_parameter("max_speed",
4949
rclcpp::ParameterValue(rclcpp::PARAMETER_NOT_SET),

system_modes_examples/src/manipulator.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ class Manipulator : public LifecycleNode
4343
: LifecycleNode("manipulator")
4444
{
4545
RCLCPP_INFO(get_logger(), "Constructed lifecycle node '%s'", this->get_name());
46-
46+
4747
// Parameter declaration
4848
this->declare_parameter("max_torque",
4949
rclcpp::ParameterValue(rclcpp::PARAMETER_NOT_SET),

0 commit comments

Comments
 (0)