summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorDan Goodliffe <dan@randomdan.homeip.net>2025-03-23 18:46:10 +0000
committerDan Goodliffe <dan@randomdan.homeip.net>2025-03-23 18:46:10 +0000
commit7b44e4f20b91a64b778bcc8b2f00602d4ba13bd2 (patch)
tree0c8dc333e6a8ffd34ae5675910029d45483166db /test
parentUse typed collections for apply/applyOne (diff)
downloadilt-7b44e4f20b91a64b778bcc8b2f00602d4ba13bd2.tar.bz2
ilt-7b44e4f20b91a64b778bcc8b2f00602d4ba13bd2.tar.xz
ilt-7b44e4f20b91a64b778bcc8b2f00602d4ba13bd2.zip
Support using typed collections for subclass filtering
Diffstat (limited to 'test')
-rw-r--r--test/test-collection.cpp42
1 files changed, 42 insertions, 0 deletions
diff --git a/test/test-collection.cpp b/test/test-collection.cpp
index 5aae9f0..a399845 100644
--- a/test/test-collection.cpp
+++ b/test/test-collection.cpp
@@ -40,10 +40,15 @@ public:
}
};
+class Sub1 : public Sub { };
+
using TestCollection = SharedCollection<Base, Sub>;
+BOOST_TEST_DONT_PRINT_LOG_VALUE(TestCollection::Objects::iterator)
BOOST_TEST_DONT_PRINT_LOG_VALUE(TestCollection::Objects::const_iterator)
BOOST_TEST_DONT_PRINT_LOG_VALUE(TestCollection::Objects::const_reverse_iterator)
+BOOST_TEST_DONT_PRINT_LOG_VALUE(TestCollection::OtherObjects<Sub>::iterator)
+BOOST_TEST_DONT_PRINT_LOG_VALUE(TestCollection::OtherObjects<Sub>::const_iterator)
BOOST_FIXTURE_TEST_SUITE(tc, TestCollection)
@@ -55,6 +60,7 @@ BOOST_AUTO_TEST_CASE(empty)
BOOST_CHECK_EQUAL(i, end());
BOOST_CHECK(!find<Base>());
BOOST_CHECK(!find<Sub>());
+ BOOST_CHECK(!find<Sub1>());
}
BOOST_AUTO_TEST_CASE(a_base)
@@ -68,6 +74,7 @@ BOOST_AUTO_TEST_CASE(a_base)
BOOST_CHECK_EQUAL(i, end());
BOOST_CHECK_EQUAL(b.get(), find<Base>());
BOOST_CHECK(!find<Sub>());
+ BOOST_CHECK(!find<Sub1>());
}
BOOST_AUTO_TEST_CASE(emplace_others)
@@ -80,6 +87,7 @@ BOOST_AUTO_TEST_CASE(emplace_others)
BOOST_CHECK_EQUAL(std::get<OtherObjects<Sub>>(otherObjects).size(), 1);
BOOST_CHECK_EQUAL(b.get(), find<Base>());
BOOST_CHECK_EQUAL(s.get(), find<Sub>());
+ BOOST_CHECK(!find<Sub1>());
}
BOOST_AUTO_TEST_CASE(a_rbase)
@@ -103,6 +111,38 @@ BOOST_AUTO_TEST_CASE(a_sub)
BOOST_CHECK_EQUAL(*i, s);
}
+BOOST_AUTO_TEST_CASE(filter)
+{
+ create<Base>();
+ BOOST_CHECK_EQUAL(1, apply<Base>(&Base::yes));
+ BOOST_CHECK_EQUAL(0, apply<Sub>(&Base::yes));
+ BOOST_CHECK_EQUAL(0, apply<Sub1>(&Base::yes));
+ BOOST_CHECK_EQUAL(objects.begin(), applyOne<Base>(&Base::yes));
+ BOOST_CHECK_EQUAL(std::get<0>(otherObjects).end(), applyOne<Sub>(&Base::yes));
+ BOOST_CHECK_EQUAL(std::get<0>(otherObjects).end(), applyOne<Sub1>(&Base::yes));
+ create<Sub>();
+ BOOST_CHECK_EQUAL(2, apply<Base>(&Base::yes));
+ BOOST_CHECK_EQUAL(1, apply<Sub>(&Base::yes));
+ BOOST_CHECK_EQUAL(0, apply<Sub1>(&Base::yes));
+ BOOST_CHECK_EQUAL(objects.begin(), applyOne<Base>(&Base::yes));
+ BOOST_CHECK_EQUAL(std::get<0>(otherObjects).begin(), applyOne<Sub>(&Base::yes));
+ BOOST_CHECK_EQUAL(std::get<0>(otherObjects).end(), applyOne<Sub1>(&Base::yes));
+ create<Sub1>();
+ BOOST_CHECK_EQUAL(3, apply<Base>(&Base::yes));
+ BOOST_CHECK_EQUAL(2, apply<Sub>(&Base::yes));
+ BOOST_CHECK_EQUAL(1, apply<Sub1>(&Base::yes));
+ BOOST_CHECK_EQUAL(objects.begin(), applyOne<Base>(&Base::yes));
+ BOOST_CHECK_EQUAL(std::get<0>(otherObjects).begin(), applyOne<Sub>(&Base::yes));
+ BOOST_CHECK_EQUAL(std::get<0>(otherObjects).begin() + 1, applyOne<Sub1>(&Base::yes));
+
+ BOOST_CHECK_EQUAL(std::get<idx<Sub>()>(otherObjects).size(), 2);
+ BOOST_CHECK_EQUAL(std::get<idx<Sub1>()>(otherObjects).size(), 2);
+
+ BOOST_CHECK_EQUAL(&objects, &containerFor<Base>());
+ BOOST_CHECK_EQUAL(&std::get<0>(otherObjects), &containerFor<Sub>());
+ BOOST_CHECK_EQUAL(&std::get<0>(otherObjects), &containerFor<Sub1>());
+}
+
BOOST_AUTO_TEST_CASE(begin_end)
{
BOOST_CHECK_EQUAL(0, std::distance(begin(), end()));
@@ -230,6 +270,8 @@ BOOST_AUTO_TEST_CASE(applyOneType)
create<Sub>();
BOOST_CHECK_EQUAL(objects.begin() + 1, applyOne<Sub>(&Base::yes));
BOOST_CHECK_EQUAL(objects.begin(), applyOne<Base>(&Base::yes));
+ create<Sub1>();
+ BOOST_CHECK_EQUAL(objects.begin() + 2, applyOne<Sub1>(&Base::yes));
}
BOOST_AUTO_TEST_SUITE_END()