# HG changeset patch # User Chris Cannam # Date 1342703122 -3600 # Node ID 944898c2e14ef38d3bd7cb3489e4c79a21bd1a88 # Parent 7bf67d2dfc3087110c27579aecd91865d42cd352 Convert unit tests to Boost test framework, add simplistic build diff -r 7bf67d2dfc30 -r 944898c2e14e Makefile.inc --- 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) diff -r 7bf67d2dfc30 -r 944898c2e14e test/Makefile --- /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) diff -r 7bf67d2dfc30 -r 944898c2e14e test/TestNoteHypothesis.cpp --- 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 -#include - -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 + +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() +