aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMattias Andrée <m@maandree.se>2026-02-10 21:23:45 +0100
committerMattias Andrée <m@maandree.se>2026-02-10 21:23:45 +0100
commit4c00cf1a13541d47fdb01903baf954884704f4f6 (patch)
treea567795dcee93e42046dbd60f65761c7a9adb3ae
parentAdd sat_lsh, sat_add, sat_sub (diff)
downloadlibj2-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 '')
-rw-r--r--libj2_j2i_add_j2i.c29
-rw-r--r--libj2_j2i_add_ji.c26
-rw-r--r--libj2_j2i_sat_add_j2i.c2
-rw-r--r--libj2_j2i_sat_add_j2i_to_j2i.c2
-rw-r--r--libj2_j2i_sat_add_ji.c2
-rw-r--r--libj2_j2i_sat_add_ji_to_j2i.c2
-rw-r--r--libj2_ji_sat_add_j2i_to_j2i.c2
7 files changed, 29 insertions, 36 deletions
diff --git a/libj2_j2i_add_j2i.c b/libj2_j2i_add_j2i.c
index 7b58333..2d0acf5 100644
--- a/libj2_j2i_add_j2i.c
+++ b/libj2_j2i_add_j2i.c
@@ -61,13 +61,12 @@ check_(uintmax_t a_high, uintmax_t a_low, uintmax_t b_high, uintmax_t b_low,
EXPECT(libj2_j2i_eq_j2i(&a, &expected));
EXPECT(libj2_j2i_eq_j2i(&b, &b_saved));
-#if 0 /* TODO saturated addition */
a = a_saved;
b = b_saved;
libj2_j2i_sat_add_j2i(&a, &b);
- EXPECT(r_overflow ? libj2_j2i_is_max(&a) : libj2_j2i_eq_j2i(&a, &expected));
+ EXPECT(r_overflow > 0 ? libj2_j2i_is_max(&a) :
+ r_overflow ? libj2_j2i_is_min(&a) : libj2_j2i_eq_j2i(&a, &expected));
EXPECT(libj2_j2i_eq_j2i(&b, &b_saved));
-#endif
a = a_saved;
b = b_saved;
@@ -95,27 +94,28 @@ check_(uintmax_t a_high, uintmax_t a_low, uintmax_t b_high, uintmax_t b_low,
EXPECT(libj2_j2i_eq_j2i(&b, &expected));
EXPECT(libj2_j2i_eq_j2i(&a, &a_saved));
-#if 0 /* TODO saturated addition */
r = (struct libj2_j2i){111, 222};
a = a_saved;
b = b_saved;
libj2_j2i_sat_add_j2i_to_j2i(&a, &b, &r);
- EXPECT(r_overflow ? libj2_j2i_is_max(&r) : libj2_j2i_eq_j2i(&r, &expected));
+ EXPECT(r_overflow > 0 ? libj2_j2i_is_max(&r) :
+ r_overflow ? libj2_j2i_is_min(&r) : libj2_j2i_eq_j2i(&r, &expected));
EXPECT(libj2_j2i_eq_j2i(&a, &a_saved));
EXPECT(libj2_j2i_eq_j2i(&b, &b_saved));
a = a_saved;
b = b_saved;
libj2_j2i_sat_add_j2i_to_j2i(&a, &b, &a);
- EXPECT(r_overflow ? libj2_j2i_is_max(&a) : libj2_j2i_eq_j2i(&a, &expected));
+ EXPECT(r_overflow > 0 ? libj2_j2i_is_max(&a) :
+ r_overflow ? libj2_j2i_is_min(&a) : libj2_j2i_eq_j2i(&a, &expected));
EXPECT(libj2_j2i_eq_j2i(&b, &b_saved));
a = a_saved;
b = b_saved;
libj2_j2i_sat_add_j2i_to_j2i(&a, &b, &b);
- EXPECT(r_overflow ? libj2_j2i_is_max(&b) : libj2_j2i_eq_j2i(&b, &expected));
+ EXPECT(r_overflow > 0 ? libj2_j2i_is_max(&b) :
+ r_overflow ? libj2_j2i_is_min(&b) : libj2_j2i_eq_j2i(&b, &expected));
EXPECT(libj2_j2i_eq_j2i(&a, &a_saved));
-#endif
}
@@ -210,11 +210,10 @@ check_double(uintmax_t high, uintmax_t low)
EXPECT(libj2_j2i_add_j2i_overflow(&a, &a) == expected_overflow);
EXPECT(libj2_j2i_eq_j2i(&a, &expected));
-#if 0 /* TODO saturated addition */
a = a_saved;
libj2_j2i_sat_add_j2i(&a, &a);
- EXPECT(expected_overflow ? libj2_j2i_is_max(&a) : libj2_j2i_eq_j2i(&a, &expected));
-#endif
+ EXPECT(expected_overflow > 0 ? libj2_j2i_is_max(&a) :
+ expected_overflow ? libj2_j2i_is_min(&a) : libj2_j2i_eq_j2i(&a, &expected));
a = a_saved;
EXPECT(libj2_j2i_add_j2i_overflow_p((const struct libj2_j2i *)&a, (const struct libj2_j2i *)&a) == expected_overflow);
@@ -230,17 +229,17 @@ check_double(uintmax_t high, uintmax_t low)
EXPECT(libj2_j2i_add_j2i_to_j2i_overflow(&a, &a, &a) == expected_overflow);
EXPECT(libj2_j2i_eq_j2i(&a, &expected));
-#if 0 /* TODO saturated addition */
r = (struct libj2_j2i){111, 222};
a = a_saved;
libj2_j2i_sat_add_j2i_to_j2i(&a, &a, &r);
- EXPECT(expected_overflow ? libj2_j2i_is_max(&r) : libj2_j2i_eq_j2i(&r, &expected));
+ EXPECT(expected_overflow > 0 ? libj2_j2i_is_max(&r) :
+ expected_overflow ? libj2_j2i_is_min(&r) : libj2_j2i_eq_j2i(&r, &expected));
EXPECT(libj2_j2i_eq_j2i(&a, &a_saved));
a = a_saved;
libj2_j2i_sat_add_j2i_to_j2i(&a, &a, &a);
- EXPECT(expected_overflow ? libj2_j2i_is_max(&a) : libj2_j2i_eq_j2i(&a, &expected));
-#endif
+ EXPECT(expected_overflow > 0 ? libj2_j2i_is_max(&a) :
+ expected_overflow ? libj2_j2i_is_min(&a) : libj2_j2i_eq_j2i(&a, &expected));
}
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);
diff --git a/libj2_j2i_sat_add_j2i.c b/libj2_j2i_sat_add_j2i.c
index f42f28f..f3f263d 100644
--- a/libj2_j2i_sat_add_j2i.c
+++ b/libj2_j2i_sat_add_j2i.c
@@ -14,6 +14,6 @@ extern inline void libj2_j2i_sat_add_j2i(struct libj2_j2i *a, const struct libj2
#else
-CONST int main(void) { return 0; } /* TODO test */
+CONST int main(void) { return 0; }
#endif
diff --git a/libj2_j2i_sat_add_j2i_to_j2i.c b/libj2_j2i_sat_add_j2i_to_j2i.c
index 4ec77fb..deb488e 100644
--- a/libj2_j2i_sat_add_j2i_to_j2i.c
+++ b/libj2_j2i_sat_add_j2i_to_j2i.c
@@ -7,6 +7,6 @@ extern inline void libj2_j2i_sat_add_j2i_to_j2i(const struct libj2_j2i *a, const
#else
-CONST int main(void) { return 0; } /* TODO test */
+CONST int main(void) { return 0; }
#endif
diff --git a/libj2_j2i_sat_add_ji.c b/libj2_j2i_sat_add_ji.c
index 4517748..4fe526d 100644
--- a/libj2_j2i_sat_add_ji.c
+++ b/libj2_j2i_sat_add_ji.c
@@ -7,6 +7,6 @@ extern inline void libj2_j2i_sat_add_ji(struct libj2_j2i *a, intmax_t b);
#else
-CONST int main(void) { return 0; } /* TODO test */
+CONST int main(void) { return 0; }
#endif
diff --git a/libj2_j2i_sat_add_ji_to_j2i.c b/libj2_j2i_sat_add_ji_to_j2i.c
index 3c1580b..13493a4 100644
--- a/libj2_j2i_sat_add_ji_to_j2i.c
+++ b/libj2_j2i_sat_add_ji_to_j2i.c
@@ -7,6 +7,6 @@ extern inline void libj2_j2i_sat_add_ji_to_j2i(const struct libj2_j2i *a, intmax
#else
-CONST int main(void) { return 0; } /* TODO test */
+CONST int main(void) { return 0; }
#endif
diff --git a/libj2_ji_sat_add_j2i_to_j2i.c b/libj2_ji_sat_add_j2i_to_j2i.c
index b85d2bf..5518580 100644
--- a/libj2_ji_sat_add_j2i_to_j2i.c
+++ b/libj2_ji_sat_add_j2i_to_j2i.c
@@ -7,6 +7,6 @@ extern inline void libj2_ji_sat_add_j2i_to_j2i(intmax_t a, const struct libj2_j2
#else
-CONST int main(void) { return 0; } /* TODO test */
+CONST int main(void) { return 0; }
#endif