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