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_lsh.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 '')
| -rw-r--r-- | libj2_j2i_lsh.c | 21 |
1 files changed, 21 insertions, 0 deletions
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)); } |
