Comparison operators for generated types

This commit is contained in:
Pavel Kirienko
2014-03-09 21:28:46 +04:00
parent ee1de9ab2e
commit 0aa76d71e3
3 changed files with 32 additions and 11 deletions
@@ -105,6 +105,19 @@ struct ${t.cpp_type_name}
#endif
}
bool operator!=(const ${type_name}& rhs) const { return !operator==(rhs); }
bool operator==(const ${type_name}& rhs) const
{
% if fields:
return
% for idx,a in enumerate(fields):
${a.name} == rhs.${a.name} ${'&&' if (idx + 1) < len(fields) else ';'}
% endfor
% else:
return true;
% endif
}
<%def name="generate_codec_calls_per_field(call_name, self_parameter_type)">
static int ${call_name}(${self_parameter_type} self, ::uavcan::ScalarCodec& codec,
::uavcan::TailArrayOptimizationMode tao_mode = ::uavcan::TailArrayOptEnabled)
+19
View File
@@ -55,6 +55,25 @@ TEST(Dsdl, Signature)
ASSERT_EQ(uavcan::DataTypeKindMessage, root_ns_a::NestedMessage::DataTypeKind);
}
TEST(Dsdl, Operators)
{
{
root_ns_a::EmptyService::Request a, b;
ASSERT_TRUE(a == b);
ASSERT_FALSE(a != b);
}
{
root_ns_a::NestedMessage c, d;
ASSERT_TRUE(c == d);
ASSERT_FALSE(c != d);
c.field = 1;
ASSERT_FALSE(c == d);
ASSERT_TRUE(c != d);
}
}
/*
* This test assumes that it will be executed before other GDTR tests; otherwise it fails.
* TODO: Probably it needs to be called directly from main()
-11
View File
@@ -55,17 +55,6 @@ struct SubscriptionListener
SimpleBinder bindSimple() { return SimpleBinder(this, &SelfType::receiveSimple); }
};
// TODO: add autogenerated comparison operators, then remove this
static bool operator==(const uavcan::mavlink::Message& a, const uavcan::mavlink::Message& b)
{
return
a.seq == b.seq &&
a.sysid == b.sysid &&
a.compid == b.compid &&
a.msgid == b.msgid &&
a.payload == b.payload;
}
TEST(Subscriber, Basic)
{