#include "multi_intersection.hh" #define BOOST_TEST_MODULE MultiIntersectionTest #include namespace util { namespace { BOOST_AUTO_TEST_CASE(Empty) { std::vector > sets; sets.push_back(boost::iterator_range(static_cast(NULL), static_cast(NULL))); BOOST_CHECK(!FirstIntersection(sets)); } BOOST_AUTO_TEST_CASE(Single) { std::vector nums; nums.push_back(1); nums.push_back(4); nums.push_back(100); std::vector::const_iterator> > sets; sets.push_back(nums); boost::optional ret(FirstIntersection(sets)); BOOST_REQUIRE(ret); BOOST_CHECK_EQUAL(static_cast(1), *ret); } template boost::iterator_range RangeFromArray(const T (&arr)[len]) { return boost::iterator_range(arr, arr + len); } BOOST_AUTO_TEST_CASE(MultiNone) { unsigned int nums0[] = {1, 3, 4, 22}; unsigned int nums1[] = {2, 5, 12}; unsigned int nums2[] = {4, 17}; std::vector > sets; sets.push_back(RangeFromArray(nums0)); sets.push_back(RangeFromArray(nums1)); sets.push_back(RangeFromArray(nums2)); BOOST_CHECK(!FirstIntersection(sets)); } BOOST_AUTO_TEST_CASE(MultiOne) { unsigned int nums0[] = {1, 3, 4, 17, 22}; unsigned int nums1[] = {2, 5, 12, 17}; unsigned int nums2[] = {4, 17}; std::vector > sets; sets.push_back(RangeFromArray(nums0)); sets.push_back(RangeFromArray(nums1)); sets.push_back(RangeFromArray(nums2)); boost::optional ret(FirstIntersection(sets)); BOOST_REQUIRE(ret); BOOST_CHECK_EQUAL(static_cast(17), *ret); } } // namespace } // namespace util