BOOST_CHECK_EQUAL_COLLECTIONS в Google Test

Я пытался найти утверждение в Google C ++ Testing Framework / gtest что эквивалентно BOOST_CHECK_EQUAL_COLLECTIONS утверждение найдено в Библиотека буст-тестов.

Тем не мение; безуспешно. Итак, мой вопрос состоит из двух частей:

  1. Есть ли GTEST есть эквивалентное утверждение?
  2. Если нет: как можно утверждать, что содержимое контейнера GTEST?

РЕДАКТИРОВАТЬ (слегка измененный ответ):

#include <iostream>

template<typename LeftIter, typename RightIter>
::testing::AssertionResult CheckEqualCollections(LeftIter left_begin,
LeftIter left_end,
RightIter right_begin)
{
std::stringstream message;
std::size_t index(0);
bool equal(true);

for(;left_begin != left_end; left_begin++, right_begin++) {
if (*left_begin != *right_begin) {
equal = false;
message << "\n  Mismatch in position " << index << ": " << *left_begin << " != " <<  *right_begin;
}
++index;
}
if (message.str().size()) {
message << "\n";
}
return equal ? ::testing::AssertionSuccess() :
::testing::AssertionFailure() << message.str();
}

0

Решение

Я не знаю точно эквивалентного утверждения gtest. Однако следующая функция должна обеспечивать аналогичную функциональность:

template<typename LeftIter, typename RightIter>
::testing::AssertionResult CheckEqualCollections(LeftIter left_begin,
LeftIter left_end,
RightIter right_begin) {
bool equal(true);
std::string message;
std::size_t index(0);
while (left_begin != left_end) {
if (*left_begin++ != *right_begin++) {
equal = false;
message += "\n\tMismatch at index " + std::to_string(index);
}
++index;
}
if (message.size())
message += "\n\t";
return equal ? ::testing::AssertionSuccess() :
::testing::AssertionFailure() << message;
}

Раздел о используя функцию, которая возвращает AssertionResult дает полную информацию о том, как использовать это, но это будет что-то вроде:

EXPECT_TRUE(CheckEqualCollections(collection1.begin(),
collection1.end(),
collection2.begin()));
0

Другие решения

Как отметил Алекс, у gtest есть дочерний проект Google Mock, в котором есть отличные возможности для сравнения двух контейнеров:

EXPECT_THAT(actual, ContainerEq(expected));
// ElementsAre accepts up to ten parameters.
EXPECT_THAT(actual, ElementsAre(a, b, c));
EXPECT_THAT(actual, ElementsAreArray(array));

Вы найдете больше информации на Вики Google Mock .

2