diff options
Diffstat (limited to '')
| -rw-r--r-- | libj2_j2i_sub_ji.c | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/libj2_j2i_sub_ji.c b/libj2_j2i_sub_ji.c index 4fc8e0e..34222f6 100644 --- a/libj2_j2i_sub_ji.c +++ b/libj2_j2i_sub_ji.c @@ -97,6 +97,13 @@ check(uintmax_t a_high, uintmax_t a_low, uintmax_t ub) validate(a.high, a.low, b < 0 ? UINTMAX_MAX : 0U, ub, expected.high, expected.low, expected_overflow); + a = a_saved; + r = (struct libj2_j2i){111, 222}; + libj2_j2i_sat_sub_ji_to_j2i((const struct libj2_j2i *)&a, b, &r); + EXPECT(libj2_j2i_eq_j2i(&a, &a_saved)); + EXPECT(expected_overflow > 0 ? libj2_j2i_is_max(&r) : + expected_overflow ? libj2_j2i_is_min(&r) : libj2_j2i_eq_j2i(&r, &expected)); + r = (struct libj2_j2i){111, 222}; libj2_j2i_sub_ji_to_j2i((const struct libj2_j2i *)&a, b, &r); EXPECT(libj2_j2i_eq_j2i(&a, &a_saved)); @@ -115,6 +122,11 @@ check(uintmax_t a_high, uintmax_t a_low, uintmax_t ub) EXPECT(libj2_j2i_eq_j2i(&r, &expected)); r = a; + libj2_j2i_sat_sub_ji(&r, b); + EXPECT(expected_overflow > 0 ? libj2_j2i_is_max(&r) : + expected_overflow ? libj2_j2i_is_min(&r) : libj2_j2i_eq_j2i(&r, &expected)); + + r = a; libj2_j2i_sub_ji(&r, b); EXPECT(libj2_j2i_eq_j2i(&r, &expected)); @@ -126,6 +138,13 @@ check(uintmax_t a_high, uintmax_t a_low, uintmax_t ub) EXPECT(libj2_j2i_eq_j2i(&a, &a_saved)); EXPECT(libj2_j2i_eq_j2i(&r, &expected)); + a = a_saved; + r = (struct libj2_j2i){111, 222}; + libj2_ji_sat_sub_j2i_to_j2i(b, (const struct libj2_j2i *)&a, &r); + EXPECT(libj2_j2i_eq_j2i(&a, &a_saved)); + EXPECT(expected_overflow > 0 ? libj2_j2i_is_max(&r) : + expected_overflow ? libj2_j2i_is_min(&r) : libj2_j2i_eq_j2i(&r, &expected)); + validate(b < 0 ? UINTMAX_MAX : 0U, ub, a.high, a.low, expected.high, expected.low, expected_overflow); EXPECT(libj2_ji_sub_j2i_overflow_p(b, (const struct libj2_j2i *)&a) == expected_overflow); @@ -145,9 +164,19 @@ check(uintmax_t a_high, uintmax_t a_low, uintmax_t ub) EXPECT(libj2_j2i_eq_j2i(&r, &expected)); r = a; + libj2_ji_sat_sub_j2i_to_j2i(b, (const struct libj2_j2i *)&r, &r); + EXPECT(expected_overflow > 0 ? libj2_j2i_is_max(&r) : + expected_overflow ? libj2_j2i_is_min(&r) : libj2_j2i_eq_j2i(&r, &expected)); + + r = a; EXPECT(libj2_j2i_rsub_ji_overflow(&r, b) == expected_overflow); EXPECT(libj2_j2i_eq_j2i(&r, &expected)); + r = a; + libj2_j2i_sat_rsub_ji(&r, b); + EXPECT(expected_overflow > 0 ? libj2_j2i_is_max(&r) : + expected_overflow ? libj2_j2i_is_min(&r) : libj2_j2i_eq_j2i(&r, &expected)); + EXPECT(libj2_j2i_rsub_ji_overflow_p((const struct libj2_j2i *)&a, b) == expected_overflow); EXPECT(libj2_j2i_eq_j2i(&a, &a_saved)); |
