25 #include "../TimeTest.h"
28 namespace astrotypes {
42 std::chrono::seconds chrono_seconds(10);
43 std::chrono::milliseconds chrono_milliseconds(1000);
46 ASSERT_EQ(chrono_seconds.count(), local_seconds.value());
48 ASSERT_EQ(1, local_seconds.value());
53 boost::units::quantity<Seconds, double> b(10 * seconds);
54 const std::chrono::seconds chrono_seconds(10);
56 ASSERT_TRUE(chrono_seconds == b);
57 ASSERT_TRUE(b == chrono_seconds);
58 ASSERT_FALSE(chrono_seconds != b);
59 ASSERT_FALSE(b != chrono_seconds);
65 boost::units::quantity<Seconds, double> b(10 * seconds);
66 ASSERT_FALSE(std::chrono::milliseconds(10001) < b);
67 ASSERT_FALSE(std::chrono::milliseconds(10000) < b);
68 ASSERT_TRUE(std::chrono::milliseconds(9999) < b);
70 ASSERT_FALSE(std::chrono::seconds(11) < b);
71 ASSERT_FALSE(std::chrono::seconds(10) < b);
72 ASSERT_TRUE(std::chrono::seconds(9) < b);
77 boost::units::quantity<Seconds, double> b(10 * seconds);
78 ASSERT_FALSE(std::chrono::milliseconds(10001) <= b);
79 ASSERT_TRUE(std::chrono::milliseconds(10000) <= b);
80 ASSERT_TRUE(std::chrono::milliseconds(9999) <= b);
82 ASSERT_FALSE(std::chrono::seconds(11) <= b);
83 ASSERT_TRUE(std::chrono::seconds(10) <= b);
84 ASSERT_TRUE(std::chrono::seconds(9) <= b);
89 boost::units::quantity<Seconds, double> b(10 * seconds);
90 ASSERT_TRUE(std::chrono::milliseconds(10001) > b);
91 ASSERT_FALSE(std::chrono::milliseconds(10000) > b);
92 ASSERT_FALSE(std::chrono::milliseconds(9999) > b);
94 ASSERT_TRUE(std::chrono::seconds(11) > b);
95 ASSERT_FALSE(std::chrono::seconds(10) > b);
96 ASSERT_FALSE(std::chrono::seconds(9) > b);
99 TEST(
TimeTest, chrono_duration_operator_greater_than_equal_quantity)
101 boost::units::quantity<Seconds, double> b(10 * seconds);
102 ASSERT_TRUE(std::chrono::milliseconds(10001) >= b);
103 ASSERT_TRUE(std::chrono::milliseconds(10000) >= b);
104 ASSERT_FALSE(std::chrono::milliseconds(9999) >= b);
106 ASSERT_TRUE(std::chrono::seconds(11) >= b);
107 ASSERT_TRUE(std::chrono::seconds(10) >= b);
108 ASSERT_FALSE(std::chrono::seconds(9) >= b);
114 typedef boost::units::quantity<Seconds, double> BoostType;
115 const std::chrono::seconds chrono_seconds(10);
116 const BoostType a(100 * seconds);
118 BoostType b = a + chrono_seconds;
119 ASSERT_EQ( b, BoostType(110 * seconds) );
125 typedef boost::units::quantity<Seconds, double> BoostType;
126 const std::chrono::seconds chrono_seconds(100);
127 const BoostType a(10 * seconds);
129 std::chrono::seconds c = chrono_seconds + a;
130 ASSERT_EQ( c, std::chrono::seconds(110) );
135 typedef boost::units::quantity<Seconds, double> BoostType;
136 std::chrono::seconds chrono_seconds(10);
137 BoostType a(100 * seconds);
139 BoostType b = a - chrono_seconds;
140 ASSERT_EQ( b, BoostType(90 * seconds) );
146 typedef boost::units::quantity<Seconds, double> BoostType;
147 std::chrono::seconds chrono_seconds(100);
148 BoostType a(10 * seconds);
150 std::chrono::seconds c = chrono_seconds - a;
151 ASSERT_EQ( c, std::chrono::seconds(90) );
156 typedef boost::units::quantity<Seconds, double> BoostType;
157 std::chrono::seconds chrono_seconds(10);
158 BoostType a(100 * seconds);
161 ASSERT_EQ( a, BoostType(110 * seconds) );
167 typedef boost::units::quantity<Seconds, double> BoostType;
168 std::chrono::seconds chrono_seconds(10);
169 BoostType b(100 * seconds);
172 ASSERT_EQ( chrono_seconds, std::chrono::seconds(110) );
177 typedef boost::units::quantity<Seconds, double> BoostType;
178 std::chrono::seconds chrono_seconds(10);
179 BoostType a(100 * seconds);
182 ASSERT_EQ( a, BoostType(90 * seconds) );
187 typedef boost::units::quantity<Seconds, double> BoostType;
188 std::chrono::seconds chrono_seconds(100);
189 BoostType b(10 * seconds);
192 ASSERT_EQ( chrono_seconds, std::chrono::seconds(90) );
197 typedef boost::units::quantity<MilliSeconds, double> BoostType;
198 const std::chrono::seconds chrono_seconds(10);
199 const BoostType a(100 * seconds);
201 auto res = a / chrono_seconds;
202 ASSERT_EQ( res, 10.0 );
207 typedef boost::units::quantity<MilliSeconds, double> BoostType;
208 const std::chrono::seconds chrono_seconds(100);
209 const BoostType a(10 * seconds);
211 auto res = chrono_seconds / a;
212 ASSERT_EQ( res, 10.0 );
220 ASSERT_EQ(b, expect);
223 boost::units::quantity<MilliSeconds, double> c(a);
224 ASSERT_EQ(c, expect);
232 ASSERT_NE(b, expect);
234 ASSERT_EQ(b, expect);
237 boost::units::quantity<boost::units::si::time, double> c(200 * seconds);
240 ASSERT_EQ(b, expect2);
246 typedef boost::units::quantity<Seconds, double> BoostType;
247 std::chrono::duration<double, std::ratio<1,1000>> d(100);
249 static_assert(std::is_same<decltype(conversion), BoostType>::value,
"wrong type returned by cast");
250 BoostType bs(100 * milliseconds);
251 ASSERT_EQ(conversion.value(), bs.value());
254 typedef std::chrono::duration<double, std::ratio<1>> ChronoType;
255 boost::units::quantity<MilliSeconds, double> q(100 * seconds);;
257 static_assert(std::is_same<decltype(chrono_conversion), ChronoType>::value,
"wrong type returned by cast");
258 ASSERT_EQ(1000 * chrono_conversion.count(), q.value());
264 typedef boost::units::quantity<Seconds, double> BoostType;
265 std::chrono::duration<double, std::ratio<1,1>> d(100);
267 static_assert(std::is_same<decltype(conversion), BoostType>::value,
"wrong type returned by cast");
268 BoostType bs(100 * seconds);
269 ASSERT_EQ(conversion.value(), bs.value());
272 typedef std::chrono::duration<double, std::ratio<1>> ChronoType;
273 boost::units::quantity<Seconds, double> q(10 * seconds);;
275 static_assert(std::is_same<decltype(chrono_conversion), ChronoType>::value,
"wrong type returned by cast");
276 ASSERT_EQ(chrono_conversion.count(), q.value());
282 typedef boost::units::quantity<Seconds, double> BoostType;
283 const std::chrono::duration<double, std::ratio<1,1>> d(100);
285 static_assert(std::is_same<decltype(conversion), BoostType>::value,
"wrong type returned by cast");
286 BoostType bs(100 * seconds);
287 ASSERT_EQ(conversion.value(), bs.value());
291 ASSERT_EQ(bs2.value(), bs.value());
294 typedef std::chrono::duration<double, std::ratio<1>> ChronoType;
295 const boost::units::quantity<Seconds, double> q(10 * seconds);;
297 static_assert(std::is_same<decltype(chrono_conversion), ChronoType>::value,
"wrong type returned by cast");
298 ASSERT_EQ(chrono_conversion.count(), q.value());
304 typedef boost::units::quantity<MilliSeconds, double> BoostType;
305 const std::chrono::duration<double, std::ratio<1,1>> d(100);
307 static_assert(std::is_same<decltype(conversion), BoostType>::value,
"wrong type returned by cast");
308 BoostType bs(100 * seconds);
309 ASSERT_EQ(conversion.value(), bs.value());
312 typedef std::chrono::duration<double, std::milli> ChronoType;
313 boost::units::quantity<Seconds, double> q(100 * seconds);;
315 static_assert(std::is_same<decltype(chrono_conversion),
typename std::remove_cv<ChronoType>::type>::value,
"wrong type returned by cast");
316 ASSERT_EQ(chrono_conversion.count(), 1000 * q.value());
320 ASSERT_EQ(bs2.value(), q.value() * 1000);
326 typedef boost::units::quantity<MilliSeconds, double> BoostType;
327 std::chrono::duration<double, std::ratio<1,1>> d(100);
329 static_assert(std::is_same<decltype(conversion), BoostType>::value,
"wrong type returned by cast");
330 BoostType bs(100 * seconds);
331 ASSERT_EQ(conversion.value(), bs.value());
334 typedef std::chrono::duration<double, std::milli> ChronoType;
335 boost::units::quantity<Seconds, double> q(100 * seconds);;
337 static_assert(std::is_same<decltype(chrono_conversion), ChronoType>::value,
"wrong type returned by cast");
338 ASSERT_EQ(chrono_conversion.count(), 1000 * q.value());
342 ASSERT_EQ(bs2.value(), q.value() * 1000);
348 typedef boost::units::quantity<MilliSeconds, double> BoostType;
349 std::chrono::duration<double, std::milli> d(100);
351 static_assert(std::is_same<decltype(conversion), BoostType>::value,
"wrong type returned by cast");
352 BoostType bs(100 * milliseconds);
353 ASSERT_EQ(conversion.value(), bs.value());
356 typedef std::chrono::duration<double, std::milli> ChronoType;
357 boost::units::quantity<MilliSeconds, double> q(10 * seconds);;
359 static_assert(std::is_same<decltype(chrono_conversion), ChronoType>::value,
"wrong type returned by cast");
360 ASSERT_EQ(chrono_conversion.count(), q.value());
TEST(TimeTest, test_seconds)
constexpr std::enable_if< boost::units::is_quantity< BoostQuantity >::value &&boost::units::is_unit_of_dimension< typename BoostQuantity::unit_type, boost::units::time_dimension >::value &&!is_equivalent< BoostQuantity, std::chrono::duration< ChronoNumericalRep, PeriodType > >::value, BoostQuantity >::type duration_cast(const std::chrono::duration< ChronoNumericalRep, PeriodType > &duration)
Mimic the std::duration_cast to convert to/from boost::units::quantity