diff options
author | Carl Hetherington <carl@carlh.net> | 2012-05-31 20:23:31 +0000 |
---|---|---|
committer | Carl Hetherington <carl@carlh.net> | 2012-05-31 20:23:31 +0000 |
commit | a6786a6dd23d758c192c8ece2ca4b62c9fa255f4 (patch) | |
tree | dfdd42a8e709828a32b50b3102939e4b7a21a4a9 /libs/evoral/test | |
parent | 19becdf7e02b32465573d69b746736267fb67e88 (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.cpp | 63 | ||||
-rw-r--r-- | libs/evoral/test/RangeTest.hpp | 5 |
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 (); }; |