summaryrefslogtreecommitdiff
path: root/libs/evoral/test
diff options
context:
space:
mode:
authorCarl Hetherington <carl@carlh.net>2012-05-31 20:23:31 +0000
committerCarl Hetherington <carl@carlh.net>2012-05-31 20:23:31 +0000
commita6786a6dd23d758c192c8ece2ca4b62c9fa255f4 (patch)
treedfdd42a8e709828a32b50b3102939e4b7a21a4a9 /libs/evoral/test
parent19becdf7e02b32465573d69b746736267fb67e88 (diff)
Hopefully less bad version of Evoral::RangeList::subtract,
with more tests. git-svn-id: svn://localhost/ardour2/branches/3.0@12514 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/evoral/test')
-rw-r--r--libs/evoral/test/RangeTest.cpp63
-rw-r--r--libs/evoral/test/RangeTest.hpp5
2 files changed, 68 insertions, 0 deletions
diff --git a/libs/evoral/test/RangeTest.cpp b/libs/evoral/test/RangeTest.cpp
index ff9856a9b6..07decbf2c9 100644
--- a/libs/evoral/test/RangeTest.cpp
+++ b/libs/evoral/test/RangeTest.cpp
@@ -1,5 +1,6 @@
#include "RangeTest.hpp"
#include "evoral/Range.hpp"
+#include <stdlib.h>
CPPUNIT_TEST_SUITE_REGISTRATION (RangeTest);
@@ -24,6 +25,7 @@ RangeTest::coalesceTest ()
CPPUNIT_ASSERT_EQUAL (8, i->to);
}
+/* Basic subtraction of a few smaller ranges from a larger one */
void
RangeTest::subtractTest1 ()
{
@@ -51,6 +53,7 @@ RangeTest::subtractTest1 ()
CPPUNIT_ASSERT_EQUAL (10, i->to);
}
+/* Test subtraction of a range B from a range A, where A and B do not overlap */
void
RangeTest::subtractTest2 ()
{
@@ -69,6 +72,7 @@ RangeTest::subtractTest2 ()
CPPUNIT_ASSERT_EQUAL (10, i->to);
}
+/* Test subtraction of B from A, where B entirely overlaps A */
void
RangeTest::subtractTest3 ()
{
@@ -82,3 +86,62 @@ RangeTest::subtractTest3 ()
RangeList<int>::List s = sheila.get ();
CPPUNIT_ASSERT_EQUAL (size_t (0), s.size ());
}
+
+/* A bit like subtractTest1, except some of the ranges
+ we are subtracting overlap.
+*/
+void
+RangeTest::subtractTest4 ()
+{
+ Range<int> fred (0, 10);
+
+ RangeList<int> jim;
+ jim.add (Range<int> (2, 4));
+ jim.add (Range<int> (7, 8));
+ jim.add (Range<int> (8, 9));
+
+ RangeList<int> sheila = subtract (fred, jim);
+
+ RangeList<int>::List s = sheila.get ();
+ CPPUNIT_ASSERT_EQUAL (size_t (3), s.size ());
+
+ RangeList<int>::List::iterator i = s.begin ();
+ CPPUNIT_ASSERT_EQUAL (0, i->from);
+ CPPUNIT_ASSERT_EQUAL (1, i->to);
+
+ ++i;
+ CPPUNIT_ASSERT_EQUAL (4, i->from);
+ CPPUNIT_ASSERT_EQUAL (6, i->to);
+
+ ++i;
+ CPPUNIT_ASSERT_EQUAL (9, i->from);
+ CPPUNIT_ASSERT_EQUAL (10, i->to);
+}
+
+/* A bit like subtractTest1, except some of the ranges
+ we are subtracting overlap the start / end of the
+ initial range.
+*/
+void
+RangeTest::subtractTest5 ()
+{
+ Range<int> fred (1, 12);
+
+ RangeList<int> jim;
+ jim.add (Range<int> (0, 4));
+ jim.add (Range<int> (6, 7));
+ jim.add (Range<int> (9, 42));
+
+ RangeList<int> sheila = subtract (fred, jim);
+
+ RangeList<int>::List s = sheila.get ();
+ CPPUNIT_ASSERT_EQUAL (size_t (2), s.size ());
+
+ RangeList<int>::List::iterator i = s.begin ();
+ CPPUNIT_ASSERT_EQUAL (4, i->from);
+ CPPUNIT_ASSERT_EQUAL (5, i->to);
+
+ ++i;
+ CPPUNIT_ASSERT_EQUAL (7, i->from);
+ CPPUNIT_ASSERT_EQUAL (8, i->to);
+}
diff --git a/libs/evoral/test/RangeTest.hpp b/libs/evoral/test/RangeTest.hpp
index 6b65ad02d2..892347b3b0 100644
--- a/libs/evoral/test/RangeTest.hpp
+++ b/libs/evoral/test/RangeTest.hpp
@@ -6,7 +6,10 @@ class RangeTest : public CppUnit::TestFixture
CPPUNIT_TEST_SUITE (RangeTest);
CPPUNIT_TEST (coalesceTest);
CPPUNIT_TEST (subtractTest1);
+ CPPUNIT_TEST (subtractTest2);
CPPUNIT_TEST (subtractTest3);
+ CPPUNIT_TEST (subtractTest4);
+ CPPUNIT_TEST (subtractTest5);
CPPUNIT_TEST_SUITE_END ();
public:
@@ -14,6 +17,8 @@ public:
void subtractTest1 ();
void subtractTest2 ();
void subtractTest3 ();
+ void subtractTest4 ();
+ void subtractTest5 ();
};