| // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include <math.h> |
| #include <stdlib.h> |
| |
| #include "ppapi/shared_impl/time_conversion.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| |
| namespace ppapi { |
| |
| // Slop we'll allow in two Time "internal values" to consider them equal. |
| // Double conversion can introduce rounding errors. The internal values are in |
| // microseconds, so an error here is very small. |
| static const int kTimeInternalValueSlop = 2; |
| |
| // Same as above in double-precision seconds units. |
| static const double kTimeSecondsSlop = |
| static_cast<double>(kTimeInternalValueSlop) / |
| base::Time::kMicrosecondsPerSecond; |
| |
| TEST(TimeConversion, Time) { |
| // Should be able to round-trip. |
| base::Time now = base::Time::Now(); |
| base::Time converted = ppapi::PPTimeToTime(TimeToPPTime(now)); |
| EXPECT_GE(kTimeInternalValueSlop, |
| abs(static_cast<int>((converted - now).ToInternalValue()))); |
| |
| // Units should be in seconds. |
| base::Time one_second_from_now = now + base::TimeDelta::FromSeconds(1); |
| double converted_one_second_from_now = |
| ppapi::TimeToPPTime(one_second_from_now) - ppapi::TimeToPPTime(now); |
| EXPECT_GE(kTimeSecondsSlop, fabs(converted_one_second_from_now - 1)); |
| } |
| |
| TEST(TimeConversion, EpochTime) { |
| // Should be able to round-trip from epoch time. |
| base::Time epoch = base::Time::UnixEpoch(); |
| base::Time converted = ppapi::PPTimeToTime(TimeToPPTime(epoch)); |
| EXPECT_GE(kTimeInternalValueSlop, |
| abs(static_cast<int>((converted - epoch).ToInternalValue()))); |
| |
| // Units should be in seconds. |
| base::Time one_second_from_epoch = epoch + base::TimeDelta::FromSeconds(1); |
| double converted_one_second_from_epoch = |
| ppapi::TimeToPPTime(one_second_from_epoch) - ppapi::TimeToPPTime(epoch); |
| EXPECT_GE(kTimeSecondsSlop, fabs(converted_one_second_from_epoch - 1)); |
| |
| // Epoch time should be equal to a PP_Time of 0.0. |
| EXPECT_GE(kTimeSecondsSlop, fabs(ppapi::TimeToPPTime(epoch) - 0.0)); |
| EXPECT_GE(kTimeInternalValueSlop, |
| abs(static_cast<int>( |
| (ppapi::PPTimeToTime(0.0) - epoch).ToInternalValue()))); |
| } |
| |
| } // namespace ppapi |