aboutsummaryrefslogtreecommitdiffstats
path: root/libj2_j2i_mul_ji.c
diff options
context:
space:
mode:
authorMattias Andrée <m@maandree.se>2026-02-11 11:20:10 +0100
committerMattias Andrée <m@maandree.se>2026-02-11 11:20:10 +0100
commit0d4c3e8f6be098e953502589b17cb28197322442 (patch)
treedf3a13e786769e78d3d6201150f4018dc0c22cb5 /libj2_j2i_mul_ji.c
parentTest sat_add (diff)
downloadlibj2-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 '')
-rw-r--r--libj2_j2i_mul_ji.c39
1 files changed, 19 insertions, 20 deletions
diff --git a/libj2_j2i_mul_ji.c b/libj2_j2i_mul_ji.c
index e451f6a..9c7ac3c 100644
--- a/libj2_j2i_mul_ji.c
+++ b/libj2_j2i_mul_ji.c
@@ -100,11 +100,10 @@ mul_(const struct libj2_j2i *a, intmax_t b, struct libj2_j2i *expected, int expe
EXPECT(libj2_j2i_mul_ji_overflow(&t, b) == expect_overflow);
EXPECT(libj2_j2i_eq_j2i(&t, expected));
-#if 0 /* TODO saturated multiplication */
t = *a;
- libj2_j2u_sat_mul_ju(&t, b);
- EXPECT(expect_overflow ? libj2_j2u_is_max(&t) : libj2_j2u_eq_j2u(&t, expected));
-#endif
+ libj2_j2i_sat_mul_ji(&t, b);
+ EXPECT(expect_overflow > 0 ? libj2_j2i_is_max(&t) :
+ expect_overflow ? libj2_j2i_is_min(&t) : libj2_j2i_eq_j2i(&t, expected));
t = *a;
EXPECT(libj2_j2i_mul_ji_overflow_p((const struct libj2_j2i *)&t, b) == expect_overflow);
@@ -138,16 +137,16 @@ mul_(const struct libj2_j2i *a, intmax_t b, struct libj2_j2i *expected, int expe
EXPECT(libj2_j2i_mul_ji_to_j2i_overflow(&t, b, &t) == expect_overflow);
EXPECT(libj2_j2i_eq_j2i(&t, expected));
-#if 0 /* TODO saturated multiplication */
- t = (struct libj2_j2u){111, 222};
- libj2_j2u_sat_mul_ju_to_j2u(a, b, &t);
- EXPECT(expect_overflow ? libj2_j2u_is_max(&t) : libj2_j2u_eq_j2u(&t, expected));
- EXPECT(libj2_j2u_eq_j2u(a, &a_saved));
+ t = (struct libj2_j2i){111, 222};
+ libj2_j2i_sat_mul_ji_to_j2i(a, b, &t);
+ EXPECT(expect_overflow > 0 ? libj2_j2i_is_max(&t) :
+ expect_overflow ? libj2_j2i_is_min(&t) : libj2_j2i_eq_j2i(&t, expected));
+ EXPECT(libj2_j2i_eq_j2i(a, &a_saved));
t = *a;
- libj2_j2u_sat_mul_ju_to_j2u(&t, b, &t);
- EXPECT(expect_overflow ? libj2_j2u_is_max(&t) : libj2_j2u_eq_j2u(&t, expected));
-#endif
+ libj2_j2i_sat_mul_ji_to_j2i(&t, b, &t);
+ EXPECT(expect_overflow > 0 ? libj2_j2i_is_max(&t) :
+ expect_overflow ? libj2_j2i_is_min(&t) : libj2_j2i_eq_j2i(&t, expected));
t = (struct libj2_j2i){111, 222};
EXPECT(libj2_ji_mul_j2i_to_j2i_overflow(b, a, &t) == expect_overflow);
@@ -158,16 +157,16 @@ mul_(const struct libj2_j2i *a, intmax_t b, struct libj2_j2i *expected, int expe
EXPECT(libj2_ji_mul_j2i_to_j2i_overflow(b, &t, &t) == expect_overflow);
EXPECT(libj2_j2i_eq_j2i(&t, expected));
-#if 0 /* TODO saturated multiplication */
- t = (struct libj2_j2u){111, 222};
- libj2_ju_sat_mul_j2u_to_j2u(b, a, &t);
- EXPECT(expect_overflow ? libj2_j2u_is_max(&t) : libj2_j2u_eq_j2u(&t, expected));
- EXPECT(libj2_j2u_eq_j2u(a, &a_saved));
+ t = (struct libj2_j2i){111, 222};
+ libj2_ji_sat_mul_j2i_to_j2i(b, a, &t);
+ EXPECT(expect_overflow > 0 ? libj2_j2i_is_max(&t) :
+ expect_overflow ? libj2_j2i_is_min(&t) : libj2_j2i_eq_j2i(&t, expected));
+ EXPECT(libj2_j2i_eq_j2i(a, &a_saved));
t = *a;
- libj2_ju_sat_mul_j2u_to_j2u(b, &t, &t);
- EXPECT(expect_overflow ? libj2_j2u_is_max(&t) : libj2_j2u_eq_j2u(&t, expected));
-#endif
+ libj2_ji_sat_mul_j2i_to_j2i(b, &t, &t);
+ EXPECT(expect_overflow > 0 ? libj2_j2i_is_max(&t) :
+ expect_overflow ? libj2_j2i_is_min(&t) : libj2_j2i_eq_j2i(&t, expected));
set = 999;
t = (struct libj2_j2i){111, 222};