annotate base/test/TestOurRealTime.h @ 1569:c2c8e071e24f

Comment
author Chris Cannam
date Wed, 07 Nov 2018 15:46:20 +0000
parents 71207822a7e0
children
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@1541 141
Chris@1541 142 void fromMicroseconds()
Chris@1541 143 {
Chris@1541 144 QCOMPARE(RealTime::fromMicroseconds(0), RealTime(0, 0));
Chris@1541 145 QCOMPARE(RealTime::fromMicroseconds(500000), RealTime(0, ONE_BILLION/2));
Chris@1541 146 QCOMPARE(RealTime::fromMicroseconds(1000000), RealTime(1, 0));
Chris@1541 147 QCOMPARE(RealTime::fromMicroseconds(1500000), RealTime(1, ONE_BILLION/2));
Chris@1541 148
Chris@1541 149 QCOMPARE(RealTime::fromMicroseconds(-0), RealTime(0, 0));
Chris@1541 150 QCOMPARE(RealTime::fromMicroseconds(-500000), RealTime(0, -ONE_BILLION/2));
Chris@1541 151 QCOMPARE(RealTime::fromMicroseconds(-1000000), RealTime(-1, 0));
Chris@1541 152 QCOMPARE(RealTime::fromMicroseconds(-1500000), RealTime(-1, -ONE_BILLION/2));
Chris@1541 153 QCOMPARE(RealTime::fromMicroseconds(13500000), RealTime(13, ONE_BILLION/2));
Chris@1541 154 }
Chris@1262 155
Chris@1262 156 void fromTimeval()
Chris@1262 157 {
Chris@1344 158 struct timeval tv;
Chris@1262 159
Chris@1344 160 tv.tv_sec = 0; tv.tv_usec = 0;
Chris@1344 161 QCOMPARE(RealTime::fromTimeval(tv), RealTime(0, 0));
Chris@1344 162 tv.tv_sec = 0; tv.tv_usec = ONE_MILLION/2;
Chris@1344 163 QCOMPARE(RealTime::fromTimeval(tv), RealTime(0, ONE_BILLION/2));
Chris@1344 164 tv.tv_sec = 1; tv.tv_usec = 0;
Chris@1344 165 QCOMPARE(RealTime::fromTimeval(tv), RealTime(1, 0));
Chris@1344 166 tv.tv_sec = 1; tv.tv_usec = ONE_MILLION/2;
Chris@1344 167 QCOMPARE(RealTime::fromTimeval(tv), RealTime(1, ONE_BILLION/2));
Chris@1262 168
Chris@1344 169 tv.tv_sec = 0; tv.tv_usec = -ONE_MILLION/2;
Chris@1344 170 QCOMPARE(RealTime::fromTimeval(tv), RealTime(0, -ONE_BILLION/2));
Chris@1344 171 tv.tv_sec = -1; tv.tv_usec = 0;
Chris@1344 172 QCOMPARE(RealTime::fromTimeval(tv), RealTime(-1, 0));
Chris@1344 173 tv.tv_sec = -1; tv.tv_usec = -ONE_MILLION/2;
Chris@1344 174 QCOMPARE(RealTime::fromTimeval(tv), RealTime(-1, -ONE_BILLION/2));
Chris@1262 175 }
Chris@1262 176
Chris@1262 177 void fromXsdDuration()
Chris@1262 178 {
Chris@1344 179 QCOMPARE(RealTime::fromXsdDuration("PT0"), RealTime::zeroTime);
Chris@1344 180 QCOMPARE(RealTime::fromXsdDuration("PT0S"), RealTime::zeroTime);
Chris@1344 181 QCOMPARE(RealTime::fromXsdDuration("PT10S"), RealTime(10, 0));
Chris@1344 182 QCOMPARE(RealTime::fromXsdDuration("PT10.5S"), RealTime(10, ONE_BILLION/2));
Chris@1344 183 QCOMPARE(RealTime::fromXsdDuration("PT1.5S").sec, 1);
Chris@1344 184 QCOMPARE(RealTime::fromXsdDuration("PT1.5S").msec(), 500);
Chris@1344 185 QCOMPARE(RealTime::fromXsdDuration("-PT1.5S").sec, -1);
Chris@1344 186 QCOMPARE(RealTime::fromXsdDuration("-PT1.5S").msec(), -500);
Chris@1344 187 QCOMPARE(RealTime::fromXsdDuration("PT1M30.5S"), RealTime(90, ONE_BILLION/2));
Chris@1344 188 QCOMPARE(RealTime::fromXsdDuration("PT1H2M30.5S"), RealTime(3750, ONE_BILLION/2));
Chris@1262 189 }
Chris@1262 190
Chris@1262 191 void toDouble()
Chris@1262 192 {
Chris@1344 193 QCOMPARE(RealTime(0, 0).toDouble(), 0.0);
Chris@1344 194 QCOMPARE(RealTime(0, ONE_BILLION/2).toDouble(), 0.5);
Chris@1344 195 QCOMPARE(RealTime(1, 0).toDouble(), 1.0);
Chris@1344 196 QCOMPARE(RealTime(1, ONE_BILLION/2).toDouble(), 1.5);
Chris@1262 197
Chris@1344 198 QCOMPARE(RealTime(0, -ONE_BILLION/2).toDouble(), -0.5);
Chris@1344 199 QCOMPARE(RealTime(-1, 0).toDouble(), -1.0);
Chris@1344 200 QCOMPARE(RealTime(-1, -ONE_BILLION/2).toDouble(), -1.5);
Chris@1262 201 }
Chris@1262 202
Chris@1262 203 void assign()
Chris@1262 204 {
Chris@1344 205 RealTime r;
Chris@1344 206 r = RealTime(0, 0);
Chris@1344 207 QCOMPARE(r, RealTime::zeroTime);
Chris@1344 208 r = RealTime(0, ONE_BILLION/2);
Chris@1262 209 QCOMPARE(r.sec, 0);
Chris@1262 210 QCOMPARE(r.nsec, ONE_BILLION/2);
Chris@1344 211 r = RealTime(-1, -ONE_BILLION/2);
Chris@1262 212 QCOMPARE(r.sec, -1);
Chris@1262 213 QCOMPARE(r.nsec, -ONE_BILLION/2);
Chris@1262 214 }
Chris@1262 215
Chris@1262 216 void plus()
Chris@1262 217 {
Chris@1344 218 QCOMPARE(RealTime(0, 0) + RealTime(0, 0), RealTime(0, 0));
Chris@1262 219
Chris@1344 220 QCOMPARE(RealTime(0, 0) + RealTime(0, ONE_BILLION/2), RealTime(0, ONE_BILLION/2));
Chris@1344 221 QCOMPARE(RealTime(0, ONE_BILLION/2) + RealTime(0, ONE_BILLION/2), RealTime(1, 0));
Chris@1344 222 QCOMPARE(RealTime(1, 0) + RealTime(0, ONE_BILLION/2), RealTime(1, ONE_BILLION/2));
Chris@1262 223
Chris@1344 224 QCOMPARE(RealTime(0, 0) + RealTime(0, -ONE_BILLION/2), RealTime(0, -ONE_BILLION/2));
Chris@1344 225 QCOMPARE(RealTime(0, -ONE_BILLION/2) + RealTime(0, -ONE_BILLION/2), RealTime(-1, 0));
Chris@1344 226 QCOMPARE(RealTime(-1, 0) + RealTime(0, -ONE_BILLION/2), RealTime(-1, -ONE_BILLION/2));
Chris@1262 227
Chris@1344 228 QCOMPARE(RealTime(1, 0) + RealTime(0, -ONE_BILLION/2), RealTime(0, ONE_BILLION/2));
Chris@1344 229 QCOMPARE(RealTime(1, 0) + RealTime(0, -ONE_BILLION/2) + RealTime(0, -ONE_BILLION/2), RealTime(0, 0));
Chris@1344 230 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 231
Chris@1344 232 QCOMPARE(RealTime(0, ONE_BILLION/2) + RealTime(-1, 0), RealTime(0, -ONE_BILLION/2));
Chris@1344 233 QCOMPARE(RealTime(0, -ONE_BILLION/2) + RealTime(1, 0), RealTime(0, ONE_BILLION/2));
Chris@1262 234 }
Chris@1262 235
Chris@1262 236 void minus()
Chris@1262 237 {
Chris@1344 238 QCOMPARE(RealTime(0, 0) - RealTime(0, 0), RealTime(0, 0));
Chris@1262 239
Chris@1344 240 QCOMPARE(RealTime(0, 0) - RealTime(0, ONE_BILLION/2), RealTime(0, -ONE_BILLION/2));
Chris@1344 241 QCOMPARE(RealTime(0, ONE_BILLION/2) - RealTime(0, ONE_BILLION/2), RealTime(0, 0));
Chris@1344 242 QCOMPARE(RealTime(1, 0) - RealTime(0, ONE_BILLION/2), RealTime(0, ONE_BILLION/2));
Chris@1262 243
Chris@1344 244 QCOMPARE(RealTime(0, 0) - RealTime(0, -ONE_BILLION/2), RealTime(0, ONE_BILLION/2));
Chris@1344 245 QCOMPARE(RealTime(0, -ONE_BILLION/2) - RealTime(0, -ONE_BILLION/2), RealTime(0, 0));
Chris@1344 246 QCOMPARE(RealTime(-1, 0) - RealTime(0, -ONE_BILLION/2), RealTime(0, -ONE_BILLION/2));
Chris@1262 247
Chris@1344 248 QCOMPARE(RealTime(1, 0) - RealTime(0, -ONE_BILLION/2), RealTime(1, ONE_BILLION/2));
Chris@1344 249 QCOMPARE(RealTime(1, 0) - RealTime(0, -ONE_BILLION/2) - RealTime(0, -ONE_BILLION/2), RealTime(2, 0));
Chris@1344 250 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 251
Chris@1344 252 QCOMPARE(RealTime(0, ONE_BILLION/2) - RealTime(-1, 0), RealTime(1, ONE_BILLION/2));
Chris@1344 253 QCOMPARE(RealTime(0, -ONE_BILLION/2) - RealTime(1, 0), RealTime(-1, -ONE_BILLION/2));
Chris@1262 254 }
Chris@1262 255
Chris@1262 256 void negate()
Chris@1262 257 {
Chris@1344 258 QCOMPARE(-RealTime(0, 0), RealTime(0, 0));
Chris@1344 259 QCOMPARE(-RealTime(1, 0), RealTime(-1, 0));
Chris@1344 260 QCOMPARE(-RealTime(1, ONE_BILLION/2), RealTime(-1, -ONE_BILLION/2));
Chris@1344 261 QCOMPARE(-RealTime(-1, -ONE_BILLION/2), RealTime(1, ONE_BILLION/2));
Chris@1262 262 }
Chris@1262 263
Chris@1262 264 void compare()
Chris@1262 265 {
Chris@1344 266 int sec, nsec;
Chris@1344 267 for (sec = -2; sec <= 2; sec += 2) {
Chris@1344 268 for (nsec = -1; nsec <= 1; nsec += 1) {
Chris@1344 269 QCOMPARE(RealTime(sec, nsec) < RealTime(sec, nsec), false);
Chris@1344 270 QCOMPARE(RealTime(sec, nsec) > RealTime(sec, nsec), false);
Chris@1344 271 QCOMPARE(RealTime(sec, nsec) == RealTime(sec, nsec), true);
Chris@1344 272 QCOMPARE(RealTime(sec, nsec) != RealTime(sec, nsec), false);
Chris@1344 273 QCOMPARE(RealTime(sec, nsec) <= RealTime(sec, nsec), true);
Chris@1344 274 QCOMPARE(RealTime(sec, nsec) >= RealTime(sec, nsec), true);
Chris@1344 275 }
Chris@1344 276 }
Chris@1344 277 RealTime prev(-3, 0);
Chris@1344 278 for (sec = -2; sec <= 2; sec += 2) {
Chris@1344 279 for (nsec = -1; nsec <= 1; nsec += 1) {
Chris@1262 280
Chris@1344 281 RealTime curr(sec, nsec);
Chris@1262 282
Chris@1344 283 QCOMPARE(prev < curr, true);
Chris@1344 284 QCOMPARE(prev > curr, false);
Chris@1344 285 QCOMPARE(prev == curr, false);
Chris@1344 286 QCOMPARE(prev != curr, true);
Chris@1344 287 QCOMPARE(prev <= curr, true);
Chris@1344 288 QCOMPARE(prev >= curr, false);
Chris@1262 289
Chris@1344 290 QCOMPARE(curr < prev, false);
Chris@1344 291 QCOMPARE(curr > prev, true);
Chris@1344 292 QCOMPARE(curr == prev, false);
Chris@1344 293 QCOMPARE(curr != prev, true);
Chris@1344 294 QCOMPARE(curr <= prev, false);
Chris@1344 295 QCOMPARE(curr >= prev, true);
Chris@1262 296
Chris@1344 297 prev = curr;
Chris@1344 298 }
Chris@1344 299 }
Chris@1262 300 }
Chris@1262 301
Chris@1262 302 void frame()
Chris@1262 303 {
Chris@1262 304 int frames[] = {
Chris@1262 305 0, 1, 2047, 2048, 6656,
Chris@1262 306 32767, 32768, 44100, 44101,
Chris@1262 307 999999999, 2000000000
Chris@1262 308 };
Chris@1262 309 int n = sizeof(frames)/sizeof(frames[0]);
Chris@1262 310
Chris@1262 311 int rates[] = {
Chris@1262 312 1, 2, 8000, 22050,
Chris@1262 313 44100, 44101, 192000, 2000000001
Chris@1262 314 };
Chris@1262 315 int m = sizeof(rates)/sizeof(rates[0]);
Chris@1262 316
Chris@1262 317 vector<vector<RealTime>> realTimes = {
Chris@1262 318 { { 0, 0 }, { 1, 0 }, { 2047, 0 }, { 2048, 0 },
Chris@1262 319 { 6656, 0 }, { 32767, 0 }, { 32768, 0 }, { 44100, 0 },
Chris@1262 320 { 44101, 0 }, { 999999999, 0 }, { 2000000000, 0 } },
Chris@1262 321 { { 0, 0 }, { 0, 500000000 }, { 1023, 500000000 }, { 1024, 0 },
Chris@1262 322 { 3328, 0 }, { 16383, 500000000 }, { 16384, 0 }, { 22050, 0 },
Chris@1262 323 { 22050, 500000000 }, { 499999999, 500000000 }, { 1000000000, 0 } },
Chris@1262 324 { { 0, 0 }, { 0, 125000 }, { 0, 255875000 }, { 0, 256000000 },
Chris@1262 325 { 0, 832000000 }, { 4, 95875000 }, { 4, 96000000 }, { 5, 512500000 },
Chris@1262 326 { 5, 512625000 }, { 124999, 999875000 }, { 250000, 0 } },
Chris@1262 327 { { 0, 0 }, { 0, 45351 }, { 0, 92834467 }, { 0, 92879819 },
Chris@1262 328 { 0, 301859410 }, { 1, 486031746 }, { 1, 486077098 }, { 2, 0 },
Chris@1262 329 { 2, 45351 }, { 45351, 473877551 }, { 90702, 947845805 } },
Chris@1262 330 { { 0, 0 }, { 0, 22676 }, { 0, 46417234 }, { 0, 46439909 },
Chris@1262 331 { 0, 150929705 }, { 0, 743015873 }, { 0, 743038549 }, { 1, 0 },
Chris@1262 332 { 1, 22676 }, { 22675, 736938776 }, { 45351, 473922902 } },
Chris@1262 333 { { 0, 0 }, { 0, 22675 }, { 0, 46416181 }, { 0, 46438856 },
Chris@1262 334 { 0, 150926283 }, { 0, 742999025 }, { 0, 743021700 }, { 0, 999977325 },
Chris@1262 335 { 1, 0 }, { 22675, 222761389 }, { 45350, 445568128 } },
Chris@1262 336 { { 0, 0 }, { 0, 5208 }, { 0, 10661458 }, { 0, 10666667 },
Chris@1262 337 { 0, 34666667 }, { 0, 170661458 }, { 0, 170666667 }, { 0, 229687500 },
Chris@1262 338 { 0, 229692708 }, { 5208, 333328125 }, { 10416, 666666667 } },
Chris@1262 339 { { 0, 0 }, { 0, 0 }, { 0, 1023 }, { 0, 1024 },
Chris@1262 340 { 0, 3328 }, { 0, 16383 }, { 0, 16384 }, { 0, 22050 },
Chris@1262 341 { 0, 22050 }, { 0, 499999999 }, { 1, 0 } }
Chris@1262 342 };
Chris@1262 343
Chris@1262 344 for (int i = 0; i < n; ++i) {
Chris@1262 345 frame_type frame = frames[i];
Chris@1262 346 for (int j = 0; j < m; ++j) {
Chris@1262 347 int rate = rates[j];
Chris@1262 348
Chris@1262 349 RealTime rt = RealTime::frame2RealTime(frame, rate);
Chris@1262 350 QCOMPARE(rt.sec, realTimes[j][i].sec);
Chris@1262 351 QCOMPARE(rt.nsec, realTimes[j][i].nsec);
Chris@1262 352
Chris@1262 353 frame_type conv = RealTime::realTime2Frame(rt, rate);
Chris@1262 354
Chris@1262 355 rt = RealTime::frame2RealTime(-frame, rate);
Chris@1262 356 frame_type negconv = RealTime::realTime2Frame(rt, rate);
Chris@1262 357
Chris@1262 358 if (rate > ONE_BILLION) {
Chris@1263 359 // We don't have enough precision in RealTime
Chris@1262 360 // for this absurd sample rate, so a round trip
Chris@1262 361 // conversion may round
Chris@1262 362 QVERIFY(abs(frame - conv) < 2);
Chris@1262 363 QVERIFY(abs(-frame - negconv) < 2);
Chris@1262 364 } else {
Chris@1262 365 QCOMPARE(conv, frame);
Chris@1262 366 QCOMPARE(negconv, -frame);
Chris@1262 367 }
Chris@1262 368 }
Chris@1262 369 }
Chris@1262 370 }
Chris@1262 371
Chris@1262 372 // Our own RealTime has toMSText, toFrameText, toSecText
Chris@1262 373
Chris@1262 374 void toText()
Chris@1262 375 {
Chris@1262 376 // we want to use QStrings, because then the Qt test library
Chris@1262 377 // will print out any conflicts. The compareTexts function
Chris@1262 378 // does this for us
Chris@1262 379
Chris@1262 380 int halfSec = ONE_BILLION/2; // nsec
Chris@1262 381
Chris@1262 382 RealTime rt = RealTime(0, 0);
Chris@1262 383 compareTexts(rt.toMSText(false, false), "0");
Chris@1262 384 compareTexts(rt.toMSText(true, false), "0.000");
Chris@1262 385 compareTexts(rt.toMSText(false, true), "0");
Chris@1262 386 compareTexts(rt.toMSText(true, true), "0.000");
Chris@1262 387 compareTexts(rt.toFrameText(24, false), "0:00");
Chris@1262 388 compareTexts(rt.toFrameText(24, true), "0:00");
Chris@1262 389 compareTexts(rt.toSecText(), "0s");
Chris@1262 390
Chris@1262 391 rt = RealTime(1, halfSec);
Chris@1262 392 compareTexts(rt.toMSText(false, false), "1.5");
Chris@1262 393 compareTexts(rt.toMSText(true, false), "1.500");
Chris@1262 394 compareTexts(rt.toMSText(false, true), "1.5");
Chris@1262 395 compareTexts(rt.toMSText(true, true), "1.500");
Chris@1262 396 compareTexts(rt.toFrameText(24, false), "1:12");
Chris@1262 397 compareTexts(rt.toFrameText(24, true), "1:12");
Chris@1262 398 compareTexts(rt.toFrameText(25, false), "1:12");
Chris@1262 399 compareTexts(rt.toFrameText(25, true), "1:12");
Chris@1262 400 compareTexts(rt.toSecText(), "1s");
Chris@1262 401
Chris@1262 402 rt = RealTime::fromSeconds(-1.5);
Chris@1262 403 compareTexts(rt.toMSText(false, false), "-1.5");
Chris@1262 404 compareTexts(rt.toMSText(true, false), "-1.500");
Chris@1262 405 compareTexts(rt.toMSText(false, true), "-1.5");
Chris@1262 406 compareTexts(rt.toMSText(true, true), "-1.500");
Chris@1262 407 compareTexts(rt.toFrameText(24, false), "-1:12");
Chris@1262 408 compareTexts(rt.toFrameText(24, true), "-1:12");
Chris@1262 409 compareTexts(rt.toSecText(), "-1s");
Chris@1262 410
Chris@1262 411 rt = RealTime(1, 1000);
Chris@1262 412 compareTexts(rt.toMSText(false, false), "1");
Chris@1262 413 compareTexts(rt.toFrameText(24, false), "1:00");
Chris@1262 414 compareTexts(rt.toFrameText(ONE_MILLION, false), "1:000001");
Chris@1262 415 compareTexts(rt.toSecText(), "1s");
Chris@1262 416
Chris@1262 417 rt = RealTime(1, 100000);
Chris@1262 418 compareTexts(rt.toFrameText(ONE_MILLION, false), "1:000100");
Chris@1262 419 compareTexts(rt.toSecText(), "1s");
Chris@1262 420
Chris@1262 421 rt = RealTime::fromSeconds(60);
Chris@1262 422 compareTexts(rt.toMSText(false, false), "60");
Chris@1262 423 compareTexts(rt.toMSText(true, false), "60.000");
Chris@1262 424 compareTexts(rt.toMSText(false, true), "1:00");
Chris@1262 425 compareTexts(rt.toMSText(true, true), "1:00.000");
Chris@1262 426 compareTexts(rt.toFrameText(24, false), "60:00");
Chris@1262 427 compareTexts(rt.toFrameText(24, true), "1:00:00");
Chris@1262 428 compareTexts(rt.toSecText(), "1:00");
Chris@1262 429
Chris@1262 430 rt = RealTime::fromSeconds(61.05);
Chris@1262 431 compareTexts(rt.toMSText(false, false), "61.05");
Chris@1262 432 compareTexts(rt.toMSText(true, false), "61.050");
Chris@1262 433 compareTexts(rt.toMSText(false, true), "1:01.05");
Chris@1262 434 compareTexts(rt.toMSText(true, true), "1:01.050");
Chris@1262 435 compareTexts(rt.toFrameText(24, false), "61:01");
Chris@1262 436 compareTexts(rt.toFrameText(24, true), "1:01:01");
Chris@1262 437 compareTexts(rt.toSecText(), "1:01");
Chris@1262 438
Chris@1262 439 rt = RealTime::fromSeconds(601.05);
Chris@1262 440 compareTexts(rt.toMSText(false, false), "601.05");
Chris@1262 441 compareTexts(rt.toMSText(true, false), "601.050");
Chris@1262 442 compareTexts(rt.toMSText(false, true), "10:01.05");
Chris@1262 443 compareTexts(rt.toMSText(true, true), "10:01.050");
Chris@1262 444 compareTexts(rt.toFrameText(24, false), "601:01");
Chris@1262 445 compareTexts(rt.toFrameText(24, true), "10:01:01");
Chris@1262 446 compareTexts(rt.toSecText(), "10:01");
Chris@1262 447
Chris@1262 448 rt = RealTime::fromSeconds(3600);
Chris@1262 449 compareTexts(rt.toMSText(false, false), "3600");
Chris@1262 450 compareTexts(rt.toMSText(true, false), "3600.000");
Chris@1262 451 compareTexts(rt.toMSText(false, true), "1:00:00");
Chris@1262 452 compareTexts(rt.toMSText(true, true), "1:00:00.000");
Chris@1262 453 compareTexts(rt.toFrameText(24, false), "3600:00");
Chris@1262 454 compareTexts(rt.toFrameText(24, true), "1:00:00:00");
Chris@1262 455 compareTexts(rt.toSecText(), "1:00:00");
Chris@1262 456
Chris@1262 457 // For practical reasons our time display always rounds down
Chris@1262 458 rt = RealTime(3599, ONE_BILLION-1);
Chris@1262 459 compareTexts(rt.toMSText(false, false), "3599.999");
Chris@1262 460 compareTexts(rt.toMSText(true, false), "3599.999");
Chris@1262 461 compareTexts(rt.toMSText(false, true), "59:59.999");
Chris@1262 462 compareTexts(rt.toMSText(true, true), "59:59.999");
Chris@1262 463 compareTexts(rt.toFrameText(24, false), "3599:23");
Chris@1262 464 compareTexts(rt.toFrameText(24, true), "59:59:23");
Chris@1262 465 compareTexts(rt.toSecText(), "59:59");
Chris@1262 466
Chris@1262 467 rt = RealTime::fromSeconds(3600 * 4 + 60 * 5 + 3 + 0.01);
Chris@1262 468 compareTexts(rt.toMSText(false, false), "14703.01");
Chris@1262 469 compareTexts(rt.toMSText(true, false), "14703.010");
Chris@1262 470 compareTexts(rt.toMSText(false, true), "4:05:03.01");
Chris@1262 471 compareTexts(rt.toMSText(true, true), "4:05:03.010");
Chris@1262 472 compareTexts(rt.toFrameText(24, false), "14703:00");
Chris@1262 473 compareTexts(rt.toFrameText(24, true), "4:05:03:00");
Chris@1262 474 compareTexts(rt.toSecText(), "4:05:03");
Chris@1262 475
Chris@1262 476 rt = RealTime::fromSeconds(-(3600 * 4 + 60 * 5 + 3 + 0.01));
Chris@1262 477 compareTexts(rt.toMSText(false, false), "-14703.01");
Chris@1262 478 compareTexts(rt.toMSText(true, false), "-14703.010");
Chris@1262 479 compareTexts(rt.toMSText(false, true), "-4:05:03.01");
Chris@1262 480 compareTexts(rt.toMSText(true, true), "-4:05:03.010");
Chris@1262 481 compareTexts(rt.toFrameText(24, false), "-14703:00");
Chris@1262 482 compareTexts(rt.toFrameText(24, true), "-4:05:03:00");
Chris@1262 483 compareTexts(rt.toSecText(), "-4:05:03");
Chris@1262 484 }
Chris@1262 485 };
Chris@1262 486
Chris@1262 487 #endif
Chris@1262 488