Chris@1612: /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ Chris@1612: Chris@1612: /* Chris@1612: Sonic Visualiser Chris@1612: An audio file viewer and annotation editor. Chris@1612: Centre for Digital Music, Queen Mary, University of London. Chris@1612: Chris@1612: This program is free software; you can redistribute it and/or Chris@1612: modify it under the terms of the GNU General Public License as Chris@1612: published by the Free Software Foundation; either version 2 of the Chris@1612: License, or (at your option) any later version. See the file Chris@1612: COPYING included with this distribution for more information. Chris@1612: */ Chris@1612: Chris@1615: #ifndef TEST_EVENT_SERIES_H Chris@1615: #define TEST_EVENT_SERIES_H Chris@1612: Chris@1615: #include "../EventSeries.h" Chris@1612: Chris@1612: #include Chris@1612: #include Chris@1612: Chris@1612: #include Chris@1612: Chris@1612: using namespace std; Chris@1612: Chris@1615: class TestEventSeries : public QObject Chris@1612: { Chris@1612: Q_OBJECT Chris@1612: Chris@1612: private slots: Chris@1612: void empty() { Chris@1612: Chris@1615: EventSeries s; Chris@1612: QCOMPARE(s.isEmpty(), true); Chris@1612: QCOMPARE(s.count(), 0); Chris@1612: Chris@1615: Event p(10, QString()); Chris@1612: QCOMPARE(s.contains(p), false); Chris@1615: QCOMPARE(s.getEventsSpanning(400), EventVector()); Chris@1612: } Chris@1612: Chris@1615: void singleEvent() { Chris@1612: Chris@1615: EventSeries s; Chris@1615: Event p(10, QString()); Chris@1612: s.add(p); Chris@1612: QCOMPARE(s.isEmpty(), false); Chris@1612: QCOMPARE(s.count(), 1); Chris@1612: QCOMPARE(s.contains(p), true); Chris@1612: Chris@1612: s.remove(p); Chris@1612: QCOMPARE(s.isEmpty(), true); Chris@1612: QCOMPARE(s.contains(p), false); Chris@1612: } Chris@1612: Chris@1615: void singleEventSpan() { Chris@1612: Chris@1615: EventSeries s; Chris@1615: Event p(10, QString()); Chris@1612: s.add(p); Chris@1615: EventVector span; Chris@1612: span.push_back(p); Chris@1615: QCOMPARE(s.getEventsSpanning(10), span); Chris@1615: QCOMPARE(s.getEventsSpanning(11), EventVector()); Chris@1615: QCOMPARE(s.getEventsSpanning(9), EventVector()); Chris@1612: } Chris@1612: Chris@1615: void singleEventWithDurationSpan() { Chris@1612: Chris@1615: EventSeries s; Chris@1615: Event p(10, 1.0, 20, QString()); Chris@1612: s.add(p); Chris@1615: EventVector span; Chris@1612: span.push_back(p); Chris@1615: QCOMPARE(s.getEventsSpanning(10), span); Chris@1615: QCOMPARE(s.getEventsSpanning(11), span); Chris@1615: QCOMPARE(s.getEventsSpanning(29), span); Chris@1615: QCOMPARE(s.getEventsSpanning(30), EventVector()); Chris@1615: QCOMPARE(s.getEventsSpanning(9), EventVector()); Chris@1612: } Chris@1614: Chris@1615: void identicalEventsSpan() { Chris@1614: Chris@1615: EventSeries s; Chris@1615: Event p(10, QString()); Chris@1614: s.add(p); Chris@1614: s.add(p); Chris@1614: Chris@1615: EventVector span; Chris@1614: span.push_back(p); Chris@1614: span.push_back(p); Chris@1615: QCOMPARE(s.getEventsSpanning(10), span); Chris@1615: QCOMPARE(s.getEventsSpanning(11), EventVector()); Chris@1615: QCOMPARE(s.getEventsSpanning(9), EventVector()); Chris@1614: Chris@1614: s.remove(p); Chris@1614: span.clear(); Chris@1614: span.push_back(p); Chris@1615: QCOMPARE(s.getEventsSpanning(10), span); Chris@1615: QCOMPARE(s.getEventsSpanning(11), EventVector()); Chris@1615: QCOMPARE(s.getEventsSpanning(9), EventVector()); Chris@1614: } Chris@1614: Chris@1615: void identicalEventsWithDurationSpan() { Chris@1614: Chris@1615: EventSeries s; Chris@1615: Event p(10, 1.0, 20, QString()); Chris@1614: s.add(p); Chris@1614: s.add(p); Chris@1615: EventVector span; Chris@1614: span.push_back(p); Chris@1614: span.push_back(p); Chris@1615: QCOMPARE(s.getEventsSpanning(10), span); Chris@1615: QCOMPARE(s.getEventsSpanning(11), span); Chris@1615: QCOMPARE(s.getEventsSpanning(29), span); Chris@1615: QCOMPARE(s.getEventsSpanning(30), EventVector()); Chris@1615: QCOMPARE(s.getEventsSpanning(9), EventVector()); Chris@1614: Chris@1614: s.remove(p); Chris@1614: span.clear(); Chris@1614: span.push_back(p); Chris@1615: QCOMPARE(s.getEventsSpanning(10), span); Chris@1615: QCOMPARE(s.getEventsSpanning(11), span); Chris@1615: QCOMPARE(s.getEventsSpanning(29), span); Chris@1615: QCOMPARE(s.getEventsSpanning(30), EventVector()); Chris@1615: QCOMPARE(s.getEventsSpanning(9), EventVector()); Chris@1614: } Chris@1614: Chris@1615: void multipleEventsSpan() { Chris@1614: Chris@1615: EventSeries s; Chris@1615: Event a(10, QString("a")); Chris@1615: Event b(11, QString("b")); Chris@1615: Event c(40, QString("c")); Chris@1614: s.add(c); Chris@1614: s.add(a); Chris@1614: s.add(b); Chris@1614: s.remove(a); Chris@1614: s.add(a); Chris@1614: s.add(c); Chris@1614: s.remove(c); Chris@1614: QCOMPARE(s.count(), 3); Chris@1615: EventVector span; Chris@1614: span.push_back(a); Chris@1615: QCOMPARE(s.getEventsSpanning(10), span); Chris@1614: span.clear(); Chris@1614: span.push_back(c); Chris@1615: QCOMPARE(s.getEventsSpanning(40), span); Chris@1615: QCOMPARE(s.getEventsSpanning(9), EventVector()); Chris@1614: } Chris@1614: Chris@1615: void disjointEventsWithDurationSpan() { Chris@1614: Chris@1615: EventSeries s; Chris@1615: Event a(10, 1.0f, 20, QString("a")); Chris@1615: Event b(100, 1.2f, 30, QString("b")); Chris@1614: s.add(a); Chris@1614: s.add(b); Chris@1615: QCOMPARE(s.getEventsSpanning(0), EventVector()); Chris@1615: QCOMPARE(s.getEventsSpanning(10), EventVector({ a })); Chris@1615: QCOMPARE(s.getEventsSpanning(15), EventVector({ a })); Chris@1615: QCOMPARE(s.getEventsSpanning(30), EventVector()); Chris@1615: QCOMPARE(s.getEventsSpanning(99), EventVector()); Chris@1615: QCOMPARE(s.getEventsSpanning(100), EventVector({ b })); Chris@1615: QCOMPARE(s.getEventsSpanning(120), EventVector({ b })); Chris@1615: QCOMPARE(s.getEventsSpanning(130), EventVector()); Chris@1614: } Chris@1614: Chris@1615: void overlappingEventsWithAndWithoutDurationSpan() { Chris@1614: Chris@1615: EventSeries s; Chris@1615: Event p(20, QString("p")); Chris@1615: Event a(10, 1.0, 20, QString("a")); Chris@1614: s.add(p); Chris@1614: s.add(a); Chris@1615: EventVector span; Chris@1614: span.push_back(a); Chris@1615: QCOMPARE(s.getEventsSpanning(15), span); Chris@1615: QCOMPARE(s.getEventsSpanning(25), span); Chris@1614: span.clear(); Chris@1614: span.push_back(p); Chris@1614: span.push_back(a); Chris@1615: QCOMPARE(s.getEventsSpanning(20), span); Chris@1614: } Chris@1614: Chris@1615: void overlappingEventsWithDurationSpan() { Chris@1614: Chris@1615: EventSeries s; Chris@1615: Event a(20, 1.0, 10, QString("a")); Chris@1615: Event b(10, 1.0, 20, QString("b")); Chris@1615: Event c(10, 1.0, 40, QString("c")); Chris@1614: s.add(a); Chris@1614: s.add(b); Chris@1614: s.add(c); Chris@1615: QCOMPARE(s.getEventsSpanning(10), EventVector({ b, c })); Chris@1615: QCOMPARE(s.getEventsSpanning(20), EventVector({ b, c, a })); Chris@1615: QCOMPARE(s.getEventsSpanning(25), EventVector({ b, c, a })); Chris@1615: QCOMPARE(s.getEventsSpanning(30), EventVector({ c })); Chris@1615: QCOMPARE(s.getEventsSpanning(40), EventVector({ c })); Chris@1615: QCOMPARE(s.getEventsSpanning(50), EventVector()); Chris@1614: } Chris@1614: Chris@1615: void eventPatternSpan() { Chris@1614: Chris@1615: EventSeries s; Chris@1615: Event a(0, 1.0, 18, QString("a")); Chris@1615: Event b(3, 2.0, 6, QString("b")); Chris@1615: Event c(5, 3.0, 2, QString("c")); Chris@1615: Event d(6, 4.0, 10, QString("d")); Chris@1615: Event e(14, 5.0, 3, QString("e")); Chris@1614: s.add(b); Chris@1614: s.add(c); Chris@1614: s.add(d); Chris@1614: s.add(a); Chris@1614: s.add(e); Chris@1615: QCOMPARE(s.getEventsSpanning(8), EventVector({ a, b, d })); Chris@1614: } Chris@1612: }; Chris@1612: Chris@1612: #endif