annotate base/test/TestVampRealTime.h @ 1290:fa574c909c3d 3.0-integration

Add MAD_BUFFER_GUARD padding at end of mp3 buffer, in order to ensure last frame is decoded successfully (otherwise the decoded audio is truncated). Another thing learned from madplay.
author Chris Cannam
date Thu, 24 Nov 2016 17:06:31 +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