changeset 38:944898c2e14e

Convert unit tests to Boost test framework, add simplistic build
author Chris Cannam
date Thu, 19 Jul 2012 14:05:22 +0100
parents 7bf67d2dfc30
children 822cf7b8e070
files Makefile.inc test/Makefile test/TestNoteHypothesis.cpp
diffstat 3 files changed, 203 insertions(+), 172 deletions(-) [+]
line wrap: on
line diff
--- a/Makefile.inc	Thu Jul 19 13:48:03 2012 +0100
+++ b/Makefile.inc	Thu Jul 19 14:05:22 2012 +0100
@@ -18,6 +18,8 @@
 OBJECTS := $(SOURCES:.cpp=.o)
 OBJECTS := $(OBJECTS:.c=.o)
 
+all: $(PLUGIN)
+
 $(PLUGIN):	$(OBJECTS)
 		$(CXX) -o $@ $^ $(LDFLAGS)
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/Makefile	Thu Jul 19 14:05:22 2012 +0100
@@ -0,0 +1,11 @@
+CXX	?= g++
+CC	?= gcc
+
+CFLAGS		:= $(CFLAGS) 
+CXXFLAGS	:= $(CXXFLAGS) -I..
+LDFLAGS		:= $(LDFLAGS) -lvamp-sdk -lboost_unit_test_framework
+
+SUPER_OBJECTS	:= ../NoteHypothesis.o
+
+tests:	TestNoteHypothesis.o
+	$(CXX) -o $@ $^ $(SUPER_OBJECTS) $(LDFLAGS)
--- a/test/TestNoteHypothesis.cpp	Thu Jul 19 13:48:03 2012 +0100
+++ b/test/TestNoteHypothesis.cpp	Thu Jul 19 14:05:22 2012 +0100
@@ -22,179 +22,197 @@
     WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */
 
-#ifndef TEST_NOTE_HYPOTHESIS_H
-#define TEST_NOTE_HYPOTHESIS_H
+#include "NoteHypothesis.h"
 
-#include "base/NoteHypothesis.h"
-
-#include <QObject>
-#include <QtTest>
-
-namespace Turbot {
-
-class TestNoteHypothesis : public QObject
+std::ostream &operator<<(std::ostream &out, const NoteHypothesis::Estimate &n)
 {
-    Q_OBJECT
-
-private slots:
-    void emptyAccept() {
-	NoteHypothesis h;
-	NoteHypothesis::Estimate e;
-	QCOMPARE(h.getState(), NoteHypothesis::New);
-	QVERIFY(h.accept(e));
-	QCOMPARE(h.getState(), NoteHypothesis::Provisional);
-    }
-
-    void simpleSatisfy() {
-	NoteHypothesis h;
-	NoteHypothesis::Estimate e1(500, RealTime::fromMilliseconds(0), 1);
-	NoteHypothesis::Estimate e2(500, RealTime::fromMilliseconds(10), 1);
-	NoteHypothesis::Estimate e3(500, RealTime::fromMilliseconds(20), 1);
-	NoteHypothesis::Estimate e4(500, RealTime::fromMilliseconds(30), 1);
-	NoteHypothesis::Estimate e5(500, RealTime::fromMilliseconds(80), 1);
-	NoteHypothesis::Estimate e6(500, RealTime::fromMilliseconds(90), 1);
-	QCOMPARE(h.getState(), NoteHypothesis::New);
-	QVERIFY(h.accept(e1));
-	QCOMPARE(h.getState(), NoteHypothesis::Provisional);
-	QVERIFY(h.accept(e2));
-	QCOMPARE(h.getState(), NoteHypothesis::Provisional);
-	QVERIFY(h.accept(e3));
-	QCOMPARE(h.getState(), NoteHypothesis::Satisfied);
-	QVERIFY(h.accept(e4));
-	QCOMPARE(h.getState(), NoteHypothesis::Satisfied);
-	QVERIFY(!h.accept(e5));
-	QCOMPARE(h.getState(), NoteHypothesis::Expired);
-	QVERIFY(!h.accept(e6));
-	QCOMPARE(h.getState(), NoteHypothesis::Expired);
-    }
-	
-    void strayReject() {
-	NoteHypothesis h;
-	NoteHypothesis::Estimate e1(500, RealTime::fromMilliseconds(0), 1);
-	NoteHypothesis::Estimate e2(1000, RealTime::fromMilliseconds(10), 1);
-	NoteHypothesis::Estimate e3(500, RealTime::fromMilliseconds(20), 1);
-	NoteHypothesis::Estimate e4(500, RealTime::fromMilliseconds(30), 1);
-	QCOMPARE(h.getState(), NoteHypothesis::New);
-	QVERIFY(h.accept(e1));
-	QCOMPARE(h.getState(), NoteHypothesis::Provisional);
-	QVERIFY(!h.accept(e2));
-	QCOMPARE(h.getState(), NoteHypothesis::Provisional);
-	QVERIFY(h.accept(e3));
-	QCOMPARE(h.getState(), NoteHypothesis::Provisional);
-	QVERIFY(h.accept(e4));
-	QCOMPARE(h.getState(), NoteHypothesis::Satisfied);
-    }
-		
-    void tooSlow() {
-	NoteHypothesis h;
-	NoteHypothesis::Estimate e1(500, RealTime::fromMilliseconds(0), 1);
-	NoteHypothesis::Estimate e2(500, RealTime::fromMilliseconds(50), 1);
-	QCOMPARE(h.getState(), NoteHypothesis::New);
-	QVERIFY(h.accept(e1));
-	QCOMPARE(h.getState(), NoteHypothesis::Provisional);
-	QVERIFY(!h.accept(e2));
-	QCOMPARE(h.getState(), NoteHypothesis::Rejected);
-    }
-	
-    void weakSatisfy() {
-	NoteHypothesis h;
-	NoteHypothesis::Estimate e1(500, RealTime::fromMilliseconds(0), 0.5);
-	NoteHypothesis::Estimate e2(502, RealTime::fromMilliseconds(10), 0.5);
-	NoteHypothesis::Estimate e3(504, RealTime::fromMilliseconds(20), 0.5);
-	NoteHypothesis::Estimate e4(506, RealTime::fromMilliseconds(30), 0.5);
-	NoteHypothesis::Estimate e5(508, RealTime::fromMilliseconds(40), 0.5);
-	NoteHypothesis::Estimate e6(510, RealTime::fromMilliseconds(90), 0.5);
-	QCOMPARE(h.getState(), NoteHypothesis::New);
-	QVERIFY(h.accept(e1));
-	QCOMPARE(h.getState(), NoteHypothesis::Provisional);
-	QVERIFY(h.accept(e2));
-	QCOMPARE(h.getState(), NoteHypothesis::Provisional);
-	QVERIFY(h.accept(e3));
-	QCOMPARE(h.getState(), NoteHypothesis::Provisional);
-	QVERIFY(h.accept(e4));
-	QCOMPARE(h.getState(), NoteHypothesis::Provisional);
-	QVERIFY(h.accept(e5));
-	QCOMPARE(h.getState(), NoteHypothesis::Satisfied);
-	QVERIFY(!h.accept(e6));
-	QCOMPARE(h.getState(), NoteHypothesis::Expired);
-    }
-	
-    void frequencyRange() {
-	NoteHypothesis h;
-	NoteHypothesis::Estimate e1(440, RealTime::fromMilliseconds(0), 1);
-	NoteHypothesis::Estimate e2(448, RealTime::fromMilliseconds(10), 1);
-	NoteHypothesis::Estimate e3(444, RealTime::fromMilliseconds(20), 1);
-	NoteHypothesis::Estimate e4(470, RealTime::fromMilliseconds(30), 1);
-	QCOMPARE(h.getState(), NoteHypothesis::New);
-	QVERIFY(h.accept(e1));
-	QCOMPARE(h.getState(), NoteHypothesis::Provisional);
-	QVERIFY(h.accept(e2));
-	QCOMPARE(h.getState(), NoteHypothesis::Provisional);
-	QVERIFY(h.accept(e3));
-	QCOMPARE(h.getState(), NoteHypothesis::Satisfied);
-	QVERIFY(!h.accept(e4));
-	QCOMPARE(h.getState(), NoteHypothesis::Satisfied);
-    }
-
-    void acceptedEstimates() {
-	NoteHypothesis h;
-	NoteHypothesis::Estimate e1(440, RealTime::fromMilliseconds(0), 1);
-	NoteHypothesis::Estimate e2(448, RealTime::fromMilliseconds(10), 1);
-	NoteHypothesis::Estimate e3(444, RealTime::fromMilliseconds(20), 1);
-	NoteHypothesis::Estimate e4(470, RealTime::fromMilliseconds(30), 1);
-	NoteHypothesis::Estimate e5(444, RealTime::fromMilliseconds(90), 1);
-	NoteHypothesis::Estimates es;
-	es.push_back(e1);
-	es.push_back(e2);
-	es.push_back(e3);
-	QCOMPARE(h.getState(), NoteHypothesis::New);
-	QCOMPARE(h.getAcceptedEstimates(), NoteHypothesis::Estimates());
-	QVERIFY(h.accept(e1));
-	QCOMPARE(h.getState(), NoteHypothesis::Provisional);
-	QCOMPARE(h.getAcceptedEstimates(), NoteHypothesis::Estimates());
-	QVERIFY(h.accept(e2));
-	QCOMPARE(h.getState(), NoteHypothesis::Provisional);
-	QCOMPARE(h.getAcceptedEstimates(), NoteHypothesis::Estimates());
-	QVERIFY(h.accept(e3));
-	QCOMPARE(h.getState(), NoteHypothesis::Satisfied);
-	QCOMPARE(h.getAcceptedEstimates(), es);
-	QVERIFY(!h.accept(e4));
-	QCOMPARE(h.getState(), NoteHypothesis::Satisfied);
-	QCOMPARE(h.getAcceptedEstimates(), es);
-	QVERIFY(!h.accept(e5));
-	QCOMPARE(h.getState(), NoteHypothesis::Expired);
-	QCOMPARE(h.getAcceptedEstimates(), es);
-    }
-	
-    void meanFrequency() {
-	NoteHypothesis h;
-	NoteHypothesis::Estimate e1(440, RealTime::fromMilliseconds(0), 1);
-	NoteHypothesis::Estimate e2(448, RealTime::fromMilliseconds(10), 1);
-	NoteHypothesis::Estimate e3(444, RealTime::fromMilliseconds(20), 1);
-	QVERIFY(h.accept(e1));
-	QVERIFY(h.accept(e2));
-	QVERIFY(h.accept(e3));
-	QCOMPARE(h.getMeanFrequency(), 444.0);
-    }
-
-    void averagedNote() {
-	NoteHypothesis h;
-	NoteHypothesis::Estimate e1(440, RealTime::fromMilliseconds(10), 1);
-	NoteHypothesis::Estimate e2(448, RealTime::fromMilliseconds(20), 1);
-	NoteHypothesis::Estimate e3(444, RealTime::fromMilliseconds(30), 1);
-	QVERIFY(h.accept(e1));
-	QVERIFY(h.accept(e2));
-	QVERIFY(h.accept(e3));
-	QCOMPARE(h.getAveragedNote(), NoteHypothesis::Note
-		 (444,
-		  RealTime::fromMilliseconds(10),
-		  RealTime::fromMilliseconds(20)));
-    }
-
-	
-    
-};
-
+    return out << "[" << n.freq << "@" << n.time << ":" << n.confidence << "]" << std::endl;
 }
 
-#endif
+std::ostream &operator<<(std::ostream &out, const NoteHypothesis::Estimates &e)
+{
+    out << "( ";
+    for (int i = 0; i < (int)e.size(); ++i) out << e[i] << "; ";
+    out << " )";
+    return out;
+}
+
+std::ostream &operator<<(std::ostream &out, const NoteHypothesis::Note &n)
+{
+    return out << "[" << n.freq << "@" << n.time << ":" << n.duration << "]" << std::endl;
+}
+
+#define BOOST_TEST_DYN_LINK
+#define BOOST_TEST_MAIN
+
+#include <boost/test/unit_test.hpp>
+
+using Vamp::RealTime;
+
+BOOST_AUTO_TEST_SUITE(TestNoteHypothesis)
+
+BOOST_AUTO_TEST_CASE(emptyAccept)
+{
+    NoteHypothesis h;
+    NoteHypothesis::Estimate e;
+    BOOST_CHECK_EQUAL(h.getState(), NoteHypothesis::New);
+    BOOST_CHECK(h.accept(e));
+    BOOST_CHECK_EQUAL(h.getState(), NoteHypothesis::Provisional);
+}
+
+BOOST_AUTO_TEST_CASE(simpleSatisfy)
+{
+    NoteHypothesis h;
+    NoteHypothesis::Estimate e1(500, RealTime::fromMilliseconds(0), 1);
+    NoteHypothesis::Estimate e2(500, RealTime::fromMilliseconds(10), 1);
+    NoteHypothesis::Estimate e3(500, RealTime::fromMilliseconds(20), 1);
+    NoteHypothesis::Estimate e4(500, RealTime::fromMilliseconds(30), 1);
+    NoteHypothesis::Estimate e5(500, RealTime::fromMilliseconds(80), 1);
+    NoteHypothesis::Estimate e6(500, RealTime::fromMilliseconds(90), 1);
+    BOOST_CHECK_EQUAL(h.getState(), NoteHypothesis::New);
+    BOOST_CHECK(h.accept(e1));
+    BOOST_CHECK_EQUAL(h.getState(), NoteHypothesis::Provisional);
+    BOOST_CHECK(h.accept(e2));
+    BOOST_CHECK_EQUAL(h.getState(), NoteHypothesis::Provisional);
+    BOOST_CHECK(h.accept(e3));
+    BOOST_CHECK_EQUAL(h.getState(), NoteHypothesis::Satisfied);
+    BOOST_CHECK(h.accept(e4));
+    BOOST_CHECK_EQUAL(h.getState(), NoteHypothesis::Satisfied);
+    BOOST_CHECK(!h.accept(e5));
+    BOOST_CHECK_EQUAL(h.getState(), NoteHypothesis::Expired);
+    BOOST_CHECK(!h.accept(e6));
+    BOOST_CHECK_EQUAL(h.getState(), NoteHypothesis::Expired);
+}
+	
+BOOST_AUTO_TEST_CASE(strayReject)
+{
+    NoteHypothesis h;
+    NoteHypothesis::Estimate e1(500, RealTime::fromMilliseconds(0), 1);
+    NoteHypothesis::Estimate e2(1000, RealTime::fromMilliseconds(10), 1);
+    NoteHypothesis::Estimate e3(500, RealTime::fromMilliseconds(20), 1);
+    NoteHypothesis::Estimate e4(500, RealTime::fromMilliseconds(30), 1);
+    BOOST_CHECK_EQUAL(h.getState(), NoteHypothesis::New);
+    BOOST_CHECK(h.accept(e1));
+    BOOST_CHECK_EQUAL(h.getState(), NoteHypothesis::Provisional);
+    BOOST_CHECK(!h.accept(e2));
+    BOOST_CHECK_EQUAL(h.getState(), NoteHypothesis::Provisional);
+    BOOST_CHECK(h.accept(e3));
+    BOOST_CHECK_EQUAL(h.getState(), NoteHypothesis::Provisional);
+    BOOST_CHECK(h.accept(e4));
+    BOOST_CHECK_EQUAL(h.getState(), NoteHypothesis::Satisfied);
+}
+		
+BOOST_AUTO_TEST_CASE(tooSlow)
+{
+    NoteHypothesis h;
+    NoteHypothesis::Estimate e1(500, RealTime::fromMilliseconds(0), 1);
+    NoteHypothesis::Estimate e2(500, RealTime::fromMilliseconds(50), 1);
+    BOOST_CHECK_EQUAL(h.getState(), NoteHypothesis::New);
+    BOOST_CHECK(h.accept(e1));
+    BOOST_CHECK_EQUAL(h.getState(), NoteHypothesis::Provisional);
+    BOOST_CHECK(!h.accept(e2));
+    BOOST_CHECK_EQUAL(h.getState(), NoteHypothesis::Rejected);
+}
+	
+BOOST_AUTO_TEST_CASE(weakSatisfy)
+{
+    NoteHypothesis h;
+    NoteHypothesis::Estimate e1(500, RealTime::fromMilliseconds(0), 0.5);
+    NoteHypothesis::Estimate e2(502, RealTime::fromMilliseconds(10), 0.5);
+    NoteHypothesis::Estimate e3(504, RealTime::fromMilliseconds(20), 0.5);
+    NoteHypothesis::Estimate e4(506, RealTime::fromMilliseconds(30), 0.5);
+    NoteHypothesis::Estimate e5(508, RealTime::fromMilliseconds(40), 0.5);
+    NoteHypothesis::Estimate e6(510, RealTime::fromMilliseconds(90), 0.5);
+    BOOST_CHECK_EQUAL(h.getState(), NoteHypothesis::New);
+    BOOST_CHECK(h.accept(e1));
+    BOOST_CHECK_EQUAL(h.getState(), NoteHypothesis::Provisional);
+    BOOST_CHECK(h.accept(e2));
+    BOOST_CHECK_EQUAL(h.getState(), NoteHypothesis::Provisional);
+    BOOST_CHECK(h.accept(e3));
+    BOOST_CHECK_EQUAL(h.getState(), NoteHypothesis::Provisional);
+    BOOST_CHECK(h.accept(e4));
+    BOOST_CHECK_EQUAL(h.getState(), NoteHypothesis::Provisional);
+    BOOST_CHECK(h.accept(e5));
+    BOOST_CHECK_EQUAL(h.getState(), NoteHypothesis::Satisfied);
+    BOOST_CHECK(!h.accept(e6));
+    BOOST_CHECK_EQUAL(h.getState(), NoteHypothesis::Expired);
+}
+	
+BOOST_AUTO_TEST_CASE(frequencyRange)
+{
+    NoteHypothesis h;
+    NoteHypothesis::Estimate e1(440, RealTime::fromMilliseconds(0), 1);
+    NoteHypothesis::Estimate e2(448, RealTime::fromMilliseconds(10), 1);
+    NoteHypothesis::Estimate e3(444, RealTime::fromMilliseconds(20), 1);
+    NoteHypothesis::Estimate e4(470, RealTime::fromMilliseconds(30), 1);
+    BOOST_CHECK_EQUAL(h.getState(), NoteHypothesis::New);
+    BOOST_CHECK(h.accept(e1));
+    BOOST_CHECK_EQUAL(h.getState(), NoteHypothesis::Provisional);
+    BOOST_CHECK(h.accept(e2));
+    BOOST_CHECK_EQUAL(h.getState(), NoteHypothesis::Provisional);
+    BOOST_CHECK(h.accept(e3));
+    BOOST_CHECK_EQUAL(h.getState(), NoteHypothesis::Satisfied);
+    BOOST_CHECK(!h.accept(e4));
+    BOOST_CHECK_EQUAL(h.getState(), NoteHypothesis::Satisfied);
+}
+
+BOOST_AUTO_TEST_CASE(acceptedEstimates)
+{
+    NoteHypothesis h;
+    NoteHypothesis::Estimate e1(440, RealTime::fromMilliseconds(0), 1);
+    NoteHypothesis::Estimate e2(448, RealTime::fromMilliseconds(10), 1);
+    NoteHypothesis::Estimate e3(444, RealTime::fromMilliseconds(20), 1);
+    NoteHypothesis::Estimate e4(470, RealTime::fromMilliseconds(30), 1);
+    NoteHypothesis::Estimate e5(444, RealTime::fromMilliseconds(90), 1);
+    NoteHypothesis::Estimates es;
+    es.push_back(e1);
+    es.push_back(e2);
+    es.push_back(e3);
+    BOOST_CHECK_EQUAL(h.getState(), NoteHypothesis::New);
+    BOOST_CHECK_EQUAL(h.getAcceptedEstimates(), NoteHypothesis::Estimates());
+    BOOST_CHECK(h.accept(e1));
+    BOOST_CHECK_EQUAL(h.getState(), NoteHypothesis::Provisional);
+    BOOST_CHECK_EQUAL(h.getAcceptedEstimates(), NoteHypothesis::Estimates());
+    BOOST_CHECK(h.accept(e2));
+    BOOST_CHECK_EQUAL(h.getState(), NoteHypothesis::Provisional);
+    BOOST_CHECK_EQUAL(h.getAcceptedEstimates(), NoteHypothesis::Estimates());
+    BOOST_CHECK(h.accept(e3));
+    BOOST_CHECK_EQUAL(h.getState(), NoteHypothesis::Satisfied);
+    BOOST_CHECK_EQUAL(h.getAcceptedEstimates(), es);
+    BOOST_CHECK(!h.accept(e4));
+    BOOST_CHECK_EQUAL(h.getState(), NoteHypothesis::Satisfied);
+    BOOST_CHECK_EQUAL(h.getAcceptedEstimates(), es);
+    BOOST_CHECK(!h.accept(e5));
+    BOOST_CHECK_EQUAL(h.getState(), NoteHypothesis::Expired);
+    BOOST_CHECK_EQUAL(h.getAcceptedEstimates(), es);
+}
+	
+BOOST_AUTO_TEST_CASE(meanFrequency)
+{
+    NoteHypothesis h;
+    NoteHypothesis::Estimate e1(440, RealTime::fromMilliseconds(0), 1);
+    NoteHypothesis::Estimate e2(448, RealTime::fromMilliseconds(10), 1);
+    NoteHypothesis::Estimate e3(444, RealTime::fromMilliseconds(20), 1);
+    BOOST_CHECK(h.accept(e1));
+    BOOST_CHECK(h.accept(e2));
+    BOOST_CHECK(h.accept(e3));
+    BOOST_CHECK_EQUAL(h.getMeanFrequency(), 444.0);
+}
+
+BOOST_AUTO_TEST_CASE(averagedNote)
+{
+    NoteHypothesis h;
+    NoteHypothesis::Estimate e1(440, RealTime::fromMilliseconds(10), 1);
+    NoteHypothesis::Estimate e2(448, RealTime::fromMilliseconds(20), 1);
+    NoteHypothesis::Estimate e3(444, RealTime::fromMilliseconds(30), 1);
+    BOOST_CHECK(h.accept(e1));
+    BOOST_CHECK(h.accept(e2));
+    BOOST_CHECK(h.accept(e3));
+    BOOST_CHECK_EQUAL(h.getAveragedNote(), NoteHypothesis::Note
+                      (444,
+                       RealTime::fromMilliseconds(10),
+                       RealTime::fromMilliseconds(20)));
+}
+
+BOOST_AUTO_TEST_SUITE_END()
+