diff options
| author | Mattias Andrée <m@maandree.se> | 2026-02-10 21:23:45 +0100 |
|---|---|---|
| committer | Mattias Andrée <m@maandree.se> | 2026-02-10 21:23:45 +0100 |
| commit | 4c00cf1a13541d47fdb01903baf954884704f4f6 (patch) | |
| tree | a567795dcee93e42046dbd60f65761c7a9adb3ae /libj2_j2i_add_ji.c | |
| parent | Add sat_lsh, sat_add, sat_sub (diff) | |
| download | libj2-4c00cf1a13541d47fdb01903baf954884704f4f6.tar.gz libj2-4c00cf1a13541d47fdb01903baf954884704f4f6.tar.bz2 libj2-4c00cf1a13541d47fdb01903baf954884704f4f6.tar.xz | |
Test sat_add
Signed-off-by: Mattias Andrée <m@maandree.se>
Diffstat (limited to 'libj2_j2i_add_ji.c')
| -rw-r--r-- | libj2_j2i_add_ji.c | 26 |
1 files changed, 10 insertions, 16 deletions
diff --git a/libj2_j2i_add_ji.c b/libj2_j2i_add_ji.c index ac60798..d1e7e32 100644 --- a/libj2_j2i_add_ji.c +++ b/libj2_j2i_add_ji.c @@ -98,12 +98,10 @@ check(uintmax_t a_high, uintmax_t a_low, uintmax_t ub) EXPECT(a.high == expected_high); EXPECT(a.low == expected_low); -#if 0 /* TODO saturated addition */ a = (struct libj2_j2i){.high = a_high, .low = a_low}; libj2_j2i_sat_add_ji(&a, b); - EXPECT(a.high == (expected_overflow ? UINTMAX_MAX : expected_high)); - EXPECT(a.low == (expected_overflow ? UINTMAX_MAX : expected_low)); -#endif + EXPECT(a.high == (expected_overflow > 0 ? UINTMAX_MAX >> 1 : expected_overflow ? ~(UINTMAX_MAX >> 1) : expected_high)); + EXPECT(a.low == (expected_overflow > 0 ? UINTMAX_MAX : expected_overflow ? 0u : expected_low)); a = (struct libj2_j2i){.high = a_high, .low = a_low}; EXPECT(libj2_j2i_add_ji_overflow_p((const struct libj2_j2i *)&a, b) == expected_overflow); @@ -136,20 +134,18 @@ check(uintmax_t a_high, uintmax_t a_low, uintmax_t ub) EXPECT(a.high == expected_high); EXPECT(a.low == expected_low); -#if 0 /* TODO saturated addition */ r = (struct libj2_j2i){111, 222}; a = (struct libj2_j2i){.high = a_high, .low = a_low}; libj2_j2i_sat_add_ji_to_j2i(&a, b, &r); EXPECT(a.high == a_high); EXPECT(a.low == a_low); - EXPECT(r.high == (expected_overflow ? UINTMAX_MAX : expected_high)); - EXPECT(r.low == (expected_overflow ? UINTMAX_MAX : expected_low)); + EXPECT(r.high == (expected_overflow > 0 ? UINTMAX_MAX >> 1 : expected_overflow ? ~(UINTMAX_MAX >> 1) : expected_high)); + EXPECT(r.low == (expected_overflow > 0 ? UINTMAX_MAX : expected_overflow ? 0u : expected_low)); a = (struct libj2_j2i){.high = a_high, .low = a_low}; libj2_j2i_sat_add_ji_to_j2i(&a, b, &a); - EXPECT(a.high == (expected_overflow ? UINTMAX_MAX : expected_high)); - EXPECT(a.low == (expected_overflow ? UINTMAX_MAX : expected_low)); -#endif + EXPECT(a.high == (expected_overflow > 0 ? UINTMAX_MAX >> 1 : expected_overflow ? ~(UINTMAX_MAX >> 1) : expected_high)); + EXPECT(a.low == (expected_overflow > 0 ? UINTMAX_MAX : expected_overflow ? 0u : expected_low)); r = (struct libj2_j2i){111, 222}; a = (struct libj2_j2i){.high = a_high, .low = a_low}; @@ -177,20 +173,18 @@ check(uintmax_t a_high, uintmax_t a_low, uintmax_t ub) EXPECT(a.high == expected_high); EXPECT(a.low == expected_low); -#if 0 /* TODO saturated addition */ r = (struct libj2_j2i){111, 222}; a = (struct libj2_j2i){.high = a_high, .low = a_low}; libj2_ji_sat_add_j2i_to_j2i(b, &a, &r); EXPECT(a.high == a_high); EXPECT(a.low == a_low); - EXPECT(r.high == (expected_overflow ? UINTMAX_MAX : expected_high)); - EXPECT(r.low == (expected_overflow ? UINTMAX_MAX : expected_low)); + EXPECT(r.high == (expected_overflow > 0 ? UINTMAX_MAX >> 1 : expected_overflow ? ~(UINTMAX_MAX >> 1) : expected_high)); + EXPECT(r.low == (expected_overflow > 0 ? UINTMAX_MAX : expected_overflow ? 0u : expected_low)); a = (struct libj2_j2i){.high = a_high, .low = a_low}; libj2_ji_sat_add_j2i_to_j2i(b, &a, &a); - EXPECT(a.high == (expected_overflow ? UINTMAX_MAX : expected_high)); - EXPECT(a.low == (expected_overflow ? UINTMAX_MAX : expected_low)); -#endif + EXPECT(a.high == (expected_overflow > 0 ? UINTMAX_MAX >> 1 : expected_overflow ? ~(UINTMAX_MAX >> 1) : expected_high)); + EXPECT(a.low == (expected_overflow > 0 ? UINTMAX_MAX : expected_overflow ? 0u : expected_low)); a = (struct libj2_j2i){.high = a_high, .low = a_low}; EXPECT(libj2_ji_add_j2i_overflow_p(b, (const struct libj2_j2i *)&a) == expected_overflow); |
