Skip to content

Commit

Permalink
Merge pull request #514 from ChaiByte/fix/ring-buffer
Browse files Browse the repository at this point in the history
Fix ring_buffer comparation logic
  • Loading branch information
grojo-ea committed Jul 7, 2023
2 parents f9615ae + 1d50429 commit 089eb20
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 7 deletions.
9 changes: 2 additions & 7 deletions include/EASTL/bonus/ring_buffer.h
Original file line number Diff line number Diff line change
Expand Up @@ -1505,19 +1505,14 @@ namespace eastl
template <typename T, typename Container, typename Allocator>
inline bool operator==(const ring_buffer<T, Container, Allocator>& a, const ring_buffer<T, Container, Allocator>& b)
{
return (a.size() == b.size()) && (a.c == b.c);
return (a.size() == b.size()) && eastl::equal(a.begin(), a.end(), b.begin());
}


template <typename T, typename Container, typename Allocator>
inline bool operator<(const ring_buffer<T, Container, Allocator>& a, const ring_buffer<T, Container, Allocator>& b)
{
const typename ring_buffer<T, Container, Allocator>::size_type sizeA = a.size();
const typename ring_buffer<T, Container, Allocator>::size_type sizeB = b.size();

if(sizeA == sizeB)
return (a.c < b.c);
return sizeA < sizeB;
return eastl::lexicographical_compare(a.begin(), a.end(), b.begin(), b.end());
}


Expand Down
50 changes: 50 additions & 0 deletions test/source/TestRingBuffer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -549,6 +549,56 @@ int TestRingBuffer()
EATEST_VERIFY(rbVectorInt[5] == 4);
}

{
// Comparation operator ==, operator <
// Fix bug mentioned in https://github.com/electronicarts/EASTL/issues/511
typedef ring_buffer<int, vector<int>> RBVectorInt;

RBVectorInt rbVectorInt(3);

rbVectorInt.push_back(0);
rbVectorInt.push_back(1);
rbVectorInt.push_back(2);
rbVectorInt.push_back(3);
rbVectorInt.push_back(4);

EATEST_VERIFY(rbVectorInt[0] == 2);
EATEST_VERIFY(rbVectorInt[1] == 3);
EATEST_VERIFY(rbVectorInt[2] == 4);

RBVectorInt rbVectorInt2({3, 4, 2});
RBVectorInt rbVectorInt3({2, 3, 4});
RBVectorInt rbVectorInt4({3, 4, 5});

EATEST_VERIFY(rbVectorInt != rbVectorInt2);
EATEST_VERIFY(rbVectorInt == rbVectorInt3);
EATEST_VERIFY(rbVectorInt < rbVectorInt4);

// Different size
RBVectorInt rbVectorInt5({1, 2});
EATEST_VERIFY(rbVectorInt != rbVectorInt5);
EATEST_VERIFY(rbVectorInt > rbVectorInt5);

RBVectorInt rbVectorInt6({2, 3});
EATEST_VERIFY(rbVectorInt != rbVectorInt6);
EATEST_VERIFY(rbVectorInt > rbVectorInt6);

RBVectorInt rbVectorInt7({3, 4});
EATEST_VERIFY(rbVectorInt != rbVectorInt7);
EATEST_VERIFY(rbVectorInt < rbVectorInt7);

RBVectorInt rbVectorInt8({1, 2, 3, 4});
EATEST_VERIFY(rbVectorInt != rbVectorInt8);
EATEST_VERIFY(rbVectorInt > rbVectorInt8);

RBVectorInt rbVectorInt9({2, 3, 4, 5});
EATEST_VERIFY(rbVectorInt != rbVectorInt9);
EATEST_VERIFY(rbVectorInt < rbVectorInt9);

RBVectorInt rbVectorInt10({3, 4, 5, 6});
EATEST_VERIFY(rbVectorInt != rbVectorInt10);
EATEST_VERIFY(rbVectorInt < rbVectorInt10);
}

{
EA::UnitTest::Rand rng(EA::UnitTest::GetRandSeed());
Expand Down

0 comments on commit 089eb20

Please sign in to comment.