diff options
Diffstat (limited to 'libj2_j2i_sub_j2i.c')
| -rw-r--r-- | libj2_j2i_sub_j2i.c | 27 |
1 files changed, 17 insertions, 10 deletions
diff --git a/libj2_j2i_sub_j2i.c b/libj2_j2i_sub_j2i.c index 24610cd..fbb569c 100644 --- a/libj2_j2i_sub_j2i.c +++ b/libj2_j2i_sub_j2i.c @@ -23,7 +23,7 @@ static void validate(uintmax_t a_high, uintmax_t a_low, uintmax_t b_high, uintmax_t b_low, uintmax_t r_high, uintmax_t r_low, int r_overflow) { int a_neg, b_neg, overflow; - struct libj2_j2u a, b; + struct libj2_j2u a, b, u; struct libj2_j2i t, r; t = (struct libj2_j2i){.high = a_high, .low = a_low}; @@ -41,31 +41,38 @@ validate(uintmax_t a_high, uintmax_t a_low, uintmax_t b_high, uintmax_t b_low, u if (a_neg && b_neg) { overflow = 0; libj2_minus_j2u(&a); - libj2_j2u_add_j2u_to_j2u_overflow(&a, &b, (void *)&r); - EXPECT(libj2_j2i_gt_j2i(&r, (const void *)&a)); + libj2_j2u_add_j2u_to_j2u_overflow(&a, &b, &u); + libj2_j2u_to_j2i(&u, &r); + libj2_j2u_to_j2i(&a, &t); + EXPECT(libj2_j2i_gt_j2i(&r, &t)); } else if (a_neg) { - overflow = -libj2_j2u_add_j2u_to_j2u_overflow(&a, &b, (void *)&r); + overflow = -libj2_j2u_add_j2u_to_j2u_overflow(&a, &b, &u); + libj2_j2u_to_j2i(&u, &r); EXPECT(overflow == 0 || overflow == -1); libj2_minus_j2i(&r); + libj2_j2u_to_j2i(&a, &t); if (!libj2_j2i_is_negative(&r)) overflow = -1; else if (overflow) - EXPECT(libj2_j2i_gt_j2i(&r, (const void *)&a)); + EXPECT(libj2_j2i_gt_j2i(&r, &t)); if (!overflow) - EXPECT(libj2_j2i_le_j2i(&r, (const void *)&a)); + EXPECT(libj2_j2i_le_j2i(&r, &t)); } else if (b_neg) { - overflow = +libj2_j2u_add_j2u_to_j2u_overflow(&a, &b, (void *)&r); + overflow = +libj2_j2u_add_j2u_to_j2u_overflow(&a, &b, &u); + libj2_j2u_to_j2i(&u, &r); EXPECT(overflow == 0 || overflow == +1); + libj2_j2u_to_j2i(&a, &t); if (!libj2_j2i_is_positive(&r)) overflow = +1; else if (overflow) - EXPECT(libj2_j2i_lt_j2i(&r, (const void *)&a)); + EXPECT(libj2_j2i_lt_j2i(&r, &t)); if (!overflow) - EXPECT(libj2_j2i_gt_j2i(&r, (const void *)&a)); + EXPECT(libj2_j2i_gt_j2i(&r, &t)); } else { overflow = 0; libj2_minus_j2u(&b); - libj2_j2u_add_j2u_to_j2u(&a, &b, (void *)&r); + libj2_j2u_add_j2u_to_j2u(&a, &b, &u); + libj2_j2u_to_j2i(&u, &r); EXPECT(libj2_j2i_le_j2u(&r, &a)); } |
