Утверждение равенства итераторов в CppUnit

Я начал использовать библиотеку CppUnit. И все работало нормально, но теперь я застрял с утверждением итераторов, используя CPPUNIT_ASSERT_EQUAL, Итак, мой код:

void TestingClass::test_adjacent_find()
{
// Set up
int a [5] = {1,2,3,3,5};
int b [5] = {1,2,3,4,5};
int c [1] = {1};

std::list<int> lst;
lst.push_back(1);
lst.push_back(1);
lst.push_back(5);

// Check
CPPUNIT_ASSERT_EQUAL(a+2, my_adjacent_find(a , a+5, pred_eq<int>));
CPPUNIT_ASSERT_EQUAL(b+5, my_adjacent_find(b, b+5, pred_eq<int>));
CPPUNIT_ASSERT_EQUAL(c+1, my_adjacent_find(c, c+1, pred_eq<int>));
CPPUNIT_ASSERT_EQUAL(lst.begin(), lst.end()); // problem is here
}

Когда я запускаю этот тест, я получаю сообщение об ошибке ниже.

/opt/local/include/cppunit/TestAssert.h:49:13:
Invalid operands to binary expression
('OStringStream' (aka 'basic_ostringstream<char>')
and 'const std::_List_iterator<int>')

Если я прокомментирую строку с итераторами, то она без проблем скомпилируется. Так что я делаю не так? И как мне утверждать равенство двух итераторов? Кстати, я использую xcode 4.4.

0

Решение

Увидеть CPPUNIT_ASSERT_EQUAL макро документация в TestAssert.h:

#define CPPUNIT_ASSERT_EQUAL(expected,actual)

Требование к expected а также actual параметры:

  • Они точно одного типа
  • Они сериализуются в std :: strstream с использованием оператора <<
  • Их можно сравнить с помощью оператора ==.

Последние два требования (сериализация и сравнение) могут быть удалены путем CppUnit::assertion_traits,

Итак, коренная причина вашей проблемы в том, что std::list::iterator не может быть сериализовано в std::strstream, Вы должны написать свой собственный CppUnit::assertion_traits специализация для него, как описано в документации или просто избежать CPPUNIT_ASSERT_EQUAL и использовать CPPUNIT_ASSERT:

CPPUNIT_ASSERT(lst.begin() == lst.end());
3

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

Других решений пока нет …

По вопросам рекламы [email protected]