Mercurial > hg > cepstral-pitchtracker
view test/TestNoteHypothesis.h @ 34:3fb9c657d86b
Expand hypothesis tests
author | Chris Cannam |
---|---|
date | Fri, 13 Jul 2012 22:48:02 +0100 |
parents | 5f2a57b1a75a |
children |
line wrap: on
line source
/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ /* Copyright Chris Cannam - All Rights Reserved */ #ifndef TEST_NOTE_HYPOTHESIS_H #define TEST_NOTE_HYPOTHESIS_H #include "base/NoteHypothesis.h" #include <QObject> #include <QtTest> namespace Turbot { class TestNoteHypothesis : public QObject { 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))); } }; } #endif