annotate base/test/TestOurRealTime.h @ 1520:954d0cf29ca7 import-audio-data

Switch the normalisation option in WritableWaveFileModel from normalising on read to normalising on write, so that the saved file is already normalised and therefore can be read again without having to remember to normalise it
author Chris Cannam
date Wed, 12 Sep 2018 13:56:56 +0100
parents 622d193a00dc
children 71207822a7e0
rev   line source
Chris@1262 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@1262 2
Chris@1262 3 /*
Chris@1262 4 Sonic Visualiser
Chris@1262 5 An audio file viewer and annotation editor.
Chris@1262 6 Centre for Digital Music, Queen Mary, University of London.
Chris@1262 7
Chris@1262 8 This program is free software; you can redistribute it and/or
Chris@1262 9 modify it under the terms of the GNU General Public License as
Chris@1262 10 published by the Free Software Foundation; either version 2 of the
Chris@1262 11 License, or (at your option) any later version. See the file
Chris@1262 12 COPYING included with this distribution for more information.
Chris@1262 13 */
Chris@1262 14
Chris@1262 15 #ifndef TEST_OUR_REALTIME_H
Chris@1262 16 #define TEST_OUR_REALTIME_H
Chris@1262 17
Chris@1262 18 #include <QObject>
Chris@1262 19 #include <QtTest>
Chris@1262 20 #include <QDir>
Chris@1262 21
Chris@1262 22 #include <iostream>
Chris@1262 23
Chris@1262 24 #include "../RealTime.h"
Chris@1262 25
Chris@1262 26 using namespace std;
Chris@1262 27
Chris@1262 28 #define ONE_MILLION 1000000
Chris@1262 29 #define ONE_BILLION 1000000000
Chris@1262 30
Chris@1262 31 class TestOurRealTime : public QObject
Chris@1262 32 {
Chris@1262 33 Q_OBJECT
Chris@1262 34
Chris@1262 35 void compareTexts(string s, const char *e) {
Chris@1262 36 QCOMPARE(QString(s.c_str()), QString(e));
Chris@1262 37 }
Chris@1262 38
Chris@1262 39 typedef sv_frame_t frame_type;
Chris@1262 40
Chris@1262 41 private slots:
Chris@1262 42
Chris@1262 43 void zero()
Chris@1262 44 {
Chris@1344 45 QCOMPARE(RealTime(0, 0), RealTime::zeroTime);
Chris@1344 46 QCOMPARE(RealTime(0, 0).sec, 0);
Chris@1344 47 QCOMPARE(RealTime(0, 0).nsec, 0);
Chris@1344 48 QCOMPARE(RealTime(0, 0).msec(), 0);
Chris@1344 49 QCOMPARE(RealTime(0, 0).usec(), 0);
Chris@1262 50 }
Chris@1262 51
Chris@1262 52 void ctor()
Chris@1262 53 {
Chris@1344 54 QCOMPARE(RealTime(0, 0), RealTime(0, 0));
Chris@1262 55
Chris@1344 56 // wraparounds
Chris@1344 57 QCOMPARE(RealTime(0, ONE_BILLION/2), RealTime(1, -ONE_BILLION/2));
Chris@1344 58 QCOMPARE(RealTime(0, -ONE_BILLION/2), RealTime(-1, ONE_BILLION/2));
Chris@1262 59
Chris@1344 60 QCOMPARE(RealTime(1, ONE_BILLION), RealTime(2, 0));
Chris@1344 61 QCOMPARE(RealTime(1, -ONE_BILLION), RealTime(0, 0));
Chris@1344 62 QCOMPARE(RealTime(-1, ONE_BILLION), RealTime(0, 0));
Chris@1344 63 QCOMPARE(RealTime(-1, -ONE_BILLION), RealTime(-2, 0));
Chris@1262 64
Chris@1268 65 QCOMPARE(RealTime(1, -ONE_BILLION-ONE_BILLION/2), RealTime(0, -ONE_BILLION/2));
Chris@1268 66 QCOMPARE(RealTime(-1, ONE_BILLION+ONE_BILLION/2), RealTime(0, ONE_BILLION/2));
Chris@1268 67
Chris@1344 68 QCOMPARE(RealTime(2, -ONE_BILLION*2), RealTime(0, 0));
Chris@1344 69 QCOMPARE(RealTime(2, -ONE_BILLION/2), RealTime(1, ONE_BILLION/2));
Chris@1262 70
Chris@1344 71 QCOMPARE(RealTime(-2, ONE_BILLION*2), RealTime(0, 0));
Chris@1344 72 QCOMPARE(RealTime(-2, ONE_BILLION/2), RealTime(-1, -ONE_BILLION/2));
Chris@1427 73
Chris@1427 74 QCOMPARE(RealTime(1, -ONE_BILLION/2).sec, 0);
Chris@1427 75 QCOMPARE(RealTime(1, -ONE_BILLION/2).nsec, ONE_BILLION/2);
Chris@1427 76 QCOMPARE(RealTime(-1, ONE_BILLION/2).sec, 0);
Chris@1427 77 QCOMPARE(RealTime(-1, ONE_BILLION/2).nsec, -ONE_BILLION/2);
Chris@1344 78
Chris@1344 79 QCOMPARE(RealTime(0, 1).sec, 0);
Chris@1344 80 QCOMPARE(RealTime(0, 1).nsec, 1);
Chris@1344 81 QCOMPARE(RealTime(0, -1).sec, 0);
Chris@1344 82 QCOMPARE(RealTime(0, -1).nsec, -1);
Chris@1344 83 QCOMPARE(RealTime(1, -1).sec, 0);
Chris@1344 84 QCOMPARE(RealTime(1, -1).nsec, ONE_BILLION-1);
Chris@1344 85 QCOMPARE(RealTime(-1, 1).sec, 0);
Chris@1344 86 QCOMPARE(RealTime(-1, 1).nsec, -ONE_BILLION+1);
Chris@1344 87 QCOMPARE(RealTime(-1, -1).sec, -1);
Chris@1344 88 QCOMPARE(RealTime(-1, -1).nsec, -1);
Chris@1344 89
Chris@1344 90 QCOMPARE(RealTime(2, -ONE_BILLION*2).sec, 0);
Chris@1344 91 QCOMPARE(RealTime(2, -ONE_BILLION*2).nsec, 0);
Chris@1344 92 QCOMPARE(RealTime(2, -ONE_BILLION/2).sec, 1);
Chris@1344 93 QCOMPARE(RealTime(2, -ONE_BILLION/2).nsec, ONE_BILLION/2);
Chris@1262 94
Chris@1344 95 QCOMPARE(RealTime(-2, ONE_BILLION*2).sec, 0);
Chris@1344 96 QCOMPARE(RealTime(-2, ONE_BILLION*2).nsec, 0);
Chris@1344 97 QCOMPARE(RealTime(-2, ONE_BILLION/2).sec, -1);
Chris@1344 98 QCOMPARE(RealTime(-2, ONE_BILLION/2).nsec, -ONE_BILLION/2);
Chris@1262 99 }
Chris@1262 100
Chris@1262 101 void fromSeconds()
Chris@1262 102 {
Chris@1344 103 QCOMPARE(RealTime::fromSeconds(0), RealTime(0, 0));
Chris@1262 104
Chris@1344 105 QCOMPARE(RealTime::fromSeconds(0.5).sec, 0);
Chris@1344 106 QCOMPARE(RealTime::fromSeconds(0.5).nsec, ONE_BILLION/2);
Chris@1344 107 QCOMPARE(RealTime::fromSeconds(0.5).usec(), ONE_MILLION/2);
Chris@1344 108 QCOMPARE(RealTime::fromSeconds(0.5).msec(), 500);
Chris@1344 109
Chris@1344 110 QCOMPARE(RealTime::fromSeconds(0.5), RealTime(0, ONE_BILLION/2));
Chris@1344 111 QCOMPARE(RealTime::fromSeconds(1), RealTime(1, 0));
Chris@1344 112 QCOMPARE(RealTime::fromSeconds(1.5), RealTime(1, ONE_BILLION/2));
Chris@1262 113
Chris@1344 114 QCOMPARE(RealTime::fromSeconds(-0.5).sec, 0);
Chris@1344 115 QCOMPARE(RealTime::fromSeconds(-0.5).nsec, -ONE_BILLION/2);
Chris@1344 116 QCOMPARE(RealTime::fromSeconds(-0.5).usec(), -ONE_MILLION/2);
Chris@1344 117 QCOMPARE(RealTime::fromSeconds(-0.5).msec(), -500);
Chris@1344 118
Chris@1344 119 QCOMPARE(RealTime::fromSeconds(-1.5).sec, -1);
Chris@1344 120 QCOMPARE(RealTime::fromSeconds(-1.5).nsec, -ONE_BILLION/2);
Chris@1344 121 QCOMPARE(RealTime::fromSeconds(-1.5).usec(), -ONE_MILLION/2);
Chris@1344 122 QCOMPARE(RealTime::fromSeconds(-1.5).msec(), -500);
Chris@1344 123
Chris@1344 124 QCOMPARE(RealTime::fromSeconds(-0.5), RealTime(0, -ONE_BILLION/2));
Chris@1344 125 QCOMPARE(RealTime::fromSeconds(-1), RealTime(-1, 0));
Chris@1344 126 QCOMPARE(RealTime::fromSeconds(-1.5), RealTime(-1, -ONE_BILLION/2));
Chris@1262 127 }
Chris@1262 128
Chris@1262 129 void fromMilliseconds()
Chris@1262 130 {
Chris@1344 131 QCOMPARE(RealTime::fromMilliseconds(0), RealTime(0, 0));
Chris@1344 132 QCOMPARE(RealTime::fromMilliseconds(500), RealTime(0, ONE_BILLION/2));
Chris@1344 133 QCOMPARE(RealTime::fromMilliseconds(1000), RealTime(1, 0));
Chris@1344 134 QCOMPARE(RealTime::fromMilliseconds(1500), RealTime(1, ONE_BILLION/2));
Chris@1262 135
Chris@1344 136 QCOMPARE(RealTime::fromMilliseconds(-0), RealTime(0, 0));
Chris@1344 137 QCOMPARE(RealTime::fromMilliseconds(-500), RealTime(0, -ONE_BILLION/2));
Chris@1344 138 QCOMPARE(RealTime::fromMilliseconds(-1000), RealTime(-1, 0));
Chris@1344 139 QCOMPARE(RealTime::fromMilliseconds(-1500), RealTime(-1, -ONE_BILLION/2));
Chris@1262 140 }
Chris@1262 141
Chris@1262 142 void fromTimeval()
Chris@1262 143 {
Chris@1344 144 struct timeval tv;
Chris@1262 145
Chris@1344 146 tv.tv_sec = 0; tv.tv_usec = 0;
Chris@1344 147 QCOMPARE(RealTime::fromTimeval(tv), RealTime(0, 0));
Chris@1344 148 tv.tv_sec = 0; tv.tv_usec = ONE_MILLION/2;
Chris@1344 149 QCOMPARE(RealTime::fromTimeval(tv), RealTime(0, ONE_BILLION/2));
Chris@1344 150 tv.tv_sec = 1; tv.tv_usec = 0;
Chris@1344 151 QCOMPARE(RealTime::fromTimeval(tv), RealTime(1, 0));
Chris@1344 152 tv.tv_sec = 1; tv.tv_usec = ONE_MILLION/2;
Chris@1344 153 QCOMPARE(RealTime::fromTimeval(tv), RealTime(1, ONE_BILLION/2));
Chris@1262 154
Chris@1344 155 tv.tv_sec = 0; tv.tv_usec = -ONE_MILLION/2;
Chris@1344 156 QCOMPARE(RealTime::fromTimeval(tv), RealTime(0, -ONE_BILLION/2));
Chris@1344 157 tv.tv_sec = -1; tv.tv_usec = 0;
Chris@1344 158 QCOMPARE(RealTime::fromTimeval(tv), RealTime(-1, 0));
Chris@1344 159 tv.tv_sec = -1; tv.tv_usec = -ONE_MILLION/2;
Chris@1344 160 QCOMPARE(RealTime::fromTimeval(tv), RealTime(-1, -ONE_BILLION/2));
Chris@1262 161 }
Chris@1262 162
Chris@1262 163 void fromXsdDuration()
Chris@1262 164 {
Chris@1344 165 QCOMPARE(RealTime::fromXsdDuration("PT0"), RealTime::zeroTime);
Chris@1344 166 QCOMPARE(RealTime::fromXsdDuration("PT0S"), RealTime::zeroTime);
Chris@1344 167 QCOMPARE(RealTime::fromXsdDuration("PT10S"), RealTime(10, 0));
Chris@1344 168 QCOMPARE(RealTime::fromXsdDuration("PT10.5S"), RealTime(10, ONE_BILLION/2));
Chris@1344 169 QCOMPARE(RealTime::fromXsdDuration("PT1.5S").sec, 1);
Chris@1344 170 QCOMPARE(RealTime::fromXsdDuration("PT1.5S").msec(), 500);
Chris@1344 171 QCOMPARE(RealTime::fromXsdDuration("-PT1.5S").sec, -1);
Chris@1344 172 QCOMPARE(RealTime::fromXsdDuration("-PT1.5S").msec(), -500);
Chris@1344 173 QCOMPARE(RealTime::fromXsdDuration("PT1M30.5S"), RealTime(90, ONE_BILLION/2));
Chris@1344 174 QCOMPARE(RealTime::fromXsdDuration("PT1H2M30.5S"), RealTime(3750, ONE_BILLION/2));
Chris@1262 175 }
Chris@1262 176
Chris@1262 177 void toDouble()
Chris@1262 178 {
Chris@1344 179 QCOMPARE(RealTime(0, 0).toDouble(), 0.0);
Chris@1344 180 QCOMPARE(RealTime(0, ONE_BILLION/2).toDouble(), 0.5);
Chris@1344 181 QCOMPARE(RealTime(1, 0).toDouble(), 1.0);
Chris@1344 182 QCOMPARE(RealTime(1, ONE_BILLION/2).toDouble(), 1.5);
Chris@1262 183
Chris@1344 184 QCOMPARE(RealTime(0, -ONE_BILLION/2).toDouble(), -0.5);
Chris@1344 185 QCOMPARE(RealTime(-1, 0).toDouble(), -1.0);
Chris@1344 186 QCOMPARE(RealTime(-1, -ONE_BILLION/2).toDouble(), -1.5);
Chris@1262 187 }
Chris@1262 188
Chris@1262 189 void assign()
Chris@1262 190 {
Chris@1344 191 RealTime r;
Chris@1344 192 r = RealTime(0, 0);
Chris@1344 193 QCOMPARE(r, RealTime::zeroTime);
Chris@1344 194 r = RealTime(0, ONE_BILLION/2);
Chris@1262 195 QCOMPARE(r.sec, 0);
Chris@1262 196 QCOMPARE(r.nsec, ONE_BILLION/2);
Chris@1344 197 r = RealTime(-1, -ONE_BILLION/2);
Chris@1262 198 QCOMPARE(r.sec, -1);
Chris@1262 199 QCOMPARE(r.nsec, -ONE_BILLION/2);
Chris@1262 200 }
Chris@1262 201
Chris@1262 202 void plus()
Chris@1262 203 {
Chris@1344 204 QCOMPARE(RealTime(0, 0) + RealTime(0, 0), RealTime(0, 0));
Chris@1262 205
Chris@1344 206 QCOMPARE(RealTime(0, 0) + RealTime(0, ONE_BILLION/2), RealTime(0, ONE_BILLION/2));
Chris@1344 207 QCOMPARE(RealTime(0, ONE_BILLION/2) + RealTime(0, ONE_BILLION/2), RealTime(1, 0));
Chris@1344 208 QCOMPARE(RealTime(1, 0) + RealTime(0, ONE_BILLION/2), RealTime(1, ONE_BILLION/2));
Chris@1262 209
Chris@1344 210 QCOMPARE(RealTime(0, 0) + RealTime(0, -ONE_BILLION/2), RealTime(0, -ONE_BILLION/2));
Chris@1344 211 QCOMPARE(RealTime(0, -ONE_BILLION/2) + RealTime(0, -ONE_BILLION/2), RealTime(-1, 0));
Chris@1344 212 QCOMPARE(RealTime(-1, 0) + RealTime(0, -ONE_BILLION/2), RealTime(-1, -ONE_BILLION/2));
Chris@1262 213
Chris@1344 214 QCOMPARE(RealTime(1, 0) + RealTime(0, -ONE_BILLION/2), RealTime(0, ONE_BILLION/2));
Chris@1344 215 QCOMPARE(RealTime(1, 0) + RealTime(0, -ONE_BILLION/2) + RealTime(0, -ONE_BILLION/2), RealTime(0, 0));
Chris@1344 216 QCOMPARE(RealTime(1, 0) + RealTime(0, -ONE_BILLION/2) + RealTime(0, -ONE_BILLION/2) + RealTime(0, -ONE_BILLION/2), RealTime(0, -ONE_BILLION/2));
Chris@1262 217
Chris@1344 218 QCOMPARE(RealTime(0, ONE_BILLION/2) + RealTime(-1, 0), RealTime(0, -ONE_BILLION/2));
Chris@1344 219 QCOMPARE(RealTime(0, -ONE_BILLION/2) + RealTime(1, 0), RealTime(0, ONE_BILLION/2));
Chris@1262 220 }
Chris@1262 221
Chris@1262 222 void minus()
Chris@1262 223 {
Chris@1344 224 QCOMPARE(RealTime(0, 0) - RealTime(0, 0), RealTime(0, 0));
Chris@1262 225
Chris@1344 226 QCOMPARE(RealTime(0, 0) - RealTime(0, ONE_BILLION/2), RealTime(0, -ONE_BILLION/2));
Chris@1344 227 QCOMPARE(RealTime(0, ONE_BILLION/2) - RealTime(0, ONE_BILLION/2), RealTime(0, 0));
Chris@1344 228 QCOMPARE(RealTime(1, 0) - RealTime(0, ONE_BILLION/2), RealTime(0, ONE_BILLION/2));
Chris@1262 229
Chris@1344 230 QCOMPARE(RealTime(0, 0) - RealTime(0, -ONE_BILLION/2), RealTime(0, ONE_BILLION/2));
Chris@1344 231 QCOMPARE(RealTime(0, -ONE_BILLION/2) - RealTime(0, -ONE_BILLION/2), RealTime(0, 0));
Chris@1344 232 QCOMPARE(RealTime(-1, 0) - RealTime(0, -ONE_BILLION/2), RealTime(0, -ONE_BILLION/2));
Chris@1262 233
Chris@1344 234 QCOMPARE(RealTime(1, 0) - RealTime(0, -ONE_BILLION/2), RealTime(1, ONE_BILLION/2));
Chris@1344 235 QCOMPARE(RealTime(1, 0) - RealTime(0, -ONE_BILLION/2) - RealTime(0, -ONE_BILLION/2), RealTime(2, 0));
Chris@1344 236 QCOMPARE(RealTime(1, 0) - RealTime(0, -ONE_BILLION/2) - RealTime(0, -ONE_BILLION/2) - RealTime(0, -ONE_BILLION/2), RealTime(2, ONE_BILLION/2));
Chris@1262 237
Chris@1344 238 QCOMPARE(RealTime(0, ONE_BILLION/2) - RealTime(-1, 0), RealTime(1, ONE_BILLION/2));
Chris@1344 239 QCOMPARE(RealTime(0, -ONE_BILLION/2) - RealTime(1, 0), RealTime(-1, -ONE_BILLION/2));
Chris@1262 240 }
Chris@1262 241
Chris@1262 242 void negate()
Chris@1262 243 {
Chris@1344 244 QCOMPARE(-RealTime(0, 0), RealTime(0, 0));
Chris@1344 245 QCOMPARE(-RealTime(1, 0), RealTime(-1, 0));
Chris@1344 246 QCOMPARE(-RealTime(1, ONE_BILLION/2), RealTime(-1, -ONE_BILLION/2));
Chris@1344 247 QCOMPARE(-RealTime(-1, -ONE_BILLION/2), RealTime(1, ONE_BILLION/2));
Chris@1262 248 }
Chris@1262 249
Chris@1262 250 void compare()
Chris@1262 251 {
Chris@1344 252 int sec, nsec;
Chris@1344 253 for (sec = -2; sec <= 2; sec += 2) {
Chris@1344 254 for (nsec = -1; nsec <= 1; nsec += 1) {
Chris@1344 255 QCOMPARE(RealTime(sec, nsec) < RealTime(sec, nsec), false);
Chris@1344 256 QCOMPARE(RealTime(sec, nsec) > RealTime(sec, nsec), false);
Chris@1344 257 QCOMPARE(RealTime(sec, nsec) == RealTime(sec, nsec), true);
Chris@1344 258 QCOMPARE(RealTime(sec, nsec) != RealTime(sec, nsec), false);
Chris@1344 259 QCOMPARE(RealTime(sec, nsec) <= RealTime(sec, nsec), true);
Chris@1344 260 QCOMPARE(RealTime(sec, nsec) >= RealTime(sec, nsec), true);
Chris@1344 261 }
Chris@1344 262 }
Chris@1344 263 RealTime prev(-3, 0);
Chris@1344 264 for (sec = -2; sec <= 2; sec += 2) {
Chris@1344 265 for (nsec = -1; nsec <= 1; nsec += 1) {
Chris@1262 266
Chris@1344 267 RealTime curr(sec, nsec);
Chris@1262 268
Chris@1344 269 QCOMPARE(prev < curr, true);
Chris@1344 270 QCOMPARE(prev > curr, false);
Chris@1344 271 QCOMPARE(prev == curr, false);
Chris@1344 272 QCOMPARE(prev != curr, true);
Chris@1344 273 QCOMPARE(prev <= curr, true);
Chris@1344 274 QCOMPARE(prev >= curr, false);
Chris@1262 275
Chris@1344 276 QCOMPARE(curr < prev, false);
Chris@1344 277 QCOMPARE(curr > prev, true);
Chris@1344 278 QCOMPARE(curr == prev, false);
Chris@1344 279 QCOMPARE(curr != prev, true);
Chris@1344 280 QCOMPARE(curr <= prev, false);
Chris@1344 281 QCOMPARE(curr >= prev, true);
Chris@1262 282
Chris@1344 283 prev = curr;
Chris@1344 284 }
Chris@1344 285 }
Chris@1262 286 }
Chris@1262 287
Chris@1262 288 void frame()
Chris@1262 289 {
Chris@1262 290 int frames[] = {
Chris@1262 291 0, 1, 2047, 2048, 6656,
Chris@1262 292 32767, 32768, 44100, 44101,
Chris@1262 293 999999999, 2000000000
Chris@1262 294 };
Chris@1262 295 int n = sizeof(frames)/sizeof(frames[0]);
Chris@1262 296
Chris@1262 297 int rates[] = {
Chris@1262 298 1, 2, 8000, 22050,
Chris@1262 299 44100, 44101, 192000, 2000000001
Chris@1262 300 };
Chris@1262 301 int m = sizeof(rates)/sizeof(rates[0]);
Chris@1262 302
Chris@1262 303 vector<vector<RealTime>> realTimes = {
Chris@1262 304 { { 0, 0 }, { 1, 0 }, { 2047, 0 }, { 2048, 0 },
Chris@1262 305 { 6656, 0 }, { 32767, 0 }, { 32768, 0 }, { 44100, 0 },
Chris@1262 306 { 44101, 0 }, { 999999999, 0 }, { 2000000000, 0 } },
Chris@1262 307 { { 0, 0 }, { 0, 500000000 }, { 1023, 500000000 }, { 1024, 0 },
Chris@1262 308 { 3328, 0 }, { 16383, 500000000 }, { 16384, 0 }, { 22050, 0 },
Chris@1262 309 { 22050, 500000000 }, { 499999999, 500000000 }, { 1000000000, 0 } },
Chris@1262 310 { { 0, 0 }, { 0, 125000 }, { 0, 255875000 }, { 0, 256000000 },
Chris@1262 311 { 0, 832000000 }, { 4, 95875000 }, { 4, 96000000 }, { 5, 512500000 },
Chris@1262 312 { 5, 512625000 }, { 124999, 999875000 }, { 250000, 0 } },
Chris@1262 313 { { 0, 0 }, { 0, 45351 }, { 0, 92834467 }, { 0, 92879819 },
Chris@1262 314 { 0, 301859410 }, { 1, 486031746 }, { 1, 486077098 }, { 2, 0 },
Chris@1262 315 { 2, 45351 }, { 45351, 473877551 }, { 90702, 947845805 } },
Chris@1262 316 { { 0, 0 }, { 0, 22676 }, { 0, 46417234 }, { 0, 46439909 },
Chris@1262 317 { 0, 150929705 }, { 0, 743015873 }, { 0, 743038549 }, { 1, 0 },
Chris@1262 318 { 1, 22676 }, { 22675, 736938776 }, { 45351, 473922902 } },
Chris@1262 319 { { 0, 0 }, { 0, 22675 }, { 0, 46416181 }, { 0, 46438856 },
Chris@1262 320 { 0, 150926283 }, { 0, 742999025 }, { 0, 743021700 }, { 0, 999977325 },
Chris@1262 321 { 1, 0 }, { 22675, 222761389 }, { 45350, 445568128 } },
Chris@1262 322 { { 0, 0 }, { 0, 5208 }, { 0, 10661458 }, { 0, 10666667 },
Chris@1262 323 { 0, 34666667 }, { 0, 170661458 }, { 0, 170666667 }, { 0, 229687500 },
Chris@1262 324 { 0, 229692708 }, { 5208, 333328125 }, { 10416, 666666667 } },
Chris@1262 325 { { 0, 0 }, { 0, 0 }, { 0, 1023 }, { 0, 1024 },
Chris@1262 326 { 0, 3328 }, { 0, 16383 }, { 0, 16384 }, { 0, 22050 },
Chris@1262 327 { 0, 22050 }, { 0, 499999999 }, { 1, 0 } }
Chris@1262 328 };
Chris@1262 329
Chris@1262 330 for (int i = 0; i < n; ++i) {
Chris@1262 331 frame_type frame = frames[i];
Chris@1262 332 for (int j = 0; j < m; ++j) {
Chris@1262 333 int rate = rates[j];
Chris@1262 334
Chris@1262 335 RealTime rt = RealTime::frame2RealTime(frame, rate);
Chris@1262 336 QCOMPARE(rt.sec, realTimes[j][i].sec);
Chris@1262 337 QCOMPARE(rt.nsec, realTimes[j][i].nsec);
Chris@1262 338
Chris@1262 339 frame_type conv = RealTime::realTime2Frame(rt, rate);
Chris@1262 340
Chris@1262 341 rt = RealTime::frame2RealTime(-frame, rate);
Chris@1262 342 frame_type negconv = RealTime::realTime2Frame(rt, rate);
Chris@1262 343
Chris@1262 344 if (rate > ONE_BILLION) {
Chris@1263 345 // We don't have enough precision in RealTime
Chris@1262 346 // for this absurd sample rate, so a round trip
Chris@1262 347 // conversion may round
Chris@1262 348 QVERIFY(abs(frame - conv) < 2);
Chris@1262 349 QVERIFY(abs(-frame - negconv) < 2);
Chris@1262 350 } else {
Chris@1262 351 QCOMPARE(conv, frame);
Chris@1262 352 QCOMPARE(negconv, -frame);
Chris@1262 353 }
Chris@1262 354 }
Chris@1262 355 }
Chris@1262 356 }
Chris@1262 357
Chris@1262 358 // Our own RealTime has toMSText, toFrameText, toSecText
Chris@1262 359
Chris@1262 360 void toText()
Chris@1262 361 {
Chris@1262 362 // we want to use QStrings, because then the Qt test library
Chris@1262 363 // will print out any conflicts. The compareTexts function
Chris@1262 364 // does this for us
Chris@1262 365
Chris@1262 366 int halfSec = ONE_BILLION/2; // nsec
Chris@1262 367
Chris@1262 368 RealTime rt = RealTime(0, 0);
Chris@1262 369 compareTexts(rt.toMSText(false, false), "0");
Chris@1262 370 compareTexts(rt.toMSText(true, false), "0.000");
Chris@1262 371 compareTexts(rt.toMSText(false, true), "0");
Chris@1262 372 compareTexts(rt.toMSText(true, true), "0.000");
Chris@1262 373 compareTexts(rt.toFrameText(24, false), "0:00");
Chris@1262 374 compareTexts(rt.toFrameText(24, true), "0:00");
Chris@1262 375 compareTexts(rt.toSecText(), "0s");
Chris@1262 376
Chris@1262 377 rt = RealTime(1, halfSec);
Chris@1262 378 compareTexts(rt.toMSText(false, false), "1.5");
Chris@1262 379 compareTexts(rt.toMSText(true, false), "1.500");
Chris@1262 380 compareTexts(rt.toMSText(false, true), "1.5");
Chris@1262 381 compareTexts(rt.toMSText(true, true), "1.500");
Chris@1262 382 compareTexts(rt.toFrameText(24, false), "1:12");
Chris@1262 383 compareTexts(rt.toFrameText(24, true), "1:12");
Chris@1262 384 compareTexts(rt.toFrameText(25, false), "1:12");
Chris@1262 385 compareTexts(rt.toFrameText(25, true), "1:12");
Chris@1262 386 compareTexts(rt.toSecText(), "1s");
Chris@1262 387
Chris@1262 388 rt = RealTime::fromSeconds(-1.5);
Chris@1262 389 compareTexts(rt.toMSText(false, false), "-1.5");
Chris@1262 390 compareTexts(rt.toMSText(true, false), "-1.500");
Chris@1262 391 compareTexts(rt.toMSText(false, true), "-1.5");
Chris@1262 392 compareTexts(rt.toMSText(true, true), "-1.500");
Chris@1262 393 compareTexts(rt.toFrameText(24, false), "-1:12");
Chris@1262 394 compareTexts(rt.toFrameText(24, true), "-1:12");
Chris@1262 395 compareTexts(rt.toSecText(), "-1s");
Chris@1262 396
Chris@1262 397 rt = RealTime(1, 1000);
Chris@1262 398 compareTexts(rt.toMSText(false, false), "1");
Chris@1262 399 compareTexts(rt.toFrameText(24, false), "1:00");
Chris@1262 400 compareTexts(rt.toFrameText(ONE_MILLION, false), "1:000001");
Chris@1262 401 compareTexts(rt.toSecText(), "1s");
Chris@1262 402
Chris@1262 403 rt = RealTime(1, 100000);
Chris@1262 404 compareTexts(rt.toFrameText(ONE_MILLION, false), "1:000100");
Chris@1262 405 compareTexts(rt.toSecText(), "1s");
Chris@1262 406
Chris@1262 407 rt = RealTime::fromSeconds(60);
Chris@1262 408 compareTexts(rt.toMSText(false, false), "60");
Chris@1262 409 compareTexts(rt.toMSText(true, false), "60.000");
Chris@1262 410 compareTexts(rt.toMSText(false, true), "1:00");
Chris@1262 411 compareTexts(rt.toMSText(true, true), "1:00.000");
Chris@1262 412 compareTexts(rt.toFrameText(24, false), "60:00");
Chris@1262 413 compareTexts(rt.toFrameText(24, true), "1:00:00");
Chris@1262 414 compareTexts(rt.toSecText(), "1:00");
Chris@1262 415
Chris@1262 416 rt = RealTime::fromSeconds(61.05);
Chris@1262 417 compareTexts(rt.toMSText(false, false), "61.05");
Chris@1262 418 compareTexts(rt.toMSText(true, false), "61.050");
Chris@1262 419 compareTexts(rt.toMSText(false, true), "1:01.05");
Chris@1262 420 compareTexts(rt.toMSText(true, true), "1:01.050");
Chris@1262 421 compareTexts(rt.toFrameText(24, false), "61:01");
Chris@1262 422 compareTexts(rt.toFrameText(24, true), "1:01:01");
Chris@1262 423 compareTexts(rt.toSecText(), "1:01");
Chris@1262 424
Chris@1262 425 rt = RealTime::fromSeconds(601.05);
Chris@1262 426 compareTexts(rt.toMSText(false, false), "601.05");
Chris@1262 427 compareTexts(rt.toMSText(true, false), "601.050");
Chris@1262 428 compareTexts(rt.toMSText(false, true), "10:01.05");
Chris@1262 429 compareTexts(rt.toMSText(true, true), "10:01.050");
Chris@1262 430 compareTexts(rt.toFrameText(24, false), "601:01");
Chris@1262 431 compareTexts(rt.toFrameText(24, true), "10:01:01");
Chris@1262 432 compareTexts(rt.toSecText(), "10:01");
Chris@1262 433
Chris@1262 434 rt = RealTime::fromSeconds(3600);
Chris@1262 435 compareTexts(rt.toMSText(false, false), "3600");
Chris@1262 436 compareTexts(rt.toMSText(true, false), "3600.000");
Chris@1262 437 compareTexts(rt.toMSText(false, true), "1:00:00");
Chris@1262 438 compareTexts(rt.toMSText(true, true), "1:00:00.000");
Chris@1262 439 compareTexts(rt.toFrameText(24, false), "3600:00");
Chris@1262 440 compareTexts(rt.toFrameText(24, true), "1:00:00:00");
Chris@1262 441 compareTexts(rt.toSecText(), "1:00:00");
Chris@1262 442
Chris@1262 443 // For practical reasons our time display always rounds down
Chris@1262 444 rt = RealTime(3599, ONE_BILLION-1);
Chris@1262 445 compareTexts(rt.toMSText(false, false), "3599.999");
Chris@1262 446 compareTexts(rt.toMSText(true, false), "3599.999");
Chris@1262 447 compareTexts(rt.toMSText(false, true), "59:59.999");
Chris@1262 448 compareTexts(rt.toMSText(true, true), "59:59.999");
Chris@1262 449 compareTexts(rt.toFrameText(24, false), "3599:23");
Chris@1262 450 compareTexts(rt.toFrameText(24, true), "59:59:23");
Chris@1262 451 compareTexts(rt.toSecText(), "59:59");
Chris@1262 452
Chris@1262 453 rt = RealTime::fromSeconds(3600 * 4 + 60 * 5 + 3 + 0.01);
Chris@1262 454 compareTexts(rt.toMSText(false, false), "14703.01");
Chris@1262 455 compareTexts(rt.toMSText(true, false), "14703.010");
Chris@1262 456 compareTexts(rt.toMSText(false, true), "4:05:03.01");
Chris@1262 457 compareTexts(rt.toMSText(true, true), "4:05:03.010");
Chris@1262 458 compareTexts(rt.toFrameText(24, false), "14703:00");
Chris@1262 459 compareTexts(rt.toFrameText(24, true), "4:05:03:00");
Chris@1262 460 compareTexts(rt.toSecText(), "4:05:03");
Chris@1262 461
Chris@1262 462 rt = RealTime::fromSeconds(-(3600 * 4 + 60 * 5 + 3 + 0.01));
Chris@1262 463 compareTexts(rt.toMSText(false, false), "-14703.01");
Chris@1262 464 compareTexts(rt.toMSText(true, false), "-14703.010");
Chris@1262 465 compareTexts(rt.toMSText(false, true), "-4:05:03.01");
Chris@1262 466 compareTexts(rt.toMSText(true, true), "-4:05:03.010");
Chris@1262 467 compareTexts(rt.toFrameText(24, false), "-14703:00");
Chris@1262 468 compareTexts(rt.toFrameText(24, true), "-4:05:03:00");
Chris@1262 469 compareTexts(rt.toSecText(), "-4:05:03");
Chris@1262 470 }
Chris@1262 471 };
Chris@1262 472
Chris@1262 473 #endif
Chris@1262 474