Boost.Test - Как проверить два вектора на пересечении?

Я ищу лучший способ проверить два вектора для пересечений.

Вложенный цикл как

for (auto const & first: first_vector)
  for (auto const & next: next_vector)
    if first == next
      return false;

может сделать работу, но это не похоже на способ Boost.Test-иша. Ни один из взглядов на Boost.Test не очень помогает, так как единственным предопределенным тестовым примером является BOOST_CHECK_EQUAL_COLLECTIONS

Обновить

BOOST_FIXTURE_TEST_CASE(paths,fixture_t)
{
  for(int i=0,j=vids.size(); i!=j; i++)
  {
    for(int p=0,q=vids.size(); p!=q; p++)
    {
      if (i == p)
      {
        continue;
      }
      if (i < p)
      {
        BOOST_TEST_CONTEXT("Equal match at positions " << i << " and " << p)

        BOOST_TEST(vids[i] != vids[p]);
      }
    }
  }
}

1 ответ

Решение

В модульных тестах вы обычно не заботитесь о производительности проверки кода, пока это разумно.

Я бы просто написал шаблонную функцию sets_intersect взять два вектора, вставив один из них в std::hash_set и прохождение второго вектора до первого совпадения. Или просто сортировать их обоих и проверять std::set_intersection,

Окончательный синтаксис будет примерно таким BOOST_CHECK(sets_intersect(vec1, vec2)), который выглядит достаточно дружелюбным человеком.

Другие вопросы по тегам