Add test for Evoral::coverage()
authorColin Fletcher <colin.m.fletcher@googlemail.com>
Tue, 25 Nov 2014 17:49:51 +0000 (17:49 +0000)
committerColin Fletcher <colin.m.fletcher@googlemail.com>
Tue, 25 Nov 2014 17:49:51 +0000 (17:49 +0000)
Add a test function to test Evoral::coverage() with all possible overlap
types. The first test (line 161) that expects OverlapExternal will fail
with the current implementation of coverage().

There's possibly still a discussion to be had about what the overlap type of
ranges with negative lengths should be: there are currently places in the main
Ardour code base where coverage() is called with ranges where start > end.

libs/evoral/test/RangeTest.cpp
libs/evoral/test/RangeTest.hpp

index 07decbf2c97675a5dcdcc43c7bc0e4f2dcc693d0..409e40f013defaa269026aab500368821a7e5165 100644 (file)
@@ -145,3 +145,67 @@ RangeTest::subtractTest5 ()
        CPPUNIT_ASSERT_EQUAL (7, i->from);
        CPPUNIT_ASSERT_EQUAL (8, i->to);
 }
+
+/* Test coverage() with all possible types of overlap.
+ */
+
+void
+RangeTest::coverageTest ()
+{
+
+       // b starts before a
+       CPPUNIT_ASSERT_EQUAL (coverage(3, 7, 1, 1), Evoral::OverlapNone);
+       CPPUNIT_ASSERT_EQUAL (coverage(3, 7, 1, 2), Evoral::OverlapNone);
+       CPPUNIT_ASSERT_EQUAL (coverage(3, 7, 1, 3), Evoral::OverlapStart);
+       CPPUNIT_ASSERT_EQUAL (coverage(3, 7, 1, 5), Evoral::OverlapStart);
+       CPPUNIT_ASSERT_EQUAL (coverage(3, 7, 1, 7), Evoral::OverlapExternal);
+       CPPUNIT_ASSERT_EQUAL (coverage(3, 7, 1, 9), Evoral::OverlapExternal);
+
+       // b starts at a
+       CPPUNIT_ASSERT_EQUAL (coverage(3, 7, 3, 3), Evoral::OverlapStart);
+       CPPUNIT_ASSERT_EQUAL (coverage(3, 7, 3, 5), Evoral::OverlapStart);
+       CPPUNIT_ASSERT_EQUAL (coverage(3, 7, 3, 7), Evoral::OverlapExternal);
+       CPPUNIT_ASSERT_EQUAL (coverage(3, 7, 3, 9), Evoral::OverlapExternal);
+
+       // b starts inside a
+       CPPUNIT_ASSERT_EQUAL (coverage(3, 7, 4, 4), Evoral::OverlapInternal);
+       CPPUNIT_ASSERT_EQUAL (coverage(3, 7, 4, 6), Evoral::OverlapInternal);
+       CPPUNIT_ASSERT_EQUAL (coverage(3, 7, 4, 7), Evoral::OverlapEnd);
+       CPPUNIT_ASSERT_EQUAL (coverage(3, 7, 4, 8), Evoral::OverlapEnd);
+
+       // b starts at end of a
+       CPPUNIT_ASSERT_EQUAL (coverage(3, 7, 7, 7), Evoral::OverlapEnd);
+       CPPUNIT_ASSERT_EQUAL (coverage(3, 7, 7, 9), Evoral::OverlapEnd);
+
+       // b starts after end of a
+       CPPUNIT_ASSERT_EQUAL (coverage(3, 7, 8, 8), Evoral::OverlapNone);
+       CPPUNIT_ASSERT_EQUAL (coverage(3, 7, 8, 9), Evoral::OverlapNone);
+
+       // zero-length range a
+       CPPUNIT_ASSERT_EQUAL (coverage(3, 3, 2, 4), Evoral::OverlapExternal);
+       CPPUNIT_ASSERT_EQUAL (coverage(3, 3, 1, 2), Evoral::OverlapNone);
+       CPPUNIT_ASSERT_EQUAL (coverage(3, 3, 3, 3), Evoral::OverlapExternal);
+       CPPUNIT_ASSERT_EQUAL (coverage(3, 3, 8, 9), Evoral::OverlapNone);
+
+       // negative length range a
+       // XXX these are debatable - should we just consider start & end to be
+       // swapped if end < start?
+       CPPUNIT_ASSERT_EQUAL (coverage(4, 3, 1, 2), Evoral::OverlapNone);
+       CPPUNIT_ASSERT_EQUAL (coverage(4, 3, 2, 3), Evoral::OverlapNone);
+       CPPUNIT_ASSERT_EQUAL (coverage(4, 3, 2, 4), Evoral::OverlapNone);
+       CPPUNIT_ASSERT_EQUAL (coverage(4, 3, 3, 3), Evoral::OverlapNone);
+       CPPUNIT_ASSERT_EQUAL (coverage(4, 3, 8, 9), Evoral::OverlapNone);
+
+       // negative length range b
+       // b starts before a
+       CPPUNIT_ASSERT_EQUAL (coverage(3, 7, 1, 0), Evoral::OverlapNone);
+       // b starts at a
+       CPPUNIT_ASSERT_EQUAL (coverage(3, 7, 3, 2), Evoral::OverlapNone);
+       // b starts inside a
+       CPPUNIT_ASSERT_EQUAL (coverage(3, 7, 4, 3), Evoral::OverlapNone);
+       // b starts at end of a
+       CPPUNIT_ASSERT_EQUAL (coverage(3, 7, 7, 5), Evoral::OverlapNone);
+       // b starts after end of a
+       CPPUNIT_ASSERT_EQUAL (coverage(3, 7, 8, 7), Evoral::OverlapNone);
+
+}
index 892347b3b00e208bcabbb627cea31303d328a3e2..2caea410e63c71f28777b823c1c9653417116756 100644 (file)
@@ -10,6 +10,7 @@ class RangeTest : public CppUnit::TestFixture
        CPPUNIT_TEST (subtractTest3);
        CPPUNIT_TEST (subtractTest4);
        CPPUNIT_TEST (subtractTest5);
+       CPPUNIT_TEST (coverageTest);
        CPPUNIT_TEST_SUITE_END ();
 
 public:
@@ -19,6 +20,7 @@ public:
        void subtractTest3 ();
        void subtractTest4 ();
        void subtractTest5 ();
+       void coverageTest ();
 };