diff options
author | Kenneth Anthony Giusti <kgiusti@apache.org> | 2011-02-04 16:55:45 +0000 |
---|---|---|
committer | Kenneth Anthony Giusti <kgiusti@apache.org> | 2011-02-04 16:55:45 +0000 |
commit | 5f5c8896096529aa2ec9b39397963cd96a70f4e1 (patch) | |
tree | 3625f12786941249005ded2dd97518fbc3497829 | |
parent | 5ca9d80194815638fac351164802d08386a519cb (diff) | |
download | qpid-python-5f5c8896096529aa2ec9b39397963cd96a70f4e1.tar.gz |
pull in sequence set fix
git-svn-id: https://svn.apache.org/repos/asf/qpid/branches/qpid-2935@1067219 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r-- | qpid/cpp/include/qpid/RangeSet.h | 4 | ||||
-rw-r--r-- | qpid/cpp/src/tests/SequenceSet.cpp | 44 |
2 files changed, 46 insertions, 2 deletions
diff --git a/qpid/cpp/include/qpid/RangeSet.h b/qpid/cpp/include/qpid/RangeSet.h index 1b2e4201a6..36991fd784 100644 --- a/qpid/cpp/include/qpid/RangeSet.h +++ b/qpid/cpp/include/qpid/RangeSet.h @@ -265,8 +265,8 @@ template <class T> void RangeSet<T>::removeRange(const Range<T>& r) { } for (j = i; j != ranges.end() && r.contains(*j); ++j) ; // Ranges to erase. - if (j != ranges.end() && j->end() > r.end()) - j->begin(r.end()); // Truncate j + if (j != ranges.end() && r.end() > j->begin()) + j->begin(r.end()); // Truncate j ranges.erase(i,j); } } diff --git a/qpid/cpp/src/tests/SequenceSet.cpp b/qpid/cpp/src/tests/SequenceSet.cpp index aaeb68e3c5..bc0a8ea509 100644 --- a/qpid/cpp/src/tests/SequenceSet.cpp +++ b/qpid/cpp/src/tests/SequenceSet.cpp @@ -138,6 +138,50 @@ QPID_AUTO_TEST_CASE(testRemove) { RangeExpectations().expect(3, 5).expect(7, 7).expect(9, 10).check(t); } + +QPID_AUTO_TEST_CASE(testOutOfOrderRemove) { + + SequenceSet s(2, 20); + + // test remove from middle: + s.remove(7); + RangeExpectations().expect(2, 6).expect(8, 20).check(s); + s.remove(14); + RangeExpectations().expect(2, 6).expect(8, 13).expect(15, 20).check(s); + + // remove from front of subrange: + s.remove(8, 8); + RangeExpectations().expect(2, 6).expect(9, 13).expect(15, 20).check(s); + + // remove from tail of subrange: + s.remove(6); + RangeExpectations().expect(2, 5).expect(9, 13).expect(15, 20).check(s); + + // remove across subrange: + s.remove(13, 15); + RangeExpectations().expect(2, 5).expect(9, 12).expect(16, 20).check(s); + + // remove within subrange: + s.remove(6, 8); + RangeExpectations().expect(2, 5).expect(9, 12).expect(16, 20).check(s); + + // remove overlap subrange tail: + s.remove(11, 15); + RangeExpectations().expect(2, 5).expect(9, 10).expect(16, 20).check(s); + + // remove overlap subrange head: + s.remove(14, 17); + RangeExpectations().expect(2, 5).expect(9, 10).expect(18, 20).check(s); + + // remove overlap sequence tail: + s.remove(20, 22); + RangeExpectations().expect(2, 5).expect(9, 10).expect(18, 19).check(s); + + // remove overlap sequence head: + s.remove(1, 3); + RangeExpectations().expect(4, 5).expect(9, 10).expect(18, 19).check(s); +} + QPID_AUTO_TEST_SUITE_END() }} // namespace qpid::tests |