aboutsummaryrefslogtreecommitdiffstats
path: root/libj2_j2i_sub_j2i.c
diff options
context:
space:
mode:
Diffstat (limited to 'libj2_j2i_sub_j2i.c')
-rw-r--r--libj2_j2i_sub_j2i.c27
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));
}