You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by kg...@apache.org on 2011/02/03 16:56:09 UTC

svn commit: r1066841 - in /qpid/trunk/qpid/cpp: include/qpid/RangeSet.h src/tests/SequenceSet.cpp

Author: kgiusti
Date: Thu Feb  3 15:56:08 2011
New Revision: 1066841

URL: http://svn.apache.org/viewvc?rev=1066841&view=rev
Log:
QPID-3035: fix incorrect removal at end of SequenceSet

Modified:
    qpid/trunk/qpid/cpp/include/qpid/RangeSet.h
    qpid/trunk/qpid/cpp/src/tests/SequenceSet.cpp

Modified: qpid/trunk/qpid/cpp/include/qpid/RangeSet.h
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/include/qpid/RangeSet.h?rev=1066841&r1=1066840&r2=1066841&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/include/qpid/RangeSet.h (original)
+++ qpid/trunk/qpid/cpp/include/qpid/RangeSet.h Thu Feb  3 15:56:08 2011
@@ -265,8 +265,8 @@ template <class T> void RangeSet<T>::rem
         }
         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);
     }
 }

Modified: qpid/trunk/qpid/cpp/src/tests/SequenceSet.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/tests/SequenceSet.cpp?rev=1066841&r1=1066840&r2=1066841&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/tests/SequenceSet.cpp (original)
+++ qpid/trunk/qpid/cpp/src/tests/SequenceSet.cpp Thu Feb  3 15:56:08 2011
@@ -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



---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:commits-subscribe@qpid.apache.org