diff --git a/README.md b/README.md
index 0c7312a..f4f07d0 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-# C3 v0.1.1
+# C3 v0.1.2
C3 is a programming language with meta-programmation and a graph
database embedded into the language. It aims to be the language
diff --git a/libc3/tag.c b/libc3/tag.c
index 1319d97..eddc5e7 100644
--- a/libc3/tag.c
+++ b/libc3/tag.c
@@ -622,6 +622,7 @@ void tag_delete (s_tag *tag)
s_tag * tag_div (const s_tag *a, const s_tag *b, s_tag *dest)
{
+ s_integer tmp;
assert(a);
assert(b);
assert(dest);
@@ -632,6 +633,12 @@ s_tag * tag_div (const s_tag *a, const s_tag *b, s_tag *dest)
return tag_init_f32(dest, a->data.f32 / b->data.f32);
case TAG_F64:
return tag_init_f64(dest, a->data.f32 / b->data.f64);
+ case TAG_INTEGER:
+ integer_init_double(&tmp, a->data.f32);
+ integer_div(&tmp, &b->data.integer, &tmp);
+ tag_init_integer(dest, &tmp);
+ integer_clean(&tmp);
+ return dest;
case TAG_S8:
return tag_init_f32(dest, a->data.f32 / b->data.s8);
case TAG_S16:
@@ -657,6 +664,12 @@ s_tag * tag_div (const s_tag *a, const s_tag *b, s_tag *dest)
return tag_init_f64(dest, a->data.f64 / b->data.f32);
case TAG_F64:
return tag_init_f64(dest, a->data.f64 / b->data.f64);
+ case TAG_INTEGER:
+ integer_init_double(&tmp, a->data.f64);
+ integer_div(&tmp, &b->data.integer, &tmp);
+ tag_init_integer(dest, &tmp);
+ integer_clean(&tmp);
+ return dest;
case TAG_S8:
return tag_init_f64(dest, a->data.f64 / b->data.s8);
case TAG_S16:
@@ -676,12 +689,82 @@ s_tag * tag_div (const s_tag *a, const s_tag *b, s_tag *dest)
default:
goto ko;
}
+ case TAG_INTEGER:
+ switch (b->type) {
+ case TAG_F32:
+ return tag_init_f32(dest, integer_to_f64(&a->data.integer) -
+ b->data.f32);
+ case TAG_F64:
+ return tag_init_f64(dest, integer_to_f64(&a->data.integer) -
+ b->data.f64);
+ case TAG_INTEGER:
+ tag_init_integer_zero(dest);
+ integer_div(&a->data.integer, &b->data.integer,
+ &dest->data.integer);
+ return dest;
+ case TAG_S8:
+ integer_init_s32(&tmp, b->data.s8);
+ integer_div(&a->data.integer, &tmp, &tmp);
+ tag_init_integer(dest, &tmp);
+ integer_clean(&tmp);
+ return dest;
+ case TAG_S16:
+ integer_init_s32(&tmp, b->data.s16);
+ integer_div(&a->data.integer, &tmp, &tmp);
+ tag_init_integer(dest, &tmp);
+ integer_clean(&tmp);
+ return dest;
+ case TAG_S32:
+ integer_init_s32(&tmp, b->data.s32);
+ integer_div(&a->data.integer, &tmp, &tmp);
+ tag_init_integer(dest, &tmp);
+ integer_clean(&tmp);
+ return dest;
+ case TAG_S64:
+ integer_init_s64(&tmp, b->data.s64);
+ integer_div(&a->data.integer, &tmp, &tmp);
+ tag_init_integer(dest, &tmp);
+ integer_clean(&tmp);
+ return dest;
+ case TAG_U8:
+ integer_init_u32(&tmp, b->data.u8);
+ integer_div(&a->data.integer, &tmp, &tmp);
+ tag_init_integer(dest, &tmp);
+ integer_clean(&tmp);
+ return dest;
+ case TAG_U16:
+ integer_init_u32(&tmp, b->data.u16);
+ integer_div(&a->data.integer, &tmp, &tmp);
+ tag_init_integer(dest, &tmp);
+ integer_clean(&tmp);
+ return dest;
+ case TAG_U32:
+ integer_init_u32(&tmp, b->data.u32);
+ integer_div(&a->data.integer, &tmp, &tmp);
+ tag_init_integer(dest, &tmp);
+ integer_clean(&tmp);
+ return dest;
+ case TAG_U64:
+ integer_init_u64(&tmp, b->data.u64);
+ integer_div(&a->data.integer, &tmp, &tmp);
+ tag_init_integer(dest, &tmp);
+ integer_clean(&tmp);
+ return dest;
+ default:
+ goto ko;
+ }
case TAG_S8:
switch (b->type) {
case TAG_F32:
return tag_init_f32(dest, a->data.s8 / b->data.f32);
case TAG_F64:
return tag_init_f64(dest, a->data.s8 / b->data.f64);
+ case TAG_INTEGER:
+ integer_init_s32(&tmp, a->data.s8);
+ integer_div(&tmp, &b->data.integer, &tmp);
+ tag_init_integer(dest, &tmp);
+ integer_clean(&tmp);
+ return dest;
case TAG_S8:
return tag_init_s8(dest, a->data.s8 / b->data.s8);
case TAG_S16:
@@ -707,6 +790,12 @@ s_tag * tag_div (const s_tag *a, const s_tag *b, s_tag *dest)
return tag_init_f32(dest, a->data.s16 / b->data.f32);
case TAG_F64:
return tag_init_f64(dest, a->data.s16 / b->data.f64);
+ case TAG_INTEGER:
+ integer_init_s32(&tmp, a->data.s16);
+ integer_div(&tmp, &b->data.integer, &tmp);
+ tag_init_integer(dest, &tmp);
+ integer_clean(&tmp);
+ return dest;
case TAG_S8:
return tag_init_s16(dest, a->data.s16 / b->data.s8);
case TAG_S16:
@@ -732,6 +821,12 @@ s_tag * tag_div (const s_tag *a, const s_tag *b, s_tag *dest)
return tag_init_f32(dest, a->data.s32 / b->data.f32);
case TAG_F64:
return tag_init_f64(dest, a->data.s32 / b->data.f64);
+ case TAG_INTEGER:
+ integer_init_s32(&tmp, a->data.s32);
+ integer_div(&tmp, &b->data.integer, &tmp);
+ tag_init_integer(dest, &tmp);
+ integer_clean(&tmp);
+ return dest;
case TAG_S8:
return tag_init_s32(dest, a->data.s32 / b->data.s8);
case TAG_S16:
@@ -757,20 +852,26 @@ s_tag * tag_div (const s_tag *a, const s_tag *b, s_tag *dest)
return tag_init_f32(dest, a->data.s64 / b->data.f32);
case TAG_F64:
return tag_init_f64(dest, a->data.s64 / b->data.f64);
+ case TAG_INTEGER:
+ integer_init_s64(&tmp, a->data.s64);
+ integer_div(&tmp, &b->data.integer, &tmp);
+ tag_init_integer(dest, &tmp);
+ integer_clean(&tmp);
+ return dest;
case TAG_S8:
- return tag_init_s32(dest, a->data.s64 / b->data.s8);
+ return tag_init_s64(dest, a->data.s64 / b->data.s8);
case TAG_S16:
- return tag_init_s32(dest, a->data.s64 / b->data.s16);
+ return tag_init_s64(dest, a->data.s64 / b->data.s16);
case TAG_S32:
- return tag_init_s32(dest, a->data.s64 / b->data.s32);
+ return tag_init_s64(dest, a->data.s64 / b->data.s32);
case TAG_S64:
return tag_init_s64(dest, a->data.s64 / b->data.s64);
case TAG_U8:
- return tag_init_s32(dest, a->data.s64 / b->data.u8);
+ return tag_init_s64(dest, a->data.s64 / b->data.u8);
case TAG_U16:
- return tag_init_s32(dest, a->data.s64 / b->data.u16);
+ return tag_init_s64(dest, a->data.s64 / b->data.u16);
case TAG_U32:
- return tag_init_s32(dest, a->data.s64 / b->data.u32);
+ return tag_init_s64(dest, a->data.s64 / b->data.u32);
case TAG_U64:
return tag_init_s64(dest, a->data.s64 / b->data.u64);
default:
@@ -782,6 +883,12 @@ s_tag * tag_div (const s_tag *a, const s_tag *b, s_tag *dest)
return tag_init_f32(dest, a->data.u8 / b->data.f32);
case TAG_F64:
return tag_init_f64(dest, a->data.u8 / b->data.f64);
+ case TAG_INTEGER:
+ integer_init_u32(&tmp, a->data.u8);
+ integer_div(&tmp, &b->data.integer, &tmp);
+ tag_init_integer(dest, &tmp);
+ integer_clean(&tmp);
+ return dest;
case TAG_S8:
return tag_init_s8(dest, a->data.u8 / b->data.s8);
case TAG_S16:
@@ -807,6 +914,12 @@ s_tag * tag_div (const s_tag *a, const s_tag *b, s_tag *dest)
return tag_init_f32(dest, a->data.u16 / b->data.f32);
case TAG_F64:
return tag_init_f64(dest, a->data.u16 / b->data.f64);
+ case TAG_INTEGER:
+ integer_init_u32(&tmp, a->data.u16);
+ integer_div(&tmp, &b->data.integer, &tmp);
+ tag_init_integer(dest, &tmp);
+ integer_clean(&tmp);
+ return dest;
case TAG_S8:
return tag_init_s16(dest, a->data.u16 / b->data.s8);
case TAG_S16:
@@ -832,6 +945,12 @@ s_tag * tag_div (const s_tag *a, const s_tag *b, s_tag *dest)
return tag_init_f32(dest, a->data.u32 / b->data.f32);
case TAG_F64:
return tag_init_f64(dest, a->data.u32 / b->data.f64);
+ case TAG_INTEGER:
+ integer_init_u32(&tmp, a->data.u32);
+ integer_div(&tmp, &b->data.integer, &tmp);
+ tag_init_integer(dest, &tmp);
+ integer_clean(&tmp);
+ return dest;
case TAG_S8:
return tag_init_s32(dest, a->data.u32 / b->data.s8);
case TAG_S16:
@@ -857,6 +976,12 @@ s_tag * tag_div (const s_tag *a, const s_tag *b, s_tag *dest)
return tag_init_f32(dest, a->data.u64 / b->data.f32);
case TAG_F64:
return tag_init_f64(dest, a->data.u64 / b->data.f64);
+ case TAG_INTEGER:
+ integer_init_u64(&tmp, a->data.u64);
+ integer_div(&tmp, &b->data.integer, &tmp);
+ tag_init_integer(dest, &tmp);
+ integer_clean(&tmp);
+ return dest;
case TAG_S8:
return tag_init_s64(dest, a->data.u64 / b->data.s8);
case TAG_S16:
@@ -1362,6 +1487,7 @@ bool tag_lte (const s_tag *a, const s_tag *b)
s_tag * tag_mul (const s_tag *a, const s_tag *b, s_tag *dest)
{
+ s_integer tmp;
assert(a);
assert(b);
assert(dest);
@@ -1372,6 +1498,12 @@ s_tag * tag_mul (const s_tag *a, const s_tag *b, s_tag *dest)
return tag_init_f32(dest, a->data.f32 * b->data.f32);
case TAG_F64:
return tag_init_f64(dest, a->data.f32 * b->data.f64);
+ case TAG_INTEGER:
+ integer_init_double(&tmp, a->data.f32);
+ integer_mul(&tmp, &b->data.integer, &tmp);
+ tag_init_integer(dest, &tmp);
+ integer_clean(&tmp);
+ return dest;
case TAG_S8:
return tag_init_f32(dest, a->data.f32 * b->data.s8);
case TAG_S16:
@@ -1397,6 +1529,12 @@ s_tag * tag_mul (const s_tag *a, const s_tag *b, s_tag *dest)
return tag_init_f64(dest, a->data.f64 * b->data.f32);
case TAG_F64:
return tag_init_f64(dest, a->data.f64 * b->data.f64);
+ case TAG_INTEGER:
+ integer_init_double(&tmp, a->data.f64);
+ integer_mul(&tmp, &b->data.integer, &tmp);
+ tag_init_integer(dest, &tmp);
+ integer_clean(&tmp);
+ return dest;
case TAG_S8:
return tag_init_f64(dest, a->data.f64 * b->data.s8);
case TAG_S16:
@@ -1416,12 +1554,82 @@ s_tag * tag_mul (const s_tag *a, const s_tag *b, s_tag *dest)
default:
goto ko;
}
+ case TAG_INTEGER:
+ switch (b->type) {
+ case TAG_F32:
+ return tag_init_f32(dest, integer_to_f64(&a->data.integer) -
+ b->data.f32);
+ case TAG_F64:
+ return tag_init_f64(dest, integer_to_f64(&a->data.integer) -
+ b->data.f64);
+ case TAG_INTEGER:
+ tag_init_integer_zero(dest);
+ integer_mul(&a->data.integer, &b->data.integer,
+ &dest->data.integer);
+ return dest;
+ case TAG_S8:
+ integer_init_s32(&tmp, b->data.s8);
+ integer_mul(&a->data.integer, &tmp, &tmp);
+ tag_init_integer(dest, &tmp);
+ integer_clean(&tmp);
+ return dest;
+ case TAG_S16:
+ integer_init_s32(&tmp, b->data.s16);
+ integer_mul(&a->data.integer, &tmp, &tmp);
+ tag_init_integer(dest, &tmp);
+ integer_clean(&tmp);
+ return dest;
+ case TAG_S32:
+ integer_init_s32(&tmp, b->data.s32);
+ integer_mul(&a->data.integer, &tmp, &tmp);
+ tag_init_integer(dest, &tmp);
+ integer_clean(&tmp);
+ return dest;
+ case TAG_S64:
+ integer_init_s64(&tmp, b->data.s64);
+ integer_mul(&a->data.integer, &tmp, &tmp);
+ tag_init_integer(dest, &tmp);
+ integer_clean(&tmp);
+ return dest;
+ case TAG_U8:
+ integer_init_u32(&tmp, b->data.u8);
+ integer_mul(&a->data.integer, &tmp, &tmp);
+ tag_init_integer(dest, &tmp);
+ integer_clean(&tmp);
+ return dest;
+ case TAG_U16:
+ integer_init_u32(&tmp, b->data.u16);
+ integer_mul(&a->data.integer, &tmp, &tmp);
+ tag_init_integer(dest, &tmp);
+ integer_clean(&tmp);
+ return dest;
+ case TAG_U32:
+ integer_init_u32(&tmp, b->data.u32);
+ integer_mul(&a->data.integer, &tmp, &tmp);
+ tag_init_integer(dest, &tmp);
+ integer_clean(&tmp);
+ return dest;
+ case TAG_U64:
+ integer_init_u64(&tmp, b->data.u64);
+ integer_mul(&a->data.integer, &tmp, &tmp);
+ tag_init_integer(dest, &tmp);
+ integer_clean(&tmp);
+ return dest;
+ default:
+ goto ko;
+ }
case TAG_S8:
switch (b->type) {
case TAG_F32:
return tag_init_f32(dest, a->data.s8 * b->data.f32);
case TAG_F64:
return tag_init_f64(dest, a->data.s8 * b->data.f64);
+ case TAG_INTEGER:
+ integer_init_s32(&tmp, a->data.s8);
+ integer_mul(&tmp, &b->data.integer, &tmp);
+ tag_init_integer(dest, &tmp);
+ integer_clean(&tmp);
+ return dest;
case TAG_S8:
return tag_init_s8(dest, a->data.s8 * b->data.s8);
case TAG_S16:
@@ -1447,6 +1655,12 @@ s_tag * tag_mul (const s_tag *a, const s_tag *b, s_tag *dest)
return tag_init_f32(dest, a->data.s16 * b->data.f32);
case TAG_F64:
return tag_init_f64(dest, a->data.s16 * b->data.f64);
+ case TAG_INTEGER:
+ integer_init_s32(&tmp, a->data.s16);
+ integer_mul(&tmp, &b->data.integer, &tmp);
+ tag_init_integer(dest, &tmp);
+ integer_clean(&tmp);
+ return dest;
case TAG_S8:
return tag_init_s16(dest, a->data.s16 * b->data.s8);
case TAG_S16:
@@ -1472,6 +1686,12 @@ s_tag * tag_mul (const s_tag *a, const s_tag *b, s_tag *dest)
return tag_init_f32(dest, a->data.s32 * b->data.f32);
case TAG_F64:
return tag_init_f64(dest, a->data.s32 * b->data.f64);
+ case TAG_INTEGER:
+ integer_init_s32(&tmp, a->data.s32);
+ integer_mul(&tmp, &b->data.integer, &tmp);
+ tag_init_integer(dest, &tmp);
+ integer_clean(&tmp);
+ return dest;
case TAG_S8:
return tag_init_s32(dest, a->data.s32 * b->data.s8);
case TAG_S16:
@@ -1497,20 +1717,26 @@ s_tag * tag_mul (const s_tag *a, const s_tag *b, s_tag *dest)
return tag_init_f32(dest, a->data.s64 * b->data.f32);
case TAG_F64:
return tag_init_f64(dest, a->data.s64 * b->data.f64);
+ case TAG_INTEGER:
+ integer_init_s64(&tmp, a->data.s64);
+ integer_mul(&tmp, &b->data.integer, &tmp);
+ tag_init_integer(dest, &tmp);
+ integer_clean(&tmp);
+ return dest;
case TAG_S8:
- return tag_init_s32(dest, a->data.s64 * b->data.s8);
+ return tag_init_s64(dest, a->data.s64 * b->data.s8);
case TAG_S16:
- return tag_init_s32(dest, a->data.s64 * b->data.s16);
+ return tag_init_s64(dest, a->data.s64 * b->data.s16);
case TAG_S32:
- return tag_init_s32(dest, a->data.s64 * b->data.s32);
+ return tag_init_s64(dest, a->data.s64 * b->data.s32);
case TAG_S64:
return tag_init_s64(dest, a->data.s64 * b->data.s64);
case TAG_U8:
- return tag_init_s32(dest, a->data.s64 * b->data.u8);
+ return tag_init_s64(dest, a->data.s64 * b->data.u8);
case TAG_U16:
- return tag_init_s32(dest, a->data.s64 * b->data.u16);
+ return tag_init_s64(dest, a->data.s64 * b->data.u16);
case TAG_U32:
- return tag_init_s32(dest, a->data.s64 * b->data.u32);
+ return tag_init_s64(dest, a->data.s64 * b->data.u32);
case TAG_U64:
return tag_init_s64(dest, a->data.s64 * b->data.u64);
default:
@@ -1522,6 +1748,12 @@ s_tag * tag_mul (const s_tag *a, const s_tag *b, s_tag *dest)
return tag_init_f32(dest, a->data.u8 * b->data.f32);
case TAG_F64:
return tag_init_f64(dest, a->data.u8 * b->data.f64);
+ case TAG_INTEGER:
+ integer_init_u32(&tmp, a->data.u8);
+ integer_mul(&tmp, &b->data.integer, &tmp);
+ tag_init_integer(dest, &tmp);
+ integer_clean(&tmp);
+ return dest;
case TAG_S8:
return tag_init_s8(dest, a->data.u8 * b->data.s8);
case TAG_S16:
@@ -1547,6 +1779,12 @@ s_tag * tag_mul (const s_tag *a, const s_tag *b, s_tag *dest)
return tag_init_f32(dest, a->data.u16 * b->data.f32);
case TAG_F64:
return tag_init_f64(dest, a->data.u16 * b->data.f64);
+ case TAG_INTEGER:
+ integer_init_u32(&tmp, a->data.u16);
+ integer_mul(&tmp, &b->data.integer, &tmp);
+ tag_init_integer(dest, &tmp);
+ integer_clean(&tmp);
+ return dest;
case TAG_S8:
return tag_init_s16(dest, a->data.u16 * b->data.s8);
case TAG_S16:
@@ -1572,6 +1810,12 @@ s_tag * tag_mul (const s_tag *a, const s_tag *b, s_tag *dest)
return tag_init_f32(dest, a->data.u32 * b->data.f32);
case TAG_F64:
return tag_init_f64(dest, a->data.u32 * b->data.f64);
+ case TAG_INTEGER:
+ integer_init_u32(&tmp, a->data.u32);
+ integer_mul(&tmp, &b->data.integer, &tmp);
+ tag_init_integer(dest, &tmp);
+ integer_clean(&tmp);
+ return dest;
case TAG_S8:
return tag_init_s32(dest, a->data.u32 * b->data.s8);
case TAG_S16:
@@ -1597,6 +1841,12 @@ s_tag * tag_mul (const s_tag *a, const s_tag *b, s_tag *dest)
return tag_init_f32(dest, a->data.u64 * b->data.f32);
case TAG_F64:
return tag_init_f64(dest, a->data.u64 * b->data.f64);
+ case TAG_INTEGER:
+ integer_init_u64(&tmp, a->data.u64);
+ integer_mul(&tmp, &b->data.integer, &tmp);
+ tag_init_integer(dest, &tmp);
+ integer_clean(&tmp);
+ return dest;
case TAG_S8:
return tag_init_s64(dest, a->data.u64 * b->data.s8);
case TAG_S16:
@@ -1719,6 +1969,7 @@ s_tag * tag_str_1 (s_tag *tag, s8 *free, const s8 *p)
s_tag * tag_sub (const s_tag *a, const s_tag *b, s_tag *dest)
{
+ s_integer tmp;
assert(a);
assert(b);
assert(dest);
@@ -1729,6 +1980,12 @@ s_tag * tag_sub (const s_tag *a, const s_tag *b, s_tag *dest)
return tag_init_f32(dest, a->data.f32 - b->data.f32);
case TAG_F64:
return tag_init_f64(dest, a->data.f32 - b->data.f64);
+ case TAG_INTEGER:
+ integer_init_double(&tmp, a->data.f32);
+ integer_sub(&tmp, &b->data.integer, &tmp);
+ tag_init_integer(dest, &tmp);
+ integer_clean(&tmp);
+ return dest;
case TAG_S8:
return tag_init_f32(dest, a->data.f32 - b->data.s8);
case TAG_S16:
@@ -1754,6 +2011,12 @@ s_tag * tag_sub (const s_tag *a, const s_tag *b, s_tag *dest)
return tag_init_f64(dest, a->data.f64 - b->data.f32);
case TAG_F64:
return tag_init_f64(dest, a->data.f64 - b->data.f64);
+ case TAG_INTEGER:
+ integer_init_double(&tmp, a->data.f64);
+ integer_sub(&tmp, &b->data.integer, &tmp);
+ tag_init_integer(dest, &tmp);
+ integer_clean(&tmp);
+ return dest;
case TAG_S8:
return tag_init_f64(dest, a->data.f64 - b->data.s8);
case TAG_S16:
@@ -1773,12 +2036,82 @@ s_tag * tag_sub (const s_tag *a, const s_tag *b, s_tag *dest)
default:
goto ko;
}
+ case TAG_INTEGER:
+ switch (b->type) {
+ case TAG_F32:
+ return tag_init_f32(dest, integer_to_f64(&a->data.integer) -
+ b->data.f32);
+ case TAG_F64:
+ return tag_init_f64(dest, integer_to_f64(&a->data.integer) -
+ b->data.f64);
+ case TAG_INTEGER:
+ tag_init_integer_zero(dest);
+ integer_sub(&a->data.integer, &b->data.integer,
+ &dest->data.integer);
+ return dest;
+ case TAG_S8:
+ integer_init_s32(&tmp, b->data.s8);
+ integer_sub(&a->data.integer, &tmp, &tmp);
+ tag_init_integer(dest, &tmp);
+ integer_clean(&tmp);
+ return dest;
+ case TAG_S16:
+ integer_init_s32(&tmp, b->data.s16);
+ integer_sub(&a->data.integer, &tmp, &tmp);
+ tag_init_integer(dest, &tmp);
+ integer_clean(&tmp);
+ return dest;
+ case TAG_S32:
+ integer_init_s32(&tmp, b->data.s32);
+ integer_sub(&a->data.integer, &tmp, &tmp);
+ tag_init_integer(dest, &tmp);
+ integer_clean(&tmp);
+ return dest;
+ case TAG_S64:
+ integer_init_s64(&tmp, b->data.s64);
+ integer_sub(&a->data.integer, &tmp, &tmp);
+ tag_init_integer(dest, &tmp);
+ integer_clean(&tmp);
+ return dest;
+ case TAG_U8:
+ integer_init_u32(&tmp, b->data.u8);
+ integer_sub(&a->data.integer, &tmp, &tmp);
+ tag_init_integer(dest, &tmp);
+ integer_clean(&tmp);
+ return dest;
+ case TAG_U16:
+ integer_init_u32(&tmp, b->data.u16);
+ integer_sub(&a->data.integer, &tmp, &tmp);
+ tag_init_integer(dest, &tmp);
+ integer_clean(&tmp);
+ return dest;
+ case TAG_U32:
+ integer_init_u32(&tmp, b->data.u32);
+ integer_sub(&a->data.integer, &tmp, &tmp);
+ tag_init_integer(dest, &tmp);
+ integer_clean(&tmp);
+ return dest;
+ case TAG_U64:
+ integer_init_u64(&tmp, b->data.u64);
+ integer_sub(&a->data.integer, &tmp, &tmp);
+ tag_init_integer(dest, &tmp);
+ integer_clean(&tmp);
+ return dest;
+ default:
+ goto ko;
+ }
case TAG_S8:
switch (b->type) {
case TAG_F32:
return tag_init_f32(dest, a->data.s8 - b->data.f32);
case TAG_F64:
return tag_init_f64(dest, a->data.s8 - b->data.f64);
+ case TAG_INTEGER:
+ integer_init_s32(&tmp, a->data.s8);
+ integer_sub(&tmp, &b->data.integer, &tmp);
+ tag_init_integer(dest, &tmp);
+ integer_clean(&tmp);
+ return dest;
case TAG_S8:
return tag_init_s8(dest, a->data.s8 - b->data.s8);
case TAG_S16:
@@ -1804,6 +2137,12 @@ s_tag * tag_sub (const s_tag *a, const s_tag *b, s_tag *dest)
return tag_init_f32(dest, a->data.s16 - b->data.f32);
case TAG_F64:
return tag_init_f64(dest, a->data.s16 - b->data.f64);
+ case TAG_INTEGER:
+ integer_init_s32(&tmp, a->data.s16);
+ integer_sub(&tmp, &b->data.integer, &tmp);
+ tag_init_integer(dest, &tmp);
+ integer_clean(&tmp);
+ return dest;
case TAG_S8:
return tag_init_s16(dest, a->data.s16 - b->data.s8);
case TAG_S16:
@@ -1829,6 +2168,12 @@ s_tag * tag_sub (const s_tag *a, const s_tag *b, s_tag *dest)
return tag_init_f32(dest, a->data.s32 - b->data.f32);
case TAG_F64:
return tag_init_f64(dest, a->data.s32 - b->data.f64);
+ case TAG_INTEGER:
+ integer_init_s32(&tmp, a->data.s32);
+ integer_sub(&tmp, &b->data.integer, &tmp);
+ tag_init_integer(dest, &tmp);
+ integer_clean(&tmp);
+ return dest;
case TAG_S8:
return tag_init_s32(dest, a->data.s32 - b->data.s8);
case TAG_S16:
@@ -1854,20 +2199,26 @@ s_tag * tag_sub (const s_tag *a, const s_tag *b, s_tag *dest)
return tag_init_f32(dest, a->data.s64 - b->data.f32);
case TAG_F64:
return tag_init_f64(dest, a->data.s64 - b->data.f64);
+ case TAG_INTEGER:
+ integer_init_s64(&tmp, a->data.s64);
+ integer_sub(&tmp, &b->data.integer, &tmp);
+ tag_init_integer(dest, &tmp);
+ integer_clean(&tmp);
+ return dest;
case TAG_S8:
- return tag_init_s32(dest, a->data.s64 - b->data.s8);
+ return tag_init_s64(dest, a->data.s64 - b->data.s8);
case TAG_S16:
- return tag_init_s32(dest, a->data.s64 - b->data.s16);
+ return tag_init_s64(dest, a->data.s64 - b->data.s16);
case TAG_S32:
- return tag_init_s32(dest, a->data.s64 - b->data.s32);
+ return tag_init_s64(dest, a->data.s64 - b->data.s32);
case TAG_S64:
return tag_init_s64(dest, a->data.s64 - b->data.s64);
case TAG_U8:
- return tag_init_s32(dest, a->data.s64 - b->data.u8);
+ return tag_init_s64(dest, a->data.s64 - b->data.u8);
case TAG_U16:
- return tag_init_s32(dest, a->data.s64 - b->data.u16);
+ return tag_init_s64(dest, a->data.s64 - b->data.u16);
case TAG_U32:
- return tag_init_s32(dest, a->data.s64 - b->data.u32);
+ return tag_init_s64(dest, a->data.s64 - b->data.u32);
case TAG_U64:
return tag_init_s64(dest, a->data.s64 - b->data.u64);
default:
@@ -1879,6 +2230,12 @@ s_tag * tag_sub (const s_tag *a, const s_tag *b, s_tag *dest)
return tag_init_f32(dest, a->data.u8 - b->data.f32);
case TAG_F64:
return tag_init_f64(dest, a->data.u8 - b->data.f64);
+ case TAG_INTEGER:
+ integer_init_u32(&tmp, a->data.u8);
+ integer_sub(&tmp, &b->data.integer, &tmp);
+ tag_init_integer(dest, &tmp);
+ integer_clean(&tmp);
+ return dest;
case TAG_S8:
return tag_init_s8(dest, a->data.u8 - b->data.s8);
case TAG_S16:
@@ -1904,6 +2261,12 @@ s_tag * tag_sub (const s_tag *a, const s_tag *b, s_tag *dest)
return tag_init_f32(dest, a->data.u16 - b->data.f32);
case TAG_F64:
return tag_init_f64(dest, a->data.u16 - b->data.f64);
+ case TAG_INTEGER:
+ integer_init_u32(&tmp, a->data.u16);
+ integer_sub(&tmp, &b->data.integer, &tmp);
+ tag_init_integer(dest, &tmp);
+ integer_clean(&tmp);
+ return dest;
case TAG_S8:
return tag_init_s16(dest, a->data.u16 - b->data.s8);
case TAG_S16:
@@ -1929,6 +2292,12 @@ s_tag * tag_sub (const s_tag *a, const s_tag *b, s_tag *dest)
return tag_init_f32(dest, a->data.u32 - b->data.f32);
case TAG_F64:
return tag_init_f64(dest, a->data.u32 - b->data.f64);
+ case TAG_INTEGER:
+ integer_init_u32(&tmp, a->data.u32);
+ integer_sub(&tmp, &b->data.integer, &tmp);
+ tag_init_integer(dest, &tmp);
+ integer_clean(&tmp);
+ return dest;
case TAG_S8:
return tag_init_s32(dest, a->data.u32 - b->data.s8);
case TAG_S16:
@@ -1954,6 +2323,12 @@ s_tag * tag_sub (const s_tag *a, const s_tag *b, s_tag *dest)
return tag_init_f32(dest, a->data.u64 - b->data.f32);
case TAG_F64:
return tag_init_f64(dest, a->data.u64 - b->data.f64);
+ case TAG_INTEGER:
+ integer_init_u64(&tmp, a->data.u64);
+ integer_sub(&tmp, &b->data.integer, &tmp);
+ tag_init_integer(dest, &tmp);
+ integer_clean(&tmp);
+ return dest;
case TAG_S8:
return tag_init_s64(dest, a->data.u64 - b->data.s8);
case TAG_S16:
diff --git a/libffi b/libffi
index 6edec9e..34e186c 160000
--- a/libffi
+++ b/libffi
@@ -1 +1 @@
-Subproject commit 6edec9e63e5bff5ebf3012f3d9a0c3504cb7ddc0
+Subproject commit 34e186c971ec16271b9262265950a0dfc762b143
diff --git a/test/ic3/integer.in b/test/ic3/integer.in
index bc445cf..e294cba 100644
--- a/test/ic3/integer.in
+++ b/test/ic3/integer.in
@@ -18,7 +18,6 @@
0x123456789ABCDEF0123456789ABCDEF0
0x123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0
0x123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0
-
-0x00
-0x01
-0x12
@@ -39,14 +38,12 @@
-0x123456789ABCDEF0123456789ABCDEF0
-0x123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0
-0x123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0
-
0
-0
1
-1
2
-2
-
1234567890
-1234567890
12345678901234567890
@@ -61,27 +58,16 @@
-123456789012345678901234567890123456789012345678901234567890
1234567890123456789012345678901234567890123456789012345678901234567890
-1234567890123456789012345678901234567890123456789012345678901234567890
-
12345678901234567890123456789012345678901234567890123456789012345678901234567890
-
-12345678901234567890123456789012345678901234567890123456789012345678901234567890
-
123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
-
-123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
-
1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
-
-1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
-
1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
-
-1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
-
1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
-
-1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
-
-18446744073709551616 + -18446744073709551616
-18446744073709551616 + -4294967296
-18446744073709551616 + -32769
@@ -182,3 +168,303 @@
36893488147419103232 + 65536
36893488147419103232 + 8589934592
36893488147419103232 + 36893488147419103232
+-18446744073709551616 - -18446744073709551616
+-18446744073709551616 - -4294967296
+-18446744073709551616 - -32769
+-18446744073709551616 - -129
+-18446744073709551616 - -1
+-18446744073709551616 - 1
+-18446744073709551616 - 256
+-18446744073709551616 - 65536
+-18446744073709551616 - 8589934592
+-18446744073709551616 - 36893488147419103232
+-4294967296 - -18446744073709551616
+-4294967296 - -4294967296
+-4294967296 - -32769
+-4294967296 - -129
+-4294967296 - -1
+-4294967296 - 1
+-4294967296 - 256
+-4294967296 - 65536
+-4294967296 - 8589934592
+-4294967296 - 36893488147419103232
+-32769 - -18446744073709551616
+-32769 - -4294967296
+-32769 - -32769
+-32769 - -129
+-32769 - -1
+-32769 - 1
+-32769 - 256
+-32769 - 65536
+-32769 - 8589934592
+-32769 - 36893488147419103232
+-129 - -18446744073709551616
+-129 - -4294967296
+-129 - -32769
+-129 - -129
+-129 - -1
+-129 - 1
+-129 - 256
+-129 - 65536
+-129 - 8589934592
+-129 - 36893488147419103232
+-1 - -18446744073709551616
+-1 - -4294967296
+-1 - -32769
+-1 - -129
+-1 - -1
+-1 - 1
+-1 - 256
+-1 - 65536
+-1 - 8589934592
+-1 - 36893488147419103232
+1 - -18446744073709551616
+1 - -4294967296
+1 - -32769
+1 - -129
+1 - -1
+1 - 1
+1 - 256
+1 - 65536
+1 - 8589934592
+1 - 36893488147419103232
+256 - -18446744073709551616
+256 - -4294967296
+256 - -32769
+256 - -257
+256 - -1
+256 - 1
+256 - 256
+256 - 65536
+256 - 8589934592
+256 - 36893488147419103232
+65536 - -18446744073709551616
+65536 - -4294967296
+65536 - -32769
+65536 - -129
+65536 - -1
+65536 - 1
+65536 - 256
+65536 - 65536
+65536 - 8589934592
+65536 - 36893488147419103232
+8589934592 - -18446744073709551616
+8589934592 - -4294967296
+8589934592 - -32769
+8589934592 - -129
+8589934592 - -1
+8589934592 - 1
+8589934592 - 256
+8589934592 - 65536
+8589934592 - 8589934592
+8589934592 - 36893488147419103232
+36893488147419103232 - -18446744073709551616
+36893488147419103232 - -4294967296
+36893488147419103232 - -32769
+36893488147419103232 - -129
+36893488147419103232 - -1
+36893488147419103232 - 1
+36893488147419103232 - 256
+36893488147419103232 - 65536
+36893488147419103232 - 8589934592
+36893488147419103232 - 36893488147419103232
+-18446744073709551616 * -18446744073709551616
+-18446744073709551616 * -4294967296
+-18446744073709551616 * -32769
+-18446744073709551616 * -129
+-18446744073709551616 * -1
+-18446744073709551616 * 1
+-18446744073709551616 * 256
+-18446744073709551616 * 65536
+-18446744073709551616 * 8589934592
+-18446744073709551616 * 36893488147419103232
+-4294967296 * -18446744073709551616
+-4294967296 * -4294967296
+-4294967296 * -32769
+-4294967296 * -129
+-4294967296 * -1
+-4294967296 * 1
+-4294967296 * 256
+-4294967296 * 65536
+-4294967296 * 8589934592
+-4294967296 * 36893488147419103232
+-32769 * -18446744073709551616
+-32769 * -4294967296
+-32769 * -32769
+-32769 * -129
+-32769 * -1
+-32769 * 1
+-32769 * 256
+-32769 * 65536
+-32769 * 8589934592
+-32769 * 36893488147419103232
+-129 * -18446744073709551616
+-129 * -4294967296
+-129 * -32769
+-129 * -129
+-129 * -1
+-129 * 1
+-129 * 256
+-129 * 65536
+-129 * 8589934592
+-129 * 36893488147419103232
+-1 * -18446744073709551616
+-1 * -4294967296
+-1 * -32769
+-1 * -129
+-1 * -1
+-1 * 1
+-1 * 256
+-1 * 65536
+-1 * 8589934592
+-1 * 36893488147419103232
+1 * -18446744073709551616
+1 * -4294967296
+1 * -32769
+1 * -129
+1 * -1
+1 * 1
+1 * 256
+1 * 65536
+1 * 8589934592
+1 * 36893488147419103232
+256 * -18446744073709551616
+256 * -4294967296
+256 * -32769
+256 * -257
+256 * -1
+256 * 1
+256 * 256
+256 * 65536
+256 * 8589934592
+256 * 36893488147419103232
+65536 * -18446744073709551616
+65536 * -4294967296
+65536 * -32769
+65536 * -129
+65536 * -1
+65536 * 1
+65536 * 256
+65536 * 65536
+65536 * 8589934592
+65536 * 36893488147419103232
+8589934592 * -18446744073709551616
+8589934592 * -4294967296
+8589934592 * -32769
+8589934592 * -129
+8589934592 * -1
+8589934592 * 1
+8589934592 * 256
+8589934592 * 65536
+8589934592 * 8589934592
+8589934592 * 36893488147419103232
+36893488147419103232 * -18446744073709551616
+36893488147419103232 * -4294967296
+36893488147419103232 * -32769
+36893488147419103232 * -129
+36893488147419103232 * -1
+36893488147419103232 * 1
+36893488147419103232 * 256
+36893488147419103232 * 65536
+36893488147419103232 * 8589934592
+36893488147419103232 * 36893488147419103232
+-18446744073709551616 / -18446744073709551616
+-18446744073709551616 / -4294967296
+-18446744073709551616 / -32769
+-18446744073709551616 / -129
+-18446744073709551616 / -1
+-18446744073709551616 / 1
+-18446744073709551616 / 256
+-18446744073709551616 / 65536
+-18446744073709551616 / 8589934592
+-18446744073709551616 / 36893488147419103232
+-4294967296 / -18446744073709551616
+-4294967296 / -4294967296
+-4294967296 / -32769
+-4294967296 / -129
+-4294967296 / -1
+-4294967296 / 1
+-4294967296 / 256
+-4294967296 / 65536
+-4294967296 / 8589934592
+-4294967296 / 36893488147419103232
+-32769 / -18446744073709551616
+-32769 / -4294967296
+-32769 / -32769
+-32769 / -129
+-32769 / -1
+-32769 / 1
+-32769 / 256
+-32769 / 65536
+-32769 / 8589934592
+-32769 / 36893488147419103232
+-129 / -18446744073709551616
+-129 / -4294967296
+-129 / -32769
+-129 / -129
+-129 / -1
+-129 / 1
+-129 / 256
+-129 / 65536
+-129 / 8589934592
+-129 / 36893488147419103232
+-1 / -18446744073709551616
+-1 / -4294967296
+-1 / -32769
+-1 / -129
+-1 / -1
+-1 / 1
+-1 / 256
+-1 / 65536
+-1 / 8589934592
+-1 / 36893488147419103232
+1 / -18446744073709551616
+1 / -4294967296
+1 / -32769
+1 / -129
+1 / -1
+1 / 1
+1 / 256
+1 / 65536
+1 / 8589934592
+1 / 36893488147419103232
+256 / -18446744073709551616
+256 / -4294967296
+256 / -32769
+256 / -257
+256 / -1
+256 / 1
+256 / 256
+256 / 65536
+256 / 8589934592
+256 / 36893488147419103232
+65536 / -18446744073709551616
+65536 / -4294967296
+65536 / -32769
+65536 / -129
+65536 / -1
+65536 / 1
+65536 / 256
+65536 / 65536
+65536 / 8589934592
+65536 / 36893488147419103232
+8589934592 / -18446744073709551616
+8589934592 / -4294967296
+8589934592 / -32769
+8589934592 / -129
+8589934592 / -1
+8589934592 / 1
+8589934592 / 256
+8589934592 / 65536
+8589934592 / 8589934592
+8589934592 / 36893488147419103232
+36893488147419103232 / -18446744073709551616
+36893488147419103232 / -4294967296
+36893488147419103232 / -32769
+36893488147419103232 / -129
+36893488147419103232 / -1
+36893488147419103232 / 1
+36893488147419103232 / 256
+36893488147419103232 / 65536
+36893488147419103232 / 8589934592
+36893488147419103232 / 36893488147419103232
diff --git a/test/ic3/integer.lisp b/test/ic3/integer.lisp
index a8f07ab..44ddaf3 100644
--- a/test/ic3/integer.lisp
+++ b/test/ic3/integer.lisp
@@ -3,103 +3,104 @@
(with-open-file (out #P"~/integer.out"
:direction :output
:element-type 'character)
- (format out "~A~%" (+ -18446744073709551616 -18446744073709551616))
- (format out "~A~%" (+ -18446744073709551616 -4294967296))
- (format out "~A~%" (+ -18446744073709551616 -32769))
- (format out "~A~%" (+ -18446744073709551616 -129))
- (format out "~A~%" (+ -18446744073709551616 -1))
- (format out "~A~%" (+ -18446744073709551616 1))
- (format out "~A~%" (+ -18446744073709551616 256))
- (format out "~A~%" (+ -18446744073709551616 65536))
- (format out "~A~%" (+ -18446744073709551616 8589934592))
- (format out "~A~%" (+ -18446744073709551616 36893488147419103232))
- (format out "~A~%" (+ -4294967296 -18446744073709551616))
- (format out "~A~%" (+ -4294967296 -4294967296))
- (format out "~A~%" (+ -4294967296 -32769))
- (format out "~A~%" (+ -4294967296 -129))
- (format out "~A~%" (+ -4294967296 -1))
- (format out "~A~%" (+ -4294967296 1))
- (format out "~A~%" (+ -4294967296 256))
- (format out "~A~%" (+ -4294967296 65536))
- (format out "~A~%" (+ -4294967296 8589934592))
- (format out "~A~%" (+ -4294967296 36893488147419103232))
- (format out "~A~%" (+ -32769 -18446744073709551616))
- (format out "~A~%" (+ -32769 -4294967296))
- (format out "~A~%" (+ -32769 -32769))
- (format out "~A~%" (+ -32769 -129))
- (format out "~A~%" (+ -32769 -1))
- (format out "~A~%" (+ -32769 1))
- (format out "~A~%" (+ -32769 256))
- (format out "~A~%" (+ -32769 65536))
- (format out "~A~%" (+ -32769 8589934592))
- (format out "~A~%" (+ -32769 36893488147419103232))
- (format out "~A~%" (+ -129 -18446744073709551616))
- (format out "~A~%" (+ -129 -4294967296))
- (format out "~A~%" (+ -129 -32769))
- (format out "~A~%" (+ -129 -129))
- (format out "~A~%" (+ -129 -1))
- (format out "~A~%" (+ -129 1))
- (format out "~A~%" (+ -129 256))
- (format out "~A~%" (+ -129 65536))
- (format out "~A~%" (+ -129 8589934592))
- (format out "~A~%" (+ -129 36893488147419103232))
- (format out "~A~%" (+ -1 -18446744073709551616))
- (format out "~A~%" (+ -1 -4294967296))
- (format out "~A~%" (+ -1 -32769))
- (format out "~A~%" (+ -1 -129))
- (format out "~A~%" (+ -1 -1))
- (format out "~A~%" (+ -1 1))
- (format out "~A~%" (+ -1 256))
- (format out "~A~%" (+ -1 65536))
- (format out "~A~%" (+ -1 8589934592))
- (format out "~A~%" (+ -1 36893488147419103232))
- (format out "~A~%" (+ 1 -18446744073709551616))
- (format out "~A~%" (+ 1 -4294967296))
- (format out "~A~%" (+ 1 -32769))
- (format out "~A~%" (+ 1 -129))
- (format out "~A~%" (+ 1 -1))
- (format out "~A~%" (+ 1 1))
- (format out "~A~%" (+ 1 256))
- (format out "~A~%" (+ 1 65536))
- (format out "~A~%" (+ 1 8589934592))
- (format out "~A~%" (+ 1 36893488147419103232))
- (format out "~A~%" (+ 256 -18446744073709551616))
- (format out "~A~%" (+ 256 -4294967296))
- (format out "~A~%" (+ 256 -32769))
- (format out "~A~%" (+ 256 -257))
- (format out "~A~%" (+ 256 -1))
- (format out "~A~%" (+ 256 1))
- (format out "~A~%" (+ 256 256))
- (format out "~A~%" (+ 256 65536))
- (format out "~A~%" (+ 256 8589934592))
- (format out "~A~%" (+ 256 36893488147419103232))
- (format out "~A~%" (+ 65536 -18446744073709551616))
- (format out "~A~%" (+ 65536 -4294967296))
- (format out "~A~%" (+ 65536 -32769))
- (format out "~A~%" (+ 65536 -129))
- (format out "~A~%" (+ 65536 -1))
- (format out "~A~%" (+ 65536 1))
- (format out "~A~%" (+ 65536 256))
- (format out "~A~%" (+ 65536 65536))
- (format out "~A~%" (+ 65536 8589934592))
- (format out "~A~%" (+ 65536 36893488147419103232))
- (format out "~A~%" (+ 8589934592 -18446744073709551616))
- (format out "~A~%" (+ 8589934592 -4294967296))
- (format out "~A~%" (+ 8589934592 -32769))
- (format out "~A~%" (+ 8589934592 -129))
- (format out "~A~%" (+ 8589934592 -1))
- (format out "~A~%" (+ 8589934592 1))
- (format out "~A~%" (+ 8589934592 256))
- (format out "~A~%" (+ 8589934592 65536))
- (format out "~A~%" (+ 8589934592 8589934592))
- (format out "~A~%" (+ 8589934592 36893488147419103232))
- (format out "~A~%" (+ 36893488147419103232 -18446744073709551616))
- (format out "~A~%" (+ 36893488147419103232 -4294967296))
- (format out "~A~%" (+ 36893488147419103232 -32769))
- (format out "~A~%" (+ 36893488147419103232 -129))
- (format out "~A~%" (+ 36893488147419103232 -1))
- (format out "~A~%" (+ 36893488147419103232 1))
- (format out "~A~%" (+ 36893488147419103232 256))
- (format out "~A~%" (+ 36893488147419103232 65536))
- (format out "~A~%" (+ 36893488147419103232 8589934592))
- (format out "~A~%" (+ 36893488147419103232 36893488147419103232)))
+ (dolist (op (list #'- #'* #'/))
+ (format out "~A~%" (funcall op -18446744073709551616 -18446744073709551616))
+ (format out "~A~%" (funcall op -18446744073709551616 -4294967296))
+ (format out "~A~%" (funcall op -18446744073709551616 -32769))
+ (format out "~A~%" (funcall op -18446744073709551616 -129))
+ (format out "~A~%" (funcall op -18446744073709551616 -1))
+ (format out "~A~%" (funcall op -18446744073709551616 1))
+ (format out "~A~%" (funcall op -18446744073709551616 256))
+ (format out "~A~%" (funcall op -18446744073709551616 65536))
+ (format out "~A~%" (funcall op -18446744073709551616 8589934592))
+ (format out "~A~%" (funcall op -18446744073709551616 36893488147419103232))
+ (format out "~A~%" (funcall op -4294967296 -18446744073709551616))
+ (format out "~A~%" (funcall op -4294967296 -4294967296))
+ (format out "~A~%" (funcall op -4294967296 -32769))
+ (format out "~A~%" (funcall op -4294967296 -129))
+ (format out "~A~%" (funcall op -4294967296 -1))
+ (format out "~A~%" (funcall op -4294967296 1))
+ (format out "~A~%" (funcall op -4294967296 256))
+ (format out "~A~%" (funcall op -4294967296 65536))
+ (format out "~A~%" (funcall op -4294967296 8589934592))
+ (format out "~A~%" (funcall op -4294967296 36893488147419103232))
+ (format out "~A~%" (funcall op -32769 -18446744073709551616))
+ (format out "~A~%" (funcall op -32769 -4294967296))
+ (format out "~A~%" (funcall op -32769 -32769))
+ (format out "~A~%" (funcall op -32769 -129))
+ (format out "~A~%" (funcall op -32769 -1))
+ (format out "~A~%" (funcall op -32769 1))
+ (format out "~A~%" (funcall op -32769 256))
+ (format out "~A~%" (funcall op -32769 65536))
+ (format out "~A~%" (funcall op -32769 8589934592))
+ (format out "~A~%" (funcall op -32769 36893488147419103232))
+ (format out "~A~%" (funcall op -129 -18446744073709551616))
+ (format out "~A~%" (funcall op -129 -4294967296))
+ (format out "~A~%" (funcall op -129 -32769))
+ (format out "~A~%" (funcall op -129 -129))
+ (format out "~A~%" (funcall op -129 -1))
+ (format out "~A~%" (funcall op -129 1))
+ (format out "~A~%" (funcall op -129 256))
+ (format out "~A~%" (funcall op -129 65536))
+ (format out "~A~%" (funcall op -129 8589934592))
+ (format out "~A~%" (funcall op -129 36893488147419103232))
+ (format out "~A~%" (funcall op -1 -18446744073709551616))
+ (format out "~A~%" (funcall op -1 -4294967296))
+ (format out "~A~%" (funcall op -1 -32769))
+ (format out "~A~%" (funcall op -1 -129))
+ (format out "~A~%" (funcall op -1 -1))
+ (format out "~A~%" (funcall op -1 1))
+ (format out "~A~%" (funcall op -1 256))
+ (format out "~A~%" (funcall op -1 65536))
+ (format out "~A~%" (funcall op -1 8589934592))
+ (format out "~A~%" (funcall op -1 36893488147419103232))
+ (format out "~A~%" (funcall op 1 -18446744073709551616))
+ (format out "~A~%" (funcall op 1 -4294967296))
+ (format out "~A~%" (funcall op 1 -32769))
+ (format out "~A~%" (funcall op 1 -129))
+ (format out "~A~%" (funcall op 1 -1))
+ (format out "~A~%" (funcall op 1 1))
+ (format out "~A~%" (funcall op 1 256))
+ (format out "~A~%" (funcall op 1 65536))
+ (format out "~A~%" (funcall op 1 8589934592))
+ (format out "~A~%" (funcall op 1 36893488147419103232))
+ (format out "~A~%" (funcall op 256 -18446744073709551616))
+ (format out "~A~%" (funcall op 256 -4294967296))
+ (format out "~A~%" (funcall op 256 -32769))
+ (format out "~A~%" (funcall op 256 -257))
+ (format out "~A~%" (funcall op 256 -1))
+ (format out "~A~%" (funcall op 256 1))
+ (format out "~A~%" (funcall op 256 256))
+ (format out "~A~%" (funcall op 256 65536))
+ (format out "~A~%" (funcall op 256 8589934592))
+ (format out "~A~%" (funcall op 256 36893488147419103232))
+ (format out "~A~%" (funcall op 65536 -18446744073709551616))
+ (format out "~A~%" (funcall op 65536 -4294967296))
+ (format out "~A~%" (funcall op 65536 -32769))
+ (format out "~A~%" (funcall op 65536 -129))
+ (format out "~A~%" (funcall op 65536 -1))
+ (format out "~A~%" (funcall op 65536 1))
+ (format out "~A~%" (funcall op 65536 256))
+ (format out "~A~%" (funcall op 65536 65536))
+ (format out "~A~%" (funcall op 65536 8589934592))
+ (format out "~A~%" (funcall op 65536 36893488147419103232))
+ (format out "~A~%" (funcall op 8589934592 -18446744073709551616))
+ (format out "~A~%" (funcall op 8589934592 -4294967296))
+ (format out "~A~%" (funcall op 8589934592 -32769))
+ (format out "~A~%" (funcall op 8589934592 -129))
+ (format out "~A~%" (funcall op 8589934592 -1))
+ (format out "~A~%" (funcall op 8589934592 1))
+ (format out "~A~%" (funcall op 8589934592 256))
+ (format out "~A~%" (funcall op 8589934592 65536))
+ (format out "~A~%" (funcall op 8589934592 8589934592))
+ (format out "~A~%" (funcall op 8589934592 36893488147419103232))
+ (format out "~A~%" (funcall op 36893488147419103232 -18446744073709551616))
+ (format out "~A~%" (funcall op 36893488147419103232 -4294967296))
+ (format out "~A~%" (funcall op 36893488147419103232 -32769))
+ (format out "~A~%" (funcall op 36893488147419103232 -129))
+ (format out "~A~%" (funcall op 36893488147419103232 -1))
+ (format out "~A~%" (funcall op 36893488147419103232 1))
+ (format out "~A~%" (funcall op 36893488147419103232 256))
+ (format out "~A~%" (funcall op 36893488147419103232 65536))
+ (format out "~A~%" (funcall op 36893488147419103232 8589934592))
+ (format out "~A~%" (funcall op 36893488147419103232 36893488147419103232))))
diff --git a/test/ic3/integer.out.expected b/test/ic3/integer.out.expected
index 7bad384..867bfb3 100644
--- a/test/ic3/integer.out.expected
+++ b/test/ic3/integer.out.expected
@@ -168,3 +168,303 @@
36893488147419168768
36893488156009037824
73786976294838206464
+0
+-18446744069414584320
+-18446744073709518847
+-18446744073709551487
+-18446744073709551615
+-18446744073709551617
+-18446744073709551872
+-18446744073709617152
+-18446744082299486208
+-55340232221128654848
+18446744069414584320
+0
+-4294934527
+-4294967167
+-4294967295
+-4294967297
+-4294967552
+-4295032832
+-12884901888
+-36893488151714070528
+18446744073709518847
+4294934527
+0
+-32640
+-32768
+-32770
+-33025
+-98305
+-8589967361
+-36893488147419136001
+18446744073709551487
+4294967167
+32640
+0
+-128
+-130
+-385
+-65665
+-8589934721
+-36893488147419103361
+18446744073709551615
+4294967295
+32768
+128
+0
+-2
+-257
+-65537
+-8589934593
+-36893488147419103233
+18446744073709551617
+4294967297
+32770
+130
+2
+0
+-255
+-65535
+-8589934591
+-36893488147419103231
+18446744073709551872
+4294967552
+33025
+513
+257
+255
+0
+-65280
+-8589934336
+-36893488147419102976
+18446744073709617152
+4295032832
+98305
+65665
+65537
+65535
+65280
+0
+-8589869056
+-36893488147419037696
+18446744082299486208
+12884901888
+8589967361
+8589934721
+8589934593
+8589934591
+8589934336
+8589869056
+0
+-36893488138829168640
+55340232221128654848
+36893488151714070528
+36893488147419136001
+36893488147419103361
+36893488147419103233
+36893488147419103231
+36893488147419102976
+36893488147419037696
+36893488138829168640
+0
+340282366920938463463374607431768211456
+79228162514264337593543950336
+604481356551388296904704
+2379629985508532158464
+18446744073709551616
+-18446744073709551616
+-4722366482869645213696
+-1208925819614629174706176
+-158456325028528675187087900672
+-680564733841876926926749214863536422912
+79228162514264337593543950336
+18446744073709551616
+140741783322624
+554050781184
+4294967296
+-4294967296
+-1099511627776
+-281474976710656
+-36893488147419103232
+-158456325028528675187087900672
+604481356551388296904704
+140741783322624
+1073807361
+4227201
+32769
+-32769
+-8388864
+-2147549184
+-281483566645248
+-1208962713102776593809408
+2379629985508532158464
+554050781184
+4227201
+16641
+129
+-129
+-33024
+-8454144
+-1108101562368
+-4759259971017064316928
+18446744073709551616
+4294967296
+32769
+129
+1
+-1
+-256
+-65536
+-8589934592
+-36893488147419103232
+-18446744073709551616
+-4294967296
+-32769
+-129
+-1
+1
+256
+65536
+8589934592
+36893488147419103232
+-4722366482869645213696
+-1099511627776
+-8388864
+-65792
+-256
+256
+65536
+16777216
+2199023255552
+9444732965739290427392
+-1208925819614629174706176
+-281474976710656
+-2147549184
+-8454144
+-65536
+65536
+16777216
+4294967296
+562949953421312
+2417851639229258349412352
+-158456325028528675187087900672
+-36893488147419103232
+-281483566645248
+-1108101562368
+-8589934592
+8589934592
+2199023255552
+562949953421312
+73786976294838206464
+316912650057057350374175801344
+-680564733841876926926749214863536422912
+-158456325028528675187087900672
+-1208962713102776593809408
+-4759259971017064316928
+-36893488147419103232
+36893488147419103232
+9444732965739290427392
+2417851639229258349412352
+316912650057057350374175801344
+1361129467683753853853498429727072845824
+1
+4294967296
+18446744073709551616/32769
+18446744073709551616/129
+18446744073709551616
+-18446744073709551616
+-72057594037927936
+-281474976710656
+-2147483648
+-1/2
+1/4294967296
+1
+4294967296/32769
+4294967296/129
+4294967296
+-4294967296
+-16777216
+-65536
+-1/2
+-1/8589934592
+32769/18446744073709551616
+32769/4294967296
+1
+10923/43
+32769
+-32769
+-32769/256
+-32769/65536
+-32769/8589934592
+-32769/36893488147419103232
+129/18446744073709551616
+129/4294967296
+43/10923
+1
+129
+-129
+-129/256
+-129/65536
+-129/8589934592
+-129/36893488147419103232
+1/18446744073709551616
+1/4294967296
+1/32769
+1/129
+1
+-1
+-1/256
+-1/65536
+-1/8589934592
+-1/36893488147419103232
+-1/18446744073709551616
+-1/4294967296
+-1/32769
+-1/129
+-1
+1
+1/256
+1/65536
+1/8589934592
+1/36893488147419103232
+-1/72057594037927936
+-1/16777216
+-256/32769
+-256/257
+-256
+256
+1
+1/256
+1/33554432
+1/144115188075855872
+-1/281474976710656
+-1/65536
+-65536/32769
+-65536/129
+-65536
+65536
+256
+1
+1/131072
+1/562949953421312
+-1/2147483648
+-2
+-8589934592/32769
+-8589934592/129
+-8589934592
+8589934592
+33554432
+131072
+1
+1/4294967296
+-2
+-8589934592
+-36893488147419103232/32769
+-36893488147419103232/129
+-36893488147419103232
+36893488147419103232
+144115188075855872
+562949953421312
+4294967296
+1