summaryrefslogtreecommitdiff
path: root/klm/util/multi_intersection_test.cc
diff options
context:
space:
mode:
Diffstat (limited to 'klm/util/multi_intersection_test.cc')
-rw-r--r--klm/util/multi_intersection_test.cc63
1 files changed, 63 insertions, 0 deletions
diff --git a/klm/util/multi_intersection_test.cc b/klm/util/multi_intersection_test.cc
new file mode 100644
index 00000000..970afc17
--- /dev/null
+++ b/klm/util/multi_intersection_test.cc
@@ -0,0 +1,63 @@
+#include "util/multi_intersection.hh"
+
+#define BOOST_TEST_MODULE MultiIntersectionTest
+#include <boost/test/unit_test.hpp>
+
+namespace util {
+namespace {
+
+BOOST_AUTO_TEST_CASE(Empty) {
+ std::vector<boost::iterator_range<const unsigned int*> > sets;
+
+ sets.push_back(boost::iterator_range<const unsigned int*>(static_cast<const unsigned int*>(NULL), static_cast<const unsigned int*>(NULL)));
+ BOOST_CHECK(!FirstIntersection(sets));
+}
+
+BOOST_AUTO_TEST_CASE(Single) {
+ std::vector<unsigned int> nums;
+ nums.push_back(1);
+ nums.push_back(4);
+ nums.push_back(100);
+ std::vector<boost::iterator_range<std::vector<unsigned int>::const_iterator> > sets;
+ sets.push_back(nums);
+
+ boost::optional<unsigned int> ret(FirstIntersection(sets));
+
+ BOOST_REQUIRE(ret);
+ BOOST_CHECK_EQUAL(static_cast<unsigned int>(1), *ret);
+}
+
+template <class T, unsigned int len> boost::iterator_range<const T*> RangeFromArray(const T (&arr)[len]) {
+ return boost::iterator_range<const T*>(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<boost::iterator_range<const unsigned int*> > 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<boost::iterator_range<const unsigned int*> > sets;
+ sets.push_back(RangeFromArray(nums0));
+ sets.push_back(RangeFromArray(nums1));
+ sets.push_back(RangeFromArray(nums2));
+
+ boost::optional<unsigned int> ret(FirstIntersection(sets));
+ BOOST_REQUIRE(ret);
+ BOOST_CHECK_EQUAL(static_cast<unsigned int>(17), *ret);
+}
+
+} // namespace
+} // namespace util