diff options
| author | Mattias Andrée <m@maandree.se> | 2025-12-12 23:00:18 +0100 |
|---|---|---|
| committer | Mattias Andrée <m@maandree.se> | 2025-12-12 23:00:18 +0100 |
| commit | 3988d39b3eb67817cada58e62e63f2a0fa63663c (patch) | |
| tree | 6a693e05d583389f91c7de3cb7e7721cad56441e /libj2_minus_j2i_to_j2u.c | |
| parent | Add signed integers (arithmetics and some testing not implemented yet) (diff) | |
| download | libj2-3988d39b3eb67817cada58e62e63f2a0fa63663c.tar.gz libj2-3988d39b3eb67817cada58e62e63f2a0fa63663c.tar.bz2 libj2-3988d39b3eb67817cada58e62e63f2a0fa63663c.tar.xz | |
Add some tests and fix mistakes
Signed-off-by: Mattias Andrée <m@maandree.se>
Diffstat (limited to 'libj2_minus_j2i_to_j2u.c')
| -rw-r--r-- | libj2_minus_j2i_to_j2u.c | 63 |
1 files changed, 61 insertions, 2 deletions
diff --git a/libj2_minus_j2i_to_j2u.c b/libj2_minus_j2i_to_j2u.c index a5fb3d1..5e570a5 100644 --- a/libj2_minus_j2i_to_j2u.c +++ b/libj2_minus_j2i_to_j2u.c @@ -8,7 +8,66 @@ extern inline void libj2_minus_j2i_to_j2u(const struct libj2_j2i *a, struct libj #else -CONST int main(void) { return 0; } -/* TODO test */ +static void +check_ji_ju(intmax_t ji, uintmax_t ju) +{ + struct libj2_j2i a, a_saved, b; + struct libj2_j2u r; + + r = (struct libj2_j2u){111, 222}; + libj2_ji_to_j2i(ji, &a); + a_saved = a; + libj2_minus_j2i_to_j2u((const struct libj2_j2i *)&a, &r); + EXPECT(libj2_j2i_eq_j2i(&a, &a_saved)); + EXPECT(libj2_j2u_eq_ju(&r, ju)); + + b = (struct libj2_j2i){111, 222}; + libj2_minus_j2u_to_j2i((const struct libj2_j2u *)&r, &b); + EXPECT(libj2_j2u_eq_ju(&r, ju)); + EXPECT(libj2_j2i_eq_j2i(&b, &a_saved)); +} + + +static void +check_j2i_j2u(uintmax_t a_high, uintmax_t a_low, int a_minus, uintmax_t r_high, uintmax_t r_low) +{ + struct libj2_j2i a, a_saved, b; + struct libj2_j2u r; + + r = (struct libj2_j2u){111, 222}; + a.high = a_high; + a.low = a_low; + if (a_minus) + libj2_minus_j2i(&a); + a_saved = a; + libj2_minus_j2i_to_j2u((const struct libj2_j2i *)&a, &r); + EXPECT(libj2_j2i_eq_j2i(&a, &a_saved)); + EXPECT(r.high == r_high); + EXPECT(r.low == r_low); + + b = (struct libj2_j2i){111, 222}; + libj2_minus_j2u_to_j2i((const struct libj2_j2u *)&r, &b); + EXPECT(r.high == r_high); + EXPECT(r.low == r_low); + EXPECT(libj2_j2i_eq_j2i(&b, &a_saved)); +} + + +int +main(void) +{ + check_ji_ju(0, 0); + check_ji_ju(-1, 1); + check_ji_ju(-2, 2); + + check_j2i_j2u(UINTMAX_MAX >> 1, UINTMAX_MAX, 1, UINTMAX_MAX >> 1, UINTMAX_MAX); + check_j2i_j2u(UINTMAX_MAX ^ (UINTMAX_MAX >> 1), 0, 0, UINTMAX_MAX ^ (UINTMAX_MAX >> 1), 0); + check_j2i_j2u(0, 1, 0, UINTMAX_MAX, UINTMAX_MAX); + check_j2i_j2u(0, 2, 0, UINTMAX_MAX, UINTMAX_MAX - 1U); + check_j2i_j2u(UINTMAX_MAX >> 1, UINTMAX_MAX, 0, UINTMAX_MAX ^ (UINTMAX_MAX >> 1), 1); + check_j2i_j2u(UINTMAX_MAX ^ (UINTMAX_MAX >> 1), 0, 0, UINTMAX_MAX ^ (UINTMAX_MAX >> 1), 0); + + return 0; +} #endif |
