31static const uint64 millisecondsBetweenOscAndJuceEpochs = 2208988800000ULL;
32static const uint64 rawTimeTagRepresentingImmediately = 0x0000000000000001ULL;
45 const uint64 milliseconds = (
uint64)
time.toMilliseconds() + millisecondsBetweenOscAndJuceEpochs;
47 uint64 seconds = milliseconds / 1000;
48 uint32 fractionalPart =
uint32 (4294967.296 * (milliseconds % 1000));
50 rawTimeTag = (seconds << 32) + fractionalPart;
56 const uint64 seconds = rawTimeTag >> 32;
57 const uint32 fractionalPart = (rawTimeTag & 0x00000000FFFFFFFFULL);
59 const auto fractionalPartInMillis = (
double) fractionalPart / 4294967.296;
62 const auto juceTimeInMillis = (
int64) (seconds * 1000)
64 - (
int64) millisecondsBetweenOscAndJuceEpochs;
66 return Time (juceTimeInMillis);
72 return rawTimeTag == rawTimeTagRepresentingImmediately;
79class OSCTimeTagTests final :
public UnitTest
83 :
UnitTest (
"OSCTimeTag class", UnitTestCategories::osc)
86 void runTest()
override
92 expect (tag.isImmediately());
95 OSCTimeTag tag (3535653);
96 expect (! tag.isImmediately());
100 expect (! otherTag.isImmediately());
102 OSCTimeTag copyTag (tag);
103 expect (! copyTag.isImmediately());
106 beginTest (
"Conversion to/from JUCE Time");
110 OSCTimeTag tag (time);
111 expect (! tag.isImmediately());
115 Time
time = tag.toTime();
116 expect (time < Time::getCurrentTime());
119 Time currentTime (Time::currentTimeMillis());
120 double deltaInSeconds = 1.234;
121 RelativeTime delta (deltaInSeconds);
122 Time laterTime = currentTime + delta;
124 OSCTimeTag currentTimeTag (currentTime);
125 OSCTimeTag laterTimeTag (laterTime);
127 uint64 currentTimeTagRaw = currentTimeTag.getRawTimeTag();
128 uint64 laterTimeTagRaw = laterTimeTag.getRawTimeTag();
132 uint64 diff = laterTimeTagRaw - currentTimeTagRaw;
133 double acceptableErrorInSeconds = 0.000001;
135 expect ((
float) diff /
float (1ULL << 32) < deltaInSeconds + acceptableErrorInSeconds );
136 expect ((
float) diff /
float (1ULL << 32) > deltaInSeconds - acceptableErrorInSeconds );
140 Time currentTime2 = currentTimeTag.toTime();
141 Time laterTime2 = laterTimeTag.toTime();
142 RelativeTime delta2 = laterTime2 - currentTime2;
144 expect (currentTime2 == currentTime);
145 expect (laterTime2 == laterTime);
146 expect (delta2 == delta);
151static OSCTimeTagTests OSCTimeTagUnitTests;
Holds an absolute date and time.
This is a base class for classes that perform a unit test.
unsigned long long uint64
A platform-independent 64-bit unsigned integer type.
unsigned int uint32
A platform-independent 32-bit unsigned integer type.
int roundToInt(const FloatType value) noexcept
Fast floating-point-to-integer conversion.
long long int64
A platform-independent 64-bit integer type.