diff options
| author | Mattias Andrée <m@maandree.se> | 2026-02-11 11:20:10 +0100 |
|---|---|---|
| committer | Mattias Andrée <m@maandree.se> | 2026-02-11 11:20:10 +0100 |
| commit | 0d4c3e8f6be098e953502589b17cb28197322442 (patch) | |
| tree | df3a13e786769e78d3d6201150f4018dc0c22cb5 /libj2_j2i_mul_j2i.c | |
| parent | Test sat_add (diff) | |
| download | libj2-0d4c3e8f6be098e953502589b17cb28197322442.tar.gz libj2-0d4c3e8f6be098e953502589b17cb28197322442.tar.bz2 libj2-0d4c3e8f6be098e953502589b17cb28197322442.tar.xz | |
Finish signed saturated math
Signed-off-by: Mattias Andrée <m@maandree.se>
Diffstat (limited to 'libj2_j2i_mul_j2i.c')
| -rw-r--r-- | libj2_j2i_mul_j2i.c | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/libj2_j2i_mul_j2i.c b/libj2_j2i_mul_j2i.c index ff93594..11b3228 100644 --- a/libj2_j2i_mul_j2i.c +++ b/libj2_j2i_mul_j2i.c @@ -72,6 +72,24 @@ check_double(uintmax_t a_high, uintmax_t a_low, struct libj2_j2i *r_out) EXPECT(libj2_j2i_mul_j2i_overflow(&r, CONST_ARG &r) == expected_overflow); EXPECT(libj2_j2i_eq_j2i(&r, &expected)); + + r = (struct libj2_j2i){111, 222}; + libj2_j2i_sat_mul_j2i_to_j2i(CONST_ARG &a, CONST_ARG &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)); + + r = a; + libj2_j2i_sat_mul_j2i_to_j2i(CONST_ARG &r, CONST_ARG &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; + libj2_j2i_sat_mul_j2i(&r, CONST_ARG &r); + 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_mul_j2i_to_j2i(CONST_ARG &a, CONST_ARG &a, &r); EXPECT(libj2_j2i_eq_j2i(&a, &a_saved)); @@ -138,6 +156,13 @@ check(uintmax_t a_high, uintmax_t a_low, uintmax_t b_high, uintmax_t b_low) EXPECT(libj2_j2i_eq_j2i(&r, &expected)); r = (struct libj2_j2i){111, 222}; + libj2_j2i_sat_mul_j2i_to_j2i(CONST_ARG &a, CONST_ARG &b, &r); + EXPECT(libj2_j2i_eq_j2i(&a, &a_saved)); + EXPECT(libj2_j2i_eq_j2i(&b, &b_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_mul_j2i_to_j2i(CONST_ARG &a, CONST_ARG &b, &r); EXPECT(libj2_j2i_eq_j2i(&a, &a_saved)); EXPECT(libj2_j2i_eq_j2i(&b, &b_saved)); @@ -149,6 +174,12 @@ check(uintmax_t a_high, uintmax_t a_low, uintmax_t b_high, uintmax_t b_low) EXPECT(libj2_j2i_eq_j2i(&r, &expected)); r = a; + libj2_j2i_sat_mul_j2i_to_j2i(CONST_ARG &r, CONST_ARG &b, &r); + EXPECT(libj2_j2i_eq_j2i(&b, &b_saved)); + 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_mul_j2i_to_j2i(CONST_ARG &r, CONST_ARG &b, &r); EXPECT(libj2_j2i_eq_j2i(&b, &b_saved)); EXPECT(libj2_j2i_eq_j2i(&r, &expected)); @@ -159,6 +190,12 @@ check(uintmax_t a_high, uintmax_t a_low, uintmax_t b_high, uintmax_t b_low) EXPECT(libj2_j2i_eq_j2i(&r, &expected)); r = b; + libj2_j2i_sat_mul_j2i_to_j2i(CONST_ARG &a, CONST_ARG &r, &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 = b; libj2_j2i_mul_j2i_to_j2i(CONST_ARG &a, CONST_ARG &r, &r); EXPECT(libj2_j2i_eq_j2i(&a, &a_saved)); EXPECT(libj2_j2i_eq_j2i(&r, &expected)); @@ -169,6 +206,12 @@ check(uintmax_t a_high, uintmax_t a_low, uintmax_t b_high, uintmax_t b_low) EXPECT(libj2_j2i_eq_j2i(&r, &expected)); r = a; + libj2_j2i_sat_mul_j2i(&r, CONST_ARG &b); + EXPECT(libj2_j2i_eq_j2i(&b, &b_saved)); + 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_mul_j2i(&r, CONST_ARG &b); EXPECT(libj2_j2i_eq_j2i(&b, &b_saved)); EXPECT(libj2_j2i_eq_j2i(&r, &expected)); |
