Fixed MessageChainsOrder test helper function for JSON

This commit is contained in:
Bartek Kryza
2024-05-22 22:14:28 +02:00
parent 5937061674
commit a7e2f7a496
2 changed files with 30 additions and 19 deletions

View File

@@ -40,7 +40,7 @@ void to_json(nlohmann::json &j, const participant &c)
j["name"] = dynamic_cast<const method &>(c).method_name(); j["name"] = dynamic_cast<const method &>(c).method_name();
} }
j["full_name"] = c.full_name(false); j["full_name"] = generators::json::render_name(c.full_name(false));
if (c.type_name() == "function" || c.type_name() == "function_template") { if (c.type_name() == "function" || c.type_name() == "function_template") {
const auto &f = dynamic_cast<const function &>(c); const auto &f = dynamic_cast<const function &>(c);

View File

@@ -719,6 +719,8 @@ template <typename DiagramType>
bool MessageChainsOrder( bool MessageChainsOrder(
const DiagramType &d, std::vector<std::vector<Message>> message_chains) const DiagramType &d, std::vector<std::vector<Message>> message_chains)
{ {
// Try to match each chain to each sequence - sequence order depends
// on platform and LLVM version
for (const auto &message_chain : message_chains) { for (const auto &message_chain : message_chains) {
if (!MessageOrder(d, message_chain)) if (!MessageOrder(d, message_chain))
return false; return false;
@@ -2515,32 +2517,41 @@ template <>
bool MessageChainsOrder<json_t>( bool MessageChainsOrder<json_t>(
const json_t &d, std::vector<std::vector<Message>> message_chains) const json_t &d, std::vector<std::vector<Message>> message_chains)
{ {
uint32_t chain_index{0}; const auto sequence_chains_count{
d.src["sequences"][0]["message_chains"].size()};
for (const auto &messages : message_chains) { for (const auto &messages : message_chains) {
for (uint32_t chain_index = 0; chain_index < sequence_chains_count;
chain_index++) {
int64_t offset{0}; int64_t offset{0};
std::vector<int64_t> order; std::vector<int64_t> order;
order.reserve(messages.size()); order.reserve(messages.size());
std::transform(messages.begin(), messages.end(), std::transform(messages.begin(), messages.end(),
std::back_inserter(order), std::back_inserter(order),
[&d, &offset, chain_index](const auto &m) { [&d, &offset, chain_index](const auto &m) -> int64_t {
offset = find_message_in_chain(d, m, offset, true, chain_index); try {
offset = find_message_in_chain(
d, m, offset, true, chain_index);
return offset; return offset;
}
catch (...) {
return 0;
}
}); });
bool are_messages_in_order = std::is_sorted(order.begin(), order.end()); bool are_messages_in_order =
std::is_sorted(order.begin(), order.end());
chain_index++;
if (!are_messages_in_order) {
FAIL(fmt::format(
"Messages are not in order: \n[{}]", fmt::join(order, ",\n")));
return false;
}
}
if (are_messages_in_order)
return true; return true;
} }
}
FAIL(fmt::format("Messages are not in order"));
return false;
}
template <> template <>
bool HasMessageComment( bool HasMessageComment(