From 0d4c3e8f6be098e953502589b17cb28197322442 Mon Sep 17 00:00:00 2001 From: Mattias Andrée Date: Wed, 11 Feb 2026 11:20:10 +0100 Subject: Finish signed saturated math MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Mattias Andrée --- libj2_j2i_lsh.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'libj2_j2i_lsh.c') diff --git a/libj2_j2i_lsh.c b/libj2_j2i_lsh.c index 053ece7..aff86bb 100644 --- a/libj2_j2i_lsh.c +++ b/libj2_j2i_lsh.c @@ -25,6 +25,11 @@ check(const struct libj2_j2i *a, unsigned shift, const struct libj2_j2i *expecte EXPECT(libj2_j2i_lsh_overflow(&r, shift) == overflow); EXPECT(libj2_j2i_eq_j2i(&r, expected)); + r = *a; + libj2_j2i_sat_lsh(&r, shift); + EXPECT(overflow > 0 ? libj2_j2i_is_max(&r) : + overflow ? libj2_j2i_is_min(&r) : libj2_j2i_eq_j2i(&r, expected)); + r = (struct libj2_j2i){111, 222}; libj2_j2i_lsh_to_j2i((const struct libj2_j2i *)a, shift, &r); EXPECT(libj2_j2i_eq_j2i(a, &a_saved)); @@ -43,6 +48,17 @@ check(const struct libj2_j2i *a, unsigned shift, const struct libj2_j2i *expecte EXPECT(libj2_j2i_lsh_to_j2i_overflow(&r, shift, &r) == overflow); EXPECT(libj2_j2i_eq_j2i(&r, expected)); + r = (struct libj2_j2i){111, 222}; + libj2_j2i_sat_lsh_to_j2i((const struct libj2_j2i *)a, shift, &r); + EXPECT(libj2_j2i_eq_j2i(a, &a_saved)); + EXPECT(overflow > 0 ? libj2_j2i_is_max(&r) : + overflow ? libj2_j2i_is_min(&r) : libj2_j2i_eq_j2i(&r, expected)); + + r = *a; + libj2_j2i_sat_lsh_to_j2i(&r, shift, &r); + EXPECT(overflow > 0 ? libj2_j2i_is_max(&r) : + overflow ? libj2_j2i_is_min(&r) : libj2_j2i_eq_j2i(&r, expected)); + if (libj2_j2i_is_negative(a)) { if (a->high != UINTMAX_MAX || ~a->low > UINTMAX_MAX >> 1) return; @@ -62,6 +78,11 @@ check(const struct libj2_j2i *a, unsigned shift, const struct libj2_j2i *expecte r = (struct libj2_j2i){111, 222}; EXPECT(libj2_ji_lsh_to_j2i_overflow(v, shift, &r) == overflow); EXPECT(libj2_j2i_eq_j2i(&r, expected)); + + r = (struct libj2_j2i){111, 222}; + libj2_ji_sat_lsh_to_j2i(v, shift, &r); + EXPECT(overflow > 0 ? libj2_j2i_is_max(&r) : + overflow ? libj2_j2i_is_min(&r) : libj2_j2i_eq_j2i(&r, expected)); } -- cgit v1.2.3-70-g09d2