diff options
Diffstat (limited to 'tests/test_fixed_point.cpp')
| -rw-r--r-- | tests/test_fixed_point.cpp | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/tests/test_fixed_point.cpp b/tests/test_fixed_point.cpp index 6d1a594..8c5c269 100644 --- a/tests/test_fixed_point.cpp +++ b/tests/test_fixed_point.cpp @@ -50,3 +50,49 @@ TEST_CASE("fp_t multiplication drops percision under 1 ULP") { fp_t b = fp_t::from_raw(0); CHECK(a * a == b); } + +TEST_CASE("fp_t division is basic") { + fp_t a = fp_t::from_int(10); + fp_t b = fp_t::from_int(2); + fp_t c = fp_t::from_int(5); + CHECK(a / b == c); +} + +TEST_CASE("fp_t division is sign-symmetric") { + fp_t a = fp_t::from_int(1); + fp_t b = fp_t::from_raw(-3); + fp_t neg_a = fp_t::from_raw(-a.raw); + fp_t neg_b = fp_t::from_raw(-b.raw); + CHECK(neg_a / b == a / neg_b); +} + +TEST_CASE("fp_t division rounds to nearest") { + fp_t a = fp_t::from_int(1); + fp_t b = fp_t::from_int(3); + fp_t c = fp_t::from_raw(21845); + CHECK(a / b == c); +} + +TEST_CASE("fp_t division handles negative operands") { + fp_t a = fp_t::from_int(-10); + fp_t b = fp_t::from_int(2); + fp_t c = fp_t::from_int(-5); + CHECK(a / b == c); + + fp_t d = fp_t::from_int(10); + fp_t e = fp_t::from_int(-2); + fp_t f = fp_t::from_int(-5); + CHECK(d / e == f); + + fp_t g = fp_t::from_int(-10); + fp_t h = fp_t::from_int(-2); + fp_t i = fp_t::from_int(5); + CHECK(g / h == i); +} + +TEST_CASE("fp_t division truncates precision below 1 ULP") { + fp_t a = fp_t::from_raw(1); + fp_t b = fp_t::from_int(100000); + fp_t c = fp_t::from_raw(0); + CHECK(a / b == c); +} |
