1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ 2 3 /* 4 Sonic Visualiser 5 An audio file viewer and annotation editor. 6 Centre for Digital Music, Queen Mary, University of London. 7 8 This program is free software; you can redistribute it and/or 9 modify it under the terms of the GNU General Public License as 10 published by the Free Software Foundation; either version 2 of the 11 License, or (at your option) any later version. See the file 12 COPYING included with this distribution for more information. 13 */ 14 15 #ifndef TEST_EVENT_SERIES_H 16 #define TEST_EVENT_SERIES_H 17 18 #include "../EventSeries.h" 19 20 #include <QObject> 21 #include <QtTest> 22 23 #include <iostream> 24 25 using namespace std; 26 27 class TestEventSeries : public QObject 28 { 29 Q_OBJECT 30 31 private slots: empty()32 void empty() { 33 34 EventSeries s; 35 QCOMPARE(s.isEmpty(), true); 36 QCOMPARE(s.count(), 0); 37 38 Event p(10, QString()); 39 QCOMPARE(s.contains(p), false); 40 QCOMPARE(s.getEventsCovering(400), EventVector()); 41 } 42 singleEvent()43 void singleEvent() { 44 45 EventSeries s; 46 Event p(10, QString()); 47 s.add(p); 48 QCOMPARE(s.isEmpty(), false); 49 QCOMPARE(s.count(), 1); 50 QCOMPARE(s.contains(p), true); 51 52 s.remove(p); 53 QCOMPARE(s.isEmpty(), true); 54 QCOMPARE(s.count(), 0); 55 QCOMPARE(s.contains(p), false); 56 } 57 duplicateEvents()58 void duplicateEvents() { 59 60 EventSeries s; 61 Event p(10, QString()); 62 s.add(p); 63 s.add(p); 64 QCOMPARE(s.isEmpty(), false); 65 QCOMPARE(s.count(), 2); 66 QCOMPARE(s.contains(p), true); 67 68 s.remove(p); 69 QCOMPARE(s.isEmpty(), false); 70 QCOMPARE(s.count(), 1); 71 QCOMPARE(s.contains(p), true); 72 73 s.remove(p); 74 QCOMPARE(s.isEmpty(), true); 75 QCOMPARE(s.count(), 0); 76 QCOMPARE(s.contains(p), false); 77 } 78 singleEventCover()79 void singleEventCover() { 80 81 EventSeries s; 82 Event p(10, QString()); 83 s.add(p); 84 EventVector cover; 85 cover.push_back(p); 86 QCOMPARE(s.getEventsCovering(10), cover); 87 QCOMPARE(s.getEventsCovering(11), EventVector()); 88 QCOMPARE(s.getEventsCovering(9), EventVector()); 89 } 90 singleEventSpan()91 void singleEventSpan() { 92 93 EventSeries s; 94 Event p(10, QString()); 95 s.add(p); 96 EventVector span; 97 span.push_back(p); 98 QCOMPARE(s.getEventsSpanning(10, 2), span); 99 QCOMPARE(s.getEventsSpanning(9, 2), span); 100 QCOMPARE(s.getEventsSpanning(8, 2), EventVector()); 101 QCOMPARE(s.getEventsSpanning(7, 2), EventVector()); 102 QCOMPARE(s.getEventsSpanning(11, 2), EventVector()); 103 } 104 identicalEventsCover()105 void identicalEventsCover() { 106 107 EventSeries s; 108 Event p(10, QString()); 109 s.add(p); 110 s.add(p); 111 112 EventVector cover; 113 cover.push_back(p); 114 cover.push_back(p); 115 QCOMPARE(s.getEventsCovering(10), cover); 116 QCOMPARE(s.getEventsCovering(11), EventVector()); 117 QCOMPARE(s.getEventsCovering(9), EventVector()); 118 119 s.remove(p); 120 cover.clear(); 121 cover.push_back(p); 122 QCOMPARE(s.getEventsCovering(10), cover); 123 QCOMPARE(s.getEventsCovering(11), EventVector()); 124 QCOMPARE(s.getEventsCovering(9), EventVector()); 125 } 126 identicalEventsSpan()127 void identicalEventsSpan() { 128 129 EventSeries s; 130 Event p(10, QString()); 131 s.add(p); 132 s.add(p); 133 134 EventVector span; 135 span.push_back(p); 136 span.push_back(p); 137 QCOMPARE(s.getEventsSpanning(10, 2), span); 138 QCOMPARE(s.getEventsSpanning(9, 2), span); 139 QCOMPARE(s.getEventsSpanning(8, 2), EventVector()); 140 QCOMPARE(s.getEventsSpanning(11, 2), EventVector()); 141 } 142 similarEventsCover()143 void similarEventsCover() { 144 145 EventSeries s; 146 Event a(10, QString("a")); 147 Event b(10, QString("b")); 148 s.add(a); 149 s.add(b); 150 EventVector cover; 151 cover.push_back(a); 152 cover.push_back(b); 153 QCOMPARE(s.getEventsCovering(10), cover); 154 QCOMPARE(s.getEventsCovering(11), EventVector()); 155 QCOMPARE(s.getEventsCovering(9), EventVector()); 156 } 157 similarEventsSpan()158 void similarEventsSpan() { 159 160 EventSeries s; 161 Event a(10, QString("a")); 162 Event b(10, QString("b")); 163 s.add(a); 164 s.add(b); 165 EventVector span; 166 span.push_back(a); 167 span.push_back(b); 168 QCOMPARE(s.getEventsSpanning(10, 2), span); 169 QCOMPARE(s.getEventsSpanning(9, 2), span); 170 QCOMPARE(s.getEventsSpanning(11, 2), EventVector()); 171 QCOMPARE(s.getEventsSpanning(8, 2), EventVector()); 172 } 173 singleEventWithDurationCover()174 void singleEventWithDurationCover() { 175 176 EventSeries s; 177 Event p(10, 1.0, 20, QString()); 178 s.add(p); 179 EventVector cover; 180 cover.push_back(p); 181 QCOMPARE(s.getEventsCovering(10), cover); 182 QCOMPARE(s.getEventsCovering(11), cover); 183 QCOMPARE(s.getEventsCovering(29), cover); 184 QCOMPARE(s.getEventsCovering(30), EventVector()); 185 QCOMPARE(s.getEventsCovering(9), EventVector()); 186 } 187 singleEventWithDurationSpan()188 void singleEventWithDurationSpan() { 189 190 EventSeries s; 191 Event p(10, 1.0, 20, QString()); 192 s.add(p); 193 EventVector span; 194 span.push_back(p); 195 QCOMPARE(s.getEventsSpanning(9, 2), span); 196 QCOMPARE(s.getEventsSpanning(8, 2), EventVector()); 197 QCOMPARE(s.getEventsSpanning(19, 4), span); 198 QCOMPARE(s.getEventsSpanning(29, 2), span); 199 QCOMPARE(s.getEventsSpanning(30, 2), EventVector()); 200 } 201 identicalEventsWithDurationCover()202 void identicalEventsWithDurationCover() { 203 204 EventSeries s; 205 Event p(10, 1.0, 20, QString()); 206 s.add(p); 207 s.add(p); 208 EventVector cover; 209 cover.push_back(p); 210 cover.push_back(p); 211 QCOMPARE(s.getEventsCovering(10), cover); 212 QCOMPARE(s.getEventsCovering(11), cover); 213 QCOMPARE(s.getEventsCovering(29), cover); 214 QCOMPARE(s.getEventsCovering(30), EventVector()); 215 QCOMPARE(s.getEventsCovering(9), EventVector()); 216 217 s.remove(p); 218 cover.clear(); 219 cover.push_back(p); 220 QCOMPARE(s.getEventsCovering(10), cover); 221 QCOMPARE(s.getEventsCovering(11), cover); 222 QCOMPARE(s.getEventsCovering(29), cover); 223 QCOMPARE(s.getEventsCovering(30), EventVector()); 224 QCOMPARE(s.getEventsCovering(9), EventVector()); 225 } 226 identicalEventsWithDurationSpan()227 void identicalEventsWithDurationSpan() { 228 229 EventSeries s; 230 Event p(10, 1.0, 20, QString()); 231 s.add(p); 232 s.add(p); 233 EventVector span; 234 span.push_back(p); 235 span.push_back(p); 236 QCOMPARE(s.getEventsSpanning(9, 2), span); 237 QCOMPARE(s.getEventsSpanning(10, 2), span); 238 QCOMPARE(s.getEventsSpanning(11, 2), span); 239 QCOMPARE(s.getEventsSpanning(29, 2), span); 240 QCOMPARE(s.getEventsSpanning(30, 2), EventVector()); 241 QCOMPARE(s.getEventsSpanning(8, 2), EventVector()); 242 } 243 multipleEventsCover()244 void multipleEventsCover() { 245 246 EventSeries s; 247 Event a(10, QString("a")); 248 Event b(11, QString("b")); 249 Event c(40, QString("c")); 250 s.add(c); 251 s.add(a); 252 s.add(b); 253 s.remove(a); 254 s.add(a); 255 s.add(c); 256 s.remove(c); 257 QCOMPARE(s.count(), 3); 258 EventVector cover; 259 cover.push_back(a); 260 QCOMPARE(s.getEventsCovering(10), cover); 261 cover.clear(); 262 cover.push_back(c); 263 QCOMPARE(s.getEventsCovering(40), cover); 264 QCOMPARE(s.getEventsCovering(9), EventVector()); 265 } 266 multipleEventsSpan()267 void multipleEventsSpan() { 268 269 EventSeries s; 270 Event a(10, QString("a")); 271 Event b(11, QString("b")); 272 Event c(40, QString("c")); 273 s.add(c); 274 s.add(a); 275 s.add(b); 276 EventVector span; 277 span.push_back(a); 278 span.push_back(b); 279 QCOMPARE(s.getEventsSpanning(10, 2), span); 280 span.clear(); 281 span.push_back(c); 282 QCOMPARE(s.getEventsSpanning(39, 3), span); 283 QCOMPARE(s.getEventsSpanning(9, 1), EventVector()); 284 QCOMPARE(s.getEventsSpanning(10, 0), EventVector()); 285 } 286 multipleEventsEndFrame()287 void multipleEventsEndFrame() { 288 289 EventSeries s; 290 Event a(10, QString("a")); 291 Event b(11, QString("b")); 292 Event c(40, QString("c")); 293 s.add(c); 294 s.add(a); 295 s.add(b); 296 s.add(b); 297 QCOMPARE(s.getEndFrame(), sv_frame_t(40)); 298 s.remove(c); 299 QCOMPARE(s.getEndFrame(), sv_frame_t(11)); 300 s.remove(b); 301 QCOMPARE(s.getEndFrame(), sv_frame_t(11)); 302 s.remove(a); 303 QCOMPARE(s.getEndFrame(), sv_frame_t(11)); 304 s.remove(b); 305 QCOMPARE(s.getEndFrame(), sv_frame_t(0)); 306 } 307 disjointEventsWithDurationCover()308 void disjointEventsWithDurationCover() { 309 310 EventSeries s; 311 Event a(10, 1.0f, 20, QString("a")); 312 Event b(100, 1.2f, 30, QString("b")); 313 s.add(a); 314 s.add(b); 315 QCOMPARE(s.getEventsCovering(0), EventVector()); 316 QCOMPARE(s.getEventsCovering(10), EventVector({ a })); 317 QCOMPARE(s.getEventsCovering(15), EventVector({ a })); 318 QCOMPARE(s.getEventsCovering(30), EventVector()); 319 QCOMPARE(s.getEventsCovering(99), EventVector()); 320 QCOMPARE(s.getEventsCovering(100), EventVector({ b })); 321 QCOMPARE(s.getEventsCovering(120), EventVector({ b })); 322 QCOMPARE(s.getEventsCovering(130), EventVector()); 323 } 324 disjointEventsWithDurationSpan()325 void disjointEventsWithDurationSpan() { 326 327 EventSeries s; 328 Event a(10, 1.0f, 20, QString("a")); 329 Event b(100, 1.2f, 30, QString("b")); 330 s.add(a); 331 s.add(b); 332 QCOMPARE(s.getEventsSpanning(0, 10), EventVector()); 333 QCOMPARE(s.getEventsSpanning(10, 10), EventVector({ a })); 334 QCOMPARE(s.getEventsSpanning(15, 85), EventVector({ a })); 335 QCOMPARE(s.getEventsSpanning(30, 5), EventVector()); 336 QCOMPARE(s.getEventsSpanning(99, 1), EventVector()); 337 QCOMPARE(s.getEventsSpanning(100, 1), EventVector({ b })); 338 QCOMPARE(s.getEventsSpanning(120, 20), EventVector({ b })); 339 QCOMPARE(s.getEventsSpanning(130, 109), EventVector()); 340 } 341 overlappingEventsWithAndWithoutDurationCover()342 void overlappingEventsWithAndWithoutDurationCover() { 343 344 EventSeries s; 345 Event p(20, QString("p")); 346 Event a(10, 1.0f, 20, QString("a")); 347 s.add(p); 348 s.add(a); 349 EventVector cover; 350 cover.push_back(a); 351 QCOMPARE(s.getEventsCovering(15), cover); 352 QCOMPARE(s.getEventsCovering(25), cover); 353 cover.clear(); 354 cover.push_back(p); 355 cover.push_back(a); 356 QCOMPARE(s.getEventsCovering(20), cover); 357 } 358 overlappingEventsWithAndWithoutDurationSpan()359 void overlappingEventsWithAndWithoutDurationSpan() { 360 361 EventSeries s; 362 Event p(20, QString("p")); 363 Event a(10, 1.0f, 20, QString("a")); 364 s.add(p); 365 s.add(a); 366 EventVector span; 367 span.push_back(a); 368 QCOMPARE(s.getEventsSpanning(5, 10), span); 369 QCOMPARE(s.getEventsSpanning(25, 5), span); 370 span.clear(); 371 span.push_back(p); 372 span.push_back(a); 373 QCOMPARE(s.getEventsSpanning(20, 1), span); 374 } 375 overlappingEventsWithDurationCover()376 void overlappingEventsWithDurationCover() { 377 378 EventSeries s; 379 Event a(20, 1.0f, 10, QString("a")); 380 Event b(10, 1.0f, 20, QString("b")); 381 Event c(10, 1.0f, 40, QString("c")); 382 s.add(a); 383 s.add(b); 384 s.add(c); 385 QCOMPARE(s.getEventsCovering(10), EventVector({ b, c })); 386 QCOMPARE(s.getEventsCovering(20), EventVector({ b, c, a })); 387 QCOMPARE(s.getEventsCovering(25), EventVector({ b, c, a })); 388 QCOMPARE(s.getEventsCovering(30), EventVector({ c })); 389 QCOMPARE(s.getEventsCovering(40), EventVector({ c })); 390 QCOMPARE(s.getEventsCovering(50), EventVector()); 391 } 392 overlappingEventsWithDurationSpan()393 void overlappingEventsWithDurationSpan() { 394 395 EventSeries s; 396 Event a(20, 1.0f, 10, QString("a")); 397 Event b(10, 1.0f, 20, QString("b")); 398 Event c(10, 1.0f, 40, QString("c")); 399 s.add(a); 400 s.add(b); 401 s.add(c); 402 QCOMPARE(s.getEventsSpanning(10, 5), EventVector({ b, c })); 403 QCOMPARE(s.getEventsSpanning(20, 15), EventVector({ b, c, a })); 404 QCOMPARE(s.getEventsSpanning(0, 100), EventVector({ b, c, a })); 405 QCOMPARE(s.getEventsSpanning(25, 4), EventVector({ b, c, a })); 406 QCOMPARE(s.getEventsSpanning(30, 4), EventVector({ c })); 407 QCOMPARE(s.getEventsSpanning(40, 15), EventVector({ c })); 408 QCOMPARE(s.getEventsSpanning(50, 10), EventVector()); 409 } 410 eventPatternCover()411 void eventPatternCover() { 412 413 EventSeries s; 414 Event a(0, 1.0f, 18, QString("a")); 415 Event b(3, 2.0f, 6, QString("b")); 416 Event c(5, 3.0f, 2, QString("c")); 417 Event cc(5, 3.1f, 2, QString("cc")); 418 Event d(6, 4.0f, 10, QString("d")); 419 Event dd(6, 4.5f, 10, QString("dd")); 420 Event e(14, 5.0f, 3, QString("e")); 421 s.add(b); 422 s.add(c); 423 s.add(d); 424 s.add(a); 425 s.add(cc); 426 s.add(dd); 427 s.add(e); 428 QCOMPARE(s.getEventsCovering(8), EventVector({ a, b, d, dd })); 429 } 430 eventPatternSpan()431 void eventPatternSpan() { 432 433 EventSeries s; 434 Event a(0, 1.0f, 18, QString("a")); 435 Event b(3, 2.0f, 6, QString("b")); 436 Event c(5, 3.0f, 2, QString("c")); 437 Event cc(5, 3.1f, 2, QString("cc")); 438 Event d(6, 4.0f, 10, QString("d")); 439 Event dd(6, 4.5f, 10, QString("dd")); 440 Event e(14, 5.0f, 3, QString("e")); 441 s.add(b); 442 s.add(c); 443 s.add(d); 444 s.add(a); 445 s.add(cc); 446 s.add(dd); 447 s.add(e); 448 QCOMPARE(s.getEventsSpanning(6, 2), EventVector({ a, b, c, cc, d, dd })); 449 } 450 eventPatternWithin()451 void eventPatternWithin() { 452 453 EventSeries s; 454 Event a(0, 1.0f, 18, QString("a")); 455 Event b(3, 2.0f, 6, QString("b")); 456 Event c(5, 3.0f, 2, QString("c")); 457 Event cc(5, 3.1f, 2, QString("cc")); 458 Event d(6, 4.0f, 10, QString("d")); 459 Event dd(6, 4.5f, 10, QString("dd")); 460 Event e(14, 5.0f, 3, QString("e")); 461 s.add(b); 462 s.add(c); 463 s.add(d); 464 s.add(a); 465 s.add(cc); 466 s.add(dd); 467 s.add(e); 468 QCOMPARE(s.getEventsWithin(2, 7), EventVector({ b, c, cc })); 469 } 470 eventPatternWithinWithOverspill()471 void eventPatternWithinWithOverspill() { 472 473 EventSeries s; 474 Event a(0, 1.0f, 18, QString("a")); 475 Event b(3, 2.0f, 6, QString("b")); 476 Event c(5, 3.0f, 2, QString("c")); 477 Event cc(5, 3.1f, 2, QString("cc")); 478 Event d(6, 4.0f, 10, QString("d")); 479 Event dd(6, 4.5f, 10, QString("dd")); 480 Event e(14, 5.0f, 3, QString("e")); 481 s.add(b); 482 s.add(c); 483 s.add(d); 484 s.add(a); 485 s.add(cc); 486 s.add(dd); 487 s.add(e); 488 QCOMPARE(s.getEventsWithin(0, 0, 0), EventVector()); 489 QCOMPARE(s.getEventsWithin(0, 0, 1), EventVector({ a })); 490 QCOMPARE(s.getEventsWithin(0, 0, 2), EventVector({ a, b })); 491 QCOMPARE(s.getEventsWithin(20, 1, 0), EventVector()); 492 QCOMPARE(s.getEventsWithin(20, 1, 1), EventVector({ e })); 493 QCOMPARE(s.getEventsWithin(20, 1, 2), EventVector({ dd, e })); 494 QCOMPARE(s.getEventsWithin(2, 7, 0), EventVector({ b, c, cc })); 495 QCOMPARE(s.getEventsWithin(2, 7, 1), EventVector({ a, b, c, cc, d })); 496 QCOMPARE(s.getEventsWithin(2, 7, 2), EventVector({ a, b, c, cc, d, dd })); 497 QCOMPARE(s.getEventsWithin(2, 7, 3), EventVector({ a, b, c, cc, d, dd, e })); 498 QCOMPARE(s.getEventsWithin(2, 7, 4), EventVector({ a, b, c, cc, d, dd, e })); 499 } 500 eventPatternStartingWithin()501 void eventPatternStartingWithin() { 502 503 EventSeries s; 504 Event a(0, 1.0f, 18, QString("a")); 505 Event b(3, 2.0f, 6, QString("b")); 506 Event c(5, 3.0f, 2, QString("c")); 507 Event cc(5, 3.1f, 2, QString("cc")); 508 Event d(6, 4.0f, 10, QString("d")); 509 Event dd(6, 4.5f, 10, QString("dd")); 510 Event e(14, 5.0f, 3, QString("e")); 511 s.add(b); 512 s.add(c); 513 s.add(d); 514 s.add(a); 515 s.add(cc); 516 s.add(dd); 517 s.add(e); 518 QCOMPARE(s.getEventsStartingWithin(2, 7), 519 EventVector({ b, c, cc, d, dd })); 520 } 521 eventPatternStartingAt()522 void eventPatternStartingAt() { 523 524 EventSeries s; 525 Event a(0, 1.0f, 18, QString("a")); 526 Event b(3, 2.0f, 6, QString("b")); 527 Event c(5, 3.0f, 2, QString("c")); 528 Event cc(5, 3.1f, 2, QString("cc")); 529 Event d(6, 4.0f, 10, QString("d")); 530 Event dd(6, 4.5f, 10, QString("dd")); 531 Event e(14, 5.0f, 3, QString("e")); 532 s.add(b); 533 s.add(c); 534 s.add(d); 535 s.add(a); 536 s.add(cc); 537 s.add(dd); 538 s.add(e); 539 QCOMPARE(s.getEventsStartingAt(2), EventVector()); 540 QCOMPARE(s.getEventsStartingAt(5), EventVector({ c, cc })); 541 } 542 eventPatternEndFrame()543 void eventPatternEndFrame() { 544 545 EventSeries s; 546 Event a(0, 1.0f, 18, QString("a")); 547 Event b(3, 2.0f, 6, QString("b")); 548 Event c(5, 3.0f, 2, QString("c")); 549 Event cc(5, 3.1f, 2, QString("cc")); 550 Event d(6, 4.0f, 10, QString("d")); 551 Event dd(6, 4.5f, 10, QString("dd")); 552 Event e(14, 5.0f, 3, QString("e")); 553 s.add(b); 554 s.add(c); 555 s.add(d); 556 s.add(a); 557 s.add(cc); 558 s.add(dd); 559 s.add(e); 560 QCOMPARE(s.getEndFrame(), sv_frame_t(18)); 561 } 562 eventPatternAddRemove()563 void eventPatternAddRemove() { 564 565 // This is mostly here to exercise the innards of EventSeries 566 // and check it doesn't crash out with any internal 567 // consistency problems 568 569 EventSeries s; 570 Event a(0, 1.0f, 18, QString("a")); 571 Event b(3, 2.0f, 6, QString("b")); 572 Event c(5, 3.0f, 2, QString("c")); 573 Event cc(5, 3.1f, 2, QString("cc")); 574 Event d(6, 4.0f, 10, QString("d")); 575 Event dd(6, 4.5f, 10, QString("dd")); 576 Event e(14, 5.0f, 3, QString("e")); 577 s.add(b); 578 s.add(c); 579 s.add(d); 580 s.add(a); 581 s.add(cc); 582 s.add(dd); 583 s.add(e); 584 QCOMPARE(s.count(), 7); 585 s.remove(d); 586 QCOMPARE(s.getEventsCovering(8), EventVector({ a, b, dd })); 587 QCOMPARE(s.getEndFrame(), sv_frame_t(18)); 588 s.remove(e); 589 s.remove(a); 590 QCOMPARE(s.getEventsCovering(8), EventVector({ b, dd })); 591 QCOMPARE(s.getEndFrame(), sv_frame_t(16)); 592 s.remove(cc); 593 s.remove(c); 594 s.remove(dd); 595 QCOMPARE(s.getEventsCovering(8), EventVector({ b })); 596 QCOMPARE(s.getEndFrame(), sv_frame_t(9)); 597 s.remove(b); 598 QCOMPARE(s.getEventsCovering(8), EventVector()); 599 QCOMPARE(s.count(), 0); 600 QCOMPARE(s.isEmpty(), true); 601 QCOMPARE(s.getEndFrame(), sv_frame_t(0)); 602 } 603 preceding()604 void preceding() { 605 606 EventSeries s; 607 Event a(0, 1.0f, 18, QString("a")); 608 Event b(3, 2.0f, 6, QString("b")); 609 Event c(5, 3.0f, 2, QString("c")); 610 Event cc(5, 3.1f, 2, QString("cc")); 611 Event d(6, 4.0f, 10, QString("d")); 612 Event dd(6, 4.5f, 10, QString("dd")); 613 Event e(14, 5.0f, 3, QString("e")); 614 s.add(b); 615 s.add(c); 616 s.add(d); 617 s.add(d); // again 618 s.add(a); 619 s.add(cc); 620 s.add(dd); 621 s.add(e); 622 Event p; 623 QCOMPARE(s.getEventPreceding(e, p), true); 624 QCOMPARE(p, dd); 625 QCOMPARE(s.getEventPreceding(p, p), true); 626 QCOMPARE(p, d); 627 QCOMPARE(s.getEventPreceding(p, p), true); 628 QCOMPARE(p, cc); 629 QCOMPARE(s.getEventPreceding(p, p), true); 630 QCOMPARE(p, c); 631 QCOMPARE(s.getEventPreceding(p, p), true); 632 QCOMPARE(p, b); 633 QCOMPARE(s.getEventPreceding(p, p), true); 634 QCOMPARE(p, a); 635 QCOMPARE(s.getEventPreceding(p, p), false); 636 } 637 following()638 void following() { 639 640 EventSeries s; 641 Event a(0, 1.0f, 18, QString("a")); 642 Event b(3, 2.0f, 6, QString("b")); 643 Event c(5, 3.0f, 2, QString("c")); 644 Event cc(5, 3.1f, 2, QString("cc")); 645 Event d(6, 4.0f, 10, QString("d")); 646 Event dd(6, 4.5f, 10, QString("dd")); 647 Event e(14, 5.0f, 3, QString("e")); 648 s.add(b); 649 s.add(c); 650 s.add(d); 651 s.add(d); // again 652 s.add(a); 653 s.add(cc); 654 s.add(dd); 655 s.add(e); 656 Event p; 657 QCOMPARE(s.getEventFollowing(a, p), true); 658 QCOMPARE(p, b); 659 QCOMPARE(s.getEventFollowing(p, p), true); 660 QCOMPARE(p, c); 661 QCOMPARE(s.getEventFollowing(p, p), true); 662 QCOMPARE(p, cc); 663 QCOMPARE(s.getEventFollowing(p, p), true); 664 QCOMPARE(p, d); 665 QCOMPARE(s.getEventFollowing(p, p), true); 666 QCOMPARE(p, dd); 667 QCOMPARE(s.getEventFollowing(p, p), true); 668 QCOMPARE(p, e); 669 QCOMPARE(s.getEventFollowing(p, p), false); 670 } 671 matchingForward()672 void matchingForward() { 673 674 EventSeries s; 675 Event p; 676 QCOMPARE(s.getNearestEventMatching 677 (6, [](Event e) { return e.getDuration() < 4; }, 678 EventSeries::Forward, p), false); 679 Event a(0, 1.0f, 18, QString("a")); 680 Event b(3, 2.0f, 6, QString("b")); 681 Event c(5, 3.0f, 2, QString("c")); 682 Event cc(5, 3.1f, 2, QString("cc")); 683 Event d(6, 4.0f, 10, QString("d")); 684 Event dd(6, 4.5f, 10, QString("dd")); 685 Event e(14, 5.0f, 3, QString("e")); 686 s.add(b); 687 s.add(c); 688 s.add(d); 689 s.add(d); // again 690 s.add(a); 691 s.add(cc); 692 s.add(dd); 693 s.add(e); 694 QCOMPARE(s.getNearestEventMatching 695 (0, [](Event e) { return e.getDuration() < 4; }, 696 EventSeries::Forward, p), true); 697 QCOMPARE(p, c); 698 QCOMPARE(s.getNearestEventMatching 699 (6, [](Event e) { return e.getDuration() < 4; }, 700 EventSeries::Forward, p), true); 701 QCOMPARE(p, e); 702 QCOMPARE(s.getNearestEventMatching 703 (6, [](Event e) { return e.getDuration() > 4; }, 704 EventSeries::Forward, p), true); 705 QCOMPARE(p, d); 706 QCOMPARE(s.getNearestEventMatching 707 (20, [](Event e) { return e.getDuration() > 4; }, 708 EventSeries::Forward, p), false); 709 } 710 matchingBackward()711 void matchingBackward() { 712 713 EventSeries s; 714 Event p; 715 QCOMPARE(s.getNearestEventMatching 716 (6, [](Event e) { return e.getDuration() < 4; }, 717 EventSeries::Backward, p), false); 718 Event a(0, 1.0f, 18, QString("a")); 719 Event b(3, 2.0f, 6, QString("b")); 720 Event c(5, 3.0f, 2, QString("c")); 721 Event cc(5, 3.1f, 2, QString("cc")); 722 Event d(6, 4.0f, 10, QString("d")); 723 Event dd(6, 4.5f, 10, QString("dd")); 724 Event e(14, 5.0f, 3, QString("e")); 725 s.add(b); 726 s.add(c); 727 s.add(d); 728 s.add(d); // again 729 s.add(a); 730 s.add(cc); 731 s.add(dd); 732 s.add(e); 733 QCOMPARE(s.getNearestEventMatching 734 (0, [](Event e) { return e.getDuration() < 4; }, 735 EventSeries::Backward, p), false); 736 QCOMPARE(s.getNearestEventMatching 737 (6, [](Event e) { return e.getDuration() > 4; }, 738 EventSeries::Backward, p), true); 739 QCOMPARE(p, b); 740 QCOMPARE(s.getNearestEventMatching 741 (20, [](Event e) { return e.getDuration() > 4; }, 742 EventSeries::Backward, p), true); 743 QCOMPARE(p, dd); 744 } 745 }; 746 747 #endif 748