annotate base/test/TestVampRealTime.h @ 1333:46670bb4a290 3.0-integration

Merge from branch svg, and thus (in some subrepos) from levelpanwidget
author Chris Cannam
date Mon, 19 Dec 2016 16:34:38 +0000
parents abfc498c52bc
children 980afe3f1a76
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_VAMP_REALTIME_H
Chris@1262 16
Chris@1262 17 #include <QObject>
Chris@1262 18 #include <QtTest>
Chris@1262 19 #include <QDir>
Chris@1262 20
Chris@1262 21 #include <iostream>
Chris@1262 22
Chris@1262 23 #include <vamp-hostsdk/RealTime.h>
Chris@1262 24
Chris@1262 25 using namespace std;
Chris@1262 26
Chris@1262 27 #define ONE_MILLION 1000000
Chris@1262 28 #define ONE_BILLION 1000000000
Chris@1262 29
Chris@1262 30 class TestVampRealTime : public QObject
Chris@1262 31 {
Chris@1262 32 Q_OBJECT
Chris@1262 33
Chris@1262 34 void compareTexts(string s, const char *e) {
Chris@1262 35 QCOMPARE(QString(s.c_str()), QString(e));
Chris@1262 36 }
Chris@1262 37
Chris@1262 38 typedef Vamp::RealTime RealTime;
Chris@1262 39 typedef long frame_type;
Chris@1262 40
Chris@1262 41 private slots:
Chris@1262 42
Chris@1262 43 void zero()
Chris@1262 44 {
Chris@1262 45 QCOMPARE(RealTime(0, 0), RealTime::zeroTime);
Chris@1262 46 QCOMPARE(RealTime(0, 0).sec, 0);
Chris@1262 47 QCOMPARE(RealTime(0, 0).nsec, 0);
Chris@1262 48 QCOMPARE(RealTime(0, 0).msec(), 0);
Chris@1262 49 QCOMPARE(RealTime(0, 0).usec(), 0);
Chris@1262 50 }
Chris@1262 51
Chris@1262 52 void ctor()
Chris@1262 53 {
Chris@1262 54 QCOMPARE(RealTime(0, 0), RealTime(0, 0));
Chris@1262 55
Chris@1262 56 // wraparounds
Chris@1262 57 QCOMPARE(RealTime(0, ONE_BILLION/2), RealTime(1, -ONE_BILLION/2));
Chris@1262 58 QCOMPARE(RealTime(0, -ONE_BILLION/2), RealTime(-1, ONE_BILLION/2));
Chris@1262 59
Chris@1262 60 QCOMPARE(RealTime(1, ONE_BILLION), RealTime(2, 0));
Chris@1262 61 QCOMPARE(RealTime(1, -ONE_BILLION), RealTime(0, 0));
Chris@1262 62 QCOMPARE(RealTime(-1, ONE_BILLION), RealTime(0, 0));
Chris@1262 63 QCOMPARE(RealTime(-1, -ONE_BILLION), RealTime(-2, 0));
Chris@1262 64
Chris@1262 65 QCOMPARE(RealTime(2, -ONE_BILLION*2), RealTime(0, 0));
Chris@1262 66 QCOMPARE(RealTime(2, -ONE_BILLION/2), RealTime(1, ONE_BILLION/2));
Chris@1262 67
Chris@1262 68 QCOMPARE(RealTime(-2, ONE_BILLION*2), RealTime(0, 0));
Chris@1262 69 QCOMPARE(RealTime(-2, ONE_BILLION/2), RealTime(-1, -ONE_BILLION/2));
Chris@1262 70
Chris@1262 71 QCOMPARE(RealTime(0, 1).sec, 0);
Chris@1262 72 QCOMPARE(RealTime(0, 1).nsec, 1);
Chris@1262 73 QCOMPARE(RealTime(0, -1).sec, 0);
Chris@1262 74 QCOMPARE(RealTime(0, -1).nsec, -1);
Chris@1262 75 QCOMPARE(RealTime(1, -1).sec, 0);
Chris@1262 76 QCOMPARE(RealTime(1, -1).nsec, ONE_BILLION-1);
Chris@1262 77 QCOMPARE(RealTime(-1, 1).sec, 0);
Chris@1262 78 QCOMPARE(RealTime(-1, 1).nsec, -ONE_BILLION+1);
Chris@1262 79 QCOMPARE(RealTime(-1, -1).sec, -1);
Chris@1262 80 QCOMPARE(RealTime(-1, -1).nsec, -1);
Chris@1262 81
Chris@1262 82 QCOMPARE(RealTime(2, -ONE_BILLION*2).sec, 0);
Chris@1262 83 QCOMPARE(RealTime(2, -ONE_BILLION*2).nsec, 0);
Chris@1262 84 QCOMPARE(RealTime(2, -ONE_BILLION/2).sec, 1);
Chris@1262 85 QCOMPARE(RealTime(2, -ONE_BILLION/2).nsec, ONE_BILLION/2);
Chris@1262 86
Chris@1262 87 QCOMPARE(RealTime(-2, ONE_BILLION*2).sec, 0);
Chris@1262 88 QCOMPARE(RealTime(-2, ONE_BILLION*2).nsec, 0);
Chris@1262 89 QCOMPARE(RealTime(-2, ONE_BILLION/2).sec, -1);
Chris@1262 90 QCOMPARE(RealTime(-2, ONE_BILLION/2).nsec, -ONE_BILLION/2);
Chris@1262 91 }
Chris@1262 92
Chris@1262 93 void fromSeconds()
Chris@1262 94 {
Chris@1262 95 QCOMPARE(RealTime::fromSeconds(0), RealTime(0, 0));
Chris@1262 96
Chris@1262 97 QCOMPARE(RealTime::fromSeconds(0.5).sec, 0);
Chris@1262 98 QCOMPARE(RealTime::fromSeconds(0.5).nsec, ONE_BILLION/2);
Chris@1262 99 QCOMPARE(RealTime::fromSeconds(0.5).usec(), ONE_MILLION/2);
Chris@1262 100 QCOMPARE(RealTime::fromSeconds(0.5).msec(), 500);
Chris@1262 101
Chris@1262 102 QCOMPARE(RealTime::fromSeconds(0.5), RealTime(0, ONE_BILLION/2));
Chris@1262 103 QCOMPARE(RealTime::fromSeconds(1), RealTime(1, 0));
Chris@1262 104 QCOMPARE(RealTime::fromSeconds(1.5), RealTime(1, ONE_BILLION/2));
Chris@1262 105
Chris@1262 106 QCOMPARE(RealTime::fromSeconds(-0.5).sec, 0);
Chris@1262 107 QCOMPARE(RealTime::fromSeconds(-0.5).nsec, -ONE_BILLION/2);
Chris@1262 108 QCOMPARE(RealTime::fromSeconds(-0.5).usec(), -ONE_MILLION/2);
Chris@1262 109 QCOMPARE(RealTime::fromSeconds(-0.5).msec(), -500);
Chris@1262 110
Chris@1262 111 QCOMPARE(RealTime::fromSeconds(-1.5).sec, -1);
Chris@1262 112 QCOMPARE(RealTime::fromSeconds(-1.5).nsec, -ONE_BILLION/2);
Chris@1262 113 QCOMPARE(RealTime::fromSeconds(-1.5).usec(), -ONE_MILLION/2);
Chris@1262 114 QCOMPARE(RealTime::fromSeconds(-1.5).msec(), -500);
Chris@1262 115
Chris@1262 116 QCOMPARE(RealTime::fromSeconds(-0.5), RealTime(0, -ONE_BILLION/2));
Chris@1262 117 QCOMPARE(RealTime::fromSeconds(-1), RealTime(-1, 0));
Chris@1262 118 QCOMPARE(RealTime::fromSeconds(-1.5), RealTime(-1, -ONE_BILLION/2));
Chris@1262 119 }
Chris@1262 120
Chris@1262 121 void fromMilliseconds()
Chris@1262 122 {
Chris@1262 123 QCOMPARE(RealTime::fromMilliseconds(0), RealTime(0, 0));
Chris@1262 124 QCOMPARE(RealTime::fromMilliseconds(500), RealTime(0, ONE_BILLION/2));
Chris@1262 125 QCOMPARE(RealTime::fromMilliseconds(1000), RealTime(1, 0));
Chris@1262 126 QCOMPARE(RealTime::fromMilliseconds(1500), RealTime(1, ONE_BILLION/2));
Chris@1262 127
Chris@1262 128 QCOMPARE(RealTime::fromMilliseconds(-0), RealTime(0, 0));
Chris@1262 129 QCOMPARE(RealTime::fromMilliseconds(-500), RealTime(0, -ONE_BILLION/2));
Chris@1262 130 QCOMPARE(RealTime::fromMilliseconds(-1000), RealTime(-1, 0));
Chris@1262 131 QCOMPARE(RealTime::fromMilliseconds(-1500), RealTime(-1, -ONE_BILLION/2));
Chris@1262 132 }
Chris@1262 133
Chris@1262 134 void fromTimeval()
Chris@1262 135 {
Chris@1262 136 struct timeval tv;
Chris@1262 137
Chris@1262 138 tv.tv_sec = 0; tv.tv_usec = 0;
Chris@1262 139 QCOMPARE(RealTime::fromTimeval(tv), RealTime(0, 0));
Chris@1262 140 tv.tv_sec = 0; tv.tv_usec = ONE_MILLION/2;
Chris@1262 141 QCOMPARE(RealTime::fromTimeval(tv), RealTime(0, ONE_BILLION/2));
Chris@1262 142 tv.tv_sec = 1; tv.tv_usec = 0;
Chris@1262 143 QCOMPARE(RealTime::fromTimeval(tv), RealTime(1, 0));
Chris@1262 144 tv.tv_sec = 1; tv.tv_usec = ONE_MILLION/2;
Chris@1262 145 QCOMPARE(RealTime::fromTimeval(tv), RealTime(1, ONE_BILLION/2));
Chris@1262 146
Chris@1262 147 tv.tv_sec = 0; tv.tv_usec = -ONE_MILLION/2;
Chris@1262 148 QCOMPARE(RealTime::fromTimeval(tv), RealTime(0, -ONE_BILLION/2));
Chris@1262 149 tv.tv_sec = -1; tv.tv_usec = 0;
Chris@1262 150 QCOMPARE(RealTime::fromTimeval(tv), RealTime(-1, 0));
Chris@1262 151 tv.tv_sec = -1; tv.tv_usec = -ONE_MILLION/2;
Chris@1262 152 QCOMPARE(RealTime::fromTimeval(tv), RealTime(-1, -ONE_BILLION/2));
Chris@1262 153 }
Chris@1262 154
Chris@1262 155 void assign()
Chris@1262 156 {
Chris@1262 157 RealTime r;
Chris@1262 158 r = RealTime(0, 0);
Chris@1262 159 QCOMPARE(r, RealTime::zeroTime);
Chris@1262 160 r = RealTime(0, ONE_BILLION/2);
Chris@1262 161 QCOMPARE(r.sec, 0);
Chris@1262 162 QCOMPARE(r.nsec, ONE_BILLION/2);
Chris@1262 163 r = RealTime(-1, -ONE_BILLION/2);
Chris@1262 164 QCOMPARE(r.sec, -1);
Chris@1262 165 QCOMPARE(r.nsec, -ONE_BILLION/2);
Chris@1262 166 }
Chris@1262 167
Chris@1262 168 void plus()
Chris@1262 169 {
Chris@1262 170 QCOMPARE(RealTime(0, 0) + RealTime(0, 0), RealTime(0, 0));
Chris@1262 171
Chris@1262 172 QCOMPARE(RealTime(0, 0) + RealTime(0, ONE_BILLION/2), RealTime(0, ONE_BILLION/2));
Chris@1262 173 QCOMPARE(RealTime(0, ONE_BILLION/2) + RealTime(0, ONE_BILLION/2), RealTime(1, 0));
Chris@1262 174 QCOMPARE(RealTime(1, 0) + RealTime(0, ONE_BILLION/2), RealTime(1, ONE_BILLION/2));
Chris@1262 175
Chris@1262 176 QCOMPARE(RealTime(0, 0) + RealTime(0, -ONE_BILLION/2), RealTime(0, -ONE_BILLION/2));
Chris@1262 177 QCOMPARE(RealTime(0, -ONE_BILLION/2) + RealTime(0, -ONE_BILLION/2), RealTime(-1, 0));
Chris@1262 178 QCOMPARE(RealTime(-1, 0) + RealTime(0, -ONE_BILLION/2), RealTime(-1, -ONE_BILLION/2));
Chris@1262 179
Chris@1262 180 QCOMPARE(RealTime(1, 0) + RealTime(0, -ONE_BILLION/2), RealTime(0, ONE_BILLION/2));
Chris@1262 181 QCOMPARE(RealTime(1, 0) + RealTime(0, -ONE_BILLION/2) + RealTime(0, -ONE_BILLION/2), RealTime(0, 0));
Chris@1262 182 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 183
Chris@1262 184 QCOMPARE(RealTime(0, ONE_BILLION/2) + RealTime(-1, 0), RealTime(0, -ONE_BILLION/2));
Chris@1262 185 QCOMPARE(RealTime(0, -ONE_BILLION/2) + RealTime(1, 0), RealTime(0, ONE_BILLION/2));
Chris@1262 186 }
Chris@1262 187
Chris@1262 188 void minus()
Chris@1262 189 {
Chris@1262 190 QCOMPARE(RealTime(0, 0) - RealTime(0, 0), RealTime(0, 0));
Chris@1262 191
Chris@1262 192 QCOMPARE(RealTime(0, 0) - RealTime(0, ONE_BILLION/2), RealTime(0, -ONE_BILLION/2));
Chris@1262 193 QCOMPARE(RealTime(0, ONE_BILLION/2) - RealTime(0, ONE_BILLION/2), RealTime(0, 0));
Chris@1262 194 QCOMPARE(RealTime(1, 0) - RealTime(0, ONE_BILLION/2), RealTime(0, ONE_BILLION/2));
Chris@1262 195
Chris@1262 196 QCOMPARE(RealTime(0, 0) - RealTime(0, -ONE_BILLION/2), RealTime(0, ONE_BILLION/2));
Chris@1262 197 QCOMPARE(RealTime(0, -ONE_BILLION/2) - RealTime(0, -ONE_BILLION/2), RealTime(0, 0));
Chris@1262 198 QCOMPARE(RealTime(-1, 0) - RealTime(0, -ONE_BILLION/2), RealTime(0, -ONE_BILLION/2));
Chris@1262 199
Chris@1262 200 QCOMPARE(RealTime(1, 0) - RealTime(0, -ONE_BILLION/2), RealTime(1, ONE_BILLION/2));
Chris@1262 201 QCOMPARE(RealTime(1, 0) - RealTime(0, -ONE_BILLION/2) - RealTime(0, -ONE_BILLION/2), RealTime(2, 0));
Chris@1262 202 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 203
Chris@1262 204 QCOMPARE(RealTime(0, ONE_BILLION/2) - RealTime(-1, 0), RealTime(1, ONE_BILLION/2));
Chris@1262 205 QCOMPARE(RealTime(0, -ONE_BILLION/2) - RealTime(1, 0), RealTime(-1, -ONE_BILLION/2));
Chris@1262 206 }
Chris@1262 207
Chris@1262 208 void negate()
Chris@1262 209 {
Chris@1262 210 QCOMPARE(-RealTime(0, 0), RealTime(0, 0));
Chris@1262 211 QCOMPARE(-RealTime(1, 0), RealTime(-1, 0));
Chris@1262 212 QCOMPARE(-RealTime(1, ONE_BILLION/2), RealTime(-1, -ONE_BILLION/2));
Chris@1262 213 QCOMPARE(-RealTime(-1, -ONE_BILLION/2), RealTime(1, ONE_BILLION/2));
Chris@1262 214 }
Chris@1262 215
Chris@1262 216 void compare()
Chris@1262 217 {
Chris@1262 218 int sec, nsec;
Chris@1262 219 for (sec = -2; sec <= 2; sec += 2) {
Chris@1262 220 for (nsec = -1; nsec <= 1; nsec += 1) {
Chris@1262 221 QCOMPARE(RealTime(sec, nsec) < RealTime(sec, nsec), false);
Chris@1262 222 QCOMPARE(RealTime(sec, nsec) > RealTime(sec, nsec), false);
Chris@1262 223 QCOMPARE(RealTime(sec, nsec) == RealTime(sec, nsec), true);
Chris@1262 224 QCOMPARE(RealTime(sec, nsec) != RealTime(sec, nsec), false);
Chris@1262 225 QCOMPARE(RealTime(sec, nsec) <= RealTime(sec, nsec), true);
Chris@1262 226 QCOMPARE(RealTime(sec, nsec) >= RealTime(sec, nsec), true);
Chris@1262 227 }
Chris@1262 228 }
Chris@1262 229 RealTime prev(-3, 0);
Chris@1262 230 for (sec = -2; sec <= 2; sec += 2) {
Chris@1262 231 for (nsec = -1; nsec <= 1; nsec += 1) {
Chris@1262 232
Chris@1262 233 RealTime curr(sec, nsec);
Chris@1262 234
Chris@1262 235 QCOMPARE(prev < curr, true);
Chris@1262 236 QCOMPARE(prev > curr, false);
Chris@1262 237 QCOMPARE(prev == curr, false);
Chris@1262 238 QCOMPARE(prev != curr, true);
Chris@1262 239 QCOMPARE(prev <= curr, true);
Chris@1262 240 QCOMPARE(prev >= curr, false);
Chris@1262 241
Chris@1262 242 QCOMPARE(curr < prev, false);
Chris@1262 243 QCOMPARE(curr > prev, true);
Chris@1262 244 QCOMPARE(curr == prev, false);
Chris@1262 245 QCOMPARE(curr != prev, true);
Chris@1262 246 QCOMPARE(curr <= prev, false);
Chris@1262 247 QCOMPARE(curr >= prev, true);
Chris@1262 248
Chris@1262 249 prev = curr;
Chris@1262 250 }
Chris@1262 251 }
Chris@1262 252 }
Chris@1262 253
Chris@1262 254 void frame()
Chris@1262 255 {
Chris@1262 256 int frames[] = {
Chris@1262 257 0, 1, 2047, 2048, 6656,
Chris@1262 258 32767, 32768, 44100, 44101,
Chris@1262 259 999999999, 2000000000
Chris@1262 260 };
Chris@1262 261 int n = sizeof(frames)/sizeof(frames[0]);
Chris@1262 262
Chris@1262 263 int rates[] = {
Chris@1262 264 1, 2, 8000, 22050,
Chris@1262 265 44100, 44101, 192000, 2000000001
Chris@1262 266 };
Chris@1262 267 int m = sizeof(rates)/sizeof(rates[0]);
Chris@1262 268
Chris@1262 269 vector<vector<RealTime>> realTimes = {
Chris@1262 270 { { 0, 0 }, { 1, 0 }, { 2047, 0 }, { 2048, 0 },
Chris@1262 271 { 6656, 0 }, { 32767, 0 }, { 32768, 0 }, { 44100, 0 },
Chris@1262 272 { 44101, 0 }, { 999999999, 0 }, { 2000000000, 0 } },
Chris@1262 273 { { 0, 0 }, { 0, 500000000 }, { 1023, 500000000 }, { 1024, 0 },
Chris@1262 274 { 3328, 0 }, { 16383, 500000000 }, { 16384, 0 }, { 22050, 0 },
Chris@1262 275 { 22050, 500000000 }, { 499999999, 500000000 }, { 1000000000, 0 } },
Chris@1262 276 { { 0, 0 }, { 0, 125000 }, { 0, 255875000 }, { 0, 256000000 },
Chris@1262 277 { 0, 832000000 }, { 4, 95875000 }, { 4, 96000000 }, { 5, 512500000 },
Chris@1262 278 { 5, 512625000 }, { 124999, 999875000 }, { 250000, 0 } },
Chris@1262 279 { { 0, 0 }, { 0, 45351 }, { 0, 92834467 }, { 0, 92879819 },
Chris@1262 280 { 0, 301859410 }, { 1, 486031746 }, { 1, 486077098 }, { 2, 0 },
Chris@1262 281 { 2, 45351 }, { 45351, 473877551 }, { 90702, 947845805 } },
Chris@1262 282 { { 0, 0 }, { 0, 22676 }, { 0, 46417234 }, { 0, 46439909 },
Chris@1262 283 { 0, 150929705 }, { 0, 743015873 }, { 0, 743038549 }, { 1, 0 },
Chris@1262 284 { 1, 22676 }, { 22675, 736938776 }, { 45351, 473922902 } },
Chris@1262 285 { { 0, 0 }, { 0, 22675 }, { 0, 46416181 }, { 0, 46438856 },
Chris@1262 286 { 0, 150926283 }, { 0, 742999025 }, { 0, 743021700 }, { 0, 999977325 },
Chris@1262 287 { 1, 0 }, { 22675, 222761389 }, { 45350, 445568128 } },
Chris@1262 288 { { 0, 0 }, { 0, 5208 }, { 0, 10661458 }, { 0, 10666667 },
Chris@1262 289 { 0, 34666667 }, { 0, 170661458 }, { 0, 170666667 }, { 0, 229687500 },
Chris@1262 290 { 0, 229692708 }, { 5208, 333328125 }, { 10416, 666666667 } },
Chris@1262 291 { { 0, 0 }, { 0, 0 }, { 0, 1023 }, { 0, 1024 },
Chris@1262 292 { 0, 3328 }, { 0, 16383 }, { 0, 16384 }, { 0, 22050 },
Chris@1262 293 { 0, 22050 }, { 0, 499999999 }, { 1, 0 } }
Chris@1262 294 };
Chris@1262 295
Chris@1262 296 for (int i = 0; i < n; ++i) {
Chris@1262 297 frame_type frame = frames[i];
Chris@1262 298 for (int j = 0; j < m; ++j) {
Chris@1262 299 int rate = rates[j];
Chris@1262 300
Chris@1262 301 RealTime rt = RealTime::frame2RealTime(frame, rate);
Chris@1262 302 QCOMPARE(rt.sec, realTimes[j][i].sec);
Chris@1262 303 QCOMPARE(rt.nsec, realTimes[j][i].nsec);
Chris@1262 304
Chris@1262 305 frame_type conv = RealTime::realTime2Frame(rt, rate);
Chris@1262 306
Chris@1262 307 rt = RealTime::frame2RealTime(-frame, rate);
Chris@1262 308 frame_type negconv = RealTime::realTime2Frame(rt, rate);
Chris@1262 309
Chris@1262 310 if (rate > ONE_BILLION) {
Chris@1263 311 // We don't have enough precision in RealTime
Chris@1262 312 // for this absurd sample rate, so a round trip
Chris@1262 313 // conversion may round
Chris@1262 314 QVERIFY(abs(frame - conv) < 2);
Chris@1262 315 QVERIFY(abs(-frame - negconv) < 2);
Chris@1262 316 } else {
Chris@1262 317 QCOMPARE(conv, frame);
Chris@1262 318 QCOMPARE(negconv, -frame);
Chris@1262 319 }
Chris@1262 320 }
Chris@1262 321 }
Chris@1262 322 }
Chris@1262 323
Chris@1262 324 // Vamp SDK version just has toText, which is like our own
Chris@1262 325 // toMSText with true for its second arg
Chris@1262 326
Chris@1262 327 void toText()
Chris@1262 328 {
Chris@1262 329 // we want to use QStrings, because then the Qt test library
Chris@1262 330 // will print out any conflicts. The compareTexts function
Chris@1262 331 // does this for us
Chris@1262 332
Chris@1262 333 int halfSec = ONE_BILLION/2; // nsec
Chris@1262 334
Chris@1262 335 RealTime rt = RealTime(0, 0);
Chris@1262 336 compareTexts(rt.toText(false), "0");
Chris@1262 337 compareTexts(rt.toText(true), "0.000");
Chris@1262 338
Chris@1262 339 rt = RealTime(1, halfSec);
Chris@1262 340 compareTexts(rt.toText(false), "1.5");
Chris@1262 341 compareTexts(rt.toText(true), "1.500");
Chris@1262 342
Chris@1262 343 rt = RealTime::fromSeconds(-1.5);
Chris@1262 344 compareTexts(rt.toText(false), "-1.5");
Chris@1262 345 compareTexts(rt.toText(true), "-1.500");
Chris@1262 346
Chris@1262 347 rt = RealTime::fromSeconds(60);
Chris@1262 348 compareTexts(rt.toText(false), "1:00");
Chris@1262 349 compareTexts(rt.toText(true), "1:00.000");
Chris@1262 350
Chris@1262 351 rt = RealTime::fromSeconds(61.05);
Chris@1262 352 compareTexts(rt.toText(false), "1:01.05");
Chris@1262 353 compareTexts(rt.toText(true), "1:01.050");
Chris@1262 354
Chris@1262 355 rt = RealTime::fromSeconds(601.05);
Chris@1262 356 compareTexts(rt.toText(false), "10:01.05");
Chris@1262 357 compareTexts(rt.toText(true), "10:01.050");
Chris@1262 358
Chris@1262 359 rt = RealTime::fromSeconds(3600);
Chris@1262 360 compareTexts(rt.toText(false), "1:00:00");
Chris@1262 361 compareTexts(rt.toText(true), "1:00:00.000");
Chris@1262 362
Chris@1262 363 // For practical reasons our time display always rounds down
Chris@1262 364 rt = RealTime(3599, ONE_BILLION-1);
Chris@1262 365 compareTexts(rt.toText(false), "59:59.999");
Chris@1262 366 compareTexts(rt.toText(true), "59:59.999");
Chris@1262 367
Chris@1262 368 rt = RealTime::fromSeconds(3600 * 4 + 60 * 5 + 3 + 0.01);
Chris@1262 369 compareTexts(rt.toText(false), "4:05:03.01");
Chris@1262 370 compareTexts(rt.toText(true), "4:05:03.010");
Chris@1262 371
Chris@1262 372 rt = RealTime::fromSeconds(-(3600 * 4 + 60 * 5 + 3 + 0.01));
Chris@1262 373 compareTexts(rt.toText(false), "-4:05:03.01");
Chris@1262 374 compareTexts(rt.toText(true), "-4:05:03.010");
Chris@1262 375 }
Chris@1262 376 };
Chris@1262 377
Chris@1262 378 #endif
Chris@1262 379