more tests on sparse set

This commit is contained in:
Michele Caini
2018-02-22 23:23:46 +01:00
parent bb4b868c79
commit 3fd034816e

View File

@@ -71,6 +71,168 @@ TEST(SparseSetNoType, DataBeginEnd) {
ASSERT_EQ(begin, end);
}
TEST(SparseSetNoType, RespectDisjoint) {
entt::SparseSet<unsigned int> lhs;
entt::SparseSet<unsigned int> rhs;
const auto &clhs = lhs;
lhs.construct(3);
lhs.construct(12);
lhs.construct(42);
ASSERT_EQ(lhs.get(3), 0u);
ASSERT_EQ(lhs.get(12), 1u);
ASSERT_EQ(lhs.get(42), 2u);
lhs.respect(rhs);
ASSERT_EQ(clhs.get(3), 0u);
ASSERT_EQ(clhs.get(12), 1u);
ASSERT_EQ(clhs.get(42), 2u);
}
TEST(SparseSetNoType, RespectOverlap) {
entt::SparseSet<unsigned int> lhs;
entt::SparseSet<unsigned int> rhs;
const auto &clhs = lhs;
lhs.construct(3);
lhs.construct(12);
lhs.construct(42);
rhs.construct(12);
ASSERT_EQ(lhs.get(3), 0u);
ASSERT_EQ(lhs.get(12), 1u);
ASSERT_EQ(lhs.get(42), 2u);
lhs.respect(rhs);
ASSERT_EQ(clhs.get(3), 0u);
ASSERT_EQ(clhs.get(12), 2u);
ASSERT_EQ(clhs.get(42), 1u);
}
TEST(SparseSetNoType, RespectOrdered) {
entt::SparseSet<unsigned int> lhs;
entt::SparseSet<unsigned int> rhs;
lhs.construct(1);
lhs.construct(2);
lhs.construct(3);
lhs.construct(4);
lhs.construct(5);
ASSERT_EQ(lhs.get(1), 0u);
ASSERT_EQ(lhs.get(2), 1u);
ASSERT_EQ(lhs.get(3), 2u);
ASSERT_EQ(lhs.get(4), 3u);
ASSERT_EQ(lhs.get(5), 4u);
rhs.construct(6);
rhs.construct(1);
rhs.construct(2);
rhs.construct(3);
rhs.construct(4);
rhs.construct(5);
ASSERT_EQ(rhs.get(6), 0u);
ASSERT_EQ(rhs.get(1), 1u);
ASSERT_EQ(rhs.get(2), 2u);
ASSERT_EQ(rhs.get(3), 3u);
ASSERT_EQ(rhs.get(4), 4u);
ASSERT_EQ(rhs.get(5), 5u);
rhs.respect(lhs);
ASSERT_EQ(rhs.get(6), 0u);
ASSERT_EQ(rhs.get(1), 1u);
ASSERT_EQ(rhs.get(2), 2u);
ASSERT_EQ(rhs.get(3), 3u);
ASSERT_EQ(rhs.get(4), 4u);
ASSERT_EQ(rhs.get(5), 5u);
}
TEST(SparseSetNoType, RespectReverse) {
entt::SparseSet<unsigned int> lhs;
entt::SparseSet<unsigned int> rhs;
lhs.construct(1);
lhs.construct(2);
lhs.construct(3);
lhs.construct(4);
lhs.construct(5);
ASSERT_EQ(lhs.get(1), 0u);
ASSERT_EQ(lhs.get(2), 1u);
ASSERT_EQ(lhs.get(3), 2u);
ASSERT_EQ(lhs.get(4), 3u);
ASSERT_EQ(lhs.get(5), 4u);
rhs.construct(5);
rhs.construct(4);
rhs.construct(3);
rhs.construct(2);
rhs.construct(1);
rhs.construct(6);
ASSERT_EQ(rhs.get(5), 0u);
ASSERT_EQ(rhs.get(4), 1u);
ASSERT_EQ(rhs.get(3), 2u);
ASSERT_EQ(rhs.get(2), 3u);
ASSERT_EQ(rhs.get(1), 4u);
ASSERT_EQ(rhs.get(6), 5u);
rhs.respect(lhs);
ASSERT_EQ(rhs.get(6), 0u);
ASSERT_EQ(rhs.get(1), 1u);
ASSERT_EQ(rhs.get(2), 2u);
ASSERT_EQ(rhs.get(3), 3u);
ASSERT_EQ(rhs.get(4), 4u);
ASSERT_EQ(rhs.get(5), 5u);
}
TEST(SparseSetNoType, RespectUnordered) {
entt::SparseSet<unsigned int> lhs;
entt::SparseSet<unsigned int> rhs;
lhs.construct(1);
lhs.construct(2);
lhs.construct(3);
lhs.construct(4);
lhs.construct(5);
ASSERT_EQ(lhs.get(1), 0u);
ASSERT_EQ(lhs.get(2), 1u);
ASSERT_EQ(lhs.get(3), 2u);
ASSERT_EQ(lhs.get(4), 3u);
ASSERT_EQ(lhs.get(5), 4u);
rhs.construct(3);
rhs.construct(2);
rhs.construct(6);
rhs.construct(1);
rhs.construct(4);
rhs.construct(5);
ASSERT_EQ(rhs.get(3), 0u);
ASSERT_EQ(rhs.get(2), 1u);
ASSERT_EQ(rhs.get(6), 2u);
ASSERT_EQ(rhs.get(1), 3u);
ASSERT_EQ(rhs.get(4), 4u);
ASSERT_EQ(rhs.get(5), 5u);
rhs.respect(lhs);
ASSERT_EQ(rhs.get(6), 0u);
ASSERT_EQ(rhs.get(1), 1u);
ASSERT_EQ(rhs.get(2), 2u);
ASSERT_EQ(rhs.get(3), 3u);
ASSERT_EQ(rhs.get(4), 4u);
ASSERT_EQ(rhs.get(5), 5u);
}
TEST(SparseSetWithType, AggregatesMustWork) {
struct AggregateType { int value; };
// the goal of this test is to enforce the requirements for aggregate types