| 360 | |
| 361 | template<typename T> |
| 362 | void test_float_construction_impl() { |
| 363 | using R = raw_t<T>; |
| 364 | T one(1.0f); |
| 365 | FL_CHECK_EQ(one.raw(), R(1) << T::FRAC_BITS); |
| 366 | FL_CHECK_EQ(one.to_int(), 1); |
| 367 | |
| 368 | T half(0.5f); |
| 369 | FL_CHECK_EQ(half.raw(), R(1) << (T::FRAC_BITS - 1)); |
| 370 | FL_CHECK_EQ(half.to_int(), 0); |
| 371 | |
| 372 | T neg(-1.0f); |
| 373 | FL_CHECK_EQ(neg.raw(), -(R(1) << T::FRAC_BITS)); |
| 374 | FL_CHECK_EQ(neg.to_int(), -1); |
| 375 | |
| 376 | T neg_half(-0.5f); |
| 377 | FL_CHECK_EQ(neg_half.to_int(), -1); // floor(-0.5) via arithmetic shift |
| 378 | |
| 379 | T val(3.0f); |
| 380 | FL_CHECK_EQ(val.to_int(), 3); |
| 381 | |
| 382 | T neg_val(-3.0f); |
| 383 | FL_CHECK_EQ(neg_val.to_int(), -3); |
| 384 | } |
| 385 | |
| 386 | template<typename T> |
| 387 | void test_from_raw_impl() { |