sparse_set/storage: iterator's ::index returns the right offset
This commit is contained in:
@@ -89,7 +89,7 @@ struct sparse_set_iterator final {
|
||||
}
|
||||
|
||||
[[nodiscard]] difference_type index() const ENTT_NOEXCEPT {
|
||||
return offset;
|
||||
return offset - 1;
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
@@ -113,7 +113,7 @@ public:
|
||||
}
|
||||
|
||||
[[nodiscard]] difference_type index() const ENTT_NOEXCEPT {
|
||||
return offset;
|
||||
return offset - 1;
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
@@ -832,6 +832,9 @@ TEST(SparseSet, Iterator) {
|
||||
ASSERT_EQ(end, set.cend());
|
||||
ASSERT_NE(begin, end);
|
||||
|
||||
ASSERT_EQ(begin.index(), 0);
|
||||
ASSERT_EQ(end.index(), -1);
|
||||
|
||||
ASSERT_EQ(begin++, set.begin());
|
||||
ASSERT_EQ(begin--, set.end());
|
||||
|
||||
@@ -861,9 +864,15 @@ TEST(SparseSet, Iterator) {
|
||||
ASSERT_EQ(*begin, entt::entity{3});
|
||||
ASSERT_EQ(*begin.operator->(), entt::entity{3});
|
||||
|
||||
ASSERT_EQ(begin.index(), 0);
|
||||
ASSERT_EQ(end.index(), -1);
|
||||
|
||||
set.emplace(entt::entity{42});
|
||||
begin = set.begin();
|
||||
|
||||
ASSERT_EQ(begin.index(), 1);
|
||||
ASSERT_EQ(end.index(), -1);
|
||||
|
||||
ASSERT_EQ(begin[0u], entt::entity{42});
|
||||
ASSERT_EQ(begin[1u], entt::entity{3});
|
||||
}
|
||||
@@ -887,6 +896,9 @@ TEST(SparseSet, ReverseIterator) {
|
||||
ASSERT_EQ(end, set.crend());
|
||||
ASSERT_NE(begin, end);
|
||||
|
||||
ASSERT_EQ(begin.base().index(), -1);
|
||||
ASSERT_EQ(end.base().index(), 0);
|
||||
|
||||
ASSERT_EQ(begin++, set.rbegin());
|
||||
ASSERT_EQ(begin--, set.rend());
|
||||
|
||||
@@ -916,8 +928,14 @@ TEST(SparseSet, ReverseIterator) {
|
||||
ASSERT_EQ(*begin, entt::entity{3});
|
||||
ASSERT_EQ(*begin.operator->(), entt::entity{3});
|
||||
|
||||
ASSERT_EQ(begin.base().index(), -1);
|
||||
ASSERT_EQ(end.base().index(), 0);
|
||||
|
||||
set.emplace(entt::entity{42});
|
||||
begin = set.rbegin();
|
||||
end = set.rend();
|
||||
|
||||
ASSERT_EQ(begin.base().index(), -1);
|
||||
ASSERT_EQ(end.base().index(), 1);
|
||||
|
||||
ASSERT_EQ(begin[0u], entt::entity{3});
|
||||
ASSERT_EQ(begin[1u], entt::entity{42});
|
||||
|
||||
@@ -891,6 +891,9 @@ TEST(Storage, Iterator) {
|
||||
ASSERT_EQ(end, pool.end());
|
||||
ASSERT_NE(begin, end);
|
||||
|
||||
ASSERT_EQ(begin.index(), 0);
|
||||
ASSERT_EQ(end.index(), -1);
|
||||
|
||||
ASSERT_EQ(begin++, pool.begin());
|
||||
ASSERT_EQ(begin--, pool.end());
|
||||
|
||||
@@ -917,9 +920,15 @@ TEST(Storage, Iterator) {
|
||||
ASSERT_GT(end, begin);
|
||||
ASSERT_GE(end, pool.end());
|
||||
|
||||
ASSERT_EQ(begin.index(), 0);
|
||||
ASSERT_EQ(end.index(), -1);
|
||||
|
||||
pool.emplace(entt::entity{42}, 3);
|
||||
begin = pool.begin();
|
||||
|
||||
ASSERT_EQ(begin.index(), 1);
|
||||
ASSERT_EQ(end.index(), -1);
|
||||
|
||||
ASSERT_EQ(begin[0u], boxed_int{3});
|
||||
ASSERT_EQ(begin[1u], boxed_int{42});
|
||||
}
|
||||
@@ -943,6 +952,9 @@ TEST(Storage, ConstIterator) {
|
||||
ASSERT_EQ(cend, pool.cend());
|
||||
ASSERT_NE(cbegin, cend);
|
||||
|
||||
ASSERT_EQ(cbegin.index(), 0);
|
||||
ASSERT_EQ(cend.index(), -1);
|
||||
|
||||
ASSERT_EQ(cbegin++, pool.cbegin());
|
||||
ASSERT_EQ(cbegin--, pool.cend());
|
||||
|
||||
@@ -969,9 +981,15 @@ TEST(Storage, ConstIterator) {
|
||||
ASSERT_GT(cend, cbegin);
|
||||
ASSERT_GE(cend, pool.cend());
|
||||
|
||||
ASSERT_EQ(cbegin.index(), 0);
|
||||
ASSERT_EQ(cend.index(), -1);
|
||||
|
||||
pool.emplace(entt::entity{42}, 3);
|
||||
cbegin = pool.cbegin();
|
||||
|
||||
ASSERT_EQ(cbegin.index(), 1);
|
||||
ASSERT_EQ(cend.index(), -1);
|
||||
|
||||
ASSERT_EQ(cbegin[0u], boxed_int{3});
|
||||
ASSERT_EQ(cbegin[1u], boxed_int{42});
|
||||
}
|
||||
@@ -995,6 +1013,9 @@ TEST(Storage, ReverseIterator) {
|
||||
ASSERT_EQ(end, pool.rend());
|
||||
ASSERT_NE(begin, end);
|
||||
|
||||
ASSERT_EQ(begin.base().index(), -1);
|
||||
ASSERT_EQ(end.base().index(), 0);
|
||||
|
||||
ASSERT_EQ(begin++, pool.rbegin());
|
||||
ASSERT_EQ(begin--, pool.rend());
|
||||
|
||||
@@ -1021,8 +1042,14 @@ TEST(Storage, ReverseIterator) {
|
||||
ASSERT_GT(end, begin);
|
||||
ASSERT_GE(end, pool.rend());
|
||||
|
||||
ASSERT_EQ(begin.base().index(), -1);
|
||||
ASSERT_EQ(end.base().index(), 0);
|
||||
|
||||
pool.emplace(entt::entity{42}, 3);
|
||||
begin = pool.rbegin();
|
||||
end = pool.rend();
|
||||
|
||||
ASSERT_EQ(begin.base().index(), -1);
|
||||
ASSERT_EQ(end.base().index(), 1);
|
||||
|
||||
ASSERT_EQ(begin[0u], boxed_int{42});
|
||||
ASSERT_EQ(begin[1u], boxed_int{3});
|
||||
@@ -1047,6 +1074,9 @@ TEST(Storage, ConstReverseIterator) {
|
||||
ASSERT_EQ(cend, pool.crend());
|
||||
ASSERT_NE(cbegin, cend);
|
||||
|
||||
ASSERT_EQ(cbegin.base().index(), -1);
|
||||
ASSERT_EQ(cend.base().index(), 0);
|
||||
|
||||
ASSERT_EQ(cbegin++, pool.crbegin());
|
||||
ASSERT_EQ(cbegin--, pool.crend());
|
||||
|
||||
@@ -1072,6 +1102,18 @@ TEST(Storage, ConstReverseIterator) {
|
||||
|
||||
ASSERT_GT(cend, cbegin);
|
||||
ASSERT_GE(cend, pool.crend());
|
||||
|
||||
ASSERT_EQ(cbegin.base().index(), -1);
|
||||
ASSERT_EQ(cend.base().index(), 0);
|
||||
|
||||
pool.emplace(entt::entity{42}, 3);
|
||||
cend = pool.crend();
|
||||
|
||||
ASSERT_EQ(cbegin.base().index(), -1);
|
||||
ASSERT_EQ(cend.base().index(), 1);
|
||||
|
||||
ASSERT_EQ(cbegin[0u], boxed_int{42});
|
||||
ASSERT_EQ(cbegin[1u], boxed_int{3});
|
||||
}
|
||||
|
||||
TEST(Storage, IteratorConversion) {
|
||||
|
||||
Reference in New Issue
Block a user