diff --git a/lib/c3/0.1/c3.facts b/lib/c3/0.1/c3.facts
index 4afb051..79bc09f 100644
--- a/lib/c3/0.1/c3.facts
+++ b/lib/c3/0.1/c3.facts
@@ -19,7 +19,7 @@ add {C3, :operator, C3.operator02}
replace {C3.operator02, :is_a, :operator}
replace {C3.operator02, :symbol, :!}
replace {C3.operator02, :arity, 1}
-replace {C3.operator02, :cfn, cfn :bool "tag_not" (Tag)}
+replace {C3.operator02, :cfn, cfn Bool "tag_not" (Tag, Result)}
replace {C3.operator02, :operator_precedence, 12}
replace {C3.operator02, :operator_associativity, :right}
add {C3, :operator, C3.operator03}
@@ -89,77 +89,77 @@ add {C3, :operator, C3.operator12}
replace {C3.operator12, :is_a, :operator}
replace {C3.operator12, :symbol, :<}
replace {C3.operator12, :arity, 2}
-replace {C3.operator12, :cfn, cfn :bool "tag_lt" (Tag, Tag)}
+replace {C3.operator12, :cfn, cfn Bool "tag_lt" (Tag, Tag, Result)}
replace {C3.operator12, :operator_precedence, 8}
replace {C3.operator12, :operator_associativity, :left}
add {C3, :operator, C3.operator13}
replace {C3.operator13, :symbol, :<=}
replace {C3.operator13, :is_a, :operator}
replace {C3.operator13, :arity, 2}
-replace {C3.operator13, :cfn, cfn :bool "tag_lte" (Tag, Tag)}
+replace {C3.operator13, :cfn, cfn Bool "tag_lte" (Tag, Tag, Result)}
replace {C3.operator13, :operator_precedence, 8}
replace {C3.operator13, :operator_associativity, :left}
add {C3, :operator, C3.operator14}
replace {C3.operator14, :symbol, :>}
replace {C3.operator14, :is_a, :operator}
replace {C3.operator14, :arity, 2}
-replace {C3.operator14, :cfn, cfn :bool "tag_gt" (Tag, Tag)}
+replace {C3.operator14, :cfn, cfn Bool "tag_gt" (Tag, Tag, Result)}
replace {C3.operator14, :operator_precedence, 8}
replace {C3.operator14, :operator_associativity, :left}
add {C3, :operator, C3.operator15}
replace {C3.operator15, :symbol, :>=}
replace {C3.operator15, :is_a, :operator}
replace {C3.operator15, :arity, 2}
-replace {C3.operator15, :cfn, cfn :bool "tag_gte" (Tag, Tag)}
+replace {C3.operator15, :cfn, cfn Bool "tag_gte" (Tag, Tag, Result)}
replace {C3.operator15, :operator_precedence, 8}
replace {C3.operator15, :operator_associativity, :left}
add {C3, :operator, C3.operator16}
replace {C3.operator16, :is_a, :operator}
replace {C3.operator16, :symbol, :==}
replace {C3.operator16, :arity, 2}
-replace {C3.operator16, :cfn, cfn :bool "tag_eq" (Tag, Tag)}
+replace {C3.operator16, :cfn, cfn Bool "tag_eq" (Tag, Tag, Result)}
replace {C3.operator16, :operator_precedence, 7}
replace {C3.operator16, :operator_associativity, :left}
add {C3, :operator, C3.operator17}
replace {C3.operator17, :is_a, :operator}
replace {C3.operator17, :symbol, :!=}
replace {C3.operator17, :arity, 2}
-replace {C3.operator17, :cfn, cfn :bool "tag_not_eq" (Tag, Tag)}
+replace {C3.operator17, :cfn, cfn Bool "tag_not_eq" (Tag, Tag, Result)}
replace {C3.operator17, :operator_precedence, 7}
replace {C3.operator17, :operator_associativity, :left}
add {C3, :operator, C3.operator18}
replace {C3.operator18, :is_a, :operator}
replace {C3.operator18, :symbol, :&}
replace {C3.operator18, :arity, 2}
-replace {C3.operator18, :cfn, cfn :bool "tag_band" (Tag, Tag)}
+replace {C3.operator18, :cfn, cfn Tag "tag_band" (Tag, Tag, Result)}
replace {C3.operator18, :operator_precedence, 6}
replace {C3.operator18, :operator_associativity, :left}
add {C3, :operator, C3.operator19}
replace {C3.operator19, :is_a, :operator}
replace {C3.operator19, :symbol, :^}
replace {C3.operator19, :arity, 2}
-replace {C3.operator19, :cfn, cfn :bool "tag_bxor" (Tag, Tag)}
+replace {C3.operator19, :cfn, cfn Tag "tag_bxor" (Tag, Tag, Result)}
replace {C3.operator19, :operator_precedence, 5}
replace {C3.operator19, :operator_associativity, :left}
add {C3, :operator, C3.operator20}
replace {C3.operator20, :is_a, :operator}
replace {C3.operator20, :symbol, :bor}
replace {C3.operator20, :arity, 2}
-replace {C3.operator20, :cfn, cfn :bool "tag_bor" (Tag, Tag)}
+replace {C3.operator20, :cfn, cfn Tag "tag_bor" (Tag, Tag, Result)}
replace {C3.operator20, :operator_precedence, 4}
replace {C3.operator20, :operator_associativity, :left}
add {C3, :operator, C3.operator21}
replace {C3.operator21, :is_a, :operator}
replace {C3.operator21, :symbol, :&&}
replace {C3.operator21, :arity, 2}
-replace {C3.operator21, :cfn, cfn :bool "tag_and" (Tag, Tag)}
+replace {C3.operator21, :cfn, cfn Bool "tag_and" (Tag, Tag, Result)}
replace {C3.operator21, :operator_precedence, 3}
replace {C3.operator21, :operator_associativity, :left}
add {C3, :operator, C3.operator22}
replace {C3.operator22, :is_a, :operator}
replace {C3.operator22, :symbol, :||}
replace {C3.operator22, :arity, 2}
-replace {C3.operator22, :cfn, cfn :bool "tag_or" (Tag, Tag)}
+replace {C3.operator22, :cfn, cfn Bool "tag_or" (Tag, Tag, Result)}
replace {C3.operator22, :operator_precedence, 2}
replace {C3.operator22, :operator_associativity, :left}
add {C3, :operator, C3.operator23}
diff --git a/libc3/buf_inspect.c b/libc3/buf_inspect.c
index 761dfcb..aee8cb5 100644
--- a/libc3/buf_inspect.c
+++ b/libc3/buf_inspect.c
@@ -417,9 +417,14 @@ sw buf_inspect_call_op_unary (s_buf *buf, const s_call *call)
{
sw r;
sw result = 0;
+ s_ident tmp;
+ assert(buf);
+ assert(call);
if (operator_symbol(&call->ident) == sym_1("()"))
return buf_inspect_call_paren(buf, call);
- if ((r = buf_inspect_ident(buf, &call->ident)) < 0)
+ if (operator_ident(&call->ident, &tmp) != &tmp)
+ return -1;
+ if ((r = buf_inspect_ident(buf, &tmp)) < 0)
return r;
result += r;
if ((r = buf_write_1(buf, " ")) < 0)
@@ -1227,6 +1232,40 @@ sw buf_inspect_ptag_size (const p_tag *ptag)
return result;
}
+sw buf_inspect_ptr (s_buf *buf, const s_ptr *ptr)
+{
+ sw r;
+ sw result = 0;
+ assert(buf);
+ if ((r = buf_write_1(buf, "(")) < 0)
+ return r;
+ result += r;
+ if ((r = buf_inspect_sym(buf, tag_type_to_sym(ptr->type))) < 0)
+ return r;
+ result += r;
+ if ((r = buf_write_1(buf, " *) ")) < 0)
+ return r;
+ result += r;
+ if ((r = buf_inspect_uw_hexadecimal(buf, (uw *) ptr->p)) < 0)
+ return r;
+ result += r;
+ return result;
+}
+
+sw buf_inspect_ptr_size (const s_ptr *ptr)
+{
+ sw r;
+ sw result = 0;
+ (void) ptr;
+ result += strlen("(");
+ if ((r = buf_inspect_sym_size(tag_type_to_sym(ptr->type))) < 0)
+ return r;
+ result += r;
+ result += strlen(" *) ");
+ result += sizeof(uw) / 4;
+ return result;
+}
+
sw buf_inspect_quote (s_buf *buf, const s_quote *quote)
{
sw r;
@@ -1567,7 +1606,6 @@ sw buf_inspect_tag (s_buf *buf, const s_tag *tag)
if (! tag)
return buf_write_1(buf, "NULL");
switch(tag->type) {
- case TAG_VOID: return buf_inspect_void(buf, &tag);
case TAG_ARRAY: return buf_inspect_array(buf, &tag->data.array);
case TAG_BOOL: return buf_inspect_bool(buf, &tag->data.bool);
case TAG_CALL: return buf_inspect_call(buf, &tag->data.call);
@@ -1582,8 +1620,8 @@ sw buf_inspect_tag (s_buf *buf, const s_tag *tag)
case TAG_INTEGER: return buf_inspect_integer(buf, &tag->data.integer);
case TAG_LIST:
return buf_inspect_list(buf, (const s_list **) &tag->data.list);
- case TAG_PTAG:
- return buf_inspect_ptag(buf, &tag->data.ptag);
+ case TAG_PTAG: return buf_inspect_ptag(buf, &tag->data.ptag);
+ case TAG_PTR: return buf_inspect_ptr(buf, &tag->data.ptr);
case TAG_QUOTE: return buf_inspect_quote(buf, &tag->data.quote);
case TAG_S8: return buf_inspect_s8(buf, &tag->data.s8);
case TAG_S16: return buf_inspect_s16(buf, &tag->data.s16);
@@ -1599,6 +1637,7 @@ sw buf_inspect_tag (s_buf *buf, const s_tag *tag)
case TAG_U64: return buf_inspect_u64(buf, &tag->data.u64);
case TAG_UW: return buf_inspect_uw(buf, &tag->data.uw);
case TAG_VAR: return buf_inspect_var(buf, tag);
+ case TAG_VOID: return buf_inspect_void(buf, &tag);
}
assert(! "buf_inspect_tag: unknown tag type");
errx(1, "buf_inspect_tag: unknown tag_type");
@@ -1609,7 +1648,6 @@ sw buf_inspect_tag_size (const s_tag *tag)
{
assert(tag);
switch(tag->type) {
- case TAG_VOID: return buf_inspect_void_size(tag);
case TAG_ARRAY: return buf_inspect_array_size(&tag->data.array);
case TAG_BOOL: return buf_inspect_bool_size(&tag->data.bool);
case TAG_CALL: return buf_inspect_call_size(&tag->data.call);
@@ -1626,6 +1664,7 @@ sw buf_inspect_tag_size (const s_tag *tag)
case TAG_LIST:
return buf_inspect_list_size((const s_list **) &tag->data.list);
case TAG_PTAG: return buf_inspect_ptag_size(&tag->data.ptag);
+ case TAG_PTR: return buf_inspect_ptr_size(&tag->data.ptr);
case TAG_QUOTE: return buf_inspect_quote_size(&tag->data.quote);
case TAG_S8: return buf_inspect_s8_size(&tag->data.s8);
case TAG_S16: return buf_inspect_s16_size(&tag->data.s16);
@@ -1641,6 +1680,7 @@ sw buf_inspect_tag_size (const s_tag *tag)
case TAG_U64: return buf_inspect_u64_size(&tag->data.u64);
case TAG_UW: return buf_inspect_uw_size(&tag->data.uw);
case TAG_VAR: return buf_inspect_var_size(tag);
+ case TAG_VOID: return buf_inspect_void_size(tag);
}
assert(! "buf_inspect_tag_size: unknown tag type");
errx(1, "buf_inspect_tag_size: unknown tag type");
@@ -1651,63 +1691,65 @@ sw buf_inspect_tag_type (s_buf *buf, e_tag_type type)
{
switch(type) {
case TAG_VOID:
- return buf_write_1(buf, "void");
+ return buf_write_1(buf, "Void");
case TAG_ARRAY:
- return buf_write_1(buf, "array");
+ return buf_write_1(buf, "Array");
case TAG_BOOL:
- return buf_write_1(buf, "bool");
+ return buf_write_1(buf, "Bool");
case TAG_CALL:
- return buf_write_1(buf, "call");
+ return buf_write_1(buf, "Call");
case TAG_CFN:
- return buf_write_1(buf, "cfn");
+ return buf_write_1(buf, "Cfn");
case TAG_CHARACTER:
- return buf_write_1(buf, "character");
+ return buf_write_1(buf, "Character");
case TAG_F32:
- return buf_write_1(buf, "f32");
+ return buf_write_1(buf, "F32");
case TAG_F64:
- return buf_write_1(buf, "f64");
+ return buf_write_1(buf, "F64");
case TAG_FACT:
- return buf_write_1(buf, "fact");
+ return buf_write_1(buf, "Fact");
case TAG_FN:
- return buf_write_1(buf, "fn");
+ return buf_write_1(buf, "Fn");
case TAG_IDENT:
- return buf_write_1(buf, "ident");
+ return buf_write_1(buf, "Ident");
case TAG_INTEGER:
- return buf_write_1(buf, "integer");
+ return buf_write_1(buf, "Integer");
case TAG_LIST:
- return buf_write_1(buf, "list");
+ return buf_write_1(buf, "List");
case TAG_PTAG:
- return buf_write_1(buf, "ptag");
+ return buf_write_1(buf, "Ptag");
+ case TAG_PTR:
+ return buf_write_1(buf, "Void*");
case TAG_QUOTE:
- return buf_write_1(buf, "quote");
+ return buf_write_1(buf, "Quote");
case TAG_S8:
- return buf_write_1(buf, "s8");
+ return buf_write_1(buf, "S8");
case TAG_S16:
- return buf_write_1(buf, "s16");
+ return buf_write_1(buf, "S16");
case TAG_S32:
- return buf_write_1(buf, "s32");
+ return buf_write_1(buf, "S32");
case TAG_S64:
- return buf_write_1(buf, "s64");
+ return buf_write_1(buf, "S64");
case TAG_SW:
- return buf_write_1(buf, "sw");
+ return buf_write_1(buf, "Sw");
case TAG_STR:
- return buf_write_1(buf, "str");
+ return buf_write_1(buf, "Str");
case TAG_SYM:
- return buf_write_1(buf, "sym");
+ return buf_write_1(buf, "Sym");
case TAG_TUPLE:
- return buf_write_1(buf, "tuple");
+ return buf_write_1(buf, "Tuple");
case TAG_U8:
- return buf_write_1(buf, "u8");
+ return buf_write_1(buf, "U8");
case TAG_U16:
- return buf_write_1(buf, "u16");
+ return buf_write_1(buf, "U16");
case TAG_U32:
- return buf_write_1(buf, "u32");
+ return buf_write_1(buf, "U32");
case TAG_U64:
- return buf_write_1(buf, "u64");
+ return buf_write_1(buf, "U64");
case TAG_UW:
- return buf_write_1(buf, "uw");
+ return buf_write_1(buf, "Uw");
case TAG_VAR:
- return buf_write_1(buf, "var");
+ return buf_write_1(buf, "Var");
}
assert(! "buf_inspect_tag_type: unknown tag type");
errx(1, "buf_inspect_tag_type: unknown tag type");
@@ -1718,63 +1760,65 @@ sw buf_inspect_tag_type_size (e_tag_type type)
{
switch(type) {
case TAG_VOID:
- return strlen("void");
+ return strlen("Void");
case TAG_ARRAY:
- return strlen("array");
+ return strlen("Array");
case TAG_BOOL:
- return strlen("bool");
+ return strlen("Bool");
case TAG_CALL:
- return strlen("call");
+ return strlen("Call");
case TAG_CFN:
- return strlen("cfn");
+ return strlen("Cfn");
case TAG_CHARACTER:
- return strlen("character");
+ return strlen("Character");
case TAG_F32:
- return strlen("f32");
+ return strlen("F32");
case TAG_F64:
- return strlen("f64");
+ return strlen("F64");
case TAG_FACT:
- return strlen("fact");
+ return strlen("Fact");
case TAG_FN:
- return strlen("fn");
+ return strlen("Fn");
case TAG_IDENT:
- return strlen("ident");
+ return strlen("Ident");
case TAG_INTEGER:
- return strlen("integer");
+ return strlen("Integer");
case TAG_LIST:
- return strlen("list");
+ return strlen("List");
case TAG_PTAG:
- return strlen("ptag");
+ return strlen("Ptag");
+ case TAG_PTR:
+ return strlen("Void*");
case TAG_QUOTE:
- return strlen("quote");
+ return strlen("Quote");
case TAG_S8:
- return strlen("s8");
+ return strlen("S8");
case TAG_S16:
- return strlen("s16");
+ return strlen("S16");
case TAG_S32:
- return strlen("s32");
+ return strlen("S32");
case TAG_S64:
- return strlen("s64");
+ return strlen("S64");
case TAG_SW:
- return strlen("sw");
+ return strlen("Sw");
case TAG_STR:
- return strlen("str");
+ return strlen("Str");
case TAG_SYM:
- return strlen("sym");
+ return strlen("Sym");
case TAG_TUPLE:
- return strlen("tuple");
+ return strlen("Tuple");
case TAG_U8:
- return strlen("u8");
+ return strlen("U8");
case TAG_U16:
- return strlen("u16");
+ return strlen("U16");
case TAG_U32:
- return strlen("u32");
+ return strlen("U32");
case TAG_U64:
- return strlen("u64");
+ return strlen("U64");
case TAG_UW:
- return strlen("uw");
+ return strlen("Uw");
case TAG_VAR:
- return strlen("var");
+ return strlen("Var");
}
assert(! "buf_inspect_tag_type_size: unknown tag type");
errx(1, "buf_inspect_tag_type_size: unknown tag type");
diff --git a/libc3/buf_inspect.h b/libc3/buf_inspect.h
index 846a103..bbc3442 100644
--- a/libc3/buf_inspect.h
+++ b/libc3/buf_inspect.h
@@ -99,6 +99,8 @@ sw buf_inspect_paren_sym (s_buf *buf, const s_sym *sym);
sw buf_inspect_paren_sym_size (const s_sym *sym);
sw buf_inspect_ptag (s_buf *buf, const p_tag *ptag);
sw buf_inspect_ptag_size (const p_tag *ptag);
+sw buf_inspect_ptr (s_buf *buf, const s_ptr *ptr);
+sw buf_inspect_ptr_size (const s_ptr *ptr);
sw buf_inspect_quote (s_buf *buf, const s_quote *quote);
sw buf_inspect_quote_size (const s_quote *quote);
BUF_INSPECT_S_PROTOTYPES(8);
diff --git a/libc3/buf_parse.c b/libc3/buf_parse.c
index fc7e296..17a6d76 100644
--- a/libc3/buf_parse.c
+++ b/libc3/buf_parse.c
@@ -1836,15 +1836,24 @@ sw buf_parse_paren_sym (s_buf *buf, const s_sym **dest)
return r;
}
-sw buf_parse_ptag (s_buf *buf, p_tag *ptag)
+sw buf_parse_ptag (s_buf *buf, p_tag *dest)
{
(void) buf;
- (void) ptag;
+ (void) dest;
assert(! "buf_parse_ptag: not implemented");
errx(1, "buf_parse_ptag: not implemented");
return -1;
}
+sw buf_parse_ptr (s_buf *buf, s_ptr *dest)
+{
+ (void) buf;
+ (void) dest;
+ assert(! "buf_parse_ptr: not implemented");
+ errx(1, "buf_parse_ptr: not implemented");
+ return -1;
+}
+
sw buf_parse_quote (s_buf *buf, s_quote *dest)
{
s_quote quote;
diff --git a/libc3/buf_parse.h b/libc3/buf_parse.h
index 3f82916..1d943f4 100644
--- a/libc3/buf_parse.h
+++ b/libc3/buf_parse.h
@@ -82,6 +82,7 @@ sw buf_parse_module_name (s_buf *buf, const s_sym **dest);
sw buf_parse_new_tag (s_buf *buf, s_tag **dest);
sw buf_parse_paren_sym (s_buf *buf, const s_sym **dest);
sw buf_parse_ptag (s_buf *buf, p_tag *dest);
+sw buf_parse_ptr (s_buf *buf, s_ptr *dest);
sw buf_parse_quote (s_buf *buf, s_quote *dest);
sw buf_parse_str (s_buf *buf, s_str *dest);
sw buf_parse_str_character (s_buf *buf, character *dest);
diff --git a/libc3/cfn.c b/libc3/cfn.c
index 1ba4e77..d9b87a3 100644
--- a/libc3/cfn.c
+++ b/libc3/cfn.c
@@ -208,8 +208,11 @@ s_cfn * cfn_prep_cif (s_cfn *cfn)
return NULL;
}
if (a->tag.data.sym == sym_1("Result") ||
- a->tag.data.sym == sym_1("&result"))
+ a->tag.data.sym == sym_1("&result")) {
cfn->arg_result = true;
+ arg_ffi_type[i] = &ffi_type_pointer;
+ result_ffi_type = &ffi_type_pointer;
+ }
i++;
a = list_next(a);
}
diff --git a/libc3/env.c b/libc3/env.c
index e5fc80d..5dcc4db 100644
--- a/libc3/env.c
+++ b/libc3/env.c
@@ -463,6 +463,7 @@ bool env_eval_equal_tag (s_env *env, const s_tag *a, const s_tag *b,
case TAG_IDENT:
case TAG_INTEGER:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_STR:
case TAG_SYM:
case TAG_VAR:
@@ -606,6 +607,7 @@ bool env_eval_tag (s_env *env, const s_tag *tag, s_tag *dest)
case TAG_FN:
case TAG_INTEGER:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_S8:
case TAG_S16:
case TAG_S32:
diff --git a/libc3/f32.c b/libc3/f32.c
index 85fef64..5b32338 100644
--- a/libc3/f32.c
+++ b/libc3/f32.c
@@ -63,6 +63,7 @@ f32 f32_cast (s_tag *tag)
return (f32) tag->data.uw;
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
diff --git a/libc3/f64.c b/libc3/f64.c
index 02e5e1b..b703203 100644
--- a/libc3/f64.c
+++ b/libc3/f64.c
@@ -63,6 +63,7 @@ f64 f64_cast (s_tag *tag)
return (f64) tag->data.uw;
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
diff --git a/libc3/hash.c b/libc3/hash.c
index 892c18d..6e341f7 100644
--- a/libc3/hash.c
+++ b/libc3/hash.c
@@ -226,6 +226,14 @@ void hash_update_ptag (t_hash *hash, const p_tag ptag)
hash_update(hash, &ptag, sizeof(ptag));
}
+void hash_update_ptr (t_hash *hash, const s_ptr *ptr)
+{
+ const s8 type[] = "ptr";
+ hash_update(hash, type, strlen(type));
+ hash_update(hash, &ptr->type, sizeof(e_tag_type));
+ hash_update(hash, &ptr->p, sizeof(void *));
+}
+
void hash_update_quote (t_hash *hash, const s_quote *x)
{
const s8 type[] = "quote";
@@ -283,6 +291,7 @@ void hash_update_tag (t_hash *hash, const s_tag *tag)
hash_update_integer(hash, &tag->data.integer); break;
case TAG_LIST: hash_update_list(hash, tag->data.list); break;
case TAG_PTAG: hash_update_ptag(hash, tag->data.ptag); break;
+ case TAG_PTR: hash_update_ptr(hash, &tag->data.ptr); break;
case TAG_QUOTE: hash_update_quote(hash, &tag->data.quote); break;
case TAG_S8: hash_update_s8(hash, tag->data.s8); break;
case TAG_S16: hash_update_s16(hash, tag->data.s16); break;
diff --git a/libc3/hash.h b/libc3/hash.h
index abd0ebc..5dda8ab 100644
--- a/libc3/hash.h
+++ b/libc3/hash.h
@@ -37,6 +37,7 @@ void hash_update_ident (t_hash *hash, const s_ident *ident);
void hash_update_integer (t_hash *hash, const s_integer *i);
void hash_update_list (t_hash *hash, const s_list *list);
void hash_update_ptag (t_hash *hash, const p_tag ptag);
+void hash_update_ptr (t_hash *hash, const s_ptr *ptr);
void hash_update_quote (t_hash *hash, const s_quote *x);
HASH_UPDATE_PROTOTYPE(s8);
HASH_UPDATE_PROTOTYPE(s16);
diff --git a/libc3/integer.c b/libc3/integer.c
index 34c57c2..7942109 100644
--- a/libc3/integer.c
+++ b/libc3/integer.c
@@ -24,6 +24,7 @@ s_integer * integer_abs (const s_integer *a, s_integer *dest)
sw r;
assert(a);
assert(dest);
+ integer_init(dest);
if ((r = mp_abs(&a->mp_int, &dest->mp_int)) != MP_OKAY)
errx(1, "integer_abs: %s", mp_error_to_string(r));
return dest;
@@ -36,8 +37,7 @@ s_integer * integer_add (const s_integer *a, const s_integer *b,
assert(dest);
assert(a);
assert(b);
- if ((r = mp_init(&dest->mp_int)) != MP_OKAY)
- errx(1, "integer_add: %s", mp_error_to_string(r));
+ integer_init(dest);
if ((r = mp_add(&a->mp_int, &b->mp_int, &dest->mp_int)) != MP_OKAY)
errx(1, "integer_add: %s", mp_error_to_string(r));
return dest;
@@ -50,6 +50,7 @@ s_integer * integer_band (const s_integer *a, const s_integer *b,
assert(a);
assert(b);
assert(dest);
+ integer_init(dest);
if ((r = mp_and(&a->mp_int, &b->mp_int, &dest->mp_int)) != MP_OKAY)
errx(1, "integer_band: %s", mp_error_to_string(r));
return dest;
@@ -71,6 +72,7 @@ s_integer * integer_bnot (const s_integer *a, s_integer *dest)
sw r;
assert(a);
assert(dest);
+ integer_init(dest);
if ((r = mp_complement(&a->mp_int, &dest->mp_int)) != MP_OKAY)
errx(1, "integer_bnot: %s", mp_error_to_string(r));
return dest;
@@ -83,6 +85,7 @@ s_integer * integer_bor (const s_integer *a, const s_integer *b,
assert(a);
assert(b);
assert(dest);
+ integer_init(dest);
if ((r = mp_or(&a->mp_int, &b->mp_int, &dest->mp_int)) != MP_OKAY)
errx(1, "integer_bor: %s", mp_error_to_string(r));
return dest;
@@ -95,6 +98,7 @@ s_integer * integer_bxor (const s_integer *a, const s_integer *b,
assert(a);
assert(b);
assert(dest);
+ integer_init(dest);
if ((r = mp_xor(&a->mp_int, &b->mp_int, &dest->mp_int)) != MP_OKAY)
errx(1, "integer_bxor: %s", mp_error_to_string(r));
return dest;
@@ -152,6 +156,7 @@ s_integer * integer_cast (const s_tag *tag, s_integer *dest)
return integer_init_uw(dest, tag->data.uw);
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
@@ -191,8 +196,7 @@ s_integer * integer_div (const s_integer *a, const s_integer *b,
assert(a);
assert(b);
assert(dest);
- if ((r = mp_init(&dest->mp_int)) != MP_OKAY)
- errx(1, "integer_div: %s", mp_error_to_string(r));
+ integer_init(dest);
if ((r = mp_div(&a->mp_int, &b->mp_int, &dest->mp_int,
NULL)) != MP_OKAY)
errx(1, "integer_div: %s", mp_error_to_string(r));
@@ -206,6 +210,7 @@ s_integer * integer_gcd (const s_integer *a, const s_integer *b,
assert(a);
assert(b);
assert(dest);
+ integer_init(dest);
if ((r = mp_gcd(&a->mp_int, &b->mp_int, &dest->mp_int)) != MP_OKAY)
errx(1, "integer_gcd: %s", mp_error_to_string(r));
return dest;
@@ -352,6 +357,7 @@ s_integer * integer_lcm (const s_integer *a, const s_integer *b,
assert(a);
assert(b);
assert(dest);
+ integer_init(dest);
if ((r = mp_lcm(&a->mp_int, &b->mp_int, &dest->mp_int)) != MP_OKAY)
errx(1, "integer_lcm: %s", mp_error_to_string(r));
return dest;
@@ -362,6 +368,7 @@ s_integer * integer_lshift (const s_integer *a, sw b, s_integer *dest)
sw r;
assert(a);
assert(dest);
+ integer_init(dest);
if ((r = mp_mul_2d(&a->mp_int, b, &dest->mp_int)) != MP_OKAY)
errx(1, "integer_lshift: %s", mp_error_to_string(r));
return dest;
@@ -374,6 +381,7 @@ s_integer * integer_mod (const s_integer *a, const s_integer *b,
assert(a);
assert(b);
assert(dest);
+ integer_init(dest);
if ((r = mp_mod(&a->mp_int, &b->mp_int, &dest->mp_int)) != MP_OKAY)
errx(1, "integer_mod: %s", mp_error_to_string(r));
return dest;
@@ -386,8 +394,7 @@ s_integer * integer_mul (const s_integer *a, const s_integer *b,
assert(a);
assert(b);
assert(dest);
- if ((r = mp_init(&dest->mp_int)) != MP_OKAY)
- errx(1, "integer_mul: %s", mp_error_to_string(r));
+ integer_init(dest);
if ((r = mp_mul(&a->mp_int, &b->mp_int, &dest->mp_int)) != MP_OKAY)
errx(1, "integer_mul: %s", mp_error_to_string(r));
return dest;
@@ -398,8 +405,7 @@ s_integer * integer_neg (const s_integer *a, s_integer *dest)
sw r;
assert(a);
assert(dest);
- if ((r = mp_init(&dest->mp_int)) != MP_OKAY)
- errx(1, "integer_neg: %s", mp_error_to_string(r));
+ integer_init(dest);
if ((r = mp_neg(&a->mp_int, &dest->mp_int)) != MP_OKAY)
errx(1, "integer_neg: %s", mp_error_to_string(r));
return dest;
@@ -422,6 +428,7 @@ s_integer * integer_pow (const s_integer *a, const s_integer *b,
assert(a);
assert(b);
assert(dest);
+ integer_init(dest);
if ((r = mp_exptmod(&a->mp_int, &b->mp_int, &dest->mp_int, &dest->mp_int))
!= MP_OKAY)
errx(1, "integer_pow: %s", mp_error_to_string(r));
@@ -484,6 +491,7 @@ s_integer * integer_sqrt (const s_integer *a, s_integer *dest)
sw r;
assert(a);
assert(dest);
+ integer_init(dest);
if ((r = mp_sqrt(&a->mp_int, &dest->mp_int)) != MP_OKAY)
errx(1, "integer_sqrt: %s", mp_error_to_string(r));
return dest;
@@ -496,8 +504,7 @@ s_integer * integer_sub (const s_integer *a, const s_integer *b,
assert(dest);
assert(a);
assert(b);
- if ((r = mp_init(&dest->mp_int)) != MP_OKAY)
- errx(1, "integer_sub: %s", mp_error_to_string(r));
+ integer_init(dest);
if ((r = mp_sub(&a->mp_int, &b->mp_int, &dest->mp_int)) != MP_OKAY)
errx(1, "integer_sub: %s", mp_error_to_string(r));
return dest;
diff --git a/libc3/s16.c b/libc3/s16.c
index e0d1301..604c9f5 100644
--- a/libc3/s16.c
+++ b/libc3/s16.c
@@ -64,6 +64,7 @@ s16 s16_cast (s_tag *tag)
return (s16) tag->data.uw;
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
diff --git a/libc3/s32.c b/libc3/s32.c
index 38022e3..70eb5ca 100644
--- a/libc3/s32.c
+++ b/libc3/s32.c
@@ -64,6 +64,7 @@ s32 s32_cast (s_tag *tag)
return (s32) tag->data.uw;
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
diff --git a/libc3/s64.c b/libc3/s64.c
index 222e464..54d8d65 100644
--- a/libc3/s64.c
+++ b/libc3/s64.c
@@ -64,6 +64,7 @@ s64 s64_cast (s_tag *tag)
return (s64) tag->data.uw;
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
diff --git a/libc3/s8.c b/libc3/s8.c
index 4f5057b..ebbc200 100644
--- a/libc3/s8.c
+++ b/libc3/s8.c
@@ -64,6 +64,7 @@ s8 s8_cast (s_tag *tag)
return (s8) tag->data.uw;
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
diff --git a/libc3/sw.c b/libc3/sw.c
index 99132fa..aeb41d1 100644
--- a/libc3/sw.c
+++ b/libc3/sw.c
@@ -64,6 +64,7 @@ sw sw_cast (s_tag *tag)
return (sw) tag->data.uw;
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
diff --git a/libc3/tag.c b/libc3/tag.c
index c2f270d..777a910 100644
--- a/libc3/tag.c
+++ b/libc3/tag.c
@@ -1245,11 +1245,15 @@ s_tag * tag_add (const s_tag *a, const s_tag *b, s_tag *dest)
tag_type_to_string(b->type));
}
-bool tag_and (const s_tag *a, const s_tag *b)
+bool * tag_and (const s_tag *a, const s_tag *b, bool *dest)
{
s_tag f;
+ assert(a);
+ assert(b);
+ assert(dest);
tag_init_bool(&f, false);
- return compare_tag(a, &f) != 0 && compare_tag(b, &f) != 0;
+ *dest = compare_tag(a, &f) != 0 && compare_tag(b, &f) != 0 ? 1 : 0;
+ return dest;
}
s_tag * tag_array (s_tag *tag, const s_array *a)
@@ -1265,6 +1269,9 @@ s_tag * tag_band (const s_tag *a, const s_tag *b, s_tag *result)
s_integer tmp;
s_integer tmp2;
s_tag tmp_a;
+ assert(a);
+ assert(b);
+ assert(result);
switch (a->type) {
case TAG_BOOL:
tmp_a.data.bool = a->data.bool ? 1 : 0;
@@ -1312,6 +1319,7 @@ s_tag * tag_band (const s_tag *a, const s_tag *b, s_tag *result)
case TAG_IDENT:
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
@@ -1365,6 +1373,7 @@ s_tag * tag_band (const s_tag *a, const s_tag *b, s_tag *result)
case TAG_IDENT:
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
@@ -1463,6 +1472,7 @@ s_tag * tag_band (const s_tag *a, const s_tag *b, s_tag *result)
case TAG_IDENT:
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
@@ -1516,6 +1526,7 @@ s_tag * tag_band (const s_tag *a, const s_tag *b, s_tag *result)
case TAG_IDENT:
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
@@ -1569,6 +1580,7 @@ s_tag * tag_band (const s_tag *a, const s_tag *b, s_tag *result)
case TAG_IDENT:
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
@@ -1622,6 +1634,7 @@ s_tag * tag_band (const s_tag *a, const s_tag *b, s_tag *result)
case TAG_IDENT:
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
@@ -1675,6 +1688,7 @@ s_tag * tag_band (const s_tag *a, const s_tag *b, s_tag *result)
case TAG_IDENT:
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
@@ -1728,6 +1742,7 @@ s_tag * tag_band (const s_tag *a, const s_tag *b, s_tag *result)
case TAG_IDENT:
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
@@ -1781,6 +1796,7 @@ s_tag * tag_band (const s_tag *a, const s_tag *b, s_tag *result)
case TAG_IDENT:
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
@@ -1834,6 +1850,7 @@ s_tag * tag_band (const s_tag *a, const s_tag *b, s_tag *result)
case TAG_IDENT:
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
@@ -1887,6 +1904,7 @@ s_tag * tag_band (const s_tag *a, const s_tag *b, s_tag *result)
case TAG_IDENT:
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
@@ -1940,6 +1958,7 @@ s_tag * tag_band (const s_tag *a, const s_tag *b, s_tag *result)
case TAG_IDENT:
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
@@ -1993,6 +2012,7 @@ s_tag * tag_band (const s_tag *a, const s_tag *b, s_tag *result)
case TAG_IDENT:
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
@@ -2012,6 +2032,7 @@ s_tag * tag_band (const s_tag *a, const s_tag *b, s_tag *result)
case TAG_IDENT:
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
@@ -2028,6 +2049,8 @@ s_tag * tag_band (const s_tag *a, const s_tag *b, s_tag *result)
s_tag * tag_bnot (const s_tag *tag, s_tag *result)
{
+ assert(tag);
+ assert(result);
switch (tag->type) {
case TAG_BOOL:
return tag_init_u8(result, ~(tag->data.bool ? 1 : 0));
@@ -2067,6 +2090,7 @@ s_tag * tag_bnot (const s_tag *tag, s_tag *result)
case TAG_IDENT:
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
@@ -2091,6 +2115,9 @@ s_tag * tag_bor (const s_tag *a, const s_tag *b, s_tag *result)
s_integer tmp;
s_integer tmp2;
s_tag tmp_a;
+ assert(a);
+ assert(b);
+ assert(result);
switch (a->type) {
case TAG_BOOL:
tmp_a.data.bool = a->data.bool ? 1 : 0;
@@ -2138,6 +2165,7 @@ s_tag * tag_bor (const s_tag *a, const s_tag *b, s_tag *result)
case TAG_IDENT:
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
@@ -2191,6 +2219,7 @@ s_tag * tag_bor (const s_tag *a, const s_tag *b, s_tag *result)
case TAG_IDENT:
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
@@ -2216,7 +2245,7 @@ s_tag * tag_bor (const s_tag *a, const s_tag *b, s_tag *result)
case TAG_INTEGER:
result->type = TAG_INTEGER;
integer_bor(&a->data.integer, &b->data.integer,
- &result->data.integer);
+ &result->data.integer);
return result;
case TAG_SW:
integer_init_sw(&tmp, b->data.sw);
@@ -2289,6 +2318,7 @@ s_tag * tag_bor (const s_tag *a, const s_tag *b, s_tag *result)
case TAG_IDENT:
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
@@ -2342,6 +2372,7 @@ s_tag * tag_bor (const s_tag *a, const s_tag *b, s_tag *result)
case TAG_IDENT:
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
@@ -2395,6 +2426,7 @@ s_tag * tag_bor (const s_tag *a, const s_tag *b, s_tag *result)
case TAG_IDENT:
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
@@ -2448,6 +2480,7 @@ s_tag * tag_bor (const s_tag *a, const s_tag *b, s_tag *result)
case TAG_IDENT:
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
@@ -2501,6 +2534,7 @@ s_tag * tag_bor (const s_tag *a, const s_tag *b, s_tag *result)
case TAG_IDENT:
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
@@ -2554,6 +2588,7 @@ s_tag * tag_bor (const s_tag *a, const s_tag *b, s_tag *result)
case TAG_IDENT:
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
@@ -2607,6 +2642,7 @@ s_tag * tag_bor (const s_tag *a, const s_tag *b, s_tag *result)
case TAG_IDENT:
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
@@ -2660,6 +2696,7 @@ s_tag * tag_bor (const s_tag *a, const s_tag *b, s_tag *result)
case TAG_IDENT:
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
@@ -2713,6 +2750,7 @@ s_tag * tag_bor (const s_tag *a, const s_tag *b, s_tag *result)
case TAG_IDENT:
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
@@ -2766,6 +2804,7 @@ s_tag * tag_bor (const s_tag *a, const s_tag *b, s_tag *result)
case TAG_IDENT:
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
@@ -2819,6 +2858,7 @@ s_tag * tag_bor (const s_tag *a, const s_tag *b, s_tag *result)
case TAG_IDENT:
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
@@ -2838,6 +2878,7 @@ s_tag * tag_bor (const s_tag *a, const s_tag *b, s_tag *result)
case TAG_IDENT:
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
@@ -2904,6 +2945,7 @@ s_tag * tag_bxor (const s_tag *a, const s_tag *b, s_tag *result)
case TAG_IDENT:
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
@@ -2957,6 +2999,7 @@ s_tag * tag_bxor (const s_tag *a, const s_tag *b, s_tag *result)
case TAG_IDENT:
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
@@ -3055,6 +3098,7 @@ s_tag * tag_bxor (const s_tag *a, const s_tag *b, s_tag *result)
case TAG_IDENT:
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
@@ -3108,6 +3152,7 @@ s_tag * tag_bxor (const s_tag *a, const s_tag *b, s_tag *result)
case TAG_IDENT:
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
@@ -3161,6 +3206,7 @@ s_tag * tag_bxor (const s_tag *a, const s_tag *b, s_tag *result)
case TAG_IDENT:
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
@@ -3214,6 +3260,7 @@ s_tag * tag_bxor (const s_tag *a, const s_tag *b, s_tag *result)
case TAG_IDENT:
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
@@ -3267,6 +3314,7 @@ s_tag * tag_bxor (const s_tag *a, const s_tag *b, s_tag *result)
case TAG_IDENT:
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
@@ -3320,6 +3368,7 @@ s_tag * tag_bxor (const s_tag *a, const s_tag *b, s_tag *result)
case TAG_IDENT:
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
@@ -3373,6 +3422,7 @@ s_tag * tag_bxor (const s_tag *a, const s_tag *b, s_tag *result)
case TAG_IDENT:
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
@@ -3426,6 +3476,7 @@ s_tag * tag_bxor (const s_tag *a, const s_tag *b, s_tag *result)
case TAG_IDENT:
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
@@ -3479,6 +3530,7 @@ s_tag * tag_bxor (const s_tag *a, const s_tag *b, s_tag *result)
case TAG_IDENT:
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
@@ -3532,6 +3584,7 @@ s_tag * tag_bxor (const s_tag *a, const s_tag *b, s_tag *result)
case TAG_IDENT:
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
@@ -3585,6 +3638,7 @@ s_tag * tag_bxor (const s_tag *a, const s_tag *b, s_tag *result)
case TAG_IDENT:
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
@@ -3604,6 +3658,7 @@ s_tag * tag_bxor (const s_tag *a, const s_tag *b, s_tag *result)
case TAG_IDENT:
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
@@ -3717,6 +3772,7 @@ void tag_clean (s_tag *tag)
case TAG_FACT:
case TAG_IDENT:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_S8:
case TAG_S16:
case TAG_S32:
@@ -3799,6 +3855,7 @@ s_tag * tag_copy (const s_tag *src, s_tag *dest)
case TAG_FACT:
case TAG_IDENT:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_S8:
case TAG_S16:
case TAG_S32:
@@ -4270,9 +4327,13 @@ s_tag * tag_div (const s_tag *a, const s_tag *b, s_tag *dest)
return NULL;
}
-bool tag_eq (const s_tag *a, const s_tag *b)
+bool * tag_eq (const s_tag *a, const s_tag *b, bool *dest)
{
- return compare_tag(a, b) == 0;
+ assert(a);
+ assert(b);
+ assert(dest);
+ *dest = compare_tag(a, b) == 0 ? 1 : 0;
+ return dest;
}
s_tag * tag_equal (const s_tag *a, const s_tag *b, s_tag *dest)
@@ -4299,14 +4360,22 @@ s_tag * tag_f64 (s_tag *tag, f64 x)
return tag_init_f64(tag, x);
}
-bool tag_gt (const s_tag *a, const s_tag *b)
+bool * tag_gt (const s_tag *a, const s_tag *b, bool *dest)
{
- return compare_tag(a, b) > 0;
+ assert(a);
+ assert(b);
+ assert(dest);
+ *dest = compare_tag(a, b) >= 0 ? 1 : 0;
+ return dest;
}
-bool tag_gte (const s_tag *a, const s_tag *b)
+bool * tag_gte (const s_tag *a, const s_tag *b, bool *dest)
{
- return compare_tag(a, b) >= 0;
+ assert(a);
+ assert(b);
+ assert(dest);
+ *dest = compare_tag(a, b) >= 0 ? 1 : 0;
+ return dest;
}
u64 tag_hash_u64 (const s_tag *tag)
@@ -4695,6 +4764,8 @@ s_str * tag_inspect (const s_tag *tag, s_str *dest)
{
s_buf buf;
sw size;
+ assert(tag);
+ assert(dest);
if ((size = buf_inspect_tag_size(tag)) < 0) {
assert(! "tag_inspect: size error");
errx(1, "tag_inspect: size error");
@@ -4801,14 +4872,22 @@ s_tag * tag_list_1 (s_tag *tag, const s8 *p)
return tag_init_list_1(tag, p);
}
-bool tag_lt (const s_tag *a, const s_tag *b)
+bool * tag_lt (const s_tag *a, const s_tag *b, bool *dest)
{
- return compare_tag(a, b) < 0;
+ assert(a);
+ assert(b);
+ assert(dest);
+ *dest = compare_tag(a, b) < 0 ? 1 : 0;
+ return dest;
}
-bool tag_lte (const s_tag *a, const s_tag *b)
+bool * tag_lte (const s_tag *a, const s_tag *b, bool *dest)
{
- return compare_tag(a, b) <= 0;
+ assert(a);
+ assert(b);
+ assert(dest);
+ *dest = compare_tag(a, b) <= 0 ? 1 : 0;
+ return dest;
}
s_tag * tag_mod (const s_tag *a, const s_tag *b, s_tag *dest)
@@ -4899,35 +4978,35 @@ s_tag * tag_mod (const s_tag *a, const s_tag *b, s_tag *dest)
case TAG_S8:
integer_init_s8(&tmp, b->data.s8);
integer_mod(&a->data.integer, &tmp, &tmp2);
- tag_init_u8(dest, integer_to_u8(&tmp2));
+ tag_init_s8(dest, integer_to_s8(&tmp2));
integer_clean(&tmp);
integer_clean(&tmp2);
return dest;
case TAG_S16:
integer_init_s16(&tmp, b->data.s16);
integer_mod(&a->data.integer, &tmp, &tmp2);
- tag_init_u16(dest, integer_to_u16(&tmp2));
+ tag_init_s16(dest, integer_to_s16(&tmp2));
integer_clean(&tmp);
integer_clean(&tmp2);
return dest;
case TAG_S32:
integer_init_s32(&tmp, b->data.s32);
integer_mod(&a->data.integer, &tmp, &tmp2);
- tag_init_u32(dest, integer_to_u32(&tmp2));
+ tag_init_s32(dest, integer_to_s32(&tmp2));
integer_clean(&tmp);
integer_clean(&tmp2);
return dest;
case TAG_S64:
integer_init_s64(&tmp, b->data.s64);
integer_mod(&a->data.integer, &tmp, &tmp2);
- tag_init_u64(dest, integer_to_u64(&tmp2));
+ tag_init_s64(dest, integer_to_s64(&tmp2));
integer_clean(&tmp);
integer_clean(&tmp2);
return dest;
case TAG_SW:
integer_init_sw(&tmp, b->data.sw);
integer_mod(&a->data.integer, &tmp, &tmp2);
- tag_init_uw(dest, integer_to_uw(&tmp2));
+ tag_init_sw(dest, integer_to_sw(&tmp2));
integer_clean(&tmp);
integer_clean(&tmp2);
return dest;
@@ -4977,30 +5056,31 @@ s_tag * tag_mod (const s_tag *a, const s_tag *b, s_tag *dest)
return tag_init_f64(dest, fmod((f64) a->data.s8, b->data.f64));
case TAG_INTEGER:
integer_init_s8(&tmp, a->data.s8);
- dest->type = TAG_INTEGER;
- integer_mod(&tmp, &b->data.integer, &dest->data.integer);
+ integer_mod(&tmp, &b->data.integer, &tmp2);
+ tag_init_s8(dest, integer_to_s8(&tmp2));
integer_clean(&tmp);
+ integer_clean(&tmp2);
return dest;
case TAG_S8:
- return tag_init_u8(dest, a->data.s8 % b->data.s8);
+ return tag_init_s8(dest, a->data.s8 % b->data.s8);
case TAG_S16:
- return tag_init_u8(dest, a->data.s8 % b->data.s16);
+ return tag_init_s8(dest, a->data.s8 % b->data.s16);
case TAG_S32:
- return tag_init_u8(dest, a->data.s8 % b->data.s32);
+ return tag_init_s8(dest, a->data.s8 % b->data.s32);
case TAG_S64:
- return tag_init_u8(dest, a->data.s8 % b->data.s64);
+ return tag_init_s8(dest, a->data.s8 % b->data.s64);
case TAG_SW:
- return tag_init_u8(dest, a->data.s8 % b->data.sw);
+ return tag_init_s8(dest, a->data.s8 % b->data.sw);
case TAG_U8:
- return tag_init_u8(dest, a->data.s8 % b->data.u8);
+ return tag_init_s8(dest, a->data.s8 % b->data.u8);
case TAG_U16:
- return tag_init_u8(dest, a->data.s8 % b->data.u16);
+ return tag_init_s8(dest, a->data.s8 % b->data.u16);
case TAG_U32:
- return tag_init_u8(dest, a->data.s8 % b->data.u32);
+ return tag_init_s8(dest, a->data.s8 % b->data.u32);
case TAG_U64:
- return tag_init_u8(dest, a->data.s8 % b->data.u64);
+ return tag_init_s8(dest, a->data.s8 % b->data.u64);
case TAG_UW:
- return tag_init_u8(dest, a->data.s8 % b->data.uw);
+ return tag_init_s8(dest, a->data.s8 % b->data.uw);
default:
goto ko;
}
@@ -5012,30 +5092,31 @@ s_tag * tag_mod (const s_tag *a, const s_tag *b, s_tag *dest)
return tag_init_f64(dest, fmod((f64) a->data.s16, b->data.f64));
case TAG_INTEGER:
integer_init_s16(&tmp, a->data.s16);
- dest->type = TAG_INTEGER;
- integer_mod(&tmp, &b->data.integer, &dest->data.integer);
+ integer_mod(&tmp, &b->data.integer, &tmp2);
+ tag_init_s16(dest, integer_to_s16(&tmp2));
integer_clean(&tmp);
+ integer_clean(&tmp2);
return dest;
case TAG_S8:
- return tag_init_u8(dest, a->data.s16 % b->data.s8);
+ return tag_init_s8(dest, a->data.s16 % b->data.s8);
case TAG_S16:
- return tag_init_u16(dest, a->data.s16 % b->data.s16);
+ return tag_init_s16(dest, a->data.s16 % b->data.s16);
case TAG_S32:
- return tag_init_u16(dest, a->data.s16 % b->data.s32);
+ return tag_init_s16(dest, a->data.s16 % b->data.s32);
case TAG_S64:
- return tag_init_u16(dest, a->data.s16 % b->data.s64);
+ return tag_init_s16(dest, a->data.s16 % b->data.s64);
case TAG_SW:
- return tag_init_u16(dest, a->data.s16 % b->data.sw);
+ return tag_init_s16(dest, a->data.s16 % b->data.sw);
case TAG_U8:
- return tag_init_u8(dest, a->data.s16 % b->data.u8);
+ return tag_init_s16(dest, a->data.s16 % b->data.u8);
case TAG_U16:
- return tag_init_u16(dest, a->data.s16 % b->data.u16);
+ return tag_init_s16(dest, a->data.s16 % b->data.u16);
case TAG_U32:
- return tag_init_u16(dest, a->data.s16 % b->data.u32);
+ return tag_init_s16(dest, a->data.s16 % b->data.u32);
case TAG_U64:
- return tag_init_u16(dest, a->data.s16 % b->data.u64);
+ return tag_init_s16(dest, a->data.s16 % b->data.u64);
case TAG_UW:
- return tag_init_u16(dest, a->data.s16 % b->data.uw);
+ return tag_init_s16(dest, a->data.s16 % b->data.uw);
default:
goto ko;
}
@@ -5047,30 +5128,31 @@ s_tag * tag_mod (const s_tag *a, const s_tag *b, s_tag *dest)
return tag_init_f64(dest, fmod((f64) a->data.s32, b->data.f64));
case TAG_INTEGER:
integer_init_s32(&tmp, a->data.s32);
- dest->type = TAG_INTEGER;
- integer_mod(&tmp, &b->data.integer, &dest->data.integer);
+ integer_mod(&tmp, &b->data.integer, &tmp2);
+ tag_init_s32(dest, integer_to_s32(&tmp2));
integer_clean(&tmp);
+ integer_clean(&tmp2);
return dest;
case TAG_S8:
- return tag_init_u8(dest, a->data.s32 % b->data.s8);
+ return tag_init_s8(dest, a->data.s32 % b->data.s8);
case TAG_S16:
- return tag_init_u16(dest, a->data.s32 % b->data.s16);
+ return tag_init_s16(dest, a->data.s32 % b->data.s16);
case TAG_S32:
- return tag_init_u32(dest, a->data.s32 % b->data.s32);
+ return tag_init_s32(dest, a->data.s32 % b->data.s32);
case TAG_S64:
- return tag_init_u32(dest, a->data.s32 % b->data.s64);
+ return tag_init_s32(dest, a->data.s32 % b->data.s64);
case TAG_SW:
- return tag_init_u32(dest, a->data.s32 % b->data.sw);
+ return tag_init_s32(dest, a->data.s32 % b->data.sw);
case TAG_U8:
- return tag_init_u8(dest, a->data.s32 % b->data.u8);
+ return tag_init_s32(dest, a->data.s32 % b->data.u8);
case TAG_U16:
- return tag_init_u16(dest, a->data.s32 % b->data.u16);
+ return tag_init_s32(dest, a->data.s32 % b->data.u16);
case TAG_U32:
- return tag_init_u32(dest, a->data.s32 % b->data.u32);
+ return tag_init_s32(dest, a->data.s32 % b->data.u32);
case TAG_U64:
- return tag_init_u32(dest, a->data.s32 % b->data.u64);
+ return tag_init_s32(dest, a->data.s32 % b->data.u64);
case TAG_UW:
- return tag_init_u32(dest, a->data.s32 % b->data.uw);
+ return tag_init_s32(dest, a->data.s32 % b->data.uw);
default:
goto ko;
}
@@ -5082,30 +5164,31 @@ s_tag * tag_mod (const s_tag *a, const s_tag *b, s_tag *dest)
return tag_init_f64(dest, fmod((f64) a->data.s64, b->data.f64));
case TAG_INTEGER:
integer_init_s64(&tmp, a->data.s64);
- dest->type = TAG_INTEGER;
- integer_mod(&tmp, &b->data.integer, &dest->data.integer);
+ integer_mod(&tmp, &b->data.integer, &tmp2);
+ tag_init_s64(dest, integer_to_s64(&tmp2));
integer_clean(&tmp);
+ integer_clean(&tmp2);
return dest;
case TAG_S8:
- return tag_init_u8(dest, a->data.s64 % b->data.s8);
+ return tag_init_s8(dest, a->data.s64 % b->data.s8);
case TAG_S16:
- return tag_init_u16(dest, a->data.s64 % b->data.s16);
+ return tag_init_s16(dest, a->data.s64 % b->data.s16);
case TAG_S32:
- return tag_init_u32(dest, a->data.s64 % b->data.s32);
+ return tag_init_s32(dest, a->data.s64 % b->data.s32);
case TAG_S64:
- return tag_init_u64(dest, a->data.s64 % b->data.s64);
+ return tag_init_s64(dest, a->data.s64 % b->data.s64);
case TAG_SW:
- return tag_init_uw(dest, a->data.s64 % b->data.sw);
+ return tag_init_sw(dest, a->data.s64 % b->data.sw);
case TAG_U8:
- return tag_init_u8(dest, a->data.s64 % b->data.u8);
+ return tag_init_s16(dest, a->data.s64 % b->data.u8);
case TAG_U16:
- return tag_init_u16(dest, a->data.s64 % b->data.u16);
+ return tag_init_s32(dest, a->data.s64 % b->data.u16);
case TAG_U32:
- return tag_init_u32(dest, a->data.s64 % b->data.u32);
+ return tag_init_s64(dest, a->data.s64 % b->data.u32);
case TAG_U64:
- return tag_init_u64(dest, a->data.s64 % b->data.u64);
+ return tag_init_s64(dest, a->data.s64 % b->data.u64);
case TAG_UW:
- return tag_init_uw(dest, a->data.s64 % b->data.uw);
+ return tag_init_s64(dest, a->data.s64 % b->data.uw);
default:
goto ko;
}
@@ -5117,30 +5200,31 @@ s_tag * tag_mod (const s_tag *a, const s_tag *b, s_tag *dest)
return tag_init_f64(dest, fmod((f64) a->data.sw, b->data.f64));
case TAG_INTEGER:
integer_init_sw(&tmp, a->data.sw);
- dest->type = TAG_INTEGER;
- integer_mod(&tmp, &b->data.integer, &dest->data.integer);
+ integer_mod(&tmp, &b->data.integer, &tmp2);
+ tag_init_sw(dest, integer_to_sw(&tmp2));
integer_clean(&tmp);
+ integer_clean(&tmp2);
return dest;
case TAG_S8:
- return tag_init_u8(dest, a->data.sw % b->data.s8);
+ return tag_init_s8(dest, a->data.sw % b->data.s8);
case TAG_S16:
- return tag_init_u16(dest, a->data.sw % b->data.s16);
+ return tag_init_s16(dest, a->data.sw % b->data.s16);
case TAG_S32:
- return tag_init_u32(dest, a->data.sw % b->data.s32);
+ return tag_init_s32(dest, a->data.sw % b->data.s32);
case TAG_S64:
- return tag_init_uw(dest, a->data.sw % b->data.s64);
+ return tag_init_sw(dest, a->data.sw % b->data.s64);
case TAG_SW:
- return tag_init_uw(dest, a->data.sw % b->data.sw);
+ return tag_init_sw(dest, a->data.sw % b->data.sw);
case TAG_U8:
- return tag_init_u8(dest, a->data.sw % b->data.u8);
+ return tag_init_s16(dest, a->data.sw % b->data.u8);
case TAG_U16:
- return tag_init_u16(dest, a->data.sw % b->data.u16);
+ return tag_init_s32(dest, a->data.sw % b->data.u16);
case TAG_U32:
- return tag_init_u32(dest, a->data.sw % b->data.u32);
+ return tag_init_sw(dest, a->data.sw % b->data.u32);
case TAG_U64:
- return tag_init_uw(dest, a->data.sw % b->data.u64);
+ return tag_init_sw(dest, a->data.sw % b->data.u64);
case TAG_UW:
- return tag_init_uw(dest, a->data.sw % b->data.uw);
+ return tag_init_sw(dest, a->data.sw % b->data.uw);
default:
goto ko;
}
@@ -5151,21 +5235,22 @@ s_tag * tag_mod (const s_tag *a, const s_tag *b, s_tag *dest)
case TAG_F64:
return tag_init_f64(dest, fmod((f64) a->data.u8, b->data.f64));
case TAG_INTEGER:
- integer_init_s8(&tmp, a->data.u8);
- dest->type = TAG_INTEGER;
- integer_mod(&tmp, &b->data.integer, &dest->data.integer);
+ integer_init_u8(&tmp, a->data.u8);
+ integer_mod(&tmp, &b->data.integer, &tmp2);
+ tag_init_u8(dest, integer_to_u8(&tmp2));
integer_clean(&tmp);
+ integer_clean(&tmp2);
return dest;
case TAG_S8:
- return tag_init_u8(dest, a->data.u8 % b->data.s8);
+ return tag_init_s8(dest, a->data.u8 % b->data.s8);
case TAG_S16:
- return tag_init_u8(dest, a->data.u8 % b->data.s16);
+ return tag_init_s16(dest, a->data.u8 % b->data.s16);
case TAG_S32:
- return tag_init_u8(dest, a->data.u8 % b->data.s32);
+ return tag_init_s16(dest, a->data.u8 % b->data.s32);
case TAG_S64:
- return tag_init_u8(dest, a->data.u8 % b->data.s64);
+ return tag_init_s16(dest, a->data.u8 % b->data.s64);
case TAG_SW:
- return tag_init_u8(dest, a->data.u8 % b->data.sw);
+ return tag_init_s16(dest, a->data.u8 % b->data.sw);
case TAG_U8:
return tag_init_u8(dest, a->data.u8 % b->data.u8);
case TAG_U16:
@@ -5186,21 +5271,22 @@ s_tag * tag_mod (const s_tag *a, const s_tag *b, s_tag *dest)
case TAG_F64:
return tag_init_f64(dest, fmod((f64) a->data.u16, b->data.f64));
case TAG_INTEGER:
- integer_init_s16(&tmp, a->data.u16);
- dest->type = TAG_INTEGER;
- integer_mod(&tmp, &b->data.integer, &dest->data.integer);
+ integer_init_u16(&tmp, a->data.u16);
+ integer_mod(&tmp, &b->data.integer, &tmp2);
+ tag_init_u16(dest, integer_to_u16(&tmp2));
integer_clean(&tmp);
+ integer_clean(&tmp2);
return dest;
case TAG_S8:
- return tag_init_u8(dest, a->data.u16 % b->data.s8);
+ return tag_init_s8(dest, a->data.u16 % b->data.s8);
case TAG_S16:
- return tag_init_u16(dest, a->data.u16 % b->data.s16);
+ return tag_init_s16(dest, a->data.u16 % b->data.s16);
case TAG_S32:
- return tag_init_u16(dest, a->data.u16 % b->data.s32);
+ return tag_init_s32(dest, a->data.u16 % b->data.s32);
case TAG_S64:
- return tag_init_u16(dest, a->data.u16 % b->data.s64);
+ return tag_init_s32(dest, a->data.u16 % b->data.s64);
case TAG_SW:
- return tag_init_u16(dest, a->data.u16 % b->data.sw);
+ return tag_init_s32(dest, a->data.u16 % b->data.sw);
case TAG_U8:
return tag_init_u8(dest, a->data.u16 % b->data.u8);
case TAG_U16:
@@ -5221,21 +5307,22 @@ s_tag * tag_mod (const s_tag *a, const s_tag *b, s_tag *dest)
case TAG_F64:
return tag_init_f64(dest, fmod((f64) a->data.u32, b->data.f64));
case TAG_INTEGER:
- integer_init_s32(&tmp, a->data.u32);
- dest->type = TAG_INTEGER;
- integer_mod(&tmp, &b->data.integer, &dest->data.integer);
+ integer_init_u32(&tmp, a->data.u32);
+ integer_mod(&tmp, &b->data.integer, &tmp2);
+ tag_init_u32(dest, integer_to_u32(&tmp2));
integer_clean(&tmp);
+ integer_clean(&tmp2);
return dest;
case TAG_S8:
- return tag_init_u8(dest, a->data.u32 % b->data.s8);
+ return tag_init_s8(dest, a->data.u32 % b->data.s8);
case TAG_S16:
- return tag_init_u16(dest, a->data.u32 % b->data.s16);
+ return tag_init_s16(dest, a->data.u32 % b->data.s16);
case TAG_S32:
- return tag_init_u32(dest, a->data.u32 % b->data.s32);
+ return tag_init_s32(dest, a->data.u32 % b->data.s32);
case TAG_S64:
- return tag_init_u32(dest, a->data.u32 % b->data.s64);
+ return tag_init_s64(dest, a->data.u32 % b->data.s64);
case TAG_SW:
- return tag_init_u32(dest, a->data.u32 % b->data.sw);
+ return tag_init_sw(dest, a->data.u32 % b->data.sw);
case TAG_U8:
return tag_init_u8(dest, a->data.u32 % b->data.u8);
case TAG_U16:
@@ -5256,21 +5343,54 @@ s_tag * tag_mod (const s_tag *a, const s_tag *b, s_tag *dest)
case TAG_F64:
return tag_init_f64(dest, fmod((f64) a->data.u64, b->data.f64));
case TAG_INTEGER:
- integer_init_s64(&tmp, a->data.u64);
- dest->type = TAG_INTEGER;
- integer_mod(&tmp, &b->data.integer, &dest->data.integer);
+ integer_init_u64(&tmp, a->data.u64);
+ integer_mod(&tmp, &b->data.integer, &tmp2);
+ tag_init_u64(dest, integer_to_u64(&tmp2));
integer_clean(&tmp);
+ integer_clean(&tmp2);
return dest;
case TAG_S8:
- return tag_init_u8(dest, a->data.u64 % b->data.s8);
+ integer_init_u64(&tmp, a->data.u64);
+ integer_init_s8(&tmp2, b->data.s8);
+ dest->type = TAG_INTEGER;
+ integer_mod(&tmp, &tmp2, &dest->data.integer);
+ integer_clean(&tmp);
+ integer_clean(&tmp2);
+ return dest;
case TAG_S16:
- return tag_init_u16(dest, a->data.u64 % b->data.s16);
+ integer_init_u64(&tmp, a->data.u64);
+ integer_init_s16(&tmp2, b->data.s16);
+ dest->type = TAG_INTEGER;
+ integer_mod(&tmp, &tmp2, &dest->data.integer);
+ integer_clean(&tmp);
+ integer_clean(&tmp2);
+ return dest;
+ return tag_init_s16(dest, a->data.u64 % b->data.s16);
case TAG_S32:
- return tag_init_u32(dest, a->data.u64 % b->data.s32);
+ integer_init_u64(&tmp, a->data.u64);
+ integer_init_s32(&tmp2, b->data.s32);
+ dest->type = TAG_INTEGER;
+ integer_mod(&tmp, &tmp2, &dest->data.integer);
+ integer_clean(&tmp);
+ integer_clean(&tmp2);
+ return dest;
+ return tag_init_s32(dest, a->data.u64 % b->data.s32);
case TAG_S64:
- return tag_init_u64(dest, a->data.u64 % b->data.s64);
+ integer_init_u64(&tmp, a->data.u64);
+ integer_init_s64(&tmp2, b->data.s64);
+ dest->type = TAG_INTEGER;
+ integer_mod(&tmp, &tmp2, &dest->data.integer);
+ integer_clean(&tmp);
+ integer_clean(&tmp2);
+ return dest;
case TAG_SW:
- return tag_init_uw(dest, a->data.u64 % b->data.sw);
+ integer_init_u64(&tmp, a->data.u64);
+ integer_init_sw(&tmp2, b->data.sw);
+ dest->type = TAG_INTEGER;
+ integer_mod(&tmp, &tmp2, &dest->data.integer);
+ integer_clean(&tmp);
+ integer_clean(&tmp2);
+ return dest;
case TAG_U8:
return tag_init_u8(dest, a->data.u64 % b->data.u8);
case TAG_U16:
@@ -5291,21 +5411,22 @@ s_tag * tag_mod (const s_tag *a, const s_tag *b, s_tag *dest)
case TAG_F64:
return tag_init_f64(dest, fmod((f64) a->data.uw, b->data.f64));
case TAG_INTEGER:
- integer_init_sw(&tmp, a->data.uw);
- dest->type = TAG_INTEGER;
- integer_mod(&tmp, &b->data.integer, &dest->data.integer);
+ integer_init_uw(&tmp, a->data.uw);
+ integer_mod(&tmp, &b->data.integer, &tmp2);
+ tag_init_uw(dest, integer_to_uw(&tmp2));
integer_clean(&tmp);
+ integer_clean(&tmp2);
return dest;
case TAG_S8:
- return tag_init_u8(dest, a->data.uw % b->data.s8);
+ return tag_init_s8(dest, a->data.uw % b->data.s8);
case TAG_S16:
- return tag_init_u16(dest, a->data.uw % b->data.s16);
+ return tag_init_s16(dest, a->data.uw % b->data.s16);
case TAG_S32:
- return tag_init_u32(dest, a->data.uw % b->data.s32);
+ return tag_init_s32(dest, a->data.uw % b->data.s32);
case TAG_S64:
- return tag_init_uw(dest, a->data.uw % b->data.s64);
+ return tag_init_s64(dest, a->data.uw % b->data.s64);
case TAG_SW:
- return tag_init_uw(dest, a->data.uw % b->data.sw);
+ return tag_init_sw(dest, a->data.uw % b->data.sw);
case TAG_U8:
return tag_init_u8(dest, a->data.uw % b->data.u8);
case TAG_U16:
@@ -5944,6 +6065,7 @@ s_tag * tag_neg (const s_tag *tag, s_tag *result)
case TAG_IDENT:
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
@@ -5986,23 +6108,34 @@ s_tag * tag_new_copy (const s_tag *src)
return tag_copy(src, dest);
}
-bool tag_not (const s_tag *a)
+bool * tag_not (const s_tag *tag, bool *dest)
{
s_tag f;
+ assert(tag);
+ assert(dest);
tag_init_bool(&f, false);
- return compare_tag(a, &f) == 0;
+ *dest = compare_tag(tag, &f) == 0 ? 1 : 0;
+ return dest;
}
-bool tag_not_eq (const s_tag *a, const s_tag *b)
+bool * tag_not_eq (const s_tag *a, const s_tag *b, bool *dest)
{
- return compare_tag(a, b) != 0;
+ assert(a);
+ assert(b);
+ assert(dest);
+ *dest = compare_tag(a, b) != 0 ? 1 : 0;
+ return dest;
}
-bool tag_or (const s_tag *a, const s_tag *b)
+bool * tag_or (const s_tag *a, const s_tag *b, bool *dest)
{
s_tag f;
+ assert(a);
+ assert(b);
+ assert(dest);
tag_init_bool(&f, false);
- return compare_tag(a, &f) != 0 || compare_tag(b, &f) != 0;
+ *dest = compare_tag(a, &f) != 0 || compare_tag(b, &f) != 0 ? 1 : 0;
+ return dest;
}
s_tag * tag_paren (const s_tag *tag, s_tag *dest)
@@ -6092,6 +6225,7 @@ s_tag * tag_shift_left (const s_tag *a, const s_tag *b, s_tag *result)
case TAG_IDENT:
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
@@ -6145,6 +6279,7 @@ s_tag * tag_shift_left (const s_tag *a, const s_tag *b, s_tag *result)
case TAG_IDENT:
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
@@ -6222,6 +6357,7 @@ s_tag * tag_shift_left (const s_tag *a, const s_tag *b, s_tag *result)
case TAG_IDENT:
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
@@ -6275,6 +6411,7 @@ s_tag * tag_shift_left (const s_tag *a, const s_tag *b, s_tag *result)
case TAG_IDENT:
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
@@ -6328,6 +6465,7 @@ s_tag * tag_shift_left (const s_tag *a, const s_tag *b, s_tag *result)
case TAG_IDENT:
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
@@ -6381,6 +6519,7 @@ s_tag * tag_shift_left (const s_tag *a, const s_tag *b, s_tag *result)
case TAG_IDENT:
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
@@ -6434,6 +6573,7 @@ s_tag * tag_shift_left (const s_tag *a, const s_tag *b, s_tag *result)
case TAG_IDENT:
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
@@ -6487,6 +6627,7 @@ s_tag * tag_shift_left (const s_tag *a, const s_tag *b, s_tag *result)
case TAG_IDENT:
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
@@ -6540,6 +6681,7 @@ s_tag * tag_shift_left (const s_tag *a, const s_tag *b, s_tag *result)
case TAG_IDENT:
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
@@ -6593,6 +6735,7 @@ s_tag * tag_shift_left (const s_tag *a, const s_tag *b, s_tag *result)
case TAG_IDENT:
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
@@ -6646,6 +6789,7 @@ s_tag * tag_shift_left (const s_tag *a, const s_tag *b, s_tag *result)
case TAG_IDENT:
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
@@ -6699,6 +6843,7 @@ s_tag * tag_shift_left (const s_tag *a, const s_tag *b, s_tag *result)
case TAG_IDENT:
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
@@ -6752,6 +6897,7 @@ s_tag * tag_shift_left (const s_tag *a, const s_tag *b, s_tag *result)
case TAG_IDENT:
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
@@ -6771,6 +6917,7 @@ s_tag * tag_shift_left (const s_tag *a, const s_tag *b, s_tag *result)
case TAG_IDENT:
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
@@ -6837,6 +6984,7 @@ s_tag * tag_shift_right (const s_tag *a, const s_tag *b, s_tag *result)
case TAG_IDENT:
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
@@ -6890,6 +7038,7 @@ s_tag * tag_shift_right (const s_tag *a, const s_tag *b, s_tag *result)
case TAG_IDENT:
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
@@ -6967,6 +7116,7 @@ s_tag * tag_shift_right (const s_tag *a, const s_tag *b, s_tag *result)
case TAG_IDENT:
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
@@ -7020,6 +7170,7 @@ s_tag * tag_shift_right (const s_tag *a, const s_tag *b, s_tag *result)
case TAG_IDENT:
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
@@ -7073,6 +7224,7 @@ s_tag * tag_shift_right (const s_tag *a, const s_tag *b, s_tag *result)
case TAG_IDENT:
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
@@ -7126,6 +7278,7 @@ s_tag * tag_shift_right (const s_tag *a, const s_tag *b, s_tag *result)
case TAG_IDENT:
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
@@ -7179,6 +7332,7 @@ s_tag * tag_shift_right (const s_tag *a, const s_tag *b, s_tag *result)
case TAG_IDENT:
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
@@ -7232,6 +7386,7 @@ s_tag * tag_shift_right (const s_tag *a, const s_tag *b, s_tag *result)
case TAG_IDENT:
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
@@ -7285,6 +7440,7 @@ s_tag * tag_shift_right (const s_tag *a, const s_tag *b, s_tag *result)
case TAG_IDENT:
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
@@ -7338,6 +7494,7 @@ s_tag * tag_shift_right (const s_tag *a, const s_tag *b, s_tag *result)
case TAG_IDENT:
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
@@ -7391,6 +7548,7 @@ s_tag * tag_shift_right (const s_tag *a, const s_tag *b, s_tag *result)
case TAG_IDENT:
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
@@ -7444,6 +7602,7 @@ s_tag * tag_shift_right (const s_tag *a, const s_tag *b, s_tag *result)
case TAG_IDENT:
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
@@ -7497,6 +7656,7 @@ s_tag * tag_shift_right (const s_tag *a, const s_tag *b, s_tag *result)
case TAG_IDENT:
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
@@ -7516,6 +7676,7 @@ s_tag * tag_shift_right (const s_tag *a, const s_tag *b, s_tag *result)
case TAG_IDENT:
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
@@ -8244,6 +8405,10 @@ void * tag_to_ffi_pointer (s_tag *tag, const s_sym *type)
type == sym_1("ptag"))
return (void *) tag->data.ptag;
goto invalid_type;
+ case TAG_PTR:
+ if (type->str.ptr.ps8[type->str.size - 1] == '*')
+ return &tag->data.ptr.p;
+ goto invalid_type;
case TAG_QUOTE:
if (type == sym_1("Quote") ||
type == sym_1("quote"))
@@ -8343,6 +8508,8 @@ void * tag_to_pointer (s_tag *tag, e_tag_type type)
return &tag->data.list;
case TAG_PTAG:
return &tag->data.ptag;
+ case TAG_PTR:
+ return &tag->data.ptr.p;
case TAG_QUOTE:
return &tag->data.quote;
case TAG_STR:
@@ -8418,6 +8585,8 @@ sw tag_type_size (e_tag_type type)
return sizeof(s_list *);
case TAG_PTAG:
return sizeof(p_tag);
+ case TAG_PTR:
+ return sizeof(void *);
case TAG_QUOTE:
return sizeof(s_quote);
case TAG_STR:
@@ -8484,6 +8653,8 @@ f_buf_inspect tag_type_to_buf_inspect (e_tag_type type)
return (f_buf_inspect) buf_inspect_list;
case TAG_PTAG:
return (f_buf_inspect) buf_inspect_ptag;
+ case TAG_PTR:
+ return (f_buf_inspect) buf_inspect_ptr;
case TAG_QUOTE:
return (f_buf_inspect) buf_inspect_quote;
case TAG_STR:
@@ -8550,6 +8721,8 @@ f_buf_inspect_size tag_type_to_buf_inspect_size (e_tag_type type)
return (f_buf_inspect_size) buf_inspect_list_size;
case TAG_PTAG:
return (f_buf_inspect_size) buf_inspect_ptag_size;
+ case TAG_PTR:
+ return (f_buf_inspect_size) buf_inspect_ptr_size;
case TAG_QUOTE:
return (f_buf_inspect_size) buf_inspect_quote_size;
case TAG_STR:
@@ -8617,6 +8790,8 @@ f_buf_parse tag_type_to_buf_parse (e_tag_type type)
return (f_buf_parse) buf_parse_list;
case TAG_PTAG:
return (f_buf_parse) buf_parse_ptag;
+ case TAG_PTR:
+ return (f_buf_parse) buf_parse_ptr;
case TAG_QUOTE:
return (f_buf_parse) buf_parse_quote;
case TAG_STR:
@@ -8662,6 +8837,8 @@ ffi_type * tag_type_to_ffi_type (e_tag_type type)
return &ffi_type_pointer;
case TAG_PTAG:
return &ffi_type_pointer;
+ case TAG_PTR:
+ return &ffi_type_pointer;
case TAG_QUOTE:
return &ffi_type_pointer;
case TAG_S8:
@@ -8727,6 +8904,7 @@ const s_sym * tag_type_to_module (e_tag_type tag_type)
case TAG_UW: return sym_1("Uw");
case TAG_LIST: return sym_1("List");
case TAG_PTAG: return sym_1("Ptag");
+ case TAG_PTR: return sym_1("Ptr");
case TAG_QUOTE: return sym_1("Quote");
case TAG_STR: return sym_1("Str");
case TAG_SYM: return sym_1("Sym");
@@ -8741,35 +8919,36 @@ const s_sym * tag_type_to_module (e_tag_type tag_type)
s8 * tag_type_to_string (e_tag_type type)
{
switch (type) {
- case TAG_VOID: return "void";
- case TAG_ARRAY: return "array";
- case TAG_BOOL: return "bool";
- case TAG_CALL: return "call";
- case TAG_CFN: return "cfn";
- case TAG_CHARACTER: return "character";
- case TAG_F32: return "f32";
- case TAG_F64: return "f64";
- case TAG_FACT: return "fact";
- case TAG_FN: return "fn";
- case TAG_IDENT: return "ident";
- case TAG_INTEGER: return "integer";
- case TAG_SW: return "sw";
- case TAG_S64: return "s64";
- case TAG_S32: return "s32";
- case TAG_S16: return "s16";
- case TAG_S8: return "s8";
- case TAG_U8: return "u8";
- case TAG_U16: return "u16";
- case TAG_U32: return "u32";
- case TAG_U64: return "u64";
- case TAG_UW: return "uw";
- case TAG_LIST: return "list";
- case TAG_PTAG: return "ptag";
- case TAG_QUOTE: return "quote";
- case TAG_STR: return "str";
- case TAG_SYM: return "sym";
- case TAG_TUPLE: return "tuple";
- case TAG_VAR: return "var";
+ case TAG_VOID: return "Void";
+ case TAG_ARRAY: return "Array";
+ case TAG_BOOL: return "Bool";
+ case TAG_CALL: return "Call";
+ case TAG_CFN: return "Cfn";
+ case TAG_CHARACTER: return "Character";
+ case TAG_F32: return "F32";
+ case TAG_F64: return "F64";
+ case TAG_FACT: return "Fact";
+ case TAG_FN: return "Fn";
+ case TAG_IDENT: return "Ident";
+ case TAG_INTEGER: return "Integer";
+ case TAG_SW: return "Sw";
+ case TAG_S64: return "S64";
+ case TAG_S32: return "S32";
+ case TAG_S16: return "S16";
+ case TAG_S8: return "S8";
+ case TAG_U8: return "U8";
+ case TAG_U16: return "U16";
+ case TAG_U32: return "U32";
+ case TAG_U64: return "U64";
+ case TAG_UW: return "Uw";
+ case TAG_LIST: return "List";
+ case TAG_PTAG: return "Ptag";
+ case TAG_PTR: return "Void*";
+ case TAG_QUOTE: return "Quote";
+ case TAG_STR: return "Str";
+ case TAG_SYM: return "Sym";
+ case TAG_TUPLE: return "Tuple";
+ case TAG_VAR: return "Var";
}
assert(! "tag_type_to_string: unknown tag type");
errx(1, "tag_type_to_string: unknown tag type");
@@ -8779,35 +8958,36 @@ s8 * tag_type_to_string (e_tag_type type)
const s_sym * tag_type_to_sym (e_tag_type tag_type)
{
switch (tag_type) {
- case TAG_VOID: return sym_1("void");
- case TAG_ARRAY: return sym_1("array");
- case TAG_BOOL: return sym_1("bool");
- case TAG_CALL: return sym_1("call");
- case TAG_CFN: return sym_1("cfn");
- case TAG_CHARACTER: return sym_1("character");
- case TAG_F32: return sym_1("f32");
- case TAG_F64: return sym_1("f64");
- case TAG_FACT: return sym_1("fact");
- case TAG_FN: return sym_1("fn");
- case TAG_IDENT: return sym_1("ident");
- case TAG_INTEGER: return sym_1("integer");
- case TAG_SW: return sym_1("sw");
- case TAG_S64: return sym_1("s64");
- case TAG_S32: return sym_1("s32");
- case TAG_S16: return sym_1("s16");
- case TAG_S8: return sym_1("s8");
- case TAG_U8: return sym_1("u8");
- case TAG_U16: return sym_1("u16");
- case TAG_U32: return sym_1("u32");
- case TAG_U64: return sym_1("u64");
- case TAG_UW: return sym_1("uw");
- case TAG_LIST: return sym_1("list");
- case TAG_PTAG: return sym_1("ptag");
- case TAG_QUOTE: return sym_1("quote");
- case TAG_STR: return sym_1("str");
- case TAG_SYM: return sym_1("sym");
- case TAG_TUPLE: return sym_1("tuple");
- case TAG_VAR: return sym_1("var");
+ case TAG_VOID: return sym_1("Void");
+ case TAG_ARRAY: return sym_1("Array");
+ case TAG_BOOL: return sym_1("Bool");
+ case TAG_CALL: return sym_1("Call");
+ case TAG_CFN: return sym_1("Cfn");
+ case TAG_CHARACTER: return sym_1("Character");
+ case TAG_F32: return sym_1("F32");
+ case TAG_F64: return sym_1("F64");
+ case TAG_FACT: return sym_1("Fact");
+ case TAG_FN: return sym_1("Fn");
+ case TAG_IDENT: return sym_1("Ident");
+ case TAG_INTEGER: return sym_1("Integer");
+ case TAG_SW: return sym_1("Sw");
+ case TAG_S64: return sym_1("S64");
+ case TAG_S32: return sym_1("S32");
+ case TAG_S16: return sym_1("S16");
+ case TAG_S8: return sym_1("S8");
+ case TAG_U8: return sym_1("U8");
+ case TAG_U16: return sym_1("U16");
+ case TAG_U32: return sym_1("U32");
+ case TAG_U64: return sym_1("U64");
+ case TAG_UW: return sym_1("Uw");
+ case TAG_LIST: return sym_1("List");
+ case TAG_PTAG: return sym_1("Ptag");
+ case TAG_PTR: return sym_1("Void*");
+ case TAG_QUOTE: return sym_1("Quote");
+ case TAG_STR: return sym_1("Str");
+ case TAG_SYM: return sym_1("Sym");
+ case TAG_TUPLE: return sym_1("Tuple");
+ case TAG_VAR: return sym_1("Var");
}
assert(! "tag_type_to_sym: invalid tag type");
errx(1, "tag_type_to_sym: invalid tag type: %d", tag_type);
diff --git a/libc3/tag.h b/libc3/tag.h
index 8e127e5..1a78748 100644
--- a/libc3/tag.h
+++ b/libc3/tag.h
@@ -94,10 +94,6 @@ s_tag * tag_new_var ();
void tag_delete (s_tag *tag);
/* Observers */
-s_tag * tag_brackets (s_tag *tag, const s_tag *address,
- s_tag *dest);
-s_tag * tag_equal (const s_tag *a, const s_tag *b,
- s_tag *dest);
u64 tag_hash_u64 (const s_tag *tag);
uw tag_hash_uw (const s_tag *tag);
s_str * tag_inspect (const s_tag *tag, s_str *dest);
@@ -106,7 +102,6 @@ bool tag_is_bound_var (const s_tag *tag);
bool tag_is_number (const s_tag *tag);
bool tag_is_unbound_var (const s_tag *tag);
s8 tag_number_compare (const s_tag *a, const s_tag *b);
-s_tag * tag_paren (const s_tag *tag, s_tag *dest);
sw tag_size (const s_tag *tag);
void * tag_to_ffi_pointer (s_tag *tag, const s_sym *type);
ffi_type tag_to_ffi_type(const s_tag *tag);
@@ -159,8 +154,28 @@ s_tag * tag_void (s_tag *tag);
/* operators */
s_tag * tag_add (const s_tag *a, const s_tag *b, s_tag *dest);
-s_tag * tag_sub (const s_tag *a, const s_tag *b, s_tag *dest);
-s_tag * tag_mul (const s_tag *a, const s_tag *b, s_tag *dest);
+bool * tag_and (const s_tag *a, const s_tag *b, bool *dest);
+s_tag * tag_band (const s_tag *a, const s_tag *b, s_tag *dest);
+s_tag * tag_bnot (const s_tag *tag, s_tag *dest);
+s_tag * tag_bor (const s_tag *a, const s_tag *b, s_tag *dest);
+s_tag * tag_brackets (s_tag *tag, const s_tag *address, s_tag *dest);
+s_tag * tag_bxor (const s_tag *a, const s_tag *b, s_tag *dest);
s_tag * tag_div (const s_tag *a, const s_tag *b, s_tag *dest);
+bool * tag_lt (const s_tag *a, const s_tag *b, bool *dest);
+bool * tag_lte (const s_tag *a, const s_tag *b, bool *dest);
+bool * tag_gt (const s_tag *a, const s_tag *b, bool *dest);
+bool * tag_gte (const s_tag *a, const s_tag *b, bool *dest);
+bool * tag_eq (const s_tag *a, const s_tag *b, bool *dest);
+s_tag * tag_equal (const s_tag *a, const s_tag *b, s_tag *dest);
+s_tag * tag_mod (const s_tag *a, const s_tag *b, s_tag *dest);
+s_tag * tag_mul (const s_tag *a, const s_tag *b, s_tag *dest);
+s_tag * tag_neg (const s_tag *tag, s_tag *dest);
+bool * tag_not (const s_tag *tag, bool *dest);
+bool * tag_not_eq (const s_tag *a, const s_tag *b, bool *dest);
+bool * tag_or (const s_tag *a, const s_tag *b, bool *dest);
+s_tag * tag_paren (const s_tag *tag, s_tag *dest);
+s_tag * tag_shift_left (const s_tag *a, const s_tag *b, s_tag *dest);
+s_tag * tag_shift_right (const s_tag *a, const s_tag *b, s_tag *dest);
+s_tag * tag_sub (const s_tag *a, const s_tag *b, s_tag *dest);
#endif /* STR_H */
diff --git a/libc3/types.h b/libc3/types.h
index 2e0900a..180f7ca 100644
--- a/libc3/types.h
+++ b/libc3/types.h
@@ -90,6 +90,7 @@ typedef enum {
TAG_UW,
TAG_LIST,
TAG_PTAG,
+ TAG_PTR,
TAG_QUOTE,
TAG_STR,
TAG_SYM,
@@ -125,6 +126,7 @@ typedef struct integer s_integer;
typedef struct list s_list;
typedef struct list s_list_map;
typedef struct log s_log;
+typedef struct ptr s_ptr;
typedef struct quote s_quote;
typedef struct str s_str;
typedef struct struct_ s_struct;
@@ -137,7 +139,7 @@ typedef struct type s_type;
typedef struct unwind_protect s_unwind_protect;
/* unions */
-typedef union ptr u_ptr;
+typedef union ptr_ u_ptr;
typedef union ptr_w u_ptr_w;
typedef union tag_data u_tag_data;
typedef union tag_type u_tag_type;
@@ -202,7 +204,12 @@ struct frame {
s_frame *next;
};
-union ptr {
+struct ptr {
+ e_tag_type type;
+ void *p;
+};
+
+union ptr_ {
const void *p;
const s8 *ps8;
const u8 *pu8;
@@ -355,6 +362,7 @@ union tag_data {
s_integer integer;
s_list *list;
p_tag ptag;
+ s_ptr ptr;
s_quote quote;
s_str str;
const s_sym *sym;
diff --git a/libc3/u16.c b/libc3/u16.c
index 8772877..415f8a9 100644
--- a/libc3/u16.c
+++ b/libc3/u16.c
@@ -64,6 +64,7 @@ u16 u16_cast (s_tag *tag)
return (u16) tag->data.uw;
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
diff --git a/libc3/u32.c b/libc3/u32.c
index c6fc325..d12dcc5 100644
--- a/libc3/u32.c
+++ b/libc3/u32.c
@@ -64,6 +64,7 @@ u32 u32_cast (s_tag *tag)
return (u32) tag->data.uw;
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
diff --git a/libc3/u64.c b/libc3/u64.c
index 0c65ba8..c45d19e 100644
--- a/libc3/u64.c
+++ b/libc3/u64.c
@@ -64,6 +64,7 @@ u64 u64_cast (s_tag *tag)
return (u64) tag->data.uw;
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
diff --git a/libc3/u8.c b/libc3/u8.c
index 6f00b8d..ff4aaf4 100644
--- a/libc3/u8.c
+++ b/libc3/u8.c
@@ -64,6 +64,7 @@ u8 u8_cast (s_tag *tag)
return (u8) tag->data.uw;
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
diff --git a/libc3/uw.c b/libc3/uw.c
index a43e148..b40d2f8 100644
--- a/libc3/uw.c
+++ b/libc3/uw.c
@@ -64,6 +64,7 @@ uw uw_cast (s_tag *tag)
return (uw) tag->data.uw;
case TAG_LIST:
case TAG_PTAG:
+ case TAG_PTR:
case TAG_QUOTE:
case TAG_STR:
case TAG_SYM:
diff --git a/test/ic3/bool.in b/test/ic3/bool.in
index 4f7022c..3015c8c 100644
--- a/test/ic3/bool.in
+++ b/test/ic3/bool.in
@@ -1,30 +1,32 @@
+quote true
true
+quote false
false
+quote true
true
+quote false
false
+quote false && false
false && false
+quote false && true
false && true
+quote true && false
true && false
+quote true && true
true && true
+quote false || false
false || false
+quote false || true
false || true
+quote true || false
true || false
+quote true || true
true || true
+quote ! false
! false
+quote ! true
! true
+quote ! ! false
! ! false
+quote ! ! true
! ! true
-1 < 1
-1 < 2
-2 < 1
-1 <= 1
-1 <= 2
-2 <= 1
-1 == 1
-1 == 2
-1 >= 1
-2 >= 1
-1 >= 2
-1 > 1
-2 > 1
-1 > 2
diff --git a/test/ic3/bool.out.expected b/test/ic3/bool.out.expected
index d6c1644..bb8f668 100644
--- a/test/ic3/bool.out.expected
+++ b/test/ic3/bool.out.expected
@@ -1,30 +1,32 @@
true
-false
true
false
false
-false
-false
-true
-false
-true
-true
true
true
false
false
-true
+false && false
false
-true
+false && true
false
-true
-true
+true && false
false
+true && true
true
+false || false
false
+false || true
true
+true || false
true
+true || true
+true
+! false
+true
+! true
false
+! ! false
false
+! ! true
true
-false
diff --git a/test/ic3/integer.err.expected b/test/ic3/integer.err.expected
deleted file mode 100644
index e69de29..0000000
--- a/test/ic3/integer.err.expected
+++ /dev/null
diff --git a/test/ic3/integer.in b/test/ic3/integer.in
index 2d92c5d..2cfd636 100644
--- a/test/ic3/integer.in
+++ b/test/ic3/integer.in
@@ -1,2860 +1,80 @@
-0b10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-0o2000000000000000000000000000000000000000000
+-170141183460469231731687303715884105728
-0x80000000000000000000000000000000
-0b01111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
-0o1777777777777777777777777777777777777777777
+-170141183460469231731687303715884105727
-0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-0b1000000000000000000000000000000000000000000000000000000000000000
-0o1000000000000000000000
+-9223372036854775808
-0x8000000000000000
-0b0111111111111111111111111111111111111111111111111111111111111111
-0o0777777777777777777777
+-9223372036854775807
-0x7FFFFFFFFFFFFFFF
-0b10000000000000000000000000000000
-0o20000000000
+-2147483648
-0x80000000
-0b01111111111111111111111111111111
-0o17777777777
+-2147483647
-0x7FFFFFFF
-0b1000000000000000
-0o100000
+-32768
-0x8000
-0b111111111111111
-0o77777
+-32767
-0x7FFF
-0b10000000
-0o200
+-128
-0x80
-0b1111111
-0o177
+-127
-0x7F
0b11111111
0o377
+255
0xFF
0b100000000
0o400
+256
0x100
0b1111111111111111
0o177777
+65535
0xFFFF
0b10000000000000000
0o200000
+65536
0x10000
0b011111111111111111111111111111111
0o37777777777
+4294967295
0x0FFFFFFFF
0b100000000000000000000000000000000
0o40000000000
+4294967296
0x100000000
0b01111111111111111111111111111111111111111111111111111111111111111
0o1777777777777777777777
+18446744073709551615
0x0FFFFFFFFFFFFFFFF
0b10000000000000000000000000000000000000000000000000000000000000000
0o2000000000000000000000
+18446744073709551616
0x10000000000000000
0b011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
0o3777777777777777777777777777777777777777777
+340282366920938463463374607431768211455
0x0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
0b100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0o4000000000000000000000000000000000000000000
+340282366920938463463374607431768211456
0x100000000000000000000000000000000
--170141183460469231731687303715884105728 + -170141183460469231731687303715884105728
--170141183460469231731687303715884105728 + -170141183460469231731687303715884105727
--170141183460469231731687303715884105728 + -9223372036854775808
--170141183460469231731687303715884105728 + -9223372036854775807
--170141183460469231731687303715884105728 + -2147483648
--170141183460469231731687303715884105728 + -2147483647
--170141183460469231731687303715884105728 + -32768
--170141183460469231731687303715884105728 + -32767
--170141183460469231731687303715884105728 + -128
--170141183460469231731687303715884105728 + -127
--170141183460469231731687303715884105728 + 255
--170141183460469231731687303715884105728 + 256
--170141183460469231731687303715884105728 + 65535
--170141183460469231731687303715884105728 + 65536
--170141183460469231731687303715884105728 + 4294967295
--170141183460469231731687303715884105728 + 4294967296
--170141183460469231731687303715884105728 + 18446744073709551615
--170141183460469231731687303715884105728 + 18446744073709551616
--170141183460469231731687303715884105728 + 340282366920938463463374607431768211455
--170141183460469231731687303715884105728 + 340282366920938463463374607431768211456
--170141183460469231731687303715884105727 + -170141183460469231731687303715884105728
--170141183460469231731687303715884105727 + -170141183460469231731687303715884105727
--170141183460469231731687303715884105727 + -9223372036854775808
--170141183460469231731687303715884105727 + -9223372036854775807
--170141183460469231731687303715884105727 + -2147483648
--170141183460469231731687303715884105727 + -2147483647
--170141183460469231731687303715884105727 + -32768
--170141183460469231731687303715884105727 + -32767
--170141183460469231731687303715884105727 + -128
--170141183460469231731687303715884105727 + -127
--170141183460469231731687303715884105727 + 255
--170141183460469231731687303715884105727 + 256
--170141183460469231731687303715884105727 + 65535
--170141183460469231731687303715884105727 + 65536
--170141183460469231731687303715884105727 + 4294967295
--170141183460469231731687303715884105727 + 4294967296
--170141183460469231731687303715884105727 + 18446744073709551615
--170141183460469231731687303715884105727 + 18446744073709551616
--170141183460469231731687303715884105727 + 340282366920938463463374607431768211455
--170141183460469231731687303715884105727 + 340282366920938463463374607431768211456
--9223372036854775808 + -170141183460469231731687303715884105728
--9223372036854775808 + -170141183460469231731687303715884105727
--9223372036854775808 + -9223372036854775808
--9223372036854775808 + -9223372036854775807
--9223372036854775808 + -2147483648
--9223372036854775808 + -2147483647
--9223372036854775808 + -32768
--9223372036854775808 + -32767
--9223372036854775808 + -128
--9223372036854775808 + -127
--9223372036854775808 + 255
--9223372036854775808 + 256
--9223372036854775808 + 65535
--9223372036854775808 + 65536
--9223372036854775808 + 4294967295
--9223372036854775808 + 4294967296
--9223372036854775808 + 18446744073709551615
--9223372036854775808 + 18446744073709551616
--9223372036854775808 + 340282366920938463463374607431768211455
--9223372036854775808 + 340282366920938463463374607431768211456
--9223372036854775807 + -170141183460469231731687303715884105728
--9223372036854775807 + -170141183460469231731687303715884105727
--9223372036854775807 + -9223372036854775808
--9223372036854775807 + -9223372036854775807
--9223372036854775807 + -2147483648
--9223372036854775807 + -2147483647
--9223372036854775807 + -32768
--9223372036854775807 + -32767
--9223372036854775807 + -128
--9223372036854775807 + -127
--9223372036854775807 + 255
--9223372036854775807 + 256
--9223372036854775807 + 65535
--9223372036854775807 + 65536
--9223372036854775807 + 4294967295
--9223372036854775807 + 4294967296
--9223372036854775807 + 18446744073709551615
--9223372036854775807 + 18446744073709551616
--9223372036854775807 + 340282366920938463463374607431768211455
--9223372036854775807 + 340282366920938463463374607431768211456
--2147483648 + -170141183460469231731687303715884105728
--2147483648 + -170141183460469231731687303715884105727
--2147483648 + -9223372036854775808
--2147483648 + -9223372036854775807
--2147483648 + -2147483648
--2147483648 + -2147483647
--2147483648 + -32768
--2147483648 + -32767
--2147483648 + -128
--2147483648 + -127
--2147483648 + 255
--2147483648 + 256
--2147483648 + 65535
--2147483648 + 65536
--2147483648 + 4294967295
--2147483648 + 4294967296
--2147483648 + 18446744073709551615
--2147483648 + 18446744073709551616
--2147483648 + 340282366920938463463374607431768211455
--2147483648 + 340282366920938463463374607431768211456
--2147483647 + -170141183460469231731687303715884105728
--2147483647 + -170141183460469231731687303715884105727
--2147483647 + -9223372036854775808
--2147483647 + -9223372036854775807
--2147483647 + -2147483648
--2147483647 + -2147483647
--2147483647 + -32768
--2147483647 + -32767
--2147483647 + -128
--2147483647 + -127
--2147483647 + 255
--2147483647 + 256
--2147483647 + 65535
--2147483647 + 65536
--2147483647 + 4294967295
--2147483647 + 4294967296
--2147483647 + 18446744073709551615
--2147483647 + 18446744073709551616
--2147483647 + 340282366920938463463374607431768211455
--2147483647 + 340282366920938463463374607431768211456
--32768 + -170141183460469231731687303715884105728
--32768 + -170141183460469231731687303715884105727
--32768 + -9223372036854775808
--32768 + -9223372036854775807
--32768 + -2147483648
--32768 + -2147483647
--32768 + -32768
--32768 + -32767
--32768 + -128
--32768 + -127
--32768 + 255
--32768 + 256
--32768 + 65535
--32768 + 65536
--32768 + 4294967295
--32768 + 4294967296
--32768 + 18446744073709551615
--32768 + 18446744073709551616
--32768 + 340282366920938463463374607431768211455
--32768 + 340282366920938463463374607431768211456
--32767 + -170141183460469231731687303715884105728
--32767 + -170141183460469231731687303715884105727
--32767 + -9223372036854775808
--32767 + -9223372036854775807
--32767 + -2147483648
--32767 + -2147483647
--32767 + -32768
--32767 + -32767
--32767 + -128
--32767 + -127
--32767 + 255
--32767 + 256
--32767 + 65535
--32767 + 65536
--32767 + 4294967295
--32767 + 4294967296
--32767 + 18446744073709551615
--32767 + 18446744073709551616
--32767 + 340282366920938463463374607431768211455
--32767 + 340282366920938463463374607431768211456
--128 + -170141183460469231731687303715884105728
--128 + -170141183460469231731687303715884105727
--128 + -9223372036854775808
--128 + -9223372036854775807
--128 + -2147483648
--128 + -2147483647
--128 + -32768
--128 + -32767
--128 + -128
--128 + -127
--128 + 255
--128 + 256
--128 + 65535
--128 + 65536
--128 + 4294967295
--128 + 4294967296
--128 + 18446744073709551615
--128 + 18446744073709551616
--128 + 340282366920938463463374607431768211455
--128 + 340282366920938463463374607431768211456
--127 + -170141183460469231731687303715884105728
--127 + -170141183460469231731687303715884105727
--127 + -9223372036854775808
--127 + -9223372036854775807
--127 + -2147483648
--127 + -2147483647
--127 + -32768
--127 + -32767
--127 + -128
--127 + -127
--127 + 255
--127 + 256
--127 + 65535
--127 + 65536
--127 + 4294967295
--127 + 4294967296
--127 + 18446744073709551615
--127 + 18446744073709551616
--127 + 340282366920938463463374607431768211455
--127 + 340282366920938463463374607431768211456
-255 + -170141183460469231731687303715884105728
-255 + -170141183460469231731687303715884105727
-255 + -9223372036854775808
-255 + -9223372036854775807
-255 + -2147483648
-255 + -2147483647
-255 + -32768
-255 + -32767
-255 + -128
-255 + -127
-255 + 255
-255 + 256
-255 + 65535
-255 + 65536
-255 + 4294967295
-255 + 4294967296
-255 + 18446744073709551615
-255 + 18446744073709551616
-255 + 340282366920938463463374607431768211455
-255 + 340282366920938463463374607431768211456
-256 + -170141183460469231731687303715884105728
-256 + -170141183460469231731687303715884105727
-256 + -9223372036854775808
-256 + -9223372036854775807
-256 + -2147483648
-256 + -2147483647
-256 + -32768
-256 + -32767
-256 + -128
-256 + -127
-256 + 255
-256 + 256
-256 + 65535
-256 + 65536
-256 + 4294967295
-256 + 4294967296
-256 + 18446744073709551615
-256 + 18446744073709551616
-256 + 340282366920938463463374607431768211455
-256 + 340282366920938463463374607431768211456
-65535 + -170141183460469231731687303715884105728
-65535 + -170141183460469231731687303715884105727
-65535 + -9223372036854775808
-65535 + -9223372036854775807
-65535 + -2147483648
-65535 + -2147483647
-65535 + -32768
-65535 + -32767
-65535 + -128
-65535 + -127
-65535 + 255
-65535 + 256
-65535 + 65535
-65535 + 65536
-65535 + 4294967295
-65535 + 4294967296
-65535 + 18446744073709551615
-65535 + 18446744073709551616
-65535 + 340282366920938463463374607431768211455
-65535 + 340282366920938463463374607431768211456
-65536 + -170141183460469231731687303715884105728
-65536 + -170141183460469231731687303715884105727
-65536 + -9223372036854775808
-65536 + -9223372036854775807
-65536 + -2147483648
-65536 + -2147483647
-65536 + -32768
-65536 + -32767
-65536 + -128
-65536 + -127
-65536 + 255
-65536 + 256
-65536 + 65535
-65536 + 65536
-65536 + 4294967295
-65536 + 4294967296
-65536 + 18446744073709551615
-65536 + 18446744073709551616
-65536 + 340282366920938463463374607431768211455
-65536 + 340282366920938463463374607431768211456
-4294967295 + -170141183460469231731687303715884105728
-4294967295 + -170141183460469231731687303715884105727
-4294967295 + -9223372036854775808
-4294967295 + -9223372036854775807
-4294967295 + -2147483648
-4294967295 + -2147483647
-4294967295 + -32768
-4294967295 + -32767
-4294967295 + -128
-4294967295 + -127
-4294967295 + 255
-4294967295 + 256
-4294967295 + 65535
-4294967295 + 65536
-4294967295 + 4294967295
-4294967295 + 4294967296
-4294967295 + 18446744073709551615
-4294967295 + 18446744073709551616
-4294967295 + 340282366920938463463374607431768211455
-4294967295 + 340282366920938463463374607431768211456
-4294967296 + -170141183460469231731687303715884105728
-4294967296 + -170141183460469231731687303715884105727
-4294967296 + -9223372036854775808
-4294967296 + -9223372036854775807
-4294967296 + -2147483648
-4294967296 + -2147483647
-4294967296 + -32768
-4294967296 + -32767
-4294967296 + -128
-4294967296 + -127
-4294967296 + 255
-4294967296 + 256
-4294967296 + 65535
-4294967296 + 65536
-4294967296 + 4294967295
-4294967296 + 4294967296
-4294967296 + 18446744073709551615
-4294967296 + 18446744073709551616
-4294967296 + 340282366920938463463374607431768211455
-4294967296 + 340282366920938463463374607431768211456
-18446744073709551615 + -170141183460469231731687303715884105728
-18446744073709551615 + -170141183460469231731687303715884105727
-18446744073709551615 + -9223372036854775808
-18446744073709551615 + -9223372036854775807
-18446744073709551615 + -2147483648
-18446744073709551615 + -2147483647
-18446744073709551615 + -32768
-18446744073709551615 + -32767
-18446744073709551615 + -128
-18446744073709551615 + -127
-18446744073709551615 + 255
-18446744073709551615 + 256
-18446744073709551615 + 65535
-18446744073709551615 + 65536
-18446744073709551615 + 4294967295
-18446744073709551615 + 4294967296
-18446744073709551615 + 18446744073709551615
-18446744073709551615 + 18446744073709551616
-18446744073709551615 + 340282366920938463463374607431768211455
-18446744073709551615 + 340282366920938463463374607431768211456
-18446744073709551616 + -170141183460469231731687303715884105728
-18446744073709551616 + -170141183460469231731687303715884105727
-18446744073709551616 + -9223372036854775808
-18446744073709551616 + -9223372036854775807
-18446744073709551616 + -2147483648
-18446744073709551616 + -2147483647
-18446744073709551616 + -32768
-18446744073709551616 + -32767
-18446744073709551616 + -128
-18446744073709551616 + -127
-18446744073709551616 + 255
-18446744073709551616 + 256
-18446744073709551616 + 65535
-18446744073709551616 + 65536
-18446744073709551616 + 4294967295
-18446744073709551616 + 4294967296
-18446744073709551616 + 18446744073709551615
-18446744073709551616 + 18446744073709551616
-18446744073709551616 + 340282366920938463463374607431768211455
-18446744073709551616 + 340282366920938463463374607431768211456
-340282366920938463463374607431768211455 + -170141183460469231731687303715884105728
-340282366920938463463374607431768211455 + -170141183460469231731687303715884105727
-340282366920938463463374607431768211455 + -9223372036854775808
-340282366920938463463374607431768211455 + -9223372036854775807
-340282366920938463463374607431768211455 + -2147483648
-340282366920938463463374607431768211455 + -2147483647
-340282366920938463463374607431768211455 + -32768
-340282366920938463463374607431768211455 + -32767
-340282366920938463463374607431768211455 + -128
-340282366920938463463374607431768211455 + -127
-340282366920938463463374607431768211455 + 255
-340282366920938463463374607431768211455 + 256
-340282366920938463463374607431768211455 + 65535
-340282366920938463463374607431768211455 + 65536
-340282366920938463463374607431768211455 + 4294967295
-340282366920938463463374607431768211455 + 4294967296
-340282366920938463463374607431768211455 + 18446744073709551615
-340282366920938463463374607431768211455 + 18446744073709551616
-340282366920938463463374607431768211455 + 340282366920938463463374607431768211455
-340282366920938463463374607431768211455 + 340282366920938463463374607431768211456
-340282366920938463463374607431768211456 + -170141183460469231731687303715884105728
-340282366920938463463374607431768211456 + -170141183460469231731687303715884105727
-340282366920938463463374607431768211456 + -9223372036854775808
-340282366920938463463374607431768211456 + -9223372036854775807
-340282366920938463463374607431768211456 + -2147483648
-340282366920938463463374607431768211456 + -2147483647
-340282366920938463463374607431768211456 + -32768
-340282366920938463463374607431768211456 + -32767
-340282366920938463463374607431768211456 + -128
-340282366920938463463374607431768211456 + -127
-340282366920938463463374607431768211456 + 255
-340282366920938463463374607431768211456 + 256
-340282366920938463463374607431768211456 + 65535
-340282366920938463463374607431768211456 + 65536
-340282366920938463463374607431768211456 + 4294967295
-340282366920938463463374607431768211456 + 4294967296
-340282366920938463463374607431768211456 + 18446744073709551615
-340282366920938463463374607431768211456 + 18446744073709551616
-340282366920938463463374607431768211456 + 340282366920938463463374607431768211455
-340282366920938463463374607431768211456 + 340282366920938463463374607431768211456
--170141183460469231731687303715884105728 - -170141183460469231731687303715884105728
--170141183460469231731687303715884105728 - -170141183460469231731687303715884105727
--170141183460469231731687303715884105728 - -9223372036854775808
--170141183460469231731687303715884105728 - -9223372036854775807
--170141183460469231731687303715884105728 - -2147483648
--170141183460469231731687303715884105728 - -2147483647
--170141183460469231731687303715884105728 - -32768
--170141183460469231731687303715884105728 - -32767
--170141183460469231731687303715884105728 - -128
--170141183460469231731687303715884105728 - -127
--170141183460469231731687303715884105728 - 255
--170141183460469231731687303715884105728 - 256
--170141183460469231731687303715884105728 - 65535
--170141183460469231731687303715884105728 - 65536
--170141183460469231731687303715884105728 - 4294967295
--170141183460469231731687303715884105728 - 4294967296
--170141183460469231731687303715884105728 - 18446744073709551615
--170141183460469231731687303715884105728 - 18446744073709551616
--170141183460469231731687303715884105728 - 340282366920938463463374607431768211455
--170141183460469231731687303715884105728 - 340282366920938463463374607431768211456
--170141183460469231731687303715884105727 - -170141183460469231731687303715884105728
--170141183460469231731687303715884105727 - -170141183460469231731687303715884105727
--170141183460469231731687303715884105727 - -9223372036854775808
--170141183460469231731687303715884105727 - -9223372036854775807
--170141183460469231731687303715884105727 - -2147483648
--170141183460469231731687303715884105727 - -2147483647
--170141183460469231731687303715884105727 - -32768
--170141183460469231731687303715884105727 - -32767
--170141183460469231731687303715884105727 - -128
--170141183460469231731687303715884105727 - -127
--170141183460469231731687303715884105727 - 255
--170141183460469231731687303715884105727 - 256
--170141183460469231731687303715884105727 - 65535
--170141183460469231731687303715884105727 - 65536
--170141183460469231731687303715884105727 - 4294967295
--170141183460469231731687303715884105727 - 4294967296
--170141183460469231731687303715884105727 - 18446744073709551615
--170141183460469231731687303715884105727 - 18446744073709551616
--170141183460469231731687303715884105727 - 340282366920938463463374607431768211455
--170141183460469231731687303715884105727 - 340282366920938463463374607431768211456
--9223372036854775808 - -170141183460469231731687303715884105728
--9223372036854775808 - -170141183460469231731687303715884105727
--9223372036854775808 - -9223372036854775808
--9223372036854775808 - -9223372036854775807
--9223372036854775808 - -2147483648
--9223372036854775808 - -2147483647
--9223372036854775808 - -32768
--9223372036854775808 - -32767
--9223372036854775808 - -128
--9223372036854775808 - -127
--9223372036854775808 - 255
--9223372036854775808 - 256
--9223372036854775808 - 65535
--9223372036854775808 - 65536
--9223372036854775808 - 4294967295
--9223372036854775808 - 4294967296
--9223372036854775808 - 18446744073709551615
--9223372036854775808 - 18446744073709551616
--9223372036854775808 - 340282366920938463463374607431768211455
--9223372036854775808 - 340282366920938463463374607431768211456
--9223372036854775807 - -170141183460469231731687303715884105728
--9223372036854775807 - -170141183460469231731687303715884105727
--9223372036854775807 - -9223372036854775808
--9223372036854775807 - -9223372036854775807
--9223372036854775807 - -2147483648
--9223372036854775807 - -2147483647
--9223372036854775807 - -32768
--9223372036854775807 - -32767
--9223372036854775807 - -128
--9223372036854775807 - -127
--9223372036854775807 - 255
--9223372036854775807 - 256
--9223372036854775807 - 65535
--9223372036854775807 - 65536
--9223372036854775807 - 4294967295
--9223372036854775807 - 4294967296
--9223372036854775807 - 18446744073709551615
--9223372036854775807 - 18446744073709551616
--9223372036854775807 - 340282366920938463463374607431768211455
--9223372036854775807 - 340282366920938463463374607431768211456
--2147483648 - -170141183460469231731687303715884105728
--2147483648 - -170141183460469231731687303715884105727
--2147483648 - -9223372036854775808
--2147483648 - -9223372036854775807
--2147483648 - -2147483648
--2147483648 - -2147483647
--2147483648 - -32768
--2147483648 - -32767
--2147483648 - -128
--2147483648 - -127
--2147483648 - 255
--2147483648 - 256
--2147483648 - 65535
--2147483648 - 65536
--2147483648 - 4294967295
--2147483648 - 4294967296
--2147483648 - 18446744073709551615
--2147483648 - 18446744073709551616
--2147483648 - 340282366920938463463374607431768211455
--2147483648 - 340282366920938463463374607431768211456
--2147483647 - -170141183460469231731687303715884105728
--2147483647 - -170141183460469231731687303715884105727
--2147483647 - -9223372036854775808
--2147483647 - -9223372036854775807
--2147483647 - -2147483648
--2147483647 - -2147483647
--2147483647 - -32768
--2147483647 - -32767
--2147483647 - -128
--2147483647 - -127
--2147483647 - 255
--2147483647 - 256
--2147483647 - 65535
--2147483647 - 65536
--2147483647 - 4294967295
--2147483647 - 4294967296
--2147483647 - 18446744073709551615
--2147483647 - 18446744073709551616
--2147483647 - 340282366920938463463374607431768211455
--2147483647 - 340282366920938463463374607431768211456
--32768 - -170141183460469231731687303715884105728
--32768 - -170141183460469231731687303715884105727
--32768 - -9223372036854775808
--32768 - -9223372036854775807
--32768 - -2147483648
--32768 - -2147483647
--32768 - -32768
--32768 - -32767
--32768 - -128
--32768 - -127
--32768 - 255
--32768 - 256
--32768 - 65535
--32768 - 65536
--32768 - 4294967295
--32768 - 4294967296
--32768 - 18446744073709551615
--32768 - 18446744073709551616
--32768 - 340282366920938463463374607431768211455
--32768 - 340282366920938463463374607431768211456
--32767 - -170141183460469231731687303715884105728
--32767 - -170141183460469231731687303715884105727
--32767 - -9223372036854775808
--32767 - -9223372036854775807
--32767 - -2147483648
--32767 - -2147483647
--32767 - -32768
--32767 - -32767
--32767 - -128
--32767 - -127
--32767 - 255
--32767 - 256
--32767 - 65535
--32767 - 65536
--32767 - 4294967295
--32767 - 4294967296
--32767 - 18446744073709551615
--32767 - 18446744073709551616
--32767 - 340282366920938463463374607431768211455
--32767 - 340282366920938463463374607431768211456
--128 - -170141183460469231731687303715884105728
--128 - -170141183460469231731687303715884105727
--128 - -9223372036854775808
--128 - -9223372036854775807
--128 - -2147483648
--128 - -2147483647
--128 - -32768
--128 - -32767
--128 - -128
--128 - -127
--128 - 255
--128 - 256
--128 - 65535
--128 - 65536
--128 - 4294967295
--128 - 4294967296
--128 - 18446744073709551615
--128 - 18446744073709551616
--128 - 340282366920938463463374607431768211455
--128 - 340282366920938463463374607431768211456
--127 - -170141183460469231731687303715884105728
--127 - -170141183460469231731687303715884105727
--127 - -9223372036854775808
--127 - -9223372036854775807
--127 - -2147483648
--127 - -2147483647
--127 - -32768
--127 - -32767
--127 - -128
--127 - -127
--127 - 255
--127 - 256
--127 - 65535
--127 - 65536
--127 - 4294967295
--127 - 4294967296
--127 - 18446744073709551615
--127 - 18446744073709551616
--127 - 340282366920938463463374607431768211455
--127 - 340282366920938463463374607431768211456
-255 - -170141183460469231731687303715884105728
-255 - -170141183460469231731687303715884105727
-255 - -9223372036854775808
-255 - -9223372036854775807
-255 - -2147483648
-255 - -2147483647
-255 - -32768
-255 - -32767
-255 - -128
-255 - -127
-255 - 255
-255 - 256
-255 - 65535
-255 - 65536
-255 - 4294967295
-255 - 4294967296
-255 - 18446744073709551615
-255 - 18446744073709551616
-255 - 340282366920938463463374607431768211455
-255 - 340282366920938463463374607431768211456
-256 - -170141183460469231731687303715884105728
-256 - -170141183460469231731687303715884105727
-256 - -9223372036854775808
-256 - -9223372036854775807
-256 - -2147483648
-256 - -2147483647
-256 - -32768
-256 - -32767
-256 - -128
-256 - -127
-256 - 255
-256 - 256
-256 - 65535
-256 - 65536
-256 - 4294967295
-256 - 4294967296
-256 - 18446744073709551615
-256 - 18446744073709551616
-256 - 340282366920938463463374607431768211455
-256 - 340282366920938463463374607431768211456
-65535 - -170141183460469231731687303715884105728
-65535 - -170141183460469231731687303715884105727
-65535 - -9223372036854775808
-65535 - -9223372036854775807
-65535 - -2147483648
-65535 - -2147483647
-65535 - -32768
-65535 - -32767
-65535 - -128
-65535 - -127
-65535 - 255
-65535 - 256
-65535 - 65535
-65535 - 65536
-65535 - 4294967295
-65535 - 4294967296
-65535 - 18446744073709551615
-65535 - 18446744073709551616
-65535 - 340282366920938463463374607431768211455
-65535 - 340282366920938463463374607431768211456
-65536 - -170141183460469231731687303715884105728
-65536 - -170141183460469231731687303715884105727
-65536 - -9223372036854775808
-65536 - -9223372036854775807
-65536 - -2147483648
-65536 - -2147483647
-65536 - -32768
-65536 - -32767
-65536 - -128
-65536 - -127
-65536 - 255
-65536 - 256
-65536 - 65535
-65536 - 65536
-65536 - 4294967295
-65536 - 4294967296
-65536 - 18446744073709551615
-65536 - 18446744073709551616
-65536 - 340282366920938463463374607431768211455
-65536 - 340282366920938463463374607431768211456
-4294967295 - -170141183460469231731687303715884105728
-4294967295 - -170141183460469231731687303715884105727
-4294967295 - -9223372036854775808
-4294967295 - -9223372036854775807
-4294967295 - -2147483648
-4294967295 - -2147483647
-4294967295 - -32768
-4294967295 - -32767
-4294967295 - -128
-4294967295 - -127
-4294967295 - 255
-4294967295 - 256
-4294967295 - 65535
-4294967295 - 65536
-4294967295 - 4294967295
-4294967295 - 4294967296
-4294967295 - 18446744073709551615
-4294967295 - 18446744073709551616
-4294967295 - 340282366920938463463374607431768211455
-4294967295 - 340282366920938463463374607431768211456
-4294967296 - -170141183460469231731687303715884105728
-4294967296 - -170141183460469231731687303715884105727
-4294967296 - -9223372036854775808
-4294967296 - -9223372036854775807
-4294967296 - -2147483648
-4294967296 - -2147483647
-4294967296 - -32768
-4294967296 - -32767
-4294967296 - -128
-4294967296 - -127
-4294967296 - 255
-4294967296 - 256
-4294967296 - 65535
-4294967296 - 65536
-4294967296 - 4294967295
-4294967296 - 4294967296
-4294967296 - 18446744073709551615
-4294967296 - 18446744073709551616
-4294967296 - 340282366920938463463374607431768211455
-4294967296 - 340282366920938463463374607431768211456
-18446744073709551615 - -170141183460469231731687303715884105728
-18446744073709551615 - -170141183460469231731687303715884105727
-18446744073709551615 - -9223372036854775808
-18446744073709551615 - -9223372036854775807
-18446744073709551615 - -2147483648
-18446744073709551615 - -2147483647
-18446744073709551615 - -32768
-18446744073709551615 - -32767
-18446744073709551615 - -128
-18446744073709551615 - -127
-18446744073709551615 - 255
-18446744073709551615 - 256
-18446744073709551615 - 65535
-18446744073709551615 - 65536
-18446744073709551615 - 4294967295
-18446744073709551615 - 4294967296
-18446744073709551615 - 18446744073709551615
-18446744073709551615 - 18446744073709551616
-18446744073709551615 - 340282366920938463463374607431768211455
-18446744073709551615 - 340282366920938463463374607431768211456
-18446744073709551616 - -170141183460469231731687303715884105728
-18446744073709551616 - -170141183460469231731687303715884105727
-18446744073709551616 - -9223372036854775808
-18446744073709551616 - -9223372036854775807
-18446744073709551616 - -2147483648
-18446744073709551616 - -2147483647
-18446744073709551616 - -32768
-18446744073709551616 - -32767
-18446744073709551616 - -128
-18446744073709551616 - -127
-18446744073709551616 - 255
-18446744073709551616 - 256
-18446744073709551616 - 65535
-18446744073709551616 - 65536
-18446744073709551616 - 4294967295
-18446744073709551616 - 4294967296
-18446744073709551616 - 18446744073709551615
-18446744073709551616 - 18446744073709551616
-18446744073709551616 - 340282366920938463463374607431768211455
-18446744073709551616 - 340282366920938463463374607431768211456
-340282366920938463463374607431768211455 - -170141183460469231731687303715884105728
-340282366920938463463374607431768211455 - -170141183460469231731687303715884105727
-340282366920938463463374607431768211455 - -9223372036854775808
-340282366920938463463374607431768211455 - -9223372036854775807
-340282366920938463463374607431768211455 - -2147483648
-340282366920938463463374607431768211455 - -2147483647
-340282366920938463463374607431768211455 - -32768
-340282366920938463463374607431768211455 - -32767
-340282366920938463463374607431768211455 - -128
-340282366920938463463374607431768211455 - -127
-340282366920938463463374607431768211455 - 255
-340282366920938463463374607431768211455 - 256
-340282366920938463463374607431768211455 - 65535
-340282366920938463463374607431768211455 - 65536
-340282366920938463463374607431768211455 - 4294967295
-340282366920938463463374607431768211455 - 4294967296
-340282366920938463463374607431768211455 - 18446744073709551615
-340282366920938463463374607431768211455 - 18446744073709551616
-340282366920938463463374607431768211455 - 340282366920938463463374607431768211455
-340282366920938463463374607431768211455 - 340282366920938463463374607431768211456
-340282366920938463463374607431768211456 - -170141183460469231731687303715884105728
-340282366920938463463374607431768211456 - -170141183460469231731687303715884105727
-340282366920938463463374607431768211456 - -9223372036854775808
-340282366920938463463374607431768211456 - -9223372036854775807
-340282366920938463463374607431768211456 - -2147483648
-340282366920938463463374607431768211456 - -2147483647
-340282366920938463463374607431768211456 - -32768
-340282366920938463463374607431768211456 - -32767
-340282366920938463463374607431768211456 - -128
-340282366920938463463374607431768211456 - -127
-340282366920938463463374607431768211456 - 255
-340282366920938463463374607431768211456 - 256
-340282366920938463463374607431768211456 - 65535
-340282366920938463463374607431768211456 - 65536
-340282366920938463463374607431768211456 - 4294967295
-340282366920938463463374607431768211456 - 4294967296
-340282366920938463463374607431768211456 - 18446744073709551615
-340282366920938463463374607431768211456 - 18446744073709551616
-340282366920938463463374607431768211456 - 340282366920938463463374607431768211455
-340282366920938463463374607431768211456 - 340282366920938463463374607431768211456
--170141183460469231731687303715884105728 * -170141183460469231731687303715884105728
--170141183460469231731687303715884105728 * -170141183460469231731687303715884105727
--170141183460469231731687303715884105728 * -9223372036854775808
--170141183460469231731687303715884105728 * -9223372036854775807
--170141183460469231731687303715884105728 * -2147483648
--170141183460469231731687303715884105728 * -2147483647
--170141183460469231731687303715884105728 * -32768
--170141183460469231731687303715884105728 * -32767
--170141183460469231731687303715884105728 * -128
--170141183460469231731687303715884105728 * -127
--170141183460469231731687303715884105728 * 255
--170141183460469231731687303715884105728 * 256
--170141183460469231731687303715884105728 * 65535
--170141183460469231731687303715884105728 * 65536
--170141183460469231731687303715884105728 * 4294967295
--170141183460469231731687303715884105728 * 4294967296
--170141183460469231731687303715884105728 * 18446744073709551615
--170141183460469231731687303715884105728 * 18446744073709551616
--170141183460469231731687303715884105728 * 340282366920938463463374607431768211455
--170141183460469231731687303715884105728 * 340282366920938463463374607431768211456
--170141183460469231731687303715884105727 * -170141183460469231731687303715884105728
--170141183460469231731687303715884105727 * -170141183460469231731687303715884105727
--170141183460469231731687303715884105727 * -9223372036854775808
--170141183460469231731687303715884105727 * -9223372036854775807
--170141183460469231731687303715884105727 * -2147483648
--170141183460469231731687303715884105727 * -2147483647
--170141183460469231731687303715884105727 * -32768
--170141183460469231731687303715884105727 * -32767
--170141183460469231731687303715884105727 * -128
--170141183460469231731687303715884105727 * -127
--170141183460469231731687303715884105727 * 255
--170141183460469231731687303715884105727 * 256
--170141183460469231731687303715884105727 * 65535
--170141183460469231731687303715884105727 * 65536
--170141183460469231731687303715884105727 * 4294967295
--170141183460469231731687303715884105727 * 4294967296
--170141183460469231731687303715884105727 * 18446744073709551615
--170141183460469231731687303715884105727 * 18446744073709551616
--170141183460469231731687303715884105727 * 340282366920938463463374607431768211455
--170141183460469231731687303715884105727 * 340282366920938463463374607431768211456
--9223372036854775808 * -170141183460469231731687303715884105728
--9223372036854775808 * -170141183460469231731687303715884105727
--9223372036854775808 * -9223372036854775808
--9223372036854775808 * -9223372036854775807
--9223372036854775808 * -2147483648
--9223372036854775808 * -2147483647
--9223372036854775808 * -32768
--9223372036854775808 * -32767
--9223372036854775808 * -128
--9223372036854775808 * -127
--9223372036854775808 * 255
--9223372036854775808 * 256
--9223372036854775808 * 65535
--9223372036854775808 * 65536
--9223372036854775808 * 4294967295
--9223372036854775808 * 4294967296
--9223372036854775808 * 18446744073709551615
--9223372036854775808 * 18446744073709551616
--9223372036854775808 * 340282366920938463463374607431768211455
--9223372036854775808 * 340282366920938463463374607431768211456
--9223372036854775807 * -170141183460469231731687303715884105728
--9223372036854775807 * -170141183460469231731687303715884105727
--9223372036854775807 * -9223372036854775808
--9223372036854775807 * -9223372036854775807
--9223372036854775807 * -2147483648
--9223372036854775807 * -2147483647
--9223372036854775807 * -32768
--9223372036854775807 * -32767
--9223372036854775807 * -128
--9223372036854775807 * -127
--9223372036854775807 * 255
--9223372036854775807 * 256
--9223372036854775807 * 65535
--9223372036854775807 * 65536
--9223372036854775807 * 4294967295
--9223372036854775807 * 4294967296
--9223372036854775807 * 18446744073709551615
--9223372036854775807 * 18446744073709551616
--9223372036854775807 * 340282366920938463463374607431768211455
--9223372036854775807 * 340282366920938463463374607431768211456
--2147483648 * -170141183460469231731687303715884105728
--2147483648 * -170141183460469231731687303715884105727
--2147483648 * -9223372036854775808
--2147483648 * -9223372036854775807
--2147483648 * -2147483648
--2147483648 * -2147483647
--2147483648 * -32768
--2147483648 * -32767
--2147483648 * -128
--2147483648 * -127
--2147483648 * 255
--2147483648 * 256
--2147483648 * 65535
--2147483648 * 65536
--2147483648 * 4294967295
--2147483648 * 4294967296
--2147483648 * 18446744073709551615
--2147483648 * 18446744073709551616
--2147483648 * 340282366920938463463374607431768211455
--2147483648 * 340282366920938463463374607431768211456
--2147483647 * -170141183460469231731687303715884105728
--2147483647 * -170141183460469231731687303715884105727
--2147483647 * -9223372036854775808
--2147483647 * -9223372036854775807
--2147483647 * -2147483648
--2147483647 * -2147483647
--2147483647 * -32768
--2147483647 * -32767
--2147483647 * -128
--2147483647 * -127
--2147483647 * 255
--2147483647 * 256
--2147483647 * 65535
--2147483647 * 65536
--2147483647 * 4294967295
--2147483647 * 4294967296
--2147483647 * 18446744073709551615
--2147483647 * 18446744073709551616
--2147483647 * 340282366920938463463374607431768211455
--2147483647 * 340282366920938463463374607431768211456
--32768 * -170141183460469231731687303715884105728
--32768 * -170141183460469231731687303715884105727
--32768 * -9223372036854775808
--32768 * -9223372036854775807
--32768 * -2147483648
--32768 * -2147483647
--32768 * -32768
--32768 * -32767
--32768 * -128
--32768 * -127
--32768 * 255
--32768 * 256
--32768 * 65535
--32768 * 65536
--32768 * 4294967295
--32768 * 4294967296
--32768 * 18446744073709551615
--32768 * 18446744073709551616
--32768 * 340282366920938463463374607431768211455
--32768 * 340282366920938463463374607431768211456
--32767 * -170141183460469231731687303715884105728
--32767 * -170141183460469231731687303715884105727
--32767 * -9223372036854775808
--32767 * -9223372036854775807
--32767 * -2147483648
--32767 * -2147483647
--32767 * -32768
--32767 * -32767
--32767 * -128
--32767 * -127
--32767 * 255
--32767 * 256
--32767 * 65535
--32767 * 65536
--32767 * 4294967295
--32767 * 4294967296
--32767 * 18446744073709551615
--32767 * 18446744073709551616
--32767 * 340282366920938463463374607431768211455
--32767 * 340282366920938463463374607431768211456
--128 * -170141183460469231731687303715884105728
--128 * -170141183460469231731687303715884105727
--128 * -9223372036854775808
--128 * -9223372036854775807
--128 * -2147483648
--128 * -2147483647
--128 * -32768
--128 * -32767
--128 * -128
--128 * -127
--128 * 255
--128 * 256
--128 * 65535
--128 * 65536
--128 * 4294967295
--128 * 4294967296
--128 * 18446744073709551615
--128 * 18446744073709551616
--128 * 340282366920938463463374607431768211455
--128 * 340282366920938463463374607431768211456
--127 * -170141183460469231731687303715884105728
--127 * -170141183460469231731687303715884105727
--127 * -9223372036854775808
--127 * -9223372036854775807
--127 * -2147483648
--127 * -2147483647
--127 * -32768
--127 * -32767
--127 * -128
--127 * -127
--127 * 255
--127 * 256
--127 * 65535
--127 * 65536
--127 * 4294967295
--127 * 4294967296
--127 * 18446744073709551615
--127 * 18446744073709551616
--127 * 340282366920938463463374607431768211455
--127 * 340282366920938463463374607431768211456
-255 * -170141183460469231731687303715884105728
-255 * -170141183460469231731687303715884105727
-255 * -9223372036854775808
-255 * -9223372036854775807
-255 * -2147483648
-255 * -2147483647
-255 * -32768
-255 * -32767
-255 * -128
-255 * -127
-255 * 255
-255 * 256
-255 * 65535
-255 * 65536
-255 * 4294967295
-255 * 4294967296
-255 * 18446744073709551615
-255 * 18446744073709551616
-255 * 340282366920938463463374607431768211455
-255 * 340282366920938463463374607431768211456
-256 * -170141183460469231731687303715884105728
-256 * -170141183460469231731687303715884105727
-256 * -9223372036854775808
-256 * -9223372036854775807
-256 * -2147483648
-256 * -2147483647
-256 * -32768
-256 * -32767
-256 * -128
-256 * -127
-256 * 255
-256 * 256
-256 * 65535
-256 * 65536
-256 * 4294967295
-256 * 4294967296
-256 * 18446744073709551615
-256 * 18446744073709551616
-256 * 340282366920938463463374607431768211455
-256 * 340282366920938463463374607431768211456
-65535 * -170141183460469231731687303715884105728
-65535 * -170141183460469231731687303715884105727
-65535 * -9223372036854775808
-65535 * -9223372036854775807
-65535 * -2147483648
-65535 * -2147483647
-65535 * -32768
-65535 * -32767
-65535 * -128
-65535 * -127
-65535 * 255
-65535 * 256
-65535 * 65535
-65535 * 65536
-65535 * 4294967295
-65535 * 4294967296
-65535 * 18446744073709551615
-65535 * 18446744073709551616
-65535 * 340282366920938463463374607431768211455
-65535 * 340282366920938463463374607431768211456
-65536 * -170141183460469231731687303715884105728
-65536 * -170141183460469231731687303715884105727
-65536 * -9223372036854775808
-65536 * -9223372036854775807
-65536 * -2147483648
-65536 * -2147483647
-65536 * -32768
-65536 * -32767
-65536 * -128
-65536 * -127
-65536 * 255
-65536 * 256
-65536 * 65535
-65536 * 65536
-65536 * 4294967295
-65536 * 4294967296
-65536 * 18446744073709551615
-65536 * 18446744073709551616
-65536 * 340282366920938463463374607431768211455
-65536 * 340282366920938463463374607431768211456
-4294967295 * -170141183460469231731687303715884105728
-4294967295 * -170141183460469231731687303715884105727
-4294967295 * -9223372036854775808
-4294967295 * -9223372036854775807
-4294967295 * -2147483648
-4294967295 * -2147483647
-4294967295 * -32768
-4294967295 * -32767
-4294967295 * -128
-4294967295 * -127
-4294967295 * 255
-4294967295 * 256
-4294967295 * 65535
-4294967295 * 65536
-4294967295 * 4294967295
-4294967295 * 4294967296
-4294967295 * 18446744073709551615
-4294967295 * 18446744073709551616
-4294967295 * 340282366920938463463374607431768211455
-4294967295 * 340282366920938463463374607431768211456
-4294967296 * -170141183460469231731687303715884105728
-4294967296 * -170141183460469231731687303715884105727
-4294967296 * -9223372036854775808
-4294967296 * -9223372036854775807
-4294967296 * -2147483648
-4294967296 * -2147483647
-4294967296 * -32768
-4294967296 * -32767
-4294967296 * -128
-4294967296 * -127
-4294967296 * 255
-4294967296 * 256
-4294967296 * 65535
-4294967296 * 65536
-4294967296 * 4294967295
-4294967296 * 4294967296
-4294967296 * 18446744073709551615
-4294967296 * 18446744073709551616
-4294967296 * 340282366920938463463374607431768211455
-4294967296 * 340282366920938463463374607431768211456
-18446744073709551615 * -170141183460469231731687303715884105728
-18446744073709551615 * -170141183460469231731687303715884105727
-18446744073709551615 * -9223372036854775808
-18446744073709551615 * -9223372036854775807
-18446744073709551615 * -2147483648
-18446744073709551615 * -2147483647
-18446744073709551615 * -32768
-18446744073709551615 * -32767
-18446744073709551615 * -128
-18446744073709551615 * -127
-18446744073709551615 * 255
-18446744073709551615 * 256
-18446744073709551615 * 65535
-18446744073709551615 * 65536
-18446744073709551615 * 4294967295
-18446744073709551615 * 4294967296
-18446744073709551615 * 18446744073709551615
-18446744073709551615 * 18446744073709551616
-18446744073709551615 * 340282366920938463463374607431768211455
-18446744073709551615 * 340282366920938463463374607431768211456
-18446744073709551616 * -170141183460469231731687303715884105728
-18446744073709551616 * -170141183460469231731687303715884105727
-18446744073709551616 * -9223372036854775808
-18446744073709551616 * -9223372036854775807
-18446744073709551616 * -2147483648
-18446744073709551616 * -2147483647
-18446744073709551616 * -32768
-18446744073709551616 * -32767
-18446744073709551616 * -128
-18446744073709551616 * -127
-18446744073709551616 * 255
-18446744073709551616 * 256
-18446744073709551616 * 65535
-18446744073709551616 * 65536
-18446744073709551616 * 4294967295
-18446744073709551616 * 4294967296
-18446744073709551616 * 18446744073709551615
-18446744073709551616 * 18446744073709551616
-18446744073709551616 * 340282366920938463463374607431768211455
-18446744073709551616 * 340282366920938463463374607431768211456
-340282366920938463463374607431768211455 * -170141183460469231731687303715884105728
-340282366920938463463374607431768211455 * -170141183460469231731687303715884105727
-340282366920938463463374607431768211455 * -9223372036854775808
-340282366920938463463374607431768211455 * -9223372036854775807
-340282366920938463463374607431768211455 * -2147483648
-340282366920938463463374607431768211455 * -2147483647
-340282366920938463463374607431768211455 * -32768
-340282366920938463463374607431768211455 * -32767
-340282366920938463463374607431768211455 * -128
-340282366920938463463374607431768211455 * -127
-340282366920938463463374607431768211455 * 255
-340282366920938463463374607431768211455 * 256
-340282366920938463463374607431768211455 * 65535
-340282366920938463463374607431768211455 * 65536
-340282366920938463463374607431768211455 * 4294967295
-340282366920938463463374607431768211455 * 4294967296
-340282366920938463463374607431768211455 * 18446744073709551615
-340282366920938463463374607431768211455 * 18446744073709551616
-340282366920938463463374607431768211455 * 340282366920938463463374607431768211455
-340282366920938463463374607431768211455 * 340282366920938463463374607431768211456
-340282366920938463463374607431768211456 * -170141183460469231731687303715884105728
-340282366920938463463374607431768211456 * -170141183460469231731687303715884105727
-340282366920938463463374607431768211456 * -9223372036854775808
-340282366920938463463374607431768211456 * -9223372036854775807
-340282366920938463463374607431768211456 * -2147483648
-340282366920938463463374607431768211456 * -2147483647
-340282366920938463463374607431768211456 * -32768
-340282366920938463463374607431768211456 * -32767
-340282366920938463463374607431768211456 * -128
-340282366920938463463374607431768211456 * -127
-340282366920938463463374607431768211456 * 255
-340282366920938463463374607431768211456 * 256
-340282366920938463463374607431768211456 * 65535
-340282366920938463463374607431768211456 * 65536
-340282366920938463463374607431768211456 * 4294967295
-340282366920938463463374607431768211456 * 4294967296
-340282366920938463463374607431768211456 * 18446744073709551615
-340282366920938463463374607431768211456 * 18446744073709551616
-340282366920938463463374607431768211456 * 340282366920938463463374607431768211455
-340282366920938463463374607431768211456 * 340282366920938463463374607431768211456
--170141183460469231731687303715884105728 / -170141183460469231731687303715884105728
--170141183460469231731687303715884105728 / -170141183460469231731687303715884105727
--170141183460469231731687303715884105728 / -9223372036854775808
--170141183460469231731687303715884105728 / -9223372036854775807
--170141183460469231731687303715884105728 / -2147483648
--170141183460469231731687303715884105728 / -2147483647
--170141183460469231731687303715884105728 / -32768
--170141183460469231731687303715884105728 / -32767
--170141183460469231731687303715884105728 / -128
--170141183460469231731687303715884105728 / -127
--170141183460469231731687303715884105728 / 255
--170141183460469231731687303715884105728 / 256
--170141183460469231731687303715884105728 / 65535
--170141183460469231731687303715884105728 / 65536
--170141183460469231731687303715884105728 / 4294967295
--170141183460469231731687303715884105728 / 4294967296
--170141183460469231731687303715884105728 / 18446744073709551615
--170141183460469231731687303715884105728 / 18446744073709551616
--170141183460469231731687303715884105728 / 340282366920938463463374607431768211455
--170141183460469231731687303715884105728 / 340282366920938463463374607431768211456
--170141183460469231731687303715884105727 / -170141183460469231731687303715884105728
--170141183460469231731687303715884105727 / -170141183460469231731687303715884105727
--170141183460469231731687303715884105727 / -9223372036854775808
--170141183460469231731687303715884105727 / -9223372036854775807
--170141183460469231731687303715884105727 / -2147483648
--170141183460469231731687303715884105727 / -2147483647
--170141183460469231731687303715884105727 / -32768
--170141183460469231731687303715884105727 / -32767
--170141183460469231731687303715884105727 / -128
--170141183460469231731687303715884105727 / -127
--170141183460469231731687303715884105727 / 255
--170141183460469231731687303715884105727 / 256
--170141183460469231731687303715884105727 / 65535
--170141183460469231731687303715884105727 / 65536
--170141183460469231731687303715884105727 / 4294967295
--170141183460469231731687303715884105727 / 4294967296
--170141183460469231731687303715884105727 / 18446744073709551615
--170141183460469231731687303715884105727 / 18446744073709551616
--170141183460469231731687303715884105727 / 340282366920938463463374607431768211455
--170141183460469231731687303715884105727 / 340282366920938463463374607431768211456
--9223372036854775808 / -170141183460469231731687303715884105728
--9223372036854775808 / -170141183460469231731687303715884105727
--9223372036854775808 / -9223372036854775808
--9223372036854775808 / -9223372036854775807
--9223372036854775808 / -2147483648
--9223372036854775808 / -2147483647
--9223372036854775808 / -32768
--9223372036854775808 / -32767
--9223372036854775808 / -128
--9223372036854775808 / -127
--9223372036854775808 / 255
--9223372036854775808 / 256
--9223372036854775808 / 65535
--9223372036854775808 / 65536
--9223372036854775808 / 4294967295
--9223372036854775808 / 4294967296
--9223372036854775808 / 18446744073709551615
--9223372036854775808 / 18446744073709551616
--9223372036854775808 / 340282366920938463463374607431768211455
--9223372036854775808 / 340282366920938463463374607431768211456
--9223372036854775807 / -170141183460469231731687303715884105728
--9223372036854775807 / -170141183460469231731687303715884105727
--9223372036854775807 / -9223372036854775808
--9223372036854775807 / -9223372036854775807
--9223372036854775807 / -2147483648
--9223372036854775807 / -2147483647
--9223372036854775807 / -32768
--9223372036854775807 / -32767
--9223372036854775807 / -128
--9223372036854775807 / -127
--9223372036854775807 / 255
--9223372036854775807 / 256
--9223372036854775807 / 65535
--9223372036854775807 / 65536
--9223372036854775807 / 4294967295
--9223372036854775807 / 4294967296
--9223372036854775807 / 18446744073709551615
--9223372036854775807 / 18446744073709551616
--9223372036854775807 / 340282366920938463463374607431768211455
--9223372036854775807 / 340282366920938463463374607431768211456
--2147483648 / -170141183460469231731687303715884105728
--2147483648 / -170141183460469231731687303715884105727
--2147483648 / -9223372036854775808
--2147483648 / -9223372036854775807
--2147483648 / -2147483648
--2147483648 / -2147483647
--2147483648 / -32768
--2147483648 / -32767
--2147483648 / -128
--2147483648 / -127
--2147483648 / 255
--2147483648 / 256
--2147483648 / 65535
--2147483648 / 65536
--2147483648 / 4294967295
--2147483648 / 4294967296
--2147483648 / 18446744073709551615
--2147483648 / 18446744073709551616
--2147483648 / 340282366920938463463374607431768211455
--2147483648 / 340282366920938463463374607431768211456
--2147483647 / -170141183460469231731687303715884105728
--2147483647 / -170141183460469231731687303715884105727
--2147483647 / -9223372036854775808
--2147483647 / -9223372036854775807
--2147483647 / -2147483648
--2147483647 / -2147483647
--2147483647 / -32768
--2147483647 / -32767
--2147483647 / -128
--2147483647 / -127
--2147483647 / 255
--2147483647 / 256
--2147483647 / 65535
--2147483647 / 65536
--2147483647 / 4294967295
--2147483647 / 4294967296
--2147483647 / 18446744073709551615
--2147483647 / 18446744073709551616
--2147483647 / 340282366920938463463374607431768211455
--2147483647 / 340282366920938463463374607431768211456
--32768 / -170141183460469231731687303715884105728
--32768 / -170141183460469231731687303715884105727
--32768 / -9223372036854775808
--32768 / -9223372036854775807
--32768 / -2147483648
--32768 / -2147483647
--32768 / -32768
--32768 / -32767
--32768 / -128
--32768 / -127
--32768 / 255
--32768 / 256
--32768 / 65535
--32768 / 65536
--32768 / 4294967295
--32768 / 4294967296
--32768 / 18446744073709551615
--32768 / 18446744073709551616
--32768 / 340282366920938463463374607431768211455
--32768 / 340282366920938463463374607431768211456
--32767 / -170141183460469231731687303715884105728
--32767 / -170141183460469231731687303715884105727
--32767 / -9223372036854775808
--32767 / -9223372036854775807
--32767 / -2147483648
--32767 / -2147483647
--32767 / -32768
--32767 / -32767
--32767 / -128
--32767 / -127
--32767 / 255
--32767 / 256
--32767 / 65535
--32767 / 65536
--32767 / 4294967295
--32767 / 4294967296
--32767 / 18446744073709551615
--32767 / 18446744073709551616
--32767 / 340282366920938463463374607431768211455
--32767 / 340282366920938463463374607431768211456
--128 / -170141183460469231731687303715884105728
--128 / -170141183460469231731687303715884105727
--128 / -9223372036854775808
--128 / -9223372036854775807
--128 / -2147483648
--128 / -2147483647
--128 / -32768
--128 / -32767
--128 / -128
--128 / -127
--128 / 255
--128 / 256
--128 / 65535
--128 / 65536
--128 / 4294967295
--128 / 4294967296
--128 / 18446744073709551615
--128 / 18446744073709551616
--128 / 340282366920938463463374607431768211455
--128 / 340282366920938463463374607431768211456
--127 / -170141183460469231731687303715884105728
--127 / -170141183460469231731687303715884105727
--127 / -9223372036854775808
--127 / -9223372036854775807
--127 / -2147483648
--127 / -2147483647
--127 / -32768
--127 / -32767
--127 / -128
--127 / -127
--127 / 255
--127 / 256
--127 / 65535
--127 / 65536
--127 / 4294967295
--127 / 4294967296
--127 / 18446744073709551615
--127 / 18446744073709551616
--127 / 340282366920938463463374607431768211455
--127 / 340282366920938463463374607431768211456
-255 / -170141183460469231731687303715884105728
-255 / -170141183460469231731687303715884105727
-255 / -9223372036854775808
-255 / -9223372036854775807
-255 / -2147483648
-255 / -2147483647
-255 / -32768
-255 / -32767
-255 / -128
-255 / -127
-255 / 255
-255 / 256
-255 / 65535
-255 / 65536
-255 / 4294967295
-255 / 4294967296
-255 / 18446744073709551615
-255 / 18446744073709551616
-255 / 340282366920938463463374607431768211455
-255 / 340282366920938463463374607431768211456
-256 / -170141183460469231731687303715884105728
-256 / -170141183460469231731687303715884105727
-256 / -9223372036854775808
-256 / -9223372036854775807
-256 / -2147483648
-256 / -2147483647
-256 / -32768
-256 / -32767
-256 / -128
-256 / -127
-256 / 255
-256 / 256
-256 / 65535
-256 / 65536
-256 / 4294967295
-256 / 4294967296
-256 / 18446744073709551615
-256 / 18446744073709551616
-256 / 340282366920938463463374607431768211455
-256 / 340282366920938463463374607431768211456
-65535 / -170141183460469231731687303715884105728
-65535 / -170141183460469231731687303715884105727
-65535 / -9223372036854775808
-65535 / -9223372036854775807
-65535 / -2147483648
-65535 / -2147483647
-65535 / -32768
-65535 / -32767
-65535 / -128
-65535 / -127
-65535 / 255
-65535 / 256
-65535 / 65535
-65535 / 65536
-65535 / 4294967295
-65535 / 4294967296
-65535 / 18446744073709551615
-65535 / 18446744073709551616
-65535 / 340282366920938463463374607431768211455
-65535 / 340282366920938463463374607431768211456
-65536 / -170141183460469231731687303715884105728
-65536 / -170141183460469231731687303715884105727
-65536 / -9223372036854775808
-65536 / -9223372036854775807
-65536 / -2147483648
-65536 / -2147483647
-65536 / -32768
-65536 / -32767
-65536 / -128
-65536 / -127
-65536 / 255
-65536 / 256
-65536 / 65535
-65536 / 65536
-65536 / 4294967295
-65536 / 4294967296
-65536 / 18446744073709551615
-65536 / 18446744073709551616
-65536 / 340282366920938463463374607431768211455
-65536 / 340282366920938463463374607431768211456
-4294967295 / -170141183460469231731687303715884105728
-4294967295 / -170141183460469231731687303715884105727
-4294967295 / -9223372036854775808
-4294967295 / -9223372036854775807
-4294967295 / -2147483648
-4294967295 / -2147483647
-4294967295 / -32768
-4294967295 / -32767
-4294967295 / -128
-4294967295 / -127
-4294967295 / 255
-4294967295 / 256
-4294967295 / 65535
-4294967295 / 65536
-4294967295 / 4294967295
-4294967295 / 4294967296
-4294967295 / 18446744073709551615
-4294967295 / 18446744073709551616
-4294967295 / 340282366920938463463374607431768211455
-4294967295 / 340282366920938463463374607431768211456
-4294967296 / -170141183460469231731687303715884105728
-4294967296 / -170141183460469231731687303715884105727
-4294967296 / -9223372036854775808
-4294967296 / -9223372036854775807
-4294967296 / -2147483648
-4294967296 / -2147483647
-4294967296 / -32768
-4294967296 / -32767
-4294967296 / -128
-4294967296 / -127
-4294967296 / 255
-4294967296 / 256
-4294967296 / 65535
-4294967296 / 65536
-4294967296 / 4294967295
-4294967296 / 4294967296
-4294967296 / 18446744073709551615
-4294967296 / 18446744073709551616
-4294967296 / 340282366920938463463374607431768211455
-4294967296 / 340282366920938463463374607431768211456
-18446744073709551615 / -170141183460469231731687303715884105728
-18446744073709551615 / -170141183460469231731687303715884105727
-18446744073709551615 / -9223372036854775808
-18446744073709551615 / -9223372036854775807
-18446744073709551615 / -2147483648
-18446744073709551615 / -2147483647
-18446744073709551615 / -32768
-18446744073709551615 / -32767
-18446744073709551615 / -128
-18446744073709551615 / -127
-18446744073709551615 / 255
-18446744073709551615 / 256
-18446744073709551615 / 65535
-18446744073709551615 / 65536
-18446744073709551615 / 4294967295
-18446744073709551615 / 4294967296
-18446744073709551615 / 18446744073709551615
-18446744073709551615 / 18446744073709551616
-18446744073709551615 / 340282366920938463463374607431768211455
-18446744073709551615 / 340282366920938463463374607431768211456
-18446744073709551616 / -170141183460469231731687303715884105728
-18446744073709551616 / -170141183460469231731687303715884105727
-18446744073709551616 / -9223372036854775808
-18446744073709551616 / -9223372036854775807
-18446744073709551616 / -2147483648
-18446744073709551616 / -2147483647
-18446744073709551616 / -32768
-18446744073709551616 / -32767
-18446744073709551616 / -128
-18446744073709551616 / -127
-18446744073709551616 / 255
-18446744073709551616 / 256
-18446744073709551616 / 65535
-18446744073709551616 / 65536
-18446744073709551616 / 4294967295
-18446744073709551616 / 4294967296
-18446744073709551616 / 18446744073709551615
-18446744073709551616 / 18446744073709551616
-18446744073709551616 / 340282366920938463463374607431768211455
-18446744073709551616 / 340282366920938463463374607431768211456
-340282366920938463463374607431768211455 / -170141183460469231731687303715884105728
-340282366920938463463374607431768211455 / -170141183460469231731687303715884105727
-340282366920938463463374607431768211455 / -9223372036854775808
-340282366920938463463374607431768211455 / -9223372036854775807
-340282366920938463463374607431768211455 / -2147483648
-340282366920938463463374607431768211455 / -2147483647
-340282366920938463463374607431768211455 / -32768
-340282366920938463463374607431768211455 / -32767
-340282366920938463463374607431768211455 / -128
-340282366920938463463374607431768211455 / -127
-340282366920938463463374607431768211455 / 255
-340282366920938463463374607431768211455 / 256
-340282366920938463463374607431768211455 / 65535
-340282366920938463463374607431768211455 / 65536
-340282366920938463463374607431768211455 / 4294967295
-340282366920938463463374607431768211455 / 4294967296
-340282366920938463463374607431768211455 / 18446744073709551615
-340282366920938463463374607431768211455 / 18446744073709551616
-340282366920938463463374607431768211455 / 340282366920938463463374607431768211455
-340282366920938463463374607431768211455 / 340282366920938463463374607431768211456
-340282366920938463463374607431768211456 / -170141183460469231731687303715884105728
-340282366920938463463374607431768211456 / -170141183460469231731687303715884105727
-340282366920938463463374607431768211456 / -9223372036854775808
-340282366920938463463374607431768211456 / -9223372036854775807
-340282366920938463463374607431768211456 / -2147483648
-340282366920938463463374607431768211456 / -2147483647
-340282366920938463463374607431768211456 / -32768
-340282366920938463463374607431768211456 / -32767
-340282366920938463463374607431768211456 / -128
-340282366920938463463374607431768211456 / -127
-340282366920938463463374607431768211456 / 255
-340282366920938463463374607431768211456 / 256
-340282366920938463463374607431768211456 / 65535
-340282366920938463463374607431768211456 / 65536
-340282366920938463463374607431768211456 / 4294967295
-340282366920938463463374607431768211456 / 4294967296
-340282366920938463463374607431768211456 / 18446744073709551615
-340282366920938463463374607431768211456 / 18446744073709551616
-340282366920938463463374607431768211456 / 340282366920938463463374607431768211455
-340282366920938463463374607431768211456 / 340282366920938463463374607431768211456
--170141183460469231731687303715884105728 < -170141183460469231731687303715884105728
--170141183460469231731687303715884105728 < -170141183460469231731687303715884105727
--170141183460469231731687303715884105728 < -9223372036854775808
--170141183460469231731687303715884105728 < -9223372036854775807
--170141183460469231731687303715884105728 < -2147483648
--170141183460469231731687303715884105728 < -2147483647
--170141183460469231731687303715884105728 < -32768
--170141183460469231731687303715884105728 < -32767
--170141183460469231731687303715884105728 < -128
--170141183460469231731687303715884105728 < -127
--170141183460469231731687303715884105728 < 255
--170141183460469231731687303715884105728 < 256
--170141183460469231731687303715884105728 < 65535
--170141183460469231731687303715884105728 < 65536
--170141183460469231731687303715884105728 < 4294967295
--170141183460469231731687303715884105728 < 4294967296
--170141183460469231731687303715884105728 < 18446744073709551615
--170141183460469231731687303715884105728 < 18446744073709551616
--170141183460469231731687303715884105728 < 340282366920938463463374607431768211455
--170141183460469231731687303715884105728 < 340282366920938463463374607431768211456
--170141183460469231731687303715884105727 < -170141183460469231731687303715884105728
--170141183460469231731687303715884105727 < -170141183460469231731687303715884105727
--170141183460469231731687303715884105727 < -9223372036854775808
--170141183460469231731687303715884105727 < -9223372036854775807
--170141183460469231731687303715884105727 < -2147483648
--170141183460469231731687303715884105727 < -2147483647
--170141183460469231731687303715884105727 < -32768
--170141183460469231731687303715884105727 < -32767
--170141183460469231731687303715884105727 < -128
--170141183460469231731687303715884105727 < -127
--170141183460469231731687303715884105727 < 255
--170141183460469231731687303715884105727 < 256
--170141183460469231731687303715884105727 < 65535
--170141183460469231731687303715884105727 < 65536
--170141183460469231731687303715884105727 < 4294967295
--170141183460469231731687303715884105727 < 4294967296
--170141183460469231731687303715884105727 < 18446744073709551615
--170141183460469231731687303715884105727 < 18446744073709551616
--170141183460469231731687303715884105727 < 340282366920938463463374607431768211455
--170141183460469231731687303715884105727 < 340282366920938463463374607431768211456
--9223372036854775808 < -170141183460469231731687303715884105728
--9223372036854775808 < -170141183460469231731687303715884105727
--9223372036854775808 < -9223372036854775808
--9223372036854775808 < -9223372036854775807
--9223372036854775808 < -2147483648
--9223372036854775808 < -2147483647
--9223372036854775808 < -32768
--9223372036854775808 < -32767
--9223372036854775808 < -128
--9223372036854775808 < -127
--9223372036854775808 < 255
--9223372036854775808 < 256
--9223372036854775808 < 65535
--9223372036854775808 < 65536
--9223372036854775808 < 4294967295
--9223372036854775808 < 4294967296
--9223372036854775808 < 18446744073709551615
--9223372036854775808 < 18446744073709551616
--9223372036854775808 < 340282366920938463463374607431768211455
--9223372036854775808 < 340282366920938463463374607431768211456
--9223372036854775807 < -170141183460469231731687303715884105728
--9223372036854775807 < -170141183460469231731687303715884105727
--9223372036854775807 < -9223372036854775808
--9223372036854775807 < -9223372036854775807
--9223372036854775807 < -2147483648
--9223372036854775807 < -2147483647
--9223372036854775807 < -32768
--9223372036854775807 < -32767
--9223372036854775807 < -128
--9223372036854775807 < -127
--9223372036854775807 < 255
--9223372036854775807 < 256
--9223372036854775807 < 65535
--9223372036854775807 < 65536
--9223372036854775807 < 4294967295
--9223372036854775807 < 4294967296
--9223372036854775807 < 18446744073709551615
--9223372036854775807 < 18446744073709551616
--9223372036854775807 < 340282366920938463463374607431768211455
--9223372036854775807 < 340282366920938463463374607431768211456
--2147483648 < -170141183460469231731687303715884105728
--2147483648 < -170141183460469231731687303715884105727
--2147483648 < -9223372036854775808
--2147483648 < -9223372036854775807
--2147483648 < -2147483648
--2147483648 < -2147483647
--2147483648 < -32768
--2147483648 < -32767
--2147483648 < -128
--2147483648 < -127
--2147483648 < 255
--2147483648 < 256
--2147483648 < 65535
--2147483648 < 65536
--2147483648 < 4294967295
--2147483648 < 4294967296
--2147483648 < 18446744073709551615
--2147483648 < 18446744073709551616
--2147483648 < 340282366920938463463374607431768211455
--2147483648 < 340282366920938463463374607431768211456
--2147483647 < -170141183460469231731687303715884105728
--2147483647 < -170141183460469231731687303715884105727
--2147483647 < -9223372036854775808
--2147483647 < -9223372036854775807
--2147483647 < -2147483648
--2147483647 < -2147483647
--2147483647 < -32768
--2147483647 < -32767
--2147483647 < -128
--2147483647 < -127
--2147483647 < 255
--2147483647 < 256
--2147483647 < 65535
--2147483647 < 65536
--2147483647 < 4294967295
--2147483647 < 4294967296
--2147483647 < 18446744073709551615
--2147483647 < 18446744073709551616
--2147483647 < 340282366920938463463374607431768211455
--2147483647 < 340282366920938463463374607431768211456
--32768 < -170141183460469231731687303715884105728
--32768 < -170141183460469231731687303715884105727
--32768 < -9223372036854775808
--32768 < -9223372036854775807
--32768 < -2147483648
--32768 < -2147483647
--32768 < -32768
--32768 < -32767
--32768 < -128
--32768 < -127
--32768 < 255
--32768 < 256
--32768 < 65535
--32768 < 65536
--32768 < 4294967295
--32768 < 4294967296
--32768 < 18446744073709551615
--32768 < 18446744073709551616
--32768 < 340282366920938463463374607431768211455
--32768 < 340282366920938463463374607431768211456
--32767 < -170141183460469231731687303715884105728
--32767 < -170141183460469231731687303715884105727
--32767 < -9223372036854775808
--32767 < -9223372036854775807
--32767 < -2147483648
--32767 < -2147483647
--32767 < -32768
--32767 < -32767
--32767 < -128
--32767 < -127
--32767 < 255
--32767 < 256
--32767 < 65535
--32767 < 65536
--32767 < 4294967295
--32767 < 4294967296
--32767 < 18446744073709551615
--32767 < 18446744073709551616
--32767 < 340282366920938463463374607431768211455
--32767 < 340282366920938463463374607431768211456
--128 < -170141183460469231731687303715884105728
--128 < -170141183460469231731687303715884105727
--128 < -9223372036854775808
--128 < -9223372036854775807
--128 < -2147483648
--128 < -2147483647
--128 < -32768
--128 < -32767
--128 < -128
--128 < -127
--128 < 255
--128 < 256
--128 < 65535
--128 < 65536
--128 < 4294967295
--128 < 4294967296
--128 < 18446744073709551615
--128 < 18446744073709551616
--128 < 340282366920938463463374607431768211455
--128 < 340282366920938463463374607431768211456
--127 < -170141183460469231731687303715884105728
--127 < -170141183460469231731687303715884105727
--127 < -9223372036854775808
--127 < -9223372036854775807
--127 < -2147483648
--127 < -2147483647
--127 < -32768
--127 < -32767
--127 < -128
--127 < -127
--127 < 255
--127 < 256
--127 < 65535
--127 < 65536
--127 < 4294967295
--127 < 4294967296
--127 < 18446744073709551615
--127 < 18446744073709551616
--127 < 340282366920938463463374607431768211455
--127 < 340282366920938463463374607431768211456
-255 < -170141183460469231731687303715884105728
-255 < -170141183460469231731687303715884105727
-255 < -9223372036854775808
-255 < -9223372036854775807
-255 < -2147483648
-255 < -2147483647
-255 < -32768
-255 < -32767
-255 < -128
-255 < -127
-255 < 255
-255 < 256
-255 < 65535
-255 < 65536
-255 < 4294967295
-255 < 4294967296
-255 < 18446744073709551615
-255 < 18446744073709551616
-255 < 340282366920938463463374607431768211455
-255 < 340282366920938463463374607431768211456
-256 < -170141183460469231731687303715884105728
-256 < -170141183460469231731687303715884105727
-256 < -9223372036854775808
-256 < -9223372036854775807
-256 < -2147483648
-256 < -2147483647
-256 < -32768
-256 < -32767
-256 < -128
-256 < -127
-256 < 255
-256 < 256
-256 < 65535
-256 < 65536
-256 < 4294967295
-256 < 4294967296
-256 < 18446744073709551615
-256 < 18446744073709551616
-256 < 340282366920938463463374607431768211455
-256 < 340282366920938463463374607431768211456
-65535 < -170141183460469231731687303715884105728
-65535 < -170141183460469231731687303715884105727
-65535 < -9223372036854775808
-65535 < -9223372036854775807
-65535 < -2147483648
-65535 < -2147483647
-65535 < -32768
-65535 < -32767
-65535 < -128
-65535 < -127
-65535 < 255
-65535 < 256
-65535 < 65535
-65535 < 65536
-65535 < 4294967295
-65535 < 4294967296
-65535 < 18446744073709551615
-65535 < 18446744073709551616
-65535 < 340282366920938463463374607431768211455
-65535 < 340282366920938463463374607431768211456
-65536 < -170141183460469231731687303715884105728
-65536 < -170141183460469231731687303715884105727
-65536 < -9223372036854775808
-65536 < -9223372036854775807
-65536 < -2147483648
-65536 < -2147483647
-65536 < -32768
-65536 < -32767
-65536 < -128
-65536 < -127
-65536 < 255
-65536 < 256
-65536 < 65535
-65536 < 65536
-65536 < 4294967295
-65536 < 4294967296
-65536 < 18446744073709551615
-65536 < 18446744073709551616
-65536 < 340282366920938463463374607431768211455
-65536 < 340282366920938463463374607431768211456
-4294967295 < -170141183460469231731687303715884105728
-4294967295 < -170141183460469231731687303715884105727
-4294967295 < -9223372036854775808
-4294967295 < -9223372036854775807
-4294967295 < -2147483648
-4294967295 < -2147483647
-4294967295 < -32768
-4294967295 < -32767
-4294967295 < -128
-4294967295 < -127
-4294967295 < 255
-4294967295 < 256
-4294967295 < 65535
-4294967295 < 65536
-4294967295 < 4294967295
-4294967295 < 4294967296
-4294967295 < 18446744073709551615
-4294967295 < 18446744073709551616
-4294967295 < 340282366920938463463374607431768211455
-4294967295 < 340282366920938463463374607431768211456
-4294967296 < -170141183460469231731687303715884105728
-4294967296 < -170141183460469231731687303715884105727
-4294967296 < -9223372036854775808
-4294967296 < -9223372036854775807
-4294967296 < -2147483648
-4294967296 < -2147483647
-4294967296 < -32768
-4294967296 < -32767
-4294967296 < -128
-4294967296 < -127
-4294967296 < 255
-4294967296 < 256
-4294967296 < 65535
-4294967296 < 65536
-4294967296 < 4294967295
-4294967296 < 4294967296
-4294967296 < 18446744073709551615
-4294967296 < 18446744073709551616
-4294967296 < 340282366920938463463374607431768211455
-4294967296 < 340282366920938463463374607431768211456
-18446744073709551615 < -170141183460469231731687303715884105728
-18446744073709551615 < -170141183460469231731687303715884105727
-18446744073709551615 < -9223372036854775808
-18446744073709551615 < -9223372036854775807
-18446744073709551615 < -2147483648
-18446744073709551615 < -2147483647
-18446744073709551615 < -32768
-18446744073709551615 < -32767
-18446744073709551615 < -128
-18446744073709551615 < -127
-18446744073709551615 < 255
-18446744073709551615 < 256
-18446744073709551615 < 65535
-18446744073709551615 < 65536
-18446744073709551615 < 4294967295
-18446744073709551615 < 4294967296
-18446744073709551615 < 18446744073709551615
-18446744073709551615 < 18446744073709551616
-18446744073709551615 < 340282366920938463463374607431768211455
-18446744073709551615 < 340282366920938463463374607431768211456
-18446744073709551616 < -170141183460469231731687303715884105728
-18446744073709551616 < -170141183460469231731687303715884105727
-18446744073709551616 < -9223372036854775808
-18446744073709551616 < -9223372036854775807
-18446744073709551616 < -2147483648
-18446744073709551616 < -2147483647
-18446744073709551616 < -32768
-18446744073709551616 < -32767
-18446744073709551616 < -128
-18446744073709551616 < -127
-18446744073709551616 < 255
-18446744073709551616 < 256
-18446744073709551616 < 65535
-18446744073709551616 < 65536
-18446744073709551616 < 4294967295
-18446744073709551616 < 4294967296
-18446744073709551616 < 18446744073709551615
-18446744073709551616 < 18446744073709551616
-18446744073709551616 < 340282366920938463463374607431768211455
-18446744073709551616 < 340282366920938463463374607431768211456
-340282366920938463463374607431768211455 < -170141183460469231731687303715884105728
-340282366920938463463374607431768211455 < -170141183460469231731687303715884105727
-340282366920938463463374607431768211455 < -9223372036854775808
-340282366920938463463374607431768211455 < -9223372036854775807
-340282366920938463463374607431768211455 < -2147483648
-340282366920938463463374607431768211455 < -2147483647
-340282366920938463463374607431768211455 < -32768
-340282366920938463463374607431768211455 < -32767
-340282366920938463463374607431768211455 < -128
-340282366920938463463374607431768211455 < -127
-340282366920938463463374607431768211455 < 255
-340282366920938463463374607431768211455 < 256
-340282366920938463463374607431768211455 < 65535
-340282366920938463463374607431768211455 < 65536
-340282366920938463463374607431768211455 < 4294967295
-340282366920938463463374607431768211455 < 4294967296
-340282366920938463463374607431768211455 < 18446744073709551615
-340282366920938463463374607431768211455 < 18446744073709551616
-340282366920938463463374607431768211455 < 340282366920938463463374607431768211455
-340282366920938463463374607431768211455 < 340282366920938463463374607431768211456
-340282366920938463463374607431768211456 < -170141183460469231731687303715884105728
-340282366920938463463374607431768211456 < -170141183460469231731687303715884105727
-340282366920938463463374607431768211456 < -9223372036854775808
-340282366920938463463374607431768211456 < -9223372036854775807
-340282366920938463463374607431768211456 < -2147483648
-340282366920938463463374607431768211456 < -2147483647
-340282366920938463463374607431768211456 < -32768
-340282366920938463463374607431768211456 < -32767
-340282366920938463463374607431768211456 < -128
-340282366920938463463374607431768211456 < -127
-340282366920938463463374607431768211456 < 255
-340282366920938463463374607431768211456 < 256
-340282366920938463463374607431768211456 < 65535
-340282366920938463463374607431768211456 < 65536
-340282366920938463463374607431768211456 < 4294967295
-340282366920938463463374607431768211456 < 4294967296
-340282366920938463463374607431768211456 < 18446744073709551615
-340282366920938463463374607431768211456 < 18446744073709551616
-340282366920938463463374607431768211456 < 340282366920938463463374607431768211455
-340282366920938463463374607431768211456 < 340282366920938463463374607431768211456
--170141183460469231731687303715884105728 == -170141183460469231731687303715884105728
--170141183460469231731687303715884105728 == -170141183460469231731687303715884105727
--170141183460469231731687303715884105728 == -9223372036854775808
--170141183460469231731687303715884105728 == -9223372036854775807
--170141183460469231731687303715884105728 == -2147483648
--170141183460469231731687303715884105728 == -2147483647
--170141183460469231731687303715884105728 == -32768
--170141183460469231731687303715884105728 == -32767
--170141183460469231731687303715884105728 == -128
--170141183460469231731687303715884105728 == -127
--170141183460469231731687303715884105728 == 255
--170141183460469231731687303715884105728 == 256
--170141183460469231731687303715884105728 == 65535
--170141183460469231731687303715884105728 == 65536
--170141183460469231731687303715884105728 == 4294967295
--170141183460469231731687303715884105728 == 4294967296
--170141183460469231731687303715884105728 == 18446744073709551615
--170141183460469231731687303715884105728 == 18446744073709551616
--170141183460469231731687303715884105728 == 340282366920938463463374607431768211455
--170141183460469231731687303715884105728 == 340282366920938463463374607431768211456
--170141183460469231731687303715884105727 == -170141183460469231731687303715884105728
--170141183460469231731687303715884105727 == -170141183460469231731687303715884105727
--170141183460469231731687303715884105727 == -9223372036854775808
--170141183460469231731687303715884105727 == -9223372036854775807
--170141183460469231731687303715884105727 == -2147483648
--170141183460469231731687303715884105727 == -2147483647
--170141183460469231731687303715884105727 == -32768
--170141183460469231731687303715884105727 == -32767
--170141183460469231731687303715884105727 == -128
--170141183460469231731687303715884105727 == -127
--170141183460469231731687303715884105727 == 255
--170141183460469231731687303715884105727 == 256
--170141183460469231731687303715884105727 == 65535
--170141183460469231731687303715884105727 == 65536
--170141183460469231731687303715884105727 == 4294967295
--170141183460469231731687303715884105727 == 4294967296
--170141183460469231731687303715884105727 == 18446744073709551615
--170141183460469231731687303715884105727 == 18446744073709551616
--170141183460469231731687303715884105727 == 340282366920938463463374607431768211455
--170141183460469231731687303715884105727 == 340282366920938463463374607431768211456
--9223372036854775808 == -170141183460469231731687303715884105728
--9223372036854775808 == -170141183460469231731687303715884105727
--9223372036854775808 == -9223372036854775808
--9223372036854775808 == -9223372036854775807
--9223372036854775808 == -2147483648
--9223372036854775808 == -2147483647
--9223372036854775808 == -32768
--9223372036854775808 == -32767
--9223372036854775808 == -128
--9223372036854775808 == -127
--9223372036854775808 == 255
--9223372036854775808 == 256
--9223372036854775808 == 65535
--9223372036854775808 == 65536
--9223372036854775808 == 4294967295
--9223372036854775808 == 4294967296
--9223372036854775808 == 18446744073709551615
--9223372036854775808 == 18446744073709551616
--9223372036854775808 == 340282366920938463463374607431768211455
--9223372036854775808 == 340282366920938463463374607431768211456
--9223372036854775807 == -170141183460469231731687303715884105728
--9223372036854775807 == -170141183460469231731687303715884105727
--9223372036854775807 == -9223372036854775808
--9223372036854775807 == -9223372036854775807
--9223372036854775807 == -2147483648
--9223372036854775807 == -2147483647
--9223372036854775807 == -32768
--9223372036854775807 == -32767
--9223372036854775807 == -128
--9223372036854775807 == -127
--9223372036854775807 == 255
--9223372036854775807 == 256
--9223372036854775807 == 65535
--9223372036854775807 == 65536
--9223372036854775807 == 4294967295
--9223372036854775807 == 4294967296
--9223372036854775807 == 18446744073709551615
--9223372036854775807 == 18446744073709551616
--9223372036854775807 == 340282366920938463463374607431768211455
--9223372036854775807 == 340282366920938463463374607431768211456
--2147483648 == -170141183460469231731687303715884105728
--2147483648 == -170141183460469231731687303715884105727
--2147483648 == -9223372036854775808
--2147483648 == -9223372036854775807
--2147483648 == -2147483648
--2147483648 == -2147483647
--2147483648 == -32768
--2147483648 == -32767
--2147483648 == -128
--2147483648 == -127
--2147483648 == 255
--2147483648 == 256
--2147483648 == 65535
--2147483648 == 65536
--2147483648 == 4294967295
--2147483648 == 4294967296
--2147483648 == 18446744073709551615
--2147483648 == 18446744073709551616
--2147483648 == 340282366920938463463374607431768211455
--2147483648 == 340282366920938463463374607431768211456
--2147483647 == -170141183460469231731687303715884105728
--2147483647 == -170141183460469231731687303715884105727
--2147483647 == -9223372036854775808
--2147483647 == -9223372036854775807
--2147483647 == -2147483648
--2147483647 == -2147483647
--2147483647 == -32768
--2147483647 == -32767
--2147483647 == -128
--2147483647 == -127
--2147483647 == 255
--2147483647 == 256
--2147483647 == 65535
--2147483647 == 65536
--2147483647 == 4294967295
--2147483647 == 4294967296
--2147483647 == 18446744073709551615
--2147483647 == 18446744073709551616
--2147483647 == 340282366920938463463374607431768211455
--2147483647 == 340282366920938463463374607431768211456
--32768 == -170141183460469231731687303715884105728
--32768 == -170141183460469231731687303715884105727
--32768 == -9223372036854775808
--32768 == -9223372036854775807
--32768 == -2147483648
--32768 == -2147483647
--32768 == -32768
--32768 == -32767
--32768 == -128
--32768 == -127
--32768 == 255
--32768 == 256
--32768 == 65535
--32768 == 65536
--32768 == 4294967295
--32768 == 4294967296
--32768 == 18446744073709551615
--32768 == 18446744073709551616
--32768 == 340282366920938463463374607431768211455
--32768 == 340282366920938463463374607431768211456
--32767 == -170141183460469231731687303715884105728
--32767 == -170141183460469231731687303715884105727
--32767 == -9223372036854775808
--32767 == -9223372036854775807
--32767 == -2147483648
--32767 == -2147483647
--32767 == -32768
--32767 == -32767
--32767 == -128
--32767 == -127
--32767 == 255
--32767 == 256
--32767 == 65535
--32767 == 65536
--32767 == 4294967295
--32767 == 4294967296
--32767 == 18446744073709551615
--32767 == 18446744073709551616
--32767 == 340282366920938463463374607431768211455
--32767 == 340282366920938463463374607431768211456
--128 == -170141183460469231731687303715884105728
--128 == -170141183460469231731687303715884105727
--128 == -9223372036854775808
--128 == -9223372036854775807
--128 == -2147483648
--128 == -2147483647
--128 == -32768
--128 == -32767
--128 == -128
--128 == -127
--128 == 255
--128 == 256
--128 == 65535
--128 == 65536
--128 == 4294967295
--128 == 4294967296
--128 == 18446744073709551615
--128 == 18446744073709551616
--128 == 340282366920938463463374607431768211455
--128 == 340282366920938463463374607431768211456
--127 == -170141183460469231731687303715884105728
--127 == -170141183460469231731687303715884105727
--127 == -9223372036854775808
--127 == -9223372036854775807
--127 == -2147483648
--127 == -2147483647
--127 == -32768
--127 == -32767
--127 == -128
--127 == -127
--127 == 255
--127 == 256
--127 == 65535
--127 == 65536
--127 == 4294967295
--127 == 4294967296
--127 == 18446744073709551615
--127 == 18446744073709551616
--127 == 340282366920938463463374607431768211455
--127 == 340282366920938463463374607431768211456
-255 == -170141183460469231731687303715884105728
-255 == -170141183460469231731687303715884105727
-255 == -9223372036854775808
-255 == -9223372036854775807
-255 == -2147483648
-255 == -2147483647
-255 == -32768
-255 == -32767
-255 == -128
-255 == -127
-255 == 255
-255 == 256
-255 == 65535
-255 == 65536
-255 == 4294967295
-255 == 4294967296
-255 == 18446744073709551615
-255 == 18446744073709551616
-255 == 340282366920938463463374607431768211455
-255 == 340282366920938463463374607431768211456
-256 == -170141183460469231731687303715884105728
-256 == -170141183460469231731687303715884105727
-256 == -9223372036854775808
-256 == -9223372036854775807
-256 == -2147483648
-256 == -2147483647
-256 == -32768
-256 == -32767
-256 == -128
-256 == -127
-256 == 255
-256 == 256
-256 == 65535
-256 == 65536
-256 == 4294967295
-256 == 4294967296
-256 == 18446744073709551615
-256 == 18446744073709551616
-256 == 340282366920938463463374607431768211455
-256 == 340282366920938463463374607431768211456
-65535 == -170141183460469231731687303715884105728
-65535 == -170141183460469231731687303715884105727
-65535 == -9223372036854775808
-65535 == -9223372036854775807
-65535 == -2147483648
-65535 == -2147483647
-65535 == -32768
-65535 == -32767
-65535 == -128
-65535 == -127
-65535 == 255
-65535 == 256
-65535 == 65535
-65535 == 65536
-65535 == 4294967295
-65535 == 4294967296
-65535 == 18446744073709551615
-65535 == 18446744073709551616
-65535 == 340282366920938463463374607431768211455
-65535 == 340282366920938463463374607431768211456
-65536 == -170141183460469231731687303715884105728
-65536 == -170141183460469231731687303715884105727
-65536 == -9223372036854775808
-65536 == -9223372036854775807
-65536 == -2147483648
-65536 == -2147483647
-65536 == -32768
-65536 == -32767
-65536 == -128
-65536 == -127
-65536 == 255
-65536 == 256
-65536 == 65535
-65536 == 65536
-65536 == 4294967295
-65536 == 4294967296
-65536 == 18446744073709551615
-65536 == 18446744073709551616
-65536 == 340282366920938463463374607431768211455
-65536 == 340282366920938463463374607431768211456
-4294967295 == -170141183460469231731687303715884105728
-4294967295 == -170141183460469231731687303715884105727
-4294967295 == -9223372036854775808
-4294967295 == -9223372036854775807
-4294967295 == -2147483648
-4294967295 == -2147483647
-4294967295 == -32768
-4294967295 == -32767
-4294967295 == -128
-4294967295 == -127
-4294967295 == 255
-4294967295 == 256
-4294967295 == 65535
-4294967295 == 65536
-4294967295 == 4294967295
-4294967295 == 4294967296
-4294967295 == 18446744073709551615
-4294967295 == 18446744073709551616
-4294967295 == 340282366920938463463374607431768211455
-4294967295 == 340282366920938463463374607431768211456
-4294967296 == -170141183460469231731687303715884105728
-4294967296 == -170141183460469231731687303715884105727
-4294967296 == -9223372036854775808
-4294967296 == -9223372036854775807
-4294967296 == -2147483648
-4294967296 == -2147483647
-4294967296 == -32768
-4294967296 == -32767
-4294967296 == -128
-4294967296 == -127
-4294967296 == 255
-4294967296 == 256
-4294967296 == 65535
-4294967296 == 65536
-4294967296 == 4294967295
-4294967296 == 4294967296
-4294967296 == 18446744073709551615
-4294967296 == 18446744073709551616
-4294967296 == 340282366920938463463374607431768211455
-4294967296 == 340282366920938463463374607431768211456
-18446744073709551615 == -170141183460469231731687303715884105728
-18446744073709551615 == -170141183460469231731687303715884105727
-18446744073709551615 == -9223372036854775808
-18446744073709551615 == -9223372036854775807
-18446744073709551615 == -2147483648
-18446744073709551615 == -2147483647
-18446744073709551615 == -32768
-18446744073709551615 == -32767
-18446744073709551615 == -128
-18446744073709551615 == -127
-18446744073709551615 == 255
-18446744073709551615 == 256
-18446744073709551615 == 65535
-18446744073709551615 == 65536
-18446744073709551615 == 4294967295
-18446744073709551615 == 4294967296
-18446744073709551615 == 18446744073709551615
-18446744073709551615 == 18446744073709551616
-18446744073709551615 == 340282366920938463463374607431768211455
-18446744073709551615 == 340282366920938463463374607431768211456
-18446744073709551616 == -170141183460469231731687303715884105728
-18446744073709551616 == -170141183460469231731687303715884105727
-18446744073709551616 == -9223372036854775808
-18446744073709551616 == -9223372036854775807
-18446744073709551616 == -2147483648
-18446744073709551616 == -2147483647
-18446744073709551616 == -32768
-18446744073709551616 == -32767
-18446744073709551616 == -128
-18446744073709551616 == -127
-18446744073709551616 == 255
-18446744073709551616 == 256
-18446744073709551616 == 65535
-18446744073709551616 == 65536
-18446744073709551616 == 4294967295
-18446744073709551616 == 4294967296
-18446744073709551616 == 18446744073709551615
-18446744073709551616 == 18446744073709551616
-18446744073709551616 == 340282366920938463463374607431768211455
-18446744073709551616 == 340282366920938463463374607431768211456
-340282366920938463463374607431768211455 == -170141183460469231731687303715884105728
-340282366920938463463374607431768211455 == -170141183460469231731687303715884105727
-340282366920938463463374607431768211455 == -9223372036854775808
-340282366920938463463374607431768211455 == -9223372036854775807
-340282366920938463463374607431768211455 == -2147483648
-340282366920938463463374607431768211455 == -2147483647
-340282366920938463463374607431768211455 == -32768
-340282366920938463463374607431768211455 == -32767
-340282366920938463463374607431768211455 == -128
-340282366920938463463374607431768211455 == -127
-340282366920938463463374607431768211455 == 255
-340282366920938463463374607431768211455 == 256
-340282366920938463463374607431768211455 == 65535
-340282366920938463463374607431768211455 == 65536
-340282366920938463463374607431768211455 == 4294967295
-340282366920938463463374607431768211455 == 4294967296
-340282366920938463463374607431768211455 == 18446744073709551615
-340282366920938463463374607431768211455 == 18446744073709551616
-340282366920938463463374607431768211455 == 340282366920938463463374607431768211455
-340282366920938463463374607431768211455 == 340282366920938463463374607431768211456
-340282366920938463463374607431768211456 == -170141183460469231731687303715884105728
-340282366920938463463374607431768211456 == -170141183460469231731687303715884105727
-340282366920938463463374607431768211456 == -9223372036854775808
-340282366920938463463374607431768211456 == -9223372036854775807
-340282366920938463463374607431768211456 == -2147483648
-340282366920938463463374607431768211456 == -2147483647
-340282366920938463463374607431768211456 == -32768
-340282366920938463463374607431768211456 == -32767
-340282366920938463463374607431768211456 == -128
-340282366920938463463374607431768211456 == -127
-340282366920938463463374607431768211456 == 255
-340282366920938463463374607431768211456 == 256
-340282366920938463463374607431768211456 == 65535
-340282366920938463463374607431768211456 == 65536
-340282366920938463463374607431768211456 == 4294967295
-340282366920938463463374607431768211456 == 4294967296
-340282366920938463463374607431768211456 == 18446744073709551615
-340282366920938463463374607431768211456 == 18446744073709551616
-340282366920938463463374607431768211456 == 340282366920938463463374607431768211455
-340282366920938463463374607431768211456 == 340282366920938463463374607431768211456
--170141183460469231731687303715884105728 > -170141183460469231731687303715884105728
--170141183460469231731687303715884105728 > -170141183460469231731687303715884105727
--170141183460469231731687303715884105728 > -9223372036854775808
--170141183460469231731687303715884105728 > -9223372036854775807
--170141183460469231731687303715884105728 > -2147483648
--170141183460469231731687303715884105728 > -2147483647
--170141183460469231731687303715884105728 > -32768
--170141183460469231731687303715884105728 > -32767
--170141183460469231731687303715884105728 > -128
--170141183460469231731687303715884105728 > -127
--170141183460469231731687303715884105728 > 255
--170141183460469231731687303715884105728 > 256
--170141183460469231731687303715884105728 > 65535
--170141183460469231731687303715884105728 > 65536
--170141183460469231731687303715884105728 > 4294967295
--170141183460469231731687303715884105728 > 4294967296
--170141183460469231731687303715884105728 > 18446744073709551615
--170141183460469231731687303715884105728 > 18446744073709551616
--170141183460469231731687303715884105728 > 340282366920938463463374607431768211455
--170141183460469231731687303715884105728 > 340282366920938463463374607431768211456
--170141183460469231731687303715884105727 > -170141183460469231731687303715884105728
--170141183460469231731687303715884105727 > -170141183460469231731687303715884105727
--170141183460469231731687303715884105727 > -9223372036854775808
--170141183460469231731687303715884105727 > -9223372036854775807
--170141183460469231731687303715884105727 > -2147483648
--170141183460469231731687303715884105727 > -2147483647
--170141183460469231731687303715884105727 > -32768
--170141183460469231731687303715884105727 > -32767
--170141183460469231731687303715884105727 > -128
--170141183460469231731687303715884105727 > -127
--170141183460469231731687303715884105727 > 255
--170141183460469231731687303715884105727 > 256
--170141183460469231731687303715884105727 > 65535
--170141183460469231731687303715884105727 > 65536
--170141183460469231731687303715884105727 > 4294967295
--170141183460469231731687303715884105727 > 4294967296
--170141183460469231731687303715884105727 > 18446744073709551615
--170141183460469231731687303715884105727 > 18446744073709551616
--170141183460469231731687303715884105727 > 340282366920938463463374607431768211455
--170141183460469231731687303715884105727 > 340282366920938463463374607431768211456
--9223372036854775808 > -170141183460469231731687303715884105728
--9223372036854775808 > -170141183460469231731687303715884105727
--9223372036854775808 > -9223372036854775808
--9223372036854775808 > -9223372036854775807
--9223372036854775808 > -2147483648
--9223372036854775808 > -2147483647
--9223372036854775808 > -32768
--9223372036854775808 > -32767
--9223372036854775808 > -128
--9223372036854775808 > -127
--9223372036854775808 > 255
--9223372036854775808 > 256
--9223372036854775808 > 65535
--9223372036854775808 > 65536
--9223372036854775808 > 4294967295
--9223372036854775808 > 4294967296
--9223372036854775808 > 18446744073709551615
--9223372036854775808 > 18446744073709551616
--9223372036854775808 > 340282366920938463463374607431768211455
--9223372036854775808 > 340282366920938463463374607431768211456
--9223372036854775807 > -170141183460469231731687303715884105728
--9223372036854775807 > -170141183460469231731687303715884105727
--9223372036854775807 > -9223372036854775808
--9223372036854775807 > -9223372036854775807
--9223372036854775807 > -2147483648
--9223372036854775807 > -2147483647
--9223372036854775807 > -32768
--9223372036854775807 > -32767
--9223372036854775807 > -128
--9223372036854775807 > -127
--9223372036854775807 > 255
--9223372036854775807 > 256
--9223372036854775807 > 65535
--9223372036854775807 > 65536
--9223372036854775807 > 4294967295
--9223372036854775807 > 4294967296
--9223372036854775807 > 18446744073709551615
--9223372036854775807 > 18446744073709551616
--9223372036854775807 > 340282366920938463463374607431768211455
--9223372036854775807 > 340282366920938463463374607431768211456
--2147483648 > -170141183460469231731687303715884105728
--2147483648 > -170141183460469231731687303715884105727
--2147483648 > -9223372036854775808
--2147483648 > -9223372036854775807
--2147483648 > -2147483648
--2147483648 > -2147483647
--2147483648 > -32768
--2147483648 > -32767
--2147483648 > -128
--2147483648 > -127
--2147483648 > 255
--2147483648 > 256
--2147483648 > 65535
--2147483648 > 65536
--2147483648 > 4294967295
--2147483648 > 4294967296
--2147483648 > 18446744073709551615
--2147483648 > 18446744073709551616
--2147483648 > 340282366920938463463374607431768211455
--2147483648 > 340282366920938463463374607431768211456
--2147483647 > -170141183460469231731687303715884105728
--2147483647 > -170141183460469231731687303715884105727
--2147483647 > -9223372036854775808
--2147483647 > -9223372036854775807
--2147483647 > -2147483648
--2147483647 > -2147483647
--2147483647 > -32768
--2147483647 > -32767
--2147483647 > -128
--2147483647 > -127
--2147483647 > 255
--2147483647 > 256
--2147483647 > 65535
--2147483647 > 65536
--2147483647 > 4294967295
--2147483647 > 4294967296
--2147483647 > 18446744073709551615
--2147483647 > 18446744073709551616
--2147483647 > 340282366920938463463374607431768211455
--2147483647 > 340282366920938463463374607431768211456
--32768 > -170141183460469231731687303715884105728
--32768 > -170141183460469231731687303715884105727
--32768 > -9223372036854775808
--32768 > -9223372036854775807
--32768 > -2147483648
--32768 > -2147483647
--32768 > -32768
--32768 > -32767
--32768 > -128
--32768 > -127
--32768 > 255
--32768 > 256
--32768 > 65535
--32768 > 65536
--32768 > 4294967295
--32768 > 4294967296
--32768 > 18446744073709551615
--32768 > 18446744073709551616
--32768 > 340282366920938463463374607431768211455
--32768 > 340282366920938463463374607431768211456
--32767 > -170141183460469231731687303715884105728
--32767 > -170141183460469231731687303715884105727
--32767 > -9223372036854775808
--32767 > -9223372036854775807
--32767 > -2147483648
--32767 > -2147483647
--32767 > -32768
--32767 > -32767
--32767 > -128
--32767 > -127
--32767 > 255
--32767 > 256
--32767 > 65535
--32767 > 65536
--32767 > 4294967295
--32767 > 4294967296
--32767 > 18446744073709551615
--32767 > 18446744073709551616
--32767 > 340282366920938463463374607431768211455
--32767 > 340282366920938463463374607431768211456
--128 > -170141183460469231731687303715884105728
--128 > -170141183460469231731687303715884105727
--128 > -9223372036854775808
--128 > -9223372036854775807
--128 > -2147483648
--128 > -2147483647
--128 > -32768
--128 > -32767
--128 > -128
--128 > -127
--128 > 255
--128 > 256
--128 > 65535
--128 > 65536
--128 > 4294967295
--128 > 4294967296
--128 > 18446744073709551615
--128 > 18446744073709551616
--128 > 340282366920938463463374607431768211455
--128 > 340282366920938463463374607431768211456
--127 > -170141183460469231731687303715884105728
--127 > -170141183460469231731687303715884105727
--127 > -9223372036854775808
--127 > -9223372036854775807
--127 > -2147483648
--127 > -2147483647
--127 > -32768
--127 > -32767
--127 > -128
--127 > -127
--127 > 255
--127 > 256
--127 > 65535
--127 > 65536
--127 > 4294967295
--127 > 4294967296
--127 > 18446744073709551615
--127 > 18446744073709551616
--127 > 340282366920938463463374607431768211455
--127 > 340282366920938463463374607431768211456
-255 > -170141183460469231731687303715884105728
-255 > -170141183460469231731687303715884105727
-255 > -9223372036854775808
-255 > -9223372036854775807
-255 > -2147483648
-255 > -2147483647
-255 > -32768
-255 > -32767
-255 > -128
-255 > -127
-255 > 255
-255 > 256
-255 > 65535
-255 > 65536
-255 > 4294967295
-255 > 4294967296
-255 > 18446744073709551615
-255 > 18446744073709551616
-255 > 340282366920938463463374607431768211455
-255 > 340282366920938463463374607431768211456
-256 > -170141183460469231731687303715884105728
-256 > -170141183460469231731687303715884105727
-256 > -9223372036854775808
-256 > -9223372036854775807
-256 > -2147483648
-256 > -2147483647
-256 > -32768
-256 > -32767
-256 > -128
-256 > -127
-256 > 255
-256 > 256
-256 > 65535
-256 > 65536
-256 > 4294967295
-256 > 4294967296
-256 > 18446744073709551615
-256 > 18446744073709551616
-256 > 340282366920938463463374607431768211455
-256 > 340282366920938463463374607431768211456
-65535 > -170141183460469231731687303715884105728
-65535 > -170141183460469231731687303715884105727
-65535 > -9223372036854775808
-65535 > -9223372036854775807
-65535 > -2147483648
-65535 > -2147483647
-65535 > -32768
-65535 > -32767
-65535 > -128
-65535 > -127
-65535 > 255
-65535 > 256
-65535 > 65535
-65535 > 65536
-65535 > 4294967295
-65535 > 4294967296
-65535 > 18446744073709551615
-65535 > 18446744073709551616
-65535 > 340282366920938463463374607431768211455
-65535 > 340282366920938463463374607431768211456
-65536 > -170141183460469231731687303715884105728
-65536 > -170141183460469231731687303715884105727
-65536 > -9223372036854775808
-65536 > -9223372036854775807
-65536 > -2147483648
-65536 > -2147483647
-65536 > -32768
-65536 > -32767
-65536 > -128
-65536 > -127
-65536 > 255
-65536 > 256
-65536 > 65535
-65536 > 65536
-65536 > 4294967295
-65536 > 4294967296
-65536 > 18446744073709551615
-65536 > 18446744073709551616
-65536 > 340282366920938463463374607431768211455
-65536 > 340282366920938463463374607431768211456
-4294967295 > -170141183460469231731687303715884105728
-4294967295 > -170141183460469231731687303715884105727
-4294967295 > -9223372036854775808
-4294967295 > -9223372036854775807
-4294967295 > -2147483648
-4294967295 > -2147483647
-4294967295 > -32768
-4294967295 > -32767
-4294967295 > -128
-4294967295 > -127
-4294967295 > 255
-4294967295 > 256
-4294967295 > 65535
-4294967295 > 65536
-4294967295 > 4294967295
-4294967295 > 4294967296
-4294967295 > 18446744073709551615
-4294967295 > 18446744073709551616
-4294967295 > 340282366920938463463374607431768211455
-4294967295 > 340282366920938463463374607431768211456
-4294967296 > -170141183460469231731687303715884105728
-4294967296 > -170141183460469231731687303715884105727
-4294967296 > -9223372036854775808
-4294967296 > -9223372036854775807
-4294967296 > -2147483648
-4294967296 > -2147483647
-4294967296 > -32768
-4294967296 > -32767
-4294967296 > -128
-4294967296 > -127
-4294967296 > 255
-4294967296 > 256
-4294967296 > 65535
-4294967296 > 65536
-4294967296 > 4294967295
-4294967296 > 4294967296
-4294967296 > 18446744073709551615
-4294967296 > 18446744073709551616
-4294967296 > 340282366920938463463374607431768211455
-4294967296 > 340282366920938463463374607431768211456
-18446744073709551615 > -170141183460469231731687303715884105728
-18446744073709551615 > -170141183460469231731687303715884105727
-18446744073709551615 > -9223372036854775808
-18446744073709551615 > -9223372036854775807
-18446744073709551615 > -2147483648
-18446744073709551615 > -2147483647
-18446744073709551615 > -32768
-18446744073709551615 > -32767
-18446744073709551615 > -128
-18446744073709551615 > -127
-18446744073709551615 > 255
-18446744073709551615 > 256
-18446744073709551615 > 65535
-18446744073709551615 > 65536
-18446744073709551615 > 4294967295
-18446744073709551615 > 4294967296
-18446744073709551615 > 18446744073709551615
-18446744073709551615 > 18446744073709551616
-18446744073709551615 > 340282366920938463463374607431768211455
-18446744073709551615 > 340282366920938463463374607431768211456
-18446744073709551616 > -170141183460469231731687303715884105728
-18446744073709551616 > -170141183460469231731687303715884105727
-18446744073709551616 > -9223372036854775808
-18446744073709551616 > -9223372036854775807
-18446744073709551616 > -2147483648
-18446744073709551616 > -2147483647
-18446744073709551616 > -32768
-18446744073709551616 > -32767
-18446744073709551616 > -128
-18446744073709551616 > -127
-18446744073709551616 > 255
-18446744073709551616 > 256
-18446744073709551616 > 65535
-18446744073709551616 > 65536
-18446744073709551616 > 4294967295
-18446744073709551616 > 4294967296
-18446744073709551616 > 18446744073709551615
-18446744073709551616 > 18446744073709551616
-18446744073709551616 > 340282366920938463463374607431768211455
-18446744073709551616 > 340282366920938463463374607431768211456
-340282366920938463463374607431768211455 > -170141183460469231731687303715884105728
-340282366920938463463374607431768211455 > -170141183460469231731687303715884105727
-340282366920938463463374607431768211455 > -9223372036854775808
-340282366920938463463374607431768211455 > -9223372036854775807
-340282366920938463463374607431768211455 > -2147483648
-340282366920938463463374607431768211455 > -2147483647
-340282366920938463463374607431768211455 > -32768
-340282366920938463463374607431768211455 > -32767
-340282366920938463463374607431768211455 > -128
-340282366920938463463374607431768211455 > -127
-340282366920938463463374607431768211455 > 255
-340282366920938463463374607431768211455 > 256
-340282366920938463463374607431768211455 > 65535
-340282366920938463463374607431768211455 > 65536
-340282366920938463463374607431768211455 > 4294967295
-340282366920938463463374607431768211455 > 4294967296
-340282366920938463463374607431768211455 > 18446744073709551615
-340282366920938463463374607431768211455 > 18446744073709551616
-340282366920938463463374607431768211455 > 340282366920938463463374607431768211455
-340282366920938463463374607431768211455 > 340282366920938463463374607431768211456
-340282366920938463463374607431768211456 > -170141183460469231731687303715884105728
-340282366920938463463374607431768211456 > -170141183460469231731687303715884105727
-340282366920938463463374607431768211456 > -9223372036854775808
-340282366920938463463374607431768211456 > -9223372036854775807
-340282366920938463463374607431768211456 > -2147483648
-340282366920938463463374607431768211456 > -2147483647
-340282366920938463463374607431768211456 > -32768
-340282366920938463463374607431768211456 > -32767
-340282366920938463463374607431768211456 > -128
-340282366920938463463374607431768211456 > -127
-340282366920938463463374607431768211456 > 255
-340282366920938463463374607431768211456 > 256
-340282366920938463463374607431768211456 > 65535
-340282366920938463463374607431768211456 > 65536
-340282366920938463463374607431768211456 > 4294967295
-340282366920938463463374607431768211456 > 4294967296
-340282366920938463463374607431768211456 > 18446744073709551615
-340282366920938463463374607431768211456 > 18446744073709551616
-340282366920938463463374607431768211456 > 340282366920938463463374607431768211455
-340282366920938463463374607431768211456 > 340282366920938463463374607431768211456
diff --git a/test/ic3/integer.lisp b/test/ic3/integer.lisp
index 5ed6291..7577dc8 100644
--- a/test/ic3/integer.lisp
+++ b/test/ic3/integer.lisp
@@ -1,16 +1,49 @@
-(in-package :cl-user)
+(in-package #:cl-user)
+
+(defpackage #:c3.test.ic3.integer
+ (:use #:cl)
+ (:shadow #:mod))
+
+(in-package #:c3.test.ic3.integer)
(require :positional)
-(defparameter *ops* '(+ - * / < == >))
+(setf *print-case* :downcase)
+
+(defparameter *ops* '(+ - * / mod < == > ^ & bor))
(defparameter *su* '(s u))
(defparameter *bits* '(8 16 32 64 128))
-(defun == (a b)
+(defgeneric == (a b))
+
+(defmethod == (a b)
(= a b))
+(defgeneric ^ (a b))
+
+(defmethod ^ ((a integer) (b integer))
+ (logxor a b))
+
+(defgeneric & (a b))
+
+(defmethod & ((a integer) (b integer))
+ (logand a b))
+
+(defgeneric bor (a b))
+
+(defmethod bor ((a integer) (b integer))
+ (logior a b))
+
+(defgeneric mod (a b))
+
+(defmethod mod (a b)
+ (let ((c (* (floor (/ a b)) b)))
+ (if (zerop c)
+ a
+ (- a c))))
+
(defgeneric translate (x))
(defmethod translate ((x integer))
@@ -36,6 +69,12 @@
(when (> sign 0)
(funcall fn (* sign (expt 2 su-bits)))))))))
+(with-open-file (ret #P"integer.ret.expected"
+ :direction :output
+ :element-type 'character
+ :if-exists :supersede)
+ (format ret "0~%"))
+
(with-open-file (expected #P"integer.out.expected"
:direction :output
:element-type 'character
@@ -56,11 +95,75 @@
(positional:positional (abs a) base))))
(output-base "0b" 2)
(output-base "0o" 8)
- (output-base "0x" 16))))
- (dolist (op *ops*)
+ (output-base "" 10)
+ (output-base "0x" 16))))))
+
+(defgeneric op-to-str (op))
+
+(defmethod op-to-str ((op (eql '+)))
+ "add")
+
+(defmethod op-to-str ((op (eql '-)))
+ "sub")
+
+(defmethod op-to-str ((op (eql '*)))
+ "mul")
+
+(defmethod op-to-str ((op (eql '/)))
+ "div")
+
+(defmethod op-to-str ((op (eql '%)))
+ "mod")
+
+(defmethod op-to-str ((op (eql '&)))
+ "band")
+
+(defmethod op-to-str ((op (eql '^)))
+ "bxor")
+
+(defmethod op-to-str ((op (eql '<)))
+ "lt")
+
+(defmethod op-to-str ((op (eql '<=)))
+ "lte")
+
+(defmethod op-to-str ((op (eql '==)))
+ "eq")
+
+(defmethod op-to-str ((op (eql '>)))
+ "gt")
+
+(defmethod op-to-str ((op (eql '>=)))
+ "gte")
+
+(defmethod op-to-str (op)
+ (string-downcase (symbol-name op)))
+
+(dolist (op *ops*)
+ (with-open-file (ret (pathname
+ (concatenate
+ 'string "integer_" (op-to-str op) ".ret.expected"))
+ :direction :output
+ :element-type 'character
+ :if-exists :supersede)
+ (format ret "0~%"))
+ (with-open-file (expected (pathname
+ (concatenate
+ 'string "integer_" (op-to-str op) ".out.expected"))
+ :direction :output
+ :element-type 'character
+ :if-exists :supersede)
+ (with-open-file (in (pathname
+ (concatenate
+ 'string "integer_" (op-to-str op) ".in"))
+ :direction :output
+ :element-type 'character
+ :if-exists :supersede)
(do-numbers
(lambda (a)
(do-numbers
(lambda (b)
+ (format expected "~A ~A ~A~%" a op b)
(format expected "~A~%" (translate (funcall op a b)))
+ (format in "quote ~A ~A ~A~%" a op b)
(format in "~A ~A ~A~%" a op b))))))))
diff --git a/test/ic3/integer.out.expected b/test/ic3/integer.out.expected
index b83ea51..b534195 100644
--- a/test/ic3/integer.out.expected
+++ b/test/ic3/integer.out.expected
@@ -1,2860 +1,80 @@
-170141183460469231731687303715884105728
-170141183460469231731687303715884105728
-170141183460469231731687303715884105728
+-170141183460469231731687303715884105728
+-170141183460469231731687303715884105727
-170141183460469231731687303715884105727
-170141183460469231731687303715884105727
-170141183460469231731687303715884105727
-9223372036854775808
-9223372036854775808
-9223372036854775808
+-9223372036854775808
+-9223372036854775807
-9223372036854775807
-9223372036854775807
-9223372036854775807
-2147483648
-2147483648
-2147483648
+-2147483648
+-2147483647
-2147483647
-2147483647
-2147483647
-32768
-32768
-32768
+-32768
+-32767
-32767
-32767
-32767
-128
-128
-128
+-128
+-127
-127
-127
-127
255
255
255
+255
+256
256
256
256
65535
65535
65535
+65535
+65536
65536
65536
65536
4294967295
4294967295
4294967295
+4294967295
+4294967296
4294967296
4294967296
4294967296
18446744073709551615
18446744073709551615
18446744073709551615
+18446744073709551615
+18446744073709551616
18446744073709551616
18446744073709551616
18446744073709551616
340282366920938463463374607431768211455
340282366920938463463374607431768211455
340282366920938463463374607431768211455
+340282366920938463463374607431768211455
340282366920938463463374607431768211456
340282366920938463463374607431768211456
340282366920938463463374607431768211456
--340282366920938463463374607431768211456
--340282366920938463463374607431768211455
--170141183460469231740910675752738881536
--170141183460469231740910675752738881535
--170141183460469231731687303718031589376
--170141183460469231731687303718031589375
--170141183460469231731687303715884138496
--170141183460469231731687303715884138495
--170141183460469231731687303715884105856
--170141183460469231731687303715884105855
--170141183460469231731687303715884105473
--170141183460469231731687303715884105472
--170141183460469231731687303715884040193
--170141183460469231731687303715884040192
--170141183460469231731687303711589138433
--170141183460469231731687303711589138432
--170141183460469231713240559642174554113
--170141183460469231713240559642174554112
-170141183460469231731687303715884105727
-170141183460469231731687303715884105728
--340282366920938463463374607431768211455
--340282366920938463463374607431768211454
--170141183460469231740910675752738881535
--170141183460469231740910675752738881534
--170141183460469231731687303718031589375
--170141183460469231731687303718031589374
--170141183460469231731687303715884138495
--170141183460469231731687303715884138494
--170141183460469231731687303715884105855
--170141183460469231731687303715884105854
--170141183460469231731687303715884105472
--170141183460469231731687303715884105471
--170141183460469231731687303715884040192
--170141183460469231731687303715884040191
--170141183460469231731687303711589138432
--170141183460469231731687303711589138431
--170141183460469231713240559642174554112
--170141183460469231713240559642174554111
-170141183460469231731687303715884105728
-170141183460469231731687303715884105729
--170141183460469231740910675752738881536
--170141183460469231740910675752738881535
--18446744073709551616
--18446744073709551615
--9223372039002259456
--9223372039002259455
--9223372036854808576
--9223372036854808575
--9223372036854775936
--9223372036854775935
--9223372036854775553
--9223372036854775552
--9223372036854710273
--9223372036854710272
--9223372032559808513
--9223372032559808512
-9223372036854775807
-9223372036854775808
-340282366920938463454151235394913435647
-340282366920938463454151235394913435648
--170141183460469231740910675752738881535
--170141183460469231740910675752738881534
--18446744073709551615
--18446744073709551614
--9223372039002259455
--9223372039002259454
--9223372036854808575
--9223372036854808574
--9223372036854775935
--9223372036854775934
--9223372036854775552
--9223372036854775551
--9223372036854710272
--9223372036854710271
--9223372032559808512
--9223372032559808511
-9223372036854775808
-9223372036854775809
-340282366920938463454151235394913435648
-340282366920938463454151235394913435649
--170141183460469231731687303718031589376
--170141183460469231731687303718031589375
--9223372039002259456
--9223372039002259455
--4294967296
--4294967295
--2147516416
--2147516415
--2147483776
--2147483775
--2147483393
--2147483392
--2147418113
--2147418112
-2147483647
-2147483648
-18446744071562067967
-18446744071562067968
-340282366920938463463374607429620727807
-340282366920938463463374607429620727808
--170141183460469231731687303718031589375
--170141183460469231731687303718031589374
--9223372039002259455
--9223372039002259454
--4294967295
--4294967294
--2147516415
--2147516414
--2147483775
--2147483774
--2147483392
--2147483391
--2147418112
--2147418111
-2147483648
-2147483649
-18446744071562067968
-18446744071562067969
-340282366920938463463374607429620727808
-340282366920938463463374607429620727809
--170141183460469231731687303715884138496
--170141183460469231731687303715884138495
--9223372036854808576
--9223372036854808575
--2147516416
--2147516415
--65536
--65535
--32896
--32895
--32513
--32512
-32767
-32768
-4294934527
-4294934528
-18446744073709518847
-18446744073709518848
-340282366920938463463374607431768178687
-340282366920938463463374607431768178688
--170141183460469231731687303715884138495
--170141183460469231731687303715884138494
--9223372036854808575
--9223372036854808574
--2147516415
--2147516414
--65535
--65534
--32895
--32894
--32512
--32511
-32768
-32769
-4294934528
-4294934529
-18446744073709518848
-18446744073709518849
-340282366920938463463374607431768178688
-340282366920938463463374607431768178689
--170141183460469231731687303715884105856
--170141183460469231731687303715884105855
--9223372036854775936
--9223372036854775935
--2147483776
--2147483775
--32896
--32895
--256
--255
-127
-128
-65407
-65408
-4294967167
-4294967168
-18446744073709551487
-18446744073709551488
-340282366920938463463374607431768211327
-340282366920938463463374607431768211328
--170141183460469231731687303715884105855
--170141183460469231731687303715884105854
--9223372036854775935
--9223372036854775934
--2147483775
--2147483774
--32895
--32894
--255
--254
-128
-129
-65408
-65409
-4294967168
-4294967169
-18446744073709551488
-18446744073709551489
-340282366920938463463374607431768211328
-340282366920938463463374607431768211329
--170141183460469231731687303715884105473
--170141183460469231731687303715884105472
--9223372036854775553
--9223372036854775552
--2147483393
--2147483392
--32513
--32512
-127
-128
-510
-511
-65790
-65791
-4294967550
-4294967551
-18446744073709551870
-18446744073709551871
-340282366920938463463374607431768211710
-340282366920938463463374607431768211711
--170141183460469231731687303715884105472
--170141183460469231731687303715884105471
--9223372036854775552
--9223372036854775551
--2147483392
--2147483391
--32512
--32511
-128
-129
-511
-512
-65791
-65792
-4294967551
-4294967552
-18446744073709551871
-18446744073709551872
-340282366920938463463374607431768211711
-340282366920938463463374607431768211712
--170141183460469231731687303715884040193
--170141183460469231731687303715884040192
--9223372036854710273
--9223372036854710272
--2147418113
--2147418112
-32767
-32768
-65407
-65408
-65790
-65791
-131070
-131071
-4295032830
-4295032831
-18446744073709617150
-18446744073709617151
-340282366920938463463374607431768276990
-340282366920938463463374607431768276991
--170141183460469231731687303715884040192
--170141183460469231731687303715884040191
--9223372036854710272
--9223372036854710271
--2147418112
--2147418111
-32768
-32769
-65408
-65409
-65791
-65792
-131071
-131072
-4295032831
-4295032832
-18446744073709617151
-18446744073709617152
-340282366920938463463374607431768276991
-340282366920938463463374607431768276992
--170141183460469231731687303711589138433
--170141183460469231731687303711589138432
--9223372032559808513
--9223372032559808512
-2147483647
-2147483648
-4294934527
-4294934528
-4294967167
-4294967168
-4294967550
-4294967551
-4295032830
-4295032831
-8589934590
-8589934591
-18446744078004518910
-18446744078004518911
-340282366920938463463374607436063178750
-340282366920938463463374607436063178751
--170141183460469231731687303711589138432
--170141183460469231731687303711589138431
--9223372032559808512
--9223372032559808511
-2147483648
-2147483649
-4294934528
-4294934529
-4294967168
-4294967169
-4294967551
-4294967552
-4295032831
-4295032832
-8589934591
-8589934592
-18446744078004518911
-18446744078004518912
-340282366920938463463374607436063178751
-340282366920938463463374607436063178752
--170141183460469231713240559642174554113
--170141183460469231713240559642174554112
-9223372036854775807
-9223372036854775808
-18446744071562067967
-18446744071562067968
-18446744073709518847
-18446744073709518848
-18446744073709551487
-18446744073709551488
-18446744073709551870
-18446744073709551871
-18446744073709617150
-18446744073709617151
-18446744078004518910
-18446744078004518911
-36893488147419103230
-36893488147419103231
-340282366920938463481821351505477763070
-340282366920938463481821351505477763071
--170141183460469231713240559642174554112
--170141183460469231713240559642174554111
-9223372036854775808
-9223372036854775809
-18446744071562067968
-18446744071562067969
-18446744073709518848
-18446744073709518849
-18446744073709551488
-18446744073709551489
-18446744073709551871
-18446744073709551872
-18446744073709617151
-18446744073709617152
-18446744078004518911
-18446744078004518912
-36893488147419103231
-36893488147419103232
-340282366920938463481821351505477763071
-340282366920938463481821351505477763072
-170141183460469231731687303715884105727
-170141183460469231731687303715884105728
-340282366920938463454151235394913435647
-340282366920938463454151235394913435648
-340282366920938463463374607429620727807
-340282366920938463463374607429620727808
-340282366920938463463374607431768178687
-340282366920938463463374607431768178688
-340282366920938463463374607431768211327
-340282366920938463463374607431768211328
-340282366920938463463374607431768211710
-340282366920938463463374607431768211711
-340282366920938463463374607431768276990
-340282366920938463463374607431768276991
-340282366920938463463374607436063178750
-340282366920938463463374607436063178751
-340282366920938463481821351505477763070
-340282366920938463481821351505477763071
-680564733841876926926749214863536422910
-680564733841876926926749214863536422911
-170141183460469231731687303715884105728
-170141183460469231731687303715884105729
-340282366920938463454151235394913435648
-340282366920938463454151235394913435649
-340282366920938463463374607429620727808
-340282366920938463463374607429620727809
-340282366920938463463374607431768178688
-340282366920938463463374607431768178689
-340282366920938463463374607431768211328
-340282366920938463463374607431768211329
-340282366920938463463374607431768211711
-340282366920938463463374607431768211712
-340282366920938463463374607431768276991
-340282366920938463463374607431768276992
-340282366920938463463374607436063178751
-340282366920938463463374607436063178752
-340282366920938463481821351505477763071
-340282366920938463481821351505477763072
-680564733841876926926749214863536422911
-680564733841876926926749214863536422912
-0
--1
--170141183460469231722463931679029329920
--170141183460469231722463931679029329921
--170141183460469231731687303713736622080
--170141183460469231731687303713736622081
--170141183460469231731687303715884072960
--170141183460469231731687303715884072961
--170141183460469231731687303715884105600
--170141183460469231731687303715884105601
--170141183460469231731687303715884105983
--170141183460469231731687303715884105984
--170141183460469231731687303715884171263
--170141183460469231731687303715884171264
--170141183460469231731687303720179073023
--170141183460469231731687303720179073024
--170141183460469231750134047789593657343
--170141183460469231750134047789593657344
--510423550381407695195061911147652317183
--510423550381407695195061911147652317184
-1
-0
--170141183460469231722463931679029329919
--170141183460469231722463931679029329920
--170141183460469231731687303713736622079
--170141183460469231731687303713736622080
--170141183460469231731687303715884072959
--170141183460469231731687303715884072960
--170141183460469231731687303715884105599
--170141183460469231731687303715884105600
--170141183460469231731687303715884105982
--170141183460469231731687303715884105983
--170141183460469231731687303715884171262
--170141183460469231731687303715884171263
--170141183460469231731687303720179073022
--170141183460469231731687303720179073023
--170141183460469231750134047789593657342
--170141183460469231750134047789593657343
--510423550381407695195061911147652317182
--510423550381407695195061911147652317183
-170141183460469231722463931679029329920
-170141183460469231722463931679029329919
-0
--1
--9223372034707292160
--9223372034707292161
--9223372036854743040
--9223372036854743041
--9223372036854775680
--9223372036854775681
--9223372036854776063
--9223372036854776064
--9223372036854841343
--9223372036854841344
--9223372041149743103
--9223372041149743104
--27670116110564327423
--27670116110564327424
--340282366920938463472597979468622987263
--340282366920938463472597979468622987264
-170141183460469231722463931679029329921
-170141183460469231722463931679029329920
-1
-0
--9223372034707292159
--9223372034707292160
--9223372036854743039
--9223372036854743040
--9223372036854775679
--9223372036854775680
--9223372036854776062
--9223372036854776063
--9223372036854841342
--9223372036854841343
--9223372041149743102
--9223372041149743103
--27670116110564327422
--27670116110564327423
--340282366920938463472597979468622987262
--340282366920938463472597979468622987263
-170141183460469231731687303713736622080
-170141183460469231731687303713736622079
-9223372034707292160
-9223372034707292159
-0
--1
--2147450880
--2147450881
--2147483520
--2147483521
--2147483903
--2147483904
--2147549183
--2147549184
--6442450943
--6442450944
--18446744075857035263
--18446744075857035264
--340282366920938463463374607433915695103
--340282366920938463463374607433915695104
-170141183460469231731687303713736622081
-170141183460469231731687303713736622080
-9223372034707292161
-9223372034707292160
-1
-0
--2147450879
--2147450880
--2147483519
--2147483520
--2147483902
--2147483903
--2147549182
--2147549183
--6442450942
--6442450943
--18446744075857035262
--18446744075857035263
--340282366920938463463374607433915695102
--340282366920938463463374607433915695103
-170141183460469231731687303715884072960
-170141183460469231731687303715884072959
-9223372036854743040
-9223372036854743039
-2147450880
-2147450879
-0
--1
--32640
--32641
--33023
--33024
--98303
--98304
--4295000063
--4295000064
--18446744073709584383
--18446744073709584384
--340282366920938463463374607431768244223
--340282366920938463463374607431768244224
-170141183460469231731687303715884072961
-170141183460469231731687303715884072960
-9223372036854743041
-9223372036854743040
-2147450881
-2147450880
-1
-0
--32639
--32640
--33022
--33023
--98302
--98303
--4295000062
--4295000063
--18446744073709584382
--18446744073709584383
--340282366920938463463374607431768244222
--340282366920938463463374607431768244223
-170141183460469231731687303715884105600
-170141183460469231731687303715884105599
-9223372036854775680
-9223372036854775679
-2147483520
-2147483519
-32640
-32639
-0
--1
--383
--384
--65663
--65664
--4294967423
--4294967424
--18446744073709551743
--18446744073709551744
--340282366920938463463374607431768211583
--340282366920938463463374607431768211584
-170141183460469231731687303715884105601
-170141183460469231731687303715884105600
-9223372036854775681
-9223372036854775680
-2147483521
-2147483520
-32641
-32640
-1
-0
--382
--383
--65662
--65663
--4294967422
--4294967423
--18446744073709551742
--18446744073709551743
--340282366920938463463374607431768211582
--340282366920938463463374607431768211583
-170141183460469231731687303715884105983
-170141183460469231731687303715884105982
-9223372036854776063
-9223372036854776062
-2147483903
-2147483902
-33023
-33022
-383
-382
-0
--1
--65280
--65281
--4294967040
--4294967041
--18446744073709551360
--18446744073709551361
--340282366920938463463374607431768211200
--340282366920938463463374607431768211201
-170141183460469231731687303715884105984
-170141183460469231731687303715884105983
-9223372036854776064
-9223372036854776063
-2147483904
-2147483903
-33024
-33023
-384
-383
-1
-0
--65279
--65280
--4294967039
--4294967040
--18446744073709551359
--18446744073709551360
--340282366920938463463374607431768211199
--340282366920938463463374607431768211200
-170141183460469231731687303715884171263
-170141183460469231731687303715884171262
-9223372036854841343
-9223372036854841342
-2147549183
-2147549182
-98303
-98302
-65663
-65662
-65280
-65279
-0
--1
--4294901760
--4294901761
--18446744073709486080
--18446744073709486081
--340282366920938463463374607431768145920
--340282366920938463463374607431768145921
-170141183460469231731687303715884171264
-170141183460469231731687303715884171263
-9223372036854841344
-9223372036854841343
-2147549184
-2147549183
-98304
-98303
-65664
-65663
-65281
-65280
-1
-0
--4294901759
--4294901760
--18446744073709486079
--18446744073709486080
--340282366920938463463374607431768145919
--340282366920938463463374607431768145920
-170141183460469231731687303720179073023
-170141183460469231731687303720179073022
-9223372041149743103
-9223372041149743102
-6442450943
-6442450942
-4295000063
-4295000062
-4294967423
-4294967422
-4294967040
-4294967039
-4294901760
-4294901759
-0
--1
--18446744069414584320
--18446744069414584321
--340282366920938463463374607427473244160
--340282366920938463463374607427473244161
-170141183460469231731687303720179073024
-170141183460469231731687303720179073023
-9223372041149743104
-9223372041149743103
-6442450944
-6442450943
-4295000064
-4295000063
-4294967424
-4294967423
-4294967041
-4294967040
-4294901761
-4294901760
-1
-0
--18446744069414584319
--18446744069414584320
--340282366920938463463374607427473244159
--340282366920938463463374607427473244160
-170141183460469231750134047789593657343
-170141183460469231750134047789593657342
-27670116110564327423
-27670116110564327422
-18446744075857035263
-18446744075857035262
-18446744073709584383
-18446744073709584382
-18446744073709551743
-18446744073709551742
-18446744073709551360
-18446744073709551359
-18446744073709486080
-18446744073709486079
-18446744069414584320
-18446744069414584319
-0
--1
--340282366920938463444927863358058659840
--340282366920938463444927863358058659841
-170141183460469231750134047789593657344
-170141183460469231750134047789593657343
-27670116110564327424
-27670116110564327423
-18446744075857035264
-18446744075857035263
-18446744073709584384
-18446744073709584383
-18446744073709551744
-18446744073709551743
-18446744073709551361
-18446744073709551360
-18446744073709486081
-18446744073709486080
-18446744069414584321
-18446744069414584320
-1
-0
--340282366920938463444927863358058659839
--340282366920938463444927863358058659840
-510423550381407695195061911147652317183
-510423550381407695195061911147652317182
-340282366920938463472597979468622987263
-340282366920938463472597979468622987262
-340282366920938463463374607433915695103
-340282366920938463463374607433915695102
-340282366920938463463374607431768244223
-340282366920938463463374607431768244222
-340282366920938463463374607431768211583
-340282366920938463463374607431768211582
-340282366920938463463374607431768211200
-340282366920938463463374607431768211199
-340282366920938463463374607431768145920
-340282366920938463463374607431768145919
-340282366920938463463374607427473244160
-340282366920938463463374607427473244159
-340282366920938463444927863358058659840
-340282366920938463444927863358058659839
-0
--1
-510423550381407695195061911147652317184
-510423550381407695195061911147652317183
-340282366920938463472597979468622987264
-340282366920938463472597979468622987263
-340282366920938463463374607433915695104
-340282366920938463463374607433915695103
-340282366920938463463374607431768244224
-340282366920938463463374607431768244223
-340282366920938463463374607431768211584
-340282366920938463463374607431768211583
-340282366920938463463374607431768211201
-340282366920938463463374607431768211200
-340282366920938463463374607431768145921
-340282366920938463463374607431768145920
-340282366920938463463374607427473244161
-340282366920938463463374607427473244160
-340282366920938463444927863358058659841
-340282366920938463444927863358058659840
-1
-0
-28948022309329048855892746252171976963317496166410141009864396001978282409984
-28948022309329048855892746252171976963147354982949671778132708698262398304256
-1569275433846670190958947355801916604025588861116008628224
-1569275433846670190788806172341447372293901557400124522496
-365375409332725729550921208179070754913983135744
-365375409162584546090451976447383451198099030016
-5575186299632655785383929568162090376495104
-5575016158449195316152197880858374492389376
-21778071482940061661655974875633165533184
-21607930299479592429924287571917281427456
--43386001782419654091580262447550446960640
--43556142965880123323311949751266331066368
--11150202458081851101536127449020464868884480
--11150372599265311570767859136324180752990208
--730750818495310275641373184626454206112082165760
--730750818665451459101842416358141509827966271488
--3138550867693340381747753528143363976319490418516133150720
--3138550867693340381917894711603833208051177722232017256448
--57896044618658097711785492504343953926464851149359812787997104700240680714240
--57896044618658097711785492504343953926634992332820282019728792003956564819968
-28948022309329048855892746252171976963147354982949671778132708698262398304256
-28948022309329048855892746252171976962977213799489202546401021394546514198529
-1569275433846670190958947355801916604016365489079153852416
-1569275433846670190788806172341447372284678185363269746689
-365375409332725729550921208179070754911835652096
-365375409162584546090451976447383451195951546369
-5575186299632655785383929568162090376462336
-5575016158449195316152197880858374492356609
-21778071482940061661655974875633165533056
-21607930299479592429924287571917281427329
--43386001782419654091580262447550446960385
--43556142965880123323311949751266331066112
--11150202458081851101536127449020464868818945
--11150372599265311570767859136324180752924672
--730750818495310275641373184626454206107787198465
--730750818665451459101842416358141509823671304192
--3138550867693340381747753528143363976301043674442423599105
--3138550867693340381917894711603833208032730978158307704832
--57896044618658097711785492504343953926124568782438874324533730092808912502785
--57896044618658097711785492504343953926294709965899343556265417396524796608512
-1569275433846670190958947355801916604025588861116008628224
-1569275433846670190958947355801916604016365489079153852416
-85070591730234615865843651857942052864
-85070591730234615856620279821087277056
-19807040628566084398385987584
-19807040619342712361531211776
-302231454903657293676544
-302222231531620438900736
-1180591620717411303424
-1171368248680556527616
--2351959869397967831040
--2361183241434822606848
--604453686435277732577280
--604462909807314587353088
--39614081247908796759917199360
--39614081257132168796771975168
--170141183460469231722463931679029329920
--170141183460469231731687303715884105728
--3138550867693340381917894711603833208041954350195162480640
--3138550867693340381917894711603833208051177722232017256448
-1569275433846670190788806172341447372293901557400124522496
-1569275433846670190788806172341447372284678185363269746689
-85070591730234615856620279821087277056
-85070591730234615847396907784232501249
-19807040628566084396238503936
-19807040619342712359383728129
-302231454903657293643776
-302222231531620438867969
-1180591620717411303296
-1171368248680556527489
--2351959869397967830785
--2361183241434822606592
--604453686435277732511745
--604462909807314587287552
--39614081247908796755622232065
--39614081257132168792477007872
--170141183460469231704017187605319778305
--170141183460469231713240559642174554112
--3138550867693340381577612344682894744578579742763394269185
--3138550867693340381577612344682894744587803114800249044992
-365375409332725729550921208179070754913983135744
-365375409332725729550921208179070754911835652096
-19807040628566084398385987584
-19807040628566084396238503936
-4611686018427387904
-4611686016279904256
-70368744177664
-70366596694016
-274877906944
-272730423296
--547608330240
--549755813888
--140735340871680
--140737488355328
--9223372034707292160
--9223372036854775808
--39614081257132168794624491520
--39614081257132168796771975168
--730750818665451459101842416358141509825818787840
--730750818665451459101842416358141509827966271488
-365375409162584546090451976447383451198099030016
-365375409162584546090451976447383451195951546369
-19807040619342712361531211776
-19807040619342712359383728129
-4611686016279904256
-4611686014132420609
-70368744144896
-70366596661249
-274877906816
-272730423169
--547608329985
--549755813632
--140735340806145
--140737488289792
--9223372030412324865
--9223372032559808512
--39614081238685424720914939905
--39614081238685424723062423552
--730750818325169092180903952894766902394050576385
--730750818325169092180903952894766902396198060032
-5575186299632655785383929568162090376495104
-5575186299632655785383929568162090376462336
-302231454903657293676544
-302231454903657293643776
-70368744177664
-70368744144896
-1073741824
-1073709056
-4194304
-4161536
--8355840
--8388608
--2147450880
--2147483648
--140737488322560
--140737488355328
--604462909807314587320320
--604462909807314587353088
--11150372599265311570767859136324180752957440
--11150372599265311570767859136324180752990208
-5575016158449195316152197880858374492389376
-5575016158449195316152197880858374492356609
-302222231531620438900736
-302222231531620438867969
-70366596694016
-70366596661249
-1073709056
-1073676289
-4194176
-4161409
--8355585
--8388352
--2147385345
--2147418112
--140733193355265
--140733193388032
--604444463063240877768705
--604444463063240877801472
--11150032316898390632304395761716748984745985
--11150032316898390632304395761716748984778752
-21778071482940061661655974875633165533184
-21778071482940061661655974875633165533056
-1180591620717411303424
-1180591620717411303296
-274877906944
-274877906816
-4194304
-4194176
-16384
-16256
--32640
--32768
--8388480
--8388608
--549755813760
--549755813888
--2361183241434822606720
--2361183241434822606848
--43556142965880123323311949751266331066240
--43556142965880123323311949751266331066368
-21607930299479592429924287571917281427456
-21607930299479592429924287571917281427329
-1171368248680556527616
-1171368248680556527489
-272730423296
-272730423169
-4161536
-4161409
-16256
-16129
--32385
--32512
--8322945
--8323072
--545460846465
--545460846592
--2342736497361113055105
--2342736497361113055232
--43215860598959184859848575143834562854785
--43215860598959184859848575143834562854912
--43386001782419654091580262447550446960640
--43386001782419654091580262447550446960385
--2351959869397967831040
--2351959869397967830785
--547608330240
--547608329985
--8355840
--8355585
--32640
--32385
-65025
-65280
-16711425
-16711680
-1095216660225
-1095216660480
-4703919738795935661825
-4703919738795935662080
-86772003564839308183160524895100893921025
-86772003564839308183160524895100893921280
--43556142965880123323311949751266331066368
--43556142965880123323311949751266331066112
--2361183241434822606848
--2361183241434822606592
--549755813888
--549755813632
--8388608
--8388352
--32768
--32512
-65280
-65536
-16776960
-16777216
-1099511627520
-1099511627776
-4722366482869645213440
-4722366482869645213696
-87112285931760246646623899502532662132480
-87112285931760246646623899502532662132736
--11150202458081851101536127449020464868884480
--11150202458081851101536127449020464868818945
--604453686435277732577280
--604453686435277732511745
--140735340871680
--140735340806145
--2147450880
--2147385345
--8388480
--8322945
-16711425
-16776960
-4294836225
-4294901760
-281470681677825
-281470681743360
-1208907372870555465089025
-1208907372870555465154560
-22300404916163702203072254898040929737703425
-22300404916163702203072254898040929737768960
--11150372599265311570767859136324180752990208
--11150372599265311570767859136324180752924672
--604462909807314587353088
--604462909807314587287552
--140737488355328
--140737488289792
--2147483648
--2147418112
--8388608
--8323072
-16711680
-16777216
-4294901760
-4294967296
-281474976645120
-281474976710656
-1208925819614629174640640
-1208925819614629174706176
-22300745198530623141535718272648361505914880
-22300745198530623141535718272648361505980416
--730750818495310275641373184626454206112082165760
--730750818495310275641373184626454206107787198465
--39614081247908796759917199360
--39614081247908796755622232065
--9223372034707292160
--9223372030412324865
--140737488322560
--140733193355265
--549755813760
--545460846465
-1095216660225
-1099511627520
-281470681677825
-281474976645120
-18446744065119617025
-18446744069414584320
-79228162495817593515539431425
-79228162495817593519834398720
-1461501636990620551282746369252908412219869364225
-1461501636990620551282746369252908412224164331520
--730750818665451459101842416358141509827966271488
--730750818665451459101842416358141509823671304192
--39614081257132168796771975168
--39614081257132168792477007872
--9223372036854775808
--9223372032559808512
--140737488355328
--140733193388032
--549755813888
--545460846592
-1095216660480
-1099511627776
-281470681743360
-281474976710656
-18446744069414584320
-18446744073709551616
-79228162514264337589248983040
-79228162514264337593543950336
-1461501637330902918203684832716283019651637575680
-1461501637330902918203684832716283019655932542976
--3138550867693340381747753528143363976319490418516133150720
--3138550867693340381747753528143363976301043674442423599105
--170141183460469231722463931679029329920
--170141183460469231704017187605319778305
--39614081257132168794624491520
--39614081238685424720914939905
--604462909807314587320320
--604444463063240877768705
--2361183241434822606720
--2342736497361113055105
-4703919738795935661825
-4722366482869645213440
-1208907372870555465089025
-1208925819614629174640640
-79228162495817593515539431425
-79228162514264337589248983040
-340282366920938463426481119284349108225
-340282366920938463444927863358058659840
-6277101735386680763495507056286727952620534092958556749825
-6277101735386680763495507056286727952638980837032266301440
--3138550867693340381917894711603833208051177722232017256448
--3138550867693340381917894711603833208032730978158307704832
--170141183460469231731687303715884105728
--170141183460469231713240559642174554112
--39614081257132168796771975168
--39614081238685424723062423552
--604462909807314587353088
--604444463063240877801472
--2361183241434822606848
--2342736497361113055232
-4703919738795935662080
-4722366482869645213696
-1208907372870555465154560
-1208925819614629174706176
-79228162495817593519834398720
-79228162514264337593543950336
-340282366920938463444927863358058659840
340282366920938463463374607431768211456
-6277101735386680763835789423207666416083908700390324961280
-6277101735386680763835789423207666416102355444464034512896
--57896044618658097711785492504343953926464851149359812787997104700240680714240
--57896044618658097711785492504343953926124568782438874324533730092808912502785
--3138550867693340381917894711603833208041954350195162480640
--3138550867693340381577612344682894744578579742763394269185
--730750818665451459101842416358141509825818787840
--730750818325169092180903952894766902394050576385
--11150372599265311570767859136324180752957440
--11150032316898390632304395761716748984745985
--43556142965880123323311949751266331066240
--43215860598959184859848575143834562854785
-86772003564839308183160524895100893921025
-87112285931760246646623899502532662132480
-22300404916163702203072254898040929737703425
-22300745198530623141535718272648361505914880
-1461501636990620551282746369252908412219869364225
-1461501637330902918203684832716283019651637575680
-6277101735386680763495507056286727952620534092958556749825
-6277101735386680763835789423207666416083908700390324961280
-115792089237316195423570985008687907852589419931798687112530834793049593217025
-115792089237316195423570985008687907852929702298719625575994209400481361428480
--57896044618658097711785492504343953926634992332820282019728792003956564819968
--57896044618658097711785492504343953926294709965899343556265417396524796608512
--3138550867693340381917894711603833208051177722232017256448
--3138550867693340381577612344682894744587803114800249044992
--730750818665451459101842416358141509827966271488
--730750818325169092180903952894766902396198060032
--11150372599265311570767859136324180752990208
--11150032316898390632304395761716748984778752
--43556142965880123323311949751266331066368
--43215860598959184859848575143834562854912
-86772003564839308183160524895100893921280
-87112285931760246646623899502532662132736
-22300404916163702203072254898040929737768960
-22300745198530623141535718272648361505980416
-1461501636990620551282746369252908412224164331520
-1461501637330902918203684832716283019655932542976
-6277101735386680763495507056286727952638980837032266301440
-6277101735386680763835789423207666416102355444464034512896
-115792089237316195423570985008687907852929702298719625575994209400481361428480
-115792089237316195423570985008687907853269984665640564039457584007913129639936
-1
-1
-18446744073709551616
-18446744073709551618
-79228162514264337593543950336
-79228162551157825758142922760
-5192296858534827628530496329220096
-5192455319695707014120526862876800
-1329227995784915872903807060280344576
-1339694357956450643556592942644756738
--667220327295957771496812955748565120
--664613997892457936451903530140172288
--2596188043953143079754136014585856
--2596148429267413814265248164610048
--39614081266355540835774234624
--39614081257132168796771975168
--9223372036854775808
--9223372036854775808
-0
-0
-0
-1
-18446744073709551615
-18446744073709551618
-79228162514264337593543950335
-79228162551157825758142922760
-5192296858534827628530496329220095
-5192455319695707014120526862876800
-1329227995784915872903807060280344575
-1339694357956450643556592942644756738
--667220327295957771496812955748565120
--664613997892457936451903530140172287
--2596188043953143079754136014585856
--2596148429267413814265248164610047
--39614081266355540835774234624
--39614081257132168796771975167
--9223372036854775808
--9223372036854775807
-0
-0
-0
-0
-1
-1
-4294967296
-4294967298
-281474976710656
-281483566907400
-72057594037927936
-72624976668147841
--36170086419038336
--36028797018963968
--140739635871744
--140737488355328
--2147483648
--2147483648
-0
-0
-0
-0
-0
-0
-0
-1
-4294967295
-4294967298
-281474976710655
-281483566907400
-72057594037927935
-72624976668147841
--36170086419038336
--36028797018963967
--140739635871744
--140737488355327
--2147483648
--2147483647
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-65536
-65538
-16777216
-16909320
--8421504
--8388608
--32768
--32768
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-65535
-65538
-16777215
-16909320
--8421504
--8388607
--32768
--32767
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-256
-258
--128
--128
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-255
-258
--128
--127
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
--1
--2
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
--2
--2
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
--1
--2
--511
--516
-257
-255
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
--2
--2
--512
--516
-257
-256
-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
--1
--2
--131071
--131076
--33554431
--33818640
-16843009
-16777215
-65537
-65535
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
--2
--2
--131072
--131076
--33554432
--33818640
-16843009
-16777216
-65537
-65536
-1
-1
-0
-0
-0
-0
-0
-0
--1
--2
--8589934591
--8589934596
--562949953421311
--562967133814800
--144115188075855871
--145249953336295682
-72340172838076673
-72057594037927935
-281479271743489
-281474976710655
-4294967297
-4294967295
-1
-0
-0
-0
-0
-0
--2
--2
--8589934592
--8589934596
--562949953421312
--562967133814800
--144115188075855872
--145249953336295682
-72340172838076673
-72057594037927936
-281479271743489
-281474976710656
-4294967297
-4294967296
-1
-1
-0
-0
--1
--2
--36893488147419103231
--36893488147419103236
--158456325028528675187087900671
--158456325102315651516285845520
--10384593717069655257060992658440191
--10384910639391414028241053725753600
--2658455991569831745807614120560689151
--2679388715912901287113185885289513476
-1334440654591915542993625911497130241
-1329227995784915872903807060280344575
-5192376087906286159508272029171713
-5192296858534827628530496329220095
-79228162532711081671548469249
-79228162514264337593543950335
-18446744073709551617
-18446744073709551615
-1
-0
--2
--2
--36893488147419103232
--36893488147419103236
--158456325028528675187087900672
--158456325102315651516285845520
--10384593717069655257060992658440192
--10384910639391414028241053725753600
--2658455991569831745807614120560689152
--2679388715912901287113185885289513476
-1334440654591915542993625911497130241
-1329227995784915872903807060280344576
-5192376087906286159508272029171713
-5192296858534827628530496329220096
-79228162532711081671548469249
-79228162514264337593543950336
-18446744073709551617
-18446744073709551616
-1
-1
-false
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-false
-false
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-false
-false
-false
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-false
-false
-false
-false
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-false
-false
-false
-false
-false
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-false
-false
-false
-false
-false
-false
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-false
-false
-false
-false
-false
-false
-false
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-false
-false
-false
-false
-false
-false
-false
-false
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-false
-false
-false
-false
-false
-false
-false
-false
-false
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-true
-true
-true
-true
-true
-true
-true
-true
-true
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-true
-true
-true
-true
-true
-true
-true
-true
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-true
-true
-true
-true
-true
-true
-true
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-true
-true
-true
-true
-true
-true
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-true
-true
-true
-true
-true
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-true
-true
-true
-true
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-true
-true
-true
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-true
-true
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-true
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-true
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-true
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-true
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-true
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-true
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-true
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-true
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-true
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-true
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-true
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-true
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-true
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-true
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-true
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-true
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-true
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-true
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-true
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-true
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-true
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-true
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-true
-true
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-true
-true
-true
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-true
-true
-true
-true
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-true
-true
-true
-true
-true
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-true
-true
-true
-true
-true
-true
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-true
-true
-true
-true
-true
-true
-true
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-true
-true
-true
-true
-true
-true
-true
-true
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-true
-true
-true
-true
-true
-true
-true
-true
-true
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-false
-false
-false
-false
-false
-false
-false
-false
-false
-false
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-false
-false
-false
-false
-false
-false
-false
-false
-false
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-false
-false
-false
-false
-false
-false
-false
-false
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-false
-false
-false
-false
-false
-false
-false
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-false
-false
-false
-false
-false
-false
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-false
-false
-false
-false
-false
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-false
-false
-false
-false
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-false
-false
-false
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-false
-false
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-false
diff --git a/test/ic3/integer_add.in b/test/ic3/integer_add.in
new file mode 100644
index 0000000..bcb8fd3
--- /dev/null
+++ b/test/ic3/integer_add.in
@@ -0,0 +1,800 @@
+quote -170141183460469231731687303715884105728 + -170141183460469231731687303715884105728
+-170141183460469231731687303715884105728 + -170141183460469231731687303715884105728
+quote -170141183460469231731687303715884105728 + -170141183460469231731687303715884105727
+-170141183460469231731687303715884105728 + -170141183460469231731687303715884105727
+quote -170141183460469231731687303715884105728 + -9223372036854775808
+-170141183460469231731687303715884105728 + -9223372036854775808
+quote -170141183460469231731687303715884105728 + -9223372036854775807
+-170141183460469231731687303715884105728 + -9223372036854775807
+quote -170141183460469231731687303715884105728 + -2147483648
+-170141183460469231731687303715884105728 + -2147483648
+quote -170141183460469231731687303715884105728 + -2147483647
+-170141183460469231731687303715884105728 + -2147483647
+quote -170141183460469231731687303715884105728 + -32768
+-170141183460469231731687303715884105728 + -32768
+quote -170141183460469231731687303715884105728 + -32767
+-170141183460469231731687303715884105728 + -32767
+quote -170141183460469231731687303715884105728 + -128
+-170141183460469231731687303715884105728 + -128
+quote -170141183460469231731687303715884105728 + -127
+-170141183460469231731687303715884105728 + -127
+quote -170141183460469231731687303715884105728 + 255
+-170141183460469231731687303715884105728 + 255
+quote -170141183460469231731687303715884105728 + 256
+-170141183460469231731687303715884105728 + 256
+quote -170141183460469231731687303715884105728 + 65535
+-170141183460469231731687303715884105728 + 65535
+quote -170141183460469231731687303715884105728 + 65536
+-170141183460469231731687303715884105728 + 65536
+quote -170141183460469231731687303715884105728 + 4294967295
+-170141183460469231731687303715884105728 + 4294967295
+quote -170141183460469231731687303715884105728 + 4294967296
+-170141183460469231731687303715884105728 + 4294967296
+quote -170141183460469231731687303715884105728 + 18446744073709551615
+-170141183460469231731687303715884105728 + 18446744073709551615
+quote -170141183460469231731687303715884105728 + 18446744073709551616
+-170141183460469231731687303715884105728 + 18446744073709551616
+quote -170141183460469231731687303715884105728 + 340282366920938463463374607431768211455
+-170141183460469231731687303715884105728 + 340282366920938463463374607431768211455
+quote -170141183460469231731687303715884105728 + 340282366920938463463374607431768211456
+-170141183460469231731687303715884105728 + 340282366920938463463374607431768211456
+quote -170141183460469231731687303715884105727 + -170141183460469231731687303715884105728
+-170141183460469231731687303715884105727 + -170141183460469231731687303715884105728
+quote -170141183460469231731687303715884105727 + -170141183460469231731687303715884105727
+-170141183460469231731687303715884105727 + -170141183460469231731687303715884105727
+quote -170141183460469231731687303715884105727 + -9223372036854775808
+-170141183460469231731687303715884105727 + -9223372036854775808
+quote -170141183460469231731687303715884105727 + -9223372036854775807
+-170141183460469231731687303715884105727 + -9223372036854775807
+quote -170141183460469231731687303715884105727 + -2147483648
+-170141183460469231731687303715884105727 + -2147483648
+quote -170141183460469231731687303715884105727 + -2147483647
+-170141183460469231731687303715884105727 + -2147483647
+quote -170141183460469231731687303715884105727 + -32768
+-170141183460469231731687303715884105727 + -32768
+quote -170141183460469231731687303715884105727 + -32767
+-170141183460469231731687303715884105727 + -32767
+quote -170141183460469231731687303715884105727 + -128
+-170141183460469231731687303715884105727 + -128
+quote -170141183460469231731687303715884105727 + -127
+-170141183460469231731687303715884105727 + -127
+quote -170141183460469231731687303715884105727 + 255
+-170141183460469231731687303715884105727 + 255
+quote -170141183460469231731687303715884105727 + 256
+-170141183460469231731687303715884105727 + 256
+quote -170141183460469231731687303715884105727 + 65535
+-170141183460469231731687303715884105727 + 65535
+quote -170141183460469231731687303715884105727 + 65536
+-170141183460469231731687303715884105727 + 65536
+quote -170141183460469231731687303715884105727 + 4294967295
+-170141183460469231731687303715884105727 + 4294967295
+quote -170141183460469231731687303715884105727 + 4294967296
+-170141183460469231731687303715884105727 + 4294967296
+quote -170141183460469231731687303715884105727 + 18446744073709551615
+-170141183460469231731687303715884105727 + 18446744073709551615
+quote -170141183460469231731687303715884105727 + 18446744073709551616
+-170141183460469231731687303715884105727 + 18446744073709551616
+quote -170141183460469231731687303715884105727 + 340282366920938463463374607431768211455
+-170141183460469231731687303715884105727 + 340282366920938463463374607431768211455
+quote -170141183460469231731687303715884105727 + 340282366920938463463374607431768211456
+-170141183460469231731687303715884105727 + 340282366920938463463374607431768211456
+quote -9223372036854775808 + -170141183460469231731687303715884105728
+-9223372036854775808 + -170141183460469231731687303715884105728
+quote -9223372036854775808 + -170141183460469231731687303715884105727
+-9223372036854775808 + -170141183460469231731687303715884105727
+quote -9223372036854775808 + -9223372036854775808
+-9223372036854775808 + -9223372036854775808
+quote -9223372036854775808 + -9223372036854775807
+-9223372036854775808 + -9223372036854775807
+quote -9223372036854775808 + -2147483648
+-9223372036854775808 + -2147483648
+quote -9223372036854775808 + -2147483647
+-9223372036854775808 + -2147483647
+quote -9223372036854775808 + -32768
+-9223372036854775808 + -32768
+quote -9223372036854775808 + -32767
+-9223372036854775808 + -32767
+quote -9223372036854775808 + -128
+-9223372036854775808 + -128
+quote -9223372036854775808 + -127
+-9223372036854775808 + -127
+quote -9223372036854775808 + 255
+-9223372036854775808 + 255
+quote -9223372036854775808 + 256
+-9223372036854775808 + 256
+quote -9223372036854775808 + 65535
+-9223372036854775808 + 65535
+quote -9223372036854775808 + 65536
+-9223372036854775808 + 65536
+quote -9223372036854775808 + 4294967295
+-9223372036854775808 + 4294967295
+quote -9223372036854775808 + 4294967296
+-9223372036854775808 + 4294967296
+quote -9223372036854775808 + 18446744073709551615
+-9223372036854775808 + 18446744073709551615
+quote -9223372036854775808 + 18446744073709551616
+-9223372036854775808 + 18446744073709551616
+quote -9223372036854775808 + 340282366920938463463374607431768211455
+-9223372036854775808 + 340282366920938463463374607431768211455
+quote -9223372036854775808 + 340282366920938463463374607431768211456
+-9223372036854775808 + 340282366920938463463374607431768211456
+quote -9223372036854775807 + -170141183460469231731687303715884105728
+-9223372036854775807 + -170141183460469231731687303715884105728
+quote -9223372036854775807 + -170141183460469231731687303715884105727
+-9223372036854775807 + -170141183460469231731687303715884105727
+quote -9223372036854775807 + -9223372036854775808
+-9223372036854775807 + -9223372036854775808
+quote -9223372036854775807 + -9223372036854775807
+-9223372036854775807 + -9223372036854775807
+quote -9223372036854775807 + -2147483648
+-9223372036854775807 + -2147483648
+quote -9223372036854775807 + -2147483647
+-9223372036854775807 + -2147483647
+quote -9223372036854775807 + -32768
+-9223372036854775807 + -32768
+quote -9223372036854775807 + -32767
+-9223372036854775807 + -32767
+quote -9223372036854775807 + -128
+-9223372036854775807 + -128
+quote -9223372036854775807 + -127
+-9223372036854775807 + -127
+quote -9223372036854775807 + 255
+-9223372036854775807 + 255
+quote -9223372036854775807 + 256
+-9223372036854775807 + 256
+quote -9223372036854775807 + 65535
+-9223372036854775807 + 65535
+quote -9223372036854775807 + 65536
+-9223372036854775807 + 65536
+quote -9223372036854775807 + 4294967295
+-9223372036854775807 + 4294967295
+quote -9223372036854775807 + 4294967296
+-9223372036854775807 + 4294967296
+quote -9223372036854775807 + 18446744073709551615
+-9223372036854775807 + 18446744073709551615
+quote -9223372036854775807 + 18446744073709551616
+-9223372036854775807 + 18446744073709551616
+quote -9223372036854775807 + 340282366920938463463374607431768211455
+-9223372036854775807 + 340282366920938463463374607431768211455
+quote -9223372036854775807 + 340282366920938463463374607431768211456
+-9223372036854775807 + 340282366920938463463374607431768211456
+quote -2147483648 + -170141183460469231731687303715884105728
+-2147483648 + -170141183460469231731687303715884105728
+quote -2147483648 + -170141183460469231731687303715884105727
+-2147483648 + -170141183460469231731687303715884105727
+quote -2147483648 + -9223372036854775808
+-2147483648 + -9223372036854775808
+quote -2147483648 + -9223372036854775807
+-2147483648 + -9223372036854775807
+quote -2147483648 + -2147483648
+-2147483648 + -2147483648
+quote -2147483648 + -2147483647
+-2147483648 + -2147483647
+quote -2147483648 + -32768
+-2147483648 + -32768
+quote -2147483648 + -32767
+-2147483648 + -32767
+quote -2147483648 + -128
+-2147483648 + -128
+quote -2147483648 + -127
+-2147483648 + -127
+quote -2147483648 + 255
+-2147483648 + 255
+quote -2147483648 + 256
+-2147483648 + 256
+quote -2147483648 + 65535
+-2147483648 + 65535
+quote -2147483648 + 65536
+-2147483648 + 65536
+quote -2147483648 + 4294967295
+-2147483648 + 4294967295
+quote -2147483648 + 4294967296
+-2147483648 + 4294967296
+quote -2147483648 + 18446744073709551615
+-2147483648 + 18446744073709551615
+quote -2147483648 + 18446744073709551616
+-2147483648 + 18446744073709551616
+quote -2147483648 + 340282366920938463463374607431768211455
+-2147483648 + 340282366920938463463374607431768211455
+quote -2147483648 + 340282366920938463463374607431768211456
+-2147483648 + 340282366920938463463374607431768211456
+quote -2147483647 + -170141183460469231731687303715884105728
+-2147483647 + -170141183460469231731687303715884105728
+quote -2147483647 + -170141183460469231731687303715884105727
+-2147483647 + -170141183460469231731687303715884105727
+quote -2147483647 + -9223372036854775808
+-2147483647 + -9223372036854775808
+quote -2147483647 + -9223372036854775807
+-2147483647 + -9223372036854775807
+quote -2147483647 + -2147483648
+-2147483647 + -2147483648
+quote -2147483647 + -2147483647
+-2147483647 + -2147483647
+quote -2147483647 + -32768
+-2147483647 + -32768
+quote -2147483647 + -32767
+-2147483647 + -32767
+quote -2147483647 + -128
+-2147483647 + -128
+quote -2147483647 + -127
+-2147483647 + -127
+quote -2147483647 + 255
+-2147483647 + 255
+quote -2147483647 + 256
+-2147483647 + 256
+quote -2147483647 + 65535
+-2147483647 + 65535
+quote -2147483647 + 65536
+-2147483647 + 65536
+quote -2147483647 + 4294967295
+-2147483647 + 4294967295
+quote -2147483647 + 4294967296
+-2147483647 + 4294967296
+quote -2147483647 + 18446744073709551615
+-2147483647 + 18446744073709551615
+quote -2147483647 + 18446744073709551616
+-2147483647 + 18446744073709551616
+quote -2147483647 + 340282366920938463463374607431768211455
+-2147483647 + 340282366920938463463374607431768211455
+quote -2147483647 + 340282366920938463463374607431768211456
+-2147483647 + 340282366920938463463374607431768211456
+quote -32768 + -170141183460469231731687303715884105728
+-32768 + -170141183460469231731687303715884105728
+quote -32768 + -170141183460469231731687303715884105727
+-32768 + -170141183460469231731687303715884105727
+quote -32768 + -9223372036854775808
+-32768 + -9223372036854775808
+quote -32768 + -9223372036854775807
+-32768 + -9223372036854775807
+quote -32768 + -2147483648
+-32768 + -2147483648
+quote -32768 + -2147483647
+-32768 + -2147483647
+quote -32768 + -32768
+-32768 + -32768
+quote -32768 + -32767
+-32768 + -32767
+quote -32768 + -128
+-32768 + -128
+quote -32768 + -127
+-32768 + -127
+quote -32768 + 255
+-32768 + 255
+quote -32768 + 256
+-32768 + 256
+quote -32768 + 65535
+-32768 + 65535
+quote -32768 + 65536
+-32768 + 65536
+quote -32768 + 4294967295
+-32768 + 4294967295
+quote -32768 + 4294967296
+-32768 + 4294967296
+quote -32768 + 18446744073709551615
+-32768 + 18446744073709551615
+quote -32768 + 18446744073709551616
+-32768 + 18446744073709551616
+quote -32768 + 340282366920938463463374607431768211455
+-32768 + 340282366920938463463374607431768211455
+quote -32768 + 340282366920938463463374607431768211456
+-32768 + 340282366920938463463374607431768211456
+quote -32767 + -170141183460469231731687303715884105728
+-32767 + -170141183460469231731687303715884105728
+quote -32767 + -170141183460469231731687303715884105727
+-32767 + -170141183460469231731687303715884105727
+quote -32767 + -9223372036854775808
+-32767 + -9223372036854775808
+quote -32767 + -9223372036854775807
+-32767 + -9223372036854775807
+quote -32767 + -2147483648
+-32767 + -2147483648
+quote -32767 + -2147483647
+-32767 + -2147483647
+quote -32767 + -32768
+-32767 + -32768
+quote -32767 + -32767
+-32767 + -32767
+quote -32767 + -128
+-32767 + -128
+quote -32767 + -127
+-32767 + -127
+quote -32767 + 255
+-32767 + 255
+quote -32767 + 256
+-32767 + 256
+quote -32767 + 65535
+-32767 + 65535
+quote -32767 + 65536
+-32767 + 65536
+quote -32767 + 4294967295
+-32767 + 4294967295
+quote -32767 + 4294967296
+-32767 + 4294967296
+quote -32767 + 18446744073709551615
+-32767 + 18446744073709551615
+quote -32767 + 18446744073709551616
+-32767 + 18446744073709551616
+quote -32767 + 340282366920938463463374607431768211455
+-32767 + 340282366920938463463374607431768211455
+quote -32767 + 340282366920938463463374607431768211456
+-32767 + 340282366920938463463374607431768211456
+quote -128 + -170141183460469231731687303715884105728
+-128 + -170141183460469231731687303715884105728
+quote -128 + -170141183460469231731687303715884105727
+-128 + -170141183460469231731687303715884105727
+quote -128 + -9223372036854775808
+-128 + -9223372036854775808
+quote -128 + -9223372036854775807
+-128 + -9223372036854775807
+quote -128 + -2147483648
+-128 + -2147483648
+quote -128 + -2147483647
+-128 + -2147483647
+quote -128 + -32768
+-128 + -32768
+quote -128 + -32767
+-128 + -32767
+quote -128 + -128
+-128 + -128
+quote -128 + -127
+-128 + -127
+quote -128 + 255
+-128 + 255
+quote -128 + 256
+-128 + 256
+quote -128 + 65535
+-128 + 65535
+quote -128 + 65536
+-128 + 65536
+quote -128 + 4294967295
+-128 + 4294967295
+quote -128 + 4294967296
+-128 + 4294967296
+quote -128 + 18446744073709551615
+-128 + 18446744073709551615
+quote -128 + 18446744073709551616
+-128 + 18446744073709551616
+quote -128 + 340282366920938463463374607431768211455
+-128 + 340282366920938463463374607431768211455
+quote -128 + 340282366920938463463374607431768211456
+-128 + 340282366920938463463374607431768211456
+quote -127 + -170141183460469231731687303715884105728
+-127 + -170141183460469231731687303715884105728
+quote -127 + -170141183460469231731687303715884105727
+-127 + -170141183460469231731687303715884105727
+quote -127 + -9223372036854775808
+-127 + -9223372036854775808
+quote -127 + -9223372036854775807
+-127 + -9223372036854775807
+quote -127 + -2147483648
+-127 + -2147483648
+quote -127 + -2147483647
+-127 + -2147483647
+quote -127 + -32768
+-127 + -32768
+quote -127 + -32767
+-127 + -32767
+quote -127 + -128
+-127 + -128
+quote -127 + -127
+-127 + -127
+quote -127 + 255
+-127 + 255
+quote -127 + 256
+-127 + 256
+quote -127 + 65535
+-127 + 65535
+quote -127 + 65536
+-127 + 65536
+quote -127 + 4294967295
+-127 + 4294967295
+quote -127 + 4294967296
+-127 + 4294967296
+quote -127 + 18446744073709551615
+-127 + 18446744073709551615
+quote -127 + 18446744073709551616
+-127 + 18446744073709551616
+quote -127 + 340282366920938463463374607431768211455
+-127 + 340282366920938463463374607431768211455
+quote -127 + 340282366920938463463374607431768211456
+-127 + 340282366920938463463374607431768211456
+quote 255 + -170141183460469231731687303715884105728
+255 + -170141183460469231731687303715884105728
+quote 255 + -170141183460469231731687303715884105727
+255 + -170141183460469231731687303715884105727
+quote 255 + -9223372036854775808
+255 + -9223372036854775808
+quote 255 + -9223372036854775807
+255 + -9223372036854775807
+quote 255 + -2147483648
+255 + -2147483648
+quote 255 + -2147483647
+255 + -2147483647
+quote 255 + -32768
+255 + -32768
+quote 255 + -32767
+255 + -32767
+quote 255 + -128
+255 + -128
+quote 255 + -127
+255 + -127
+quote 255 + 255
+255 + 255
+quote 255 + 256
+255 + 256
+quote 255 + 65535
+255 + 65535
+quote 255 + 65536
+255 + 65536
+quote 255 + 4294967295
+255 + 4294967295
+quote 255 + 4294967296
+255 + 4294967296
+quote 255 + 18446744073709551615
+255 + 18446744073709551615
+quote 255 + 18446744073709551616
+255 + 18446744073709551616
+quote 255 + 340282366920938463463374607431768211455
+255 + 340282366920938463463374607431768211455
+quote 255 + 340282366920938463463374607431768211456
+255 + 340282366920938463463374607431768211456
+quote 256 + -170141183460469231731687303715884105728
+256 + -170141183460469231731687303715884105728
+quote 256 + -170141183460469231731687303715884105727
+256 + -170141183460469231731687303715884105727
+quote 256 + -9223372036854775808
+256 + -9223372036854775808
+quote 256 + -9223372036854775807
+256 + -9223372036854775807
+quote 256 + -2147483648
+256 + -2147483648
+quote 256 + -2147483647
+256 + -2147483647
+quote 256 + -32768
+256 + -32768
+quote 256 + -32767
+256 + -32767
+quote 256 + -128
+256 + -128
+quote 256 + -127
+256 + -127
+quote 256 + 255
+256 + 255
+quote 256 + 256
+256 + 256
+quote 256 + 65535
+256 + 65535
+quote 256 + 65536
+256 + 65536
+quote 256 + 4294967295
+256 + 4294967295
+quote 256 + 4294967296
+256 + 4294967296
+quote 256 + 18446744073709551615
+256 + 18446744073709551615
+quote 256 + 18446744073709551616
+256 + 18446744073709551616
+quote 256 + 340282366920938463463374607431768211455
+256 + 340282366920938463463374607431768211455
+quote 256 + 340282366920938463463374607431768211456
+256 + 340282366920938463463374607431768211456
+quote 65535 + -170141183460469231731687303715884105728
+65535 + -170141183460469231731687303715884105728
+quote 65535 + -170141183460469231731687303715884105727
+65535 + -170141183460469231731687303715884105727
+quote 65535 + -9223372036854775808
+65535 + -9223372036854775808
+quote 65535 + -9223372036854775807
+65535 + -9223372036854775807
+quote 65535 + -2147483648
+65535 + -2147483648
+quote 65535 + -2147483647
+65535 + -2147483647
+quote 65535 + -32768
+65535 + -32768
+quote 65535 + -32767
+65535 + -32767
+quote 65535 + -128
+65535 + -128
+quote 65535 + -127
+65535 + -127
+quote 65535 + 255
+65535 + 255
+quote 65535 + 256
+65535 + 256
+quote 65535 + 65535
+65535 + 65535
+quote 65535 + 65536
+65535 + 65536
+quote 65535 + 4294967295
+65535 + 4294967295
+quote 65535 + 4294967296
+65535 + 4294967296
+quote 65535 + 18446744073709551615
+65535 + 18446744073709551615
+quote 65535 + 18446744073709551616
+65535 + 18446744073709551616
+quote 65535 + 340282366920938463463374607431768211455
+65535 + 340282366920938463463374607431768211455
+quote 65535 + 340282366920938463463374607431768211456
+65535 + 340282366920938463463374607431768211456
+quote 65536 + -170141183460469231731687303715884105728
+65536 + -170141183460469231731687303715884105728
+quote 65536 + -170141183460469231731687303715884105727
+65536 + -170141183460469231731687303715884105727
+quote 65536 + -9223372036854775808
+65536 + -9223372036854775808
+quote 65536 + -9223372036854775807
+65536 + -9223372036854775807
+quote 65536 + -2147483648
+65536 + -2147483648
+quote 65536 + -2147483647
+65536 + -2147483647
+quote 65536 + -32768
+65536 + -32768
+quote 65536 + -32767
+65536 + -32767
+quote 65536 + -128
+65536 + -128
+quote 65536 + -127
+65536 + -127
+quote 65536 + 255
+65536 + 255
+quote 65536 + 256
+65536 + 256
+quote 65536 + 65535
+65536 + 65535
+quote 65536 + 65536
+65536 + 65536
+quote 65536 + 4294967295
+65536 + 4294967295
+quote 65536 + 4294967296
+65536 + 4294967296
+quote 65536 + 18446744073709551615
+65536 + 18446744073709551615
+quote 65536 + 18446744073709551616
+65536 + 18446744073709551616
+quote 65536 + 340282366920938463463374607431768211455
+65536 + 340282366920938463463374607431768211455
+quote 65536 + 340282366920938463463374607431768211456
+65536 + 340282366920938463463374607431768211456
+quote 4294967295 + -170141183460469231731687303715884105728
+4294967295 + -170141183460469231731687303715884105728
+quote 4294967295 + -170141183460469231731687303715884105727
+4294967295 + -170141183460469231731687303715884105727
+quote 4294967295 + -9223372036854775808
+4294967295 + -9223372036854775808
+quote 4294967295 + -9223372036854775807
+4294967295 + -9223372036854775807
+quote 4294967295 + -2147483648
+4294967295 + -2147483648
+quote 4294967295 + -2147483647
+4294967295 + -2147483647
+quote 4294967295 + -32768
+4294967295 + -32768
+quote 4294967295 + -32767
+4294967295 + -32767
+quote 4294967295 + -128
+4294967295 + -128
+quote 4294967295 + -127
+4294967295 + -127
+quote 4294967295 + 255
+4294967295 + 255
+quote 4294967295 + 256
+4294967295 + 256
+quote 4294967295 + 65535
+4294967295 + 65535
+quote 4294967295 + 65536
+4294967295 + 65536
+quote 4294967295 + 4294967295
+4294967295 + 4294967295
+quote 4294967295 + 4294967296
+4294967295 + 4294967296
+quote 4294967295 + 18446744073709551615
+4294967295 + 18446744073709551615
+quote 4294967295 + 18446744073709551616
+4294967295 + 18446744073709551616
+quote 4294967295 + 340282366920938463463374607431768211455
+4294967295 + 340282366920938463463374607431768211455
+quote 4294967295 + 340282366920938463463374607431768211456
+4294967295 + 340282366920938463463374607431768211456
+quote 4294967296 + -170141183460469231731687303715884105728
+4294967296 + -170141183460469231731687303715884105728
+quote 4294967296 + -170141183460469231731687303715884105727
+4294967296 + -170141183460469231731687303715884105727
+quote 4294967296 + -9223372036854775808
+4294967296 + -9223372036854775808
+quote 4294967296 + -9223372036854775807
+4294967296 + -9223372036854775807
+quote 4294967296 + -2147483648
+4294967296 + -2147483648
+quote 4294967296 + -2147483647
+4294967296 + -2147483647
+quote 4294967296 + -32768
+4294967296 + -32768
+quote 4294967296 + -32767
+4294967296 + -32767
+quote 4294967296 + -128
+4294967296 + -128
+quote 4294967296 + -127
+4294967296 + -127
+quote 4294967296 + 255
+4294967296 + 255
+quote 4294967296 + 256
+4294967296 + 256
+quote 4294967296 + 65535
+4294967296 + 65535
+quote 4294967296 + 65536
+4294967296 + 65536
+quote 4294967296 + 4294967295
+4294967296 + 4294967295
+quote 4294967296 + 4294967296
+4294967296 + 4294967296
+quote 4294967296 + 18446744073709551615
+4294967296 + 18446744073709551615
+quote 4294967296 + 18446744073709551616
+4294967296 + 18446744073709551616
+quote 4294967296 + 340282366920938463463374607431768211455
+4294967296 + 340282366920938463463374607431768211455
+quote 4294967296 + 340282366920938463463374607431768211456
+4294967296 + 340282366920938463463374607431768211456
+quote 18446744073709551615 + -170141183460469231731687303715884105728
+18446744073709551615 + -170141183460469231731687303715884105728
+quote 18446744073709551615 + -170141183460469231731687303715884105727
+18446744073709551615 + -170141183460469231731687303715884105727
+quote 18446744073709551615 + -9223372036854775808
+18446744073709551615 + -9223372036854775808
+quote 18446744073709551615 + -9223372036854775807
+18446744073709551615 + -9223372036854775807
+quote 18446744073709551615 + -2147483648
+18446744073709551615 + -2147483648
+quote 18446744073709551615 + -2147483647
+18446744073709551615 + -2147483647
+quote 18446744073709551615 + -32768
+18446744073709551615 + -32768
+quote 18446744073709551615 + -32767
+18446744073709551615 + -32767
+quote 18446744073709551615 + -128
+18446744073709551615 + -128
+quote 18446744073709551615 + -127
+18446744073709551615 + -127
+quote 18446744073709551615 + 255
+18446744073709551615 + 255
+quote 18446744073709551615 + 256
+18446744073709551615 + 256
+quote 18446744073709551615 + 65535
+18446744073709551615 + 65535
+quote 18446744073709551615 + 65536
+18446744073709551615 + 65536
+quote 18446744073709551615 + 4294967295
+18446744073709551615 + 4294967295
+quote 18446744073709551615 + 4294967296
+18446744073709551615 + 4294967296
+quote 18446744073709551615 + 18446744073709551615
+18446744073709551615 + 18446744073709551615
+quote 18446744073709551615 + 18446744073709551616
+18446744073709551615 + 18446744073709551616
+quote 18446744073709551615 + 340282366920938463463374607431768211455
+18446744073709551615 + 340282366920938463463374607431768211455
+quote 18446744073709551615 + 340282366920938463463374607431768211456
+18446744073709551615 + 340282366920938463463374607431768211456
+quote 18446744073709551616 + -170141183460469231731687303715884105728
+18446744073709551616 + -170141183460469231731687303715884105728
+quote 18446744073709551616 + -170141183460469231731687303715884105727
+18446744073709551616 + -170141183460469231731687303715884105727
+quote 18446744073709551616 + -9223372036854775808
+18446744073709551616 + -9223372036854775808
+quote 18446744073709551616 + -9223372036854775807
+18446744073709551616 + -9223372036854775807
+quote 18446744073709551616 + -2147483648
+18446744073709551616 + -2147483648
+quote 18446744073709551616 + -2147483647
+18446744073709551616 + -2147483647
+quote 18446744073709551616 + -32768
+18446744073709551616 + -32768
+quote 18446744073709551616 + -32767
+18446744073709551616 + -32767
+quote 18446744073709551616 + -128
+18446744073709551616 + -128
+quote 18446744073709551616 + -127
+18446744073709551616 + -127
+quote 18446744073709551616 + 255
+18446744073709551616 + 255
+quote 18446744073709551616 + 256
+18446744073709551616 + 256
+quote 18446744073709551616 + 65535
+18446744073709551616 + 65535
+quote 18446744073709551616 + 65536
+18446744073709551616 + 65536
+quote 18446744073709551616 + 4294967295
+18446744073709551616 + 4294967295
+quote 18446744073709551616 + 4294967296
+18446744073709551616 + 4294967296
+quote 18446744073709551616 + 18446744073709551615
+18446744073709551616 + 18446744073709551615
+quote 18446744073709551616 + 18446744073709551616
+18446744073709551616 + 18446744073709551616
+quote 18446744073709551616 + 340282366920938463463374607431768211455
+18446744073709551616 + 340282366920938463463374607431768211455
+quote 18446744073709551616 + 340282366920938463463374607431768211456
+18446744073709551616 + 340282366920938463463374607431768211456
+quote 340282366920938463463374607431768211455 + -170141183460469231731687303715884105728
+340282366920938463463374607431768211455 + -170141183460469231731687303715884105728
+quote 340282366920938463463374607431768211455 + -170141183460469231731687303715884105727
+340282366920938463463374607431768211455 + -170141183460469231731687303715884105727
+quote 340282366920938463463374607431768211455 + -9223372036854775808
+340282366920938463463374607431768211455 + -9223372036854775808
+quote 340282366920938463463374607431768211455 + -9223372036854775807
+340282366920938463463374607431768211455 + -9223372036854775807
+quote 340282366920938463463374607431768211455 + -2147483648
+340282366920938463463374607431768211455 + -2147483648
+quote 340282366920938463463374607431768211455 + -2147483647
+340282366920938463463374607431768211455 + -2147483647
+quote 340282366920938463463374607431768211455 + -32768
+340282366920938463463374607431768211455 + -32768
+quote 340282366920938463463374607431768211455 + -32767
+340282366920938463463374607431768211455 + -32767
+quote 340282366920938463463374607431768211455 + -128
+340282366920938463463374607431768211455 + -128
+quote 340282366920938463463374607431768211455 + -127
+340282366920938463463374607431768211455 + -127
+quote 340282366920938463463374607431768211455 + 255
+340282366920938463463374607431768211455 + 255
+quote 340282366920938463463374607431768211455 + 256
+340282366920938463463374607431768211455 + 256
+quote 340282366920938463463374607431768211455 + 65535
+340282366920938463463374607431768211455 + 65535
+quote 340282366920938463463374607431768211455 + 65536
+340282366920938463463374607431768211455 + 65536
+quote 340282366920938463463374607431768211455 + 4294967295
+340282366920938463463374607431768211455 + 4294967295
+quote 340282366920938463463374607431768211455 + 4294967296
+340282366920938463463374607431768211455 + 4294967296
+quote 340282366920938463463374607431768211455 + 18446744073709551615
+340282366920938463463374607431768211455 + 18446744073709551615
+quote 340282366920938463463374607431768211455 + 18446744073709551616
+340282366920938463463374607431768211455 + 18446744073709551616
+quote 340282366920938463463374607431768211455 + 340282366920938463463374607431768211455
+340282366920938463463374607431768211455 + 340282366920938463463374607431768211455
+quote 340282366920938463463374607431768211455 + 340282366920938463463374607431768211456
+340282366920938463463374607431768211455 + 340282366920938463463374607431768211456
+quote 340282366920938463463374607431768211456 + -170141183460469231731687303715884105728
+340282366920938463463374607431768211456 + -170141183460469231731687303715884105728
+quote 340282366920938463463374607431768211456 + -170141183460469231731687303715884105727
+340282366920938463463374607431768211456 + -170141183460469231731687303715884105727
+quote 340282366920938463463374607431768211456 + -9223372036854775808
+340282366920938463463374607431768211456 + -9223372036854775808
+quote 340282366920938463463374607431768211456 + -9223372036854775807
+340282366920938463463374607431768211456 + -9223372036854775807
+quote 340282366920938463463374607431768211456 + -2147483648
+340282366920938463463374607431768211456 + -2147483648
+quote 340282366920938463463374607431768211456 + -2147483647
+340282366920938463463374607431768211456 + -2147483647
+quote 340282366920938463463374607431768211456 + -32768
+340282366920938463463374607431768211456 + -32768
+quote 340282366920938463463374607431768211456 + -32767
+340282366920938463463374607431768211456 + -32767
+quote 340282366920938463463374607431768211456 + -128
+340282366920938463463374607431768211456 + -128
+quote 340282366920938463463374607431768211456 + -127
+340282366920938463463374607431768211456 + -127
+quote 340282366920938463463374607431768211456 + 255
+340282366920938463463374607431768211456 + 255
+quote 340282366920938463463374607431768211456 + 256
+340282366920938463463374607431768211456 + 256
+quote 340282366920938463463374607431768211456 + 65535
+340282366920938463463374607431768211456 + 65535
+quote 340282366920938463463374607431768211456 + 65536
+340282366920938463463374607431768211456 + 65536
+quote 340282366920938463463374607431768211456 + 4294967295
+340282366920938463463374607431768211456 + 4294967295
+quote 340282366920938463463374607431768211456 + 4294967296
+340282366920938463463374607431768211456 + 4294967296
+quote 340282366920938463463374607431768211456 + 18446744073709551615
+340282366920938463463374607431768211456 + 18446744073709551615
+quote 340282366920938463463374607431768211456 + 18446744073709551616
+340282366920938463463374607431768211456 + 18446744073709551616
+quote 340282366920938463463374607431768211456 + 340282366920938463463374607431768211455
+340282366920938463463374607431768211456 + 340282366920938463463374607431768211455
+quote 340282366920938463463374607431768211456 + 340282366920938463463374607431768211456
+340282366920938463463374607431768211456 + 340282366920938463463374607431768211456
diff --git a/test/ic3/integer_add.out.expected b/test/ic3/integer_add.out.expected
new file mode 100644
index 0000000..3db7f46
--- /dev/null
+++ b/test/ic3/integer_add.out.expected
@@ -0,0 +1,800 @@
+-170141183460469231731687303715884105728 + -170141183460469231731687303715884105728
+-340282366920938463463374607431768211456
+-170141183460469231731687303715884105728 + -170141183460469231731687303715884105727
+-340282366920938463463374607431768211455
+-170141183460469231731687303715884105728 + -9223372036854775808
+-170141183460469231740910675752738881536
+-170141183460469231731687303715884105728 + -9223372036854775807
+-170141183460469231740910675752738881535
+-170141183460469231731687303715884105728 + -2147483648
+-170141183460469231731687303718031589376
+-170141183460469231731687303715884105728 + -2147483647
+-170141183460469231731687303718031589375
+-170141183460469231731687303715884105728 + -32768
+-170141183460469231731687303715884138496
+-170141183460469231731687303715884105728 + -32767
+-170141183460469231731687303715884138495
+-170141183460469231731687303715884105728 + -128
+-170141183460469231731687303715884105856
+-170141183460469231731687303715884105728 + -127
+-170141183460469231731687303715884105855
+-170141183460469231731687303715884105728 + 255
+-170141183460469231731687303715884105473
+-170141183460469231731687303715884105728 + 256
+-170141183460469231731687303715884105472
+-170141183460469231731687303715884105728 + 65535
+-170141183460469231731687303715884040193
+-170141183460469231731687303715884105728 + 65536
+-170141183460469231731687303715884040192
+-170141183460469231731687303715884105728 + 4294967295
+-170141183460469231731687303711589138433
+-170141183460469231731687303715884105728 + 4294967296
+-170141183460469231731687303711589138432
+-170141183460469231731687303715884105728 + 18446744073709551615
+-170141183460469231713240559642174554113
+-170141183460469231731687303715884105728 + 18446744073709551616
+-170141183460469231713240559642174554112
+-170141183460469231731687303715884105728 + 340282366920938463463374607431768211455
+170141183460469231731687303715884105727
+-170141183460469231731687303715884105728 + 340282366920938463463374607431768211456
+170141183460469231731687303715884105728
+-170141183460469231731687303715884105727 + -170141183460469231731687303715884105728
+-340282366920938463463374607431768211455
+-170141183460469231731687303715884105727 + -170141183460469231731687303715884105727
+-340282366920938463463374607431768211454
+-170141183460469231731687303715884105727 + -9223372036854775808
+-170141183460469231740910675752738881535
+-170141183460469231731687303715884105727 + -9223372036854775807
+-170141183460469231740910675752738881534
+-170141183460469231731687303715884105727 + -2147483648
+-170141183460469231731687303718031589375
+-170141183460469231731687303715884105727 + -2147483647
+-170141183460469231731687303718031589374
+-170141183460469231731687303715884105727 + -32768
+-170141183460469231731687303715884138495
+-170141183460469231731687303715884105727 + -32767
+-170141183460469231731687303715884138494
+-170141183460469231731687303715884105727 + -128
+-170141183460469231731687303715884105855
+-170141183460469231731687303715884105727 + -127
+-170141183460469231731687303715884105854
+-170141183460469231731687303715884105727 + 255
+-170141183460469231731687303715884105472
+-170141183460469231731687303715884105727 + 256
+-170141183460469231731687303715884105471
+-170141183460469231731687303715884105727 + 65535
+-170141183460469231731687303715884040192
+-170141183460469231731687303715884105727 + 65536
+-170141183460469231731687303715884040191
+-170141183460469231731687303715884105727 + 4294967295
+-170141183460469231731687303711589138432
+-170141183460469231731687303715884105727 + 4294967296
+-170141183460469231731687303711589138431
+-170141183460469231731687303715884105727 + 18446744073709551615
+-170141183460469231713240559642174554112
+-170141183460469231731687303715884105727 + 18446744073709551616
+-170141183460469231713240559642174554111
+-170141183460469231731687303715884105727 + 340282366920938463463374607431768211455
+170141183460469231731687303715884105728
+-170141183460469231731687303715884105727 + 340282366920938463463374607431768211456
+170141183460469231731687303715884105729
+-9223372036854775808 + -170141183460469231731687303715884105728
+-170141183460469231740910675752738881536
+-9223372036854775808 + -170141183460469231731687303715884105727
+-170141183460469231740910675752738881535
+-9223372036854775808 + -9223372036854775808
+-18446744073709551616
+-9223372036854775808 + -9223372036854775807
+-18446744073709551615
+-9223372036854775808 + -2147483648
+-9223372039002259456
+-9223372036854775808 + -2147483647
+-9223372039002259455
+-9223372036854775808 + -32768
+-9223372036854808576
+-9223372036854775808 + -32767
+-9223372036854808575
+-9223372036854775808 + -128
+-9223372036854775936
+-9223372036854775808 + -127
+-9223372036854775935
+-9223372036854775808 + 255
+-9223372036854775553
+-9223372036854775808 + 256
+-9223372036854775552
+-9223372036854775808 + 65535
+-9223372036854710273
+-9223372036854775808 + 65536
+-9223372036854710272
+-9223372036854775808 + 4294967295
+-9223372032559808513
+-9223372036854775808 + 4294967296
+-9223372032559808512
+-9223372036854775808 + 18446744073709551615
+9223372036854775807
+-9223372036854775808 + 18446744073709551616
+9223372036854775808
+-9223372036854775808 + 340282366920938463463374607431768211455
+340282366920938463454151235394913435647
+-9223372036854775808 + 340282366920938463463374607431768211456
+340282366920938463454151235394913435648
+-9223372036854775807 + -170141183460469231731687303715884105728
+-170141183460469231740910675752738881535
+-9223372036854775807 + -170141183460469231731687303715884105727
+-170141183460469231740910675752738881534
+-9223372036854775807 + -9223372036854775808
+-18446744073709551615
+-9223372036854775807 + -9223372036854775807
+-18446744073709551614
+-9223372036854775807 + -2147483648
+-9223372039002259455
+-9223372036854775807 + -2147483647
+-9223372039002259454
+-9223372036854775807 + -32768
+-9223372036854808575
+-9223372036854775807 + -32767
+-9223372036854808574
+-9223372036854775807 + -128
+-9223372036854775935
+-9223372036854775807 + -127
+-9223372036854775934
+-9223372036854775807 + 255
+-9223372036854775552
+-9223372036854775807 + 256
+-9223372036854775551
+-9223372036854775807 + 65535
+-9223372036854710272
+-9223372036854775807 + 65536
+-9223372036854710271
+-9223372036854775807 + 4294967295
+-9223372032559808512
+-9223372036854775807 + 4294967296
+-9223372032559808511
+-9223372036854775807 + 18446744073709551615
+9223372036854775808
+-9223372036854775807 + 18446744073709551616
+9223372036854775809
+-9223372036854775807 + 340282366920938463463374607431768211455
+340282366920938463454151235394913435648
+-9223372036854775807 + 340282366920938463463374607431768211456
+340282366920938463454151235394913435649
+-2147483648 + -170141183460469231731687303715884105728
+-170141183460469231731687303718031589376
+-2147483648 + -170141183460469231731687303715884105727
+-170141183460469231731687303718031589375
+-2147483648 + -9223372036854775808
+-9223372039002259456
+-2147483648 + -9223372036854775807
+-9223372039002259455
+-2147483648 + -2147483648
+-4294967296
+-2147483648 + -2147483647
+-4294967295
+-2147483648 + -32768
+-2147516416
+-2147483648 + -32767
+-2147516415
+-2147483648 + -128
+-2147483776
+-2147483648 + -127
+-2147483775
+-2147483648 + 255
+-2147483393
+-2147483648 + 256
+-2147483392
+-2147483648 + 65535
+-2147418113
+-2147483648 + 65536
+-2147418112
+-2147483648 + 4294967295
+2147483647
+-2147483648 + 4294967296
+2147483648
+-2147483648 + 18446744073709551615
+18446744071562067967
+-2147483648 + 18446744073709551616
+18446744071562067968
+-2147483648 + 340282366920938463463374607431768211455
+340282366920938463463374607429620727807
+-2147483648 + 340282366920938463463374607431768211456
+340282366920938463463374607429620727808
+-2147483647 + -170141183460469231731687303715884105728
+-170141183460469231731687303718031589375
+-2147483647 + -170141183460469231731687303715884105727
+-170141183460469231731687303718031589374
+-2147483647 + -9223372036854775808
+-9223372039002259455
+-2147483647 + -9223372036854775807
+-9223372039002259454
+-2147483647 + -2147483648
+-4294967295
+-2147483647 + -2147483647
+-4294967294
+-2147483647 + -32768
+-2147516415
+-2147483647 + -32767
+-2147516414
+-2147483647 + -128
+-2147483775
+-2147483647 + -127
+-2147483774
+-2147483647 + 255
+-2147483392
+-2147483647 + 256
+-2147483391
+-2147483647 + 65535
+-2147418112
+-2147483647 + 65536
+-2147418111
+-2147483647 + 4294967295
+2147483648
+-2147483647 + 4294967296
+2147483649
+-2147483647 + 18446744073709551615
+18446744071562067968
+-2147483647 + 18446744073709551616
+18446744071562067969
+-2147483647 + 340282366920938463463374607431768211455
+340282366920938463463374607429620727808
+-2147483647 + 340282366920938463463374607431768211456
+340282366920938463463374607429620727809
+-32768 + -170141183460469231731687303715884105728
+-170141183460469231731687303715884138496
+-32768 + -170141183460469231731687303715884105727
+-170141183460469231731687303715884138495
+-32768 + -9223372036854775808
+-9223372036854808576
+-32768 + -9223372036854775807
+-9223372036854808575
+-32768 + -2147483648
+-2147516416
+-32768 + -2147483647
+-2147516415
+-32768 + -32768
+-65536
+-32768 + -32767
+-65535
+-32768 + -128
+-32896
+-32768 + -127
+-32895
+-32768 + 255
+-32513
+-32768 + 256
+-32512
+-32768 + 65535
+32767
+-32768 + 65536
+32768
+-32768 + 4294967295
+4294934527
+-32768 + 4294967296
+4294934528
+-32768 + 18446744073709551615
+18446744073709518847
+-32768 + 18446744073709551616
+18446744073709518848
+-32768 + 340282366920938463463374607431768211455
+340282366920938463463374607431768178687
+-32768 + 340282366920938463463374607431768211456
+340282366920938463463374607431768178688
+-32767 + -170141183460469231731687303715884105728
+-170141183460469231731687303715884138495
+-32767 + -170141183460469231731687303715884105727
+-170141183460469231731687303715884138494
+-32767 + -9223372036854775808
+-9223372036854808575
+-32767 + -9223372036854775807
+-9223372036854808574
+-32767 + -2147483648
+-2147516415
+-32767 + -2147483647
+-2147516414
+-32767 + -32768
+-65535
+-32767 + -32767
+-65534
+-32767 + -128
+-32895
+-32767 + -127
+-32894
+-32767 + 255
+-32512
+-32767 + 256
+-32511
+-32767 + 65535
+32768
+-32767 + 65536
+32769
+-32767 + 4294967295
+4294934528
+-32767 + 4294967296
+4294934529
+-32767 + 18446744073709551615
+18446744073709518848
+-32767 + 18446744073709551616
+18446744073709518849
+-32767 + 340282366920938463463374607431768211455
+340282366920938463463374607431768178688
+-32767 + 340282366920938463463374607431768211456
+340282366920938463463374607431768178689
+-128 + -170141183460469231731687303715884105728
+-170141183460469231731687303715884105856
+-128 + -170141183460469231731687303715884105727
+-170141183460469231731687303715884105855
+-128 + -9223372036854775808
+-9223372036854775936
+-128 + -9223372036854775807
+-9223372036854775935
+-128 + -2147483648
+-2147483776
+-128 + -2147483647
+-2147483775
+-128 + -32768
+-32896
+-128 + -32767
+-32895
+-128 + -128
+-256
+-128 + -127
+-255
+-128 + 255
+127
+-128 + 256
+128
+-128 + 65535
+65407
+-128 + 65536
+65408
+-128 + 4294967295
+4294967167
+-128 + 4294967296
+4294967168
+-128 + 18446744073709551615
+18446744073709551487
+-128 + 18446744073709551616
+18446744073709551488
+-128 + 340282366920938463463374607431768211455
+340282366920938463463374607431768211327
+-128 + 340282366920938463463374607431768211456
+340282366920938463463374607431768211328
+-127 + -170141183460469231731687303715884105728
+-170141183460469231731687303715884105855
+-127 + -170141183460469231731687303715884105727
+-170141183460469231731687303715884105854
+-127 + -9223372036854775808
+-9223372036854775935
+-127 + -9223372036854775807
+-9223372036854775934
+-127 + -2147483648
+-2147483775
+-127 + -2147483647
+-2147483774
+-127 + -32768
+-32895
+-127 + -32767
+-32894
+-127 + -128
+-255
+-127 + -127
+-254
+-127 + 255
+128
+-127 + 256
+129
+-127 + 65535
+65408
+-127 + 65536
+65409
+-127 + 4294967295
+4294967168
+-127 + 4294967296
+4294967169
+-127 + 18446744073709551615
+18446744073709551488
+-127 + 18446744073709551616
+18446744073709551489
+-127 + 340282366920938463463374607431768211455
+340282366920938463463374607431768211328
+-127 + 340282366920938463463374607431768211456
+340282366920938463463374607431768211329
+255 + -170141183460469231731687303715884105728
+-170141183460469231731687303715884105473
+255 + -170141183460469231731687303715884105727
+-170141183460469231731687303715884105472
+255 + -9223372036854775808
+-9223372036854775553
+255 + -9223372036854775807
+-9223372036854775552
+255 + -2147483648
+-2147483393
+255 + -2147483647
+-2147483392
+255 + -32768
+-32513
+255 + -32767
+-32512
+255 + -128
+127
+255 + -127
+128
+255 + 255
+510
+255 + 256
+511
+255 + 65535
+65790
+255 + 65536
+65791
+255 + 4294967295
+4294967550
+255 + 4294967296
+4294967551
+255 + 18446744073709551615
+18446744073709551870
+255 + 18446744073709551616
+18446744073709551871
+255 + 340282366920938463463374607431768211455
+340282366920938463463374607431768211710
+255 + 340282366920938463463374607431768211456
+340282366920938463463374607431768211711
+256 + -170141183460469231731687303715884105728
+-170141183460469231731687303715884105472
+256 + -170141183460469231731687303715884105727
+-170141183460469231731687303715884105471
+256 + -9223372036854775808
+-9223372036854775552
+256 + -9223372036854775807
+-9223372036854775551
+256 + -2147483648
+-2147483392
+256 + -2147483647
+-2147483391
+256 + -32768
+-32512
+256 + -32767
+-32511
+256 + -128
+128
+256 + -127
+129
+256 + 255
+511
+256 + 256
+512
+256 + 65535
+65791
+256 + 65536
+65792
+256 + 4294967295
+4294967551
+256 + 4294967296
+4294967552
+256 + 18446744073709551615
+18446744073709551871
+256 + 18446744073709551616
+18446744073709551872
+256 + 340282366920938463463374607431768211455
+340282366920938463463374607431768211711
+256 + 340282366920938463463374607431768211456
+340282366920938463463374607431768211712
+65535 + -170141183460469231731687303715884105728
+-170141183460469231731687303715884040193
+65535 + -170141183460469231731687303715884105727
+-170141183460469231731687303715884040192
+65535 + -9223372036854775808
+-9223372036854710273
+65535 + -9223372036854775807
+-9223372036854710272
+65535 + -2147483648
+-2147418113
+65535 + -2147483647
+-2147418112
+65535 + -32768
+32767
+65535 + -32767
+32768
+65535 + -128
+65407
+65535 + -127
+65408
+65535 + 255
+65790
+65535 + 256
+65791
+65535 + 65535
+131070
+65535 + 65536
+131071
+65535 + 4294967295
+4295032830
+65535 + 4294967296
+4295032831
+65535 + 18446744073709551615
+18446744073709617150
+65535 + 18446744073709551616
+18446744073709617151
+65535 + 340282366920938463463374607431768211455
+340282366920938463463374607431768276990
+65535 + 340282366920938463463374607431768211456
+340282366920938463463374607431768276991
+65536 + -170141183460469231731687303715884105728
+-170141183460469231731687303715884040192
+65536 + -170141183460469231731687303715884105727
+-170141183460469231731687303715884040191
+65536 + -9223372036854775808
+-9223372036854710272
+65536 + -9223372036854775807
+-9223372036854710271
+65536 + -2147483648
+-2147418112
+65536 + -2147483647
+-2147418111
+65536 + -32768
+32768
+65536 + -32767
+32769
+65536 + -128
+65408
+65536 + -127
+65409
+65536 + 255
+65791
+65536 + 256
+65792
+65536 + 65535
+131071
+65536 + 65536
+131072
+65536 + 4294967295
+4295032831
+65536 + 4294967296
+4295032832
+65536 + 18446744073709551615
+18446744073709617151
+65536 + 18446744073709551616
+18446744073709617152
+65536 + 340282366920938463463374607431768211455
+340282366920938463463374607431768276991
+65536 + 340282366920938463463374607431768211456
+340282366920938463463374607431768276992
+4294967295 + -170141183460469231731687303715884105728
+-170141183460469231731687303711589138433
+4294967295 + -170141183460469231731687303715884105727
+-170141183460469231731687303711589138432
+4294967295 + -9223372036854775808
+-9223372032559808513
+4294967295 + -9223372036854775807
+-9223372032559808512
+4294967295 + -2147483648
+2147483647
+4294967295 + -2147483647
+2147483648
+4294967295 + -32768
+4294934527
+4294967295 + -32767
+4294934528
+4294967295 + -128
+4294967167
+4294967295 + -127
+4294967168
+4294967295 + 255
+4294967550
+4294967295 + 256
+4294967551
+4294967295 + 65535
+4295032830
+4294967295 + 65536
+4295032831
+4294967295 + 4294967295
+8589934590
+4294967295 + 4294967296
+8589934591
+4294967295 + 18446744073709551615
+18446744078004518910
+4294967295 + 18446744073709551616
+18446744078004518911
+4294967295 + 340282366920938463463374607431768211455
+340282366920938463463374607436063178750
+4294967295 + 340282366920938463463374607431768211456
+340282366920938463463374607436063178751
+4294967296 + -170141183460469231731687303715884105728
+-170141183460469231731687303711589138432
+4294967296 + -170141183460469231731687303715884105727
+-170141183460469231731687303711589138431
+4294967296 + -9223372036854775808
+-9223372032559808512
+4294967296 + -9223372036854775807
+-9223372032559808511
+4294967296 + -2147483648
+2147483648
+4294967296 + -2147483647
+2147483649
+4294967296 + -32768
+4294934528
+4294967296 + -32767
+4294934529
+4294967296 + -128
+4294967168
+4294967296 + -127
+4294967169
+4294967296 + 255
+4294967551
+4294967296 + 256
+4294967552
+4294967296 + 65535
+4295032831
+4294967296 + 65536
+4295032832
+4294967296 + 4294967295
+8589934591
+4294967296 + 4294967296
+8589934592
+4294967296 + 18446744073709551615
+18446744078004518911
+4294967296 + 18446744073709551616
+18446744078004518912
+4294967296 + 340282366920938463463374607431768211455
+340282366920938463463374607436063178751
+4294967296 + 340282366920938463463374607431768211456
+340282366920938463463374607436063178752
+18446744073709551615 + -170141183460469231731687303715884105728
+-170141183460469231713240559642174554113
+18446744073709551615 + -170141183460469231731687303715884105727
+-170141183460469231713240559642174554112
+18446744073709551615 + -9223372036854775808
+9223372036854775807
+18446744073709551615 + -9223372036854775807
+9223372036854775808
+18446744073709551615 + -2147483648
+18446744071562067967
+18446744073709551615 + -2147483647
+18446744071562067968
+18446744073709551615 + -32768
+18446744073709518847
+18446744073709551615 + -32767
+18446744073709518848
+18446744073709551615 + -128
+18446744073709551487
+18446744073709551615 + -127
+18446744073709551488
+18446744073709551615 + 255
+18446744073709551870
+18446744073709551615 + 256
+18446744073709551871
+18446744073709551615 + 65535
+18446744073709617150
+18446744073709551615 + 65536
+18446744073709617151
+18446744073709551615 + 4294967295
+18446744078004518910
+18446744073709551615 + 4294967296
+18446744078004518911
+18446744073709551615 + 18446744073709551615
+36893488147419103230
+18446744073709551615 + 18446744073709551616
+36893488147419103231
+18446744073709551615 + 340282366920938463463374607431768211455
+340282366920938463481821351505477763070
+18446744073709551615 + 340282366920938463463374607431768211456
+340282366920938463481821351505477763071
+18446744073709551616 + -170141183460469231731687303715884105728
+-170141183460469231713240559642174554112
+18446744073709551616 + -170141183460469231731687303715884105727
+-170141183460469231713240559642174554111
+18446744073709551616 + -9223372036854775808
+9223372036854775808
+18446744073709551616 + -9223372036854775807
+9223372036854775809
+18446744073709551616 + -2147483648
+18446744071562067968
+18446744073709551616 + -2147483647
+18446744071562067969
+18446744073709551616 + -32768
+18446744073709518848
+18446744073709551616 + -32767
+18446744073709518849
+18446744073709551616 + -128
+18446744073709551488
+18446744073709551616 + -127
+18446744073709551489
+18446744073709551616 + 255
+18446744073709551871
+18446744073709551616 + 256
+18446744073709551872
+18446744073709551616 + 65535
+18446744073709617151
+18446744073709551616 + 65536
+18446744073709617152
+18446744073709551616 + 4294967295
+18446744078004518911
+18446744073709551616 + 4294967296
+18446744078004518912
+18446744073709551616 + 18446744073709551615
+36893488147419103231
+18446744073709551616 + 18446744073709551616
+36893488147419103232
+18446744073709551616 + 340282366920938463463374607431768211455
+340282366920938463481821351505477763071
+18446744073709551616 + 340282366920938463463374607431768211456
+340282366920938463481821351505477763072
+340282366920938463463374607431768211455 + -170141183460469231731687303715884105728
+170141183460469231731687303715884105727
+340282366920938463463374607431768211455 + -170141183460469231731687303715884105727
+170141183460469231731687303715884105728
+340282366920938463463374607431768211455 + -9223372036854775808
+340282366920938463454151235394913435647
+340282366920938463463374607431768211455 + -9223372036854775807
+340282366920938463454151235394913435648
+340282366920938463463374607431768211455 + -2147483648
+340282366920938463463374607429620727807
+340282366920938463463374607431768211455 + -2147483647
+340282366920938463463374607429620727808
+340282366920938463463374607431768211455 + -32768
+340282366920938463463374607431768178687
+340282366920938463463374607431768211455 + -32767
+340282366920938463463374607431768178688
+340282366920938463463374607431768211455 + -128
+340282366920938463463374607431768211327
+340282366920938463463374607431768211455 + -127
+340282366920938463463374607431768211328
+340282366920938463463374607431768211455 + 255
+340282366920938463463374607431768211710
+340282366920938463463374607431768211455 + 256
+340282366920938463463374607431768211711
+340282366920938463463374607431768211455 + 65535
+340282366920938463463374607431768276990
+340282366920938463463374607431768211455 + 65536
+340282366920938463463374607431768276991
+340282366920938463463374607431768211455 + 4294967295
+340282366920938463463374607436063178750
+340282366920938463463374607431768211455 + 4294967296
+340282366920938463463374607436063178751
+340282366920938463463374607431768211455 + 18446744073709551615
+340282366920938463481821351505477763070
+340282366920938463463374607431768211455 + 18446744073709551616
+340282366920938463481821351505477763071
+340282366920938463463374607431768211455 + 340282366920938463463374607431768211455
+680564733841876926926749214863536422910
+340282366920938463463374607431768211455 + 340282366920938463463374607431768211456
+680564733841876926926749214863536422911
+340282366920938463463374607431768211456 + -170141183460469231731687303715884105728
+170141183460469231731687303715884105728
+340282366920938463463374607431768211456 + -170141183460469231731687303715884105727
+170141183460469231731687303715884105729
+340282366920938463463374607431768211456 + -9223372036854775808
+340282366920938463454151235394913435648
+340282366920938463463374607431768211456 + -9223372036854775807
+340282366920938463454151235394913435649
+340282366920938463463374607431768211456 + -2147483648
+340282366920938463463374607429620727808
+340282366920938463463374607431768211456 + -2147483647
+340282366920938463463374607429620727809
+340282366920938463463374607431768211456 + -32768
+340282366920938463463374607431768178688
+340282366920938463463374607431768211456 + -32767
+340282366920938463463374607431768178689
+340282366920938463463374607431768211456 + -128
+340282366920938463463374607431768211328
+340282366920938463463374607431768211456 + -127
+340282366920938463463374607431768211329
+340282366920938463463374607431768211456 + 255
+340282366920938463463374607431768211711
+340282366920938463463374607431768211456 + 256
+340282366920938463463374607431768211712
+340282366920938463463374607431768211456 + 65535
+340282366920938463463374607431768276991
+340282366920938463463374607431768211456 + 65536
+340282366920938463463374607431768276992
+340282366920938463463374607431768211456 + 4294967295
+340282366920938463463374607436063178751
+340282366920938463463374607431768211456 + 4294967296
+340282366920938463463374607436063178752
+340282366920938463463374607431768211456 + 18446744073709551615
+340282366920938463481821351505477763071
+340282366920938463463374607431768211456 + 18446744073709551616
+340282366920938463481821351505477763072
+340282366920938463463374607431768211456 + 340282366920938463463374607431768211455
+680564733841876926926749214863536422911
+340282366920938463463374607431768211456 + 340282366920938463463374607431768211456
+680564733841876926926749214863536422912
diff --git a/test/ic3/integer_add.ret.expected b/test/ic3/integer_add.ret.expected
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/test/ic3/integer_add.ret.expected
@@ -0,0 +1 @@
+0
diff --git a/test/ic3/integer_band.in b/test/ic3/integer_band.in
new file mode 100644
index 0000000..8f04373
--- /dev/null
+++ b/test/ic3/integer_band.in
@@ -0,0 +1,800 @@
+quote -170141183460469231731687303715884105728 & -170141183460469231731687303715884105728
+-170141183460469231731687303715884105728 & -170141183460469231731687303715884105728
+quote -170141183460469231731687303715884105728 & -170141183460469231731687303715884105727
+-170141183460469231731687303715884105728 & -170141183460469231731687303715884105727
+quote -170141183460469231731687303715884105728 & -9223372036854775808
+-170141183460469231731687303715884105728 & -9223372036854775808
+quote -170141183460469231731687303715884105728 & -9223372036854775807
+-170141183460469231731687303715884105728 & -9223372036854775807
+quote -170141183460469231731687303715884105728 & -2147483648
+-170141183460469231731687303715884105728 & -2147483648
+quote -170141183460469231731687303715884105728 & -2147483647
+-170141183460469231731687303715884105728 & -2147483647
+quote -170141183460469231731687303715884105728 & -32768
+-170141183460469231731687303715884105728 & -32768
+quote -170141183460469231731687303715884105728 & -32767
+-170141183460469231731687303715884105728 & -32767
+quote -170141183460469231731687303715884105728 & -128
+-170141183460469231731687303715884105728 & -128
+quote -170141183460469231731687303715884105728 & -127
+-170141183460469231731687303715884105728 & -127
+quote -170141183460469231731687303715884105728 & 255
+-170141183460469231731687303715884105728 & 255
+quote -170141183460469231731687303715884105728 & 256
+-170141183460469231731687303715884105728 & 256
+quote -170141183460469231731687303715884105728 & 65535
+-170141183460469231731687303715884105728 & 65535
+quote -170141183460469231731687303715884105728 & 65536
+-170141183460469231731687303715884105728 & 65536
+quote -170141183460469231731687303715884105728 & 4294967295
+-170141183460469231731687303715884105728 & 4294967295
+quote -170141183460469231731687303715884105728 & 4294967296
+-170141183460469231731687303715884105728 & 4294967296
+quote -170141183460469231731687303715884105728 & 18446744073709551615
+-170141183460469231731687303715884105728 & 18446744073709551615
+quote -170141183460469231731687303715884105728 & 18446744073709551616
+-170141183460469231731687303715884105728 & 18446744073709551616
+quote -170141183460469231731687303715884105728 & 340282366920938463463374607431768211455
+-170141183460469231731687303715884105728 & 340282366920938463463374607431768211455
+quote -170141183460469231731687303715884105728 & 340282366920938463463374607431768211456
+-170141183460469231731687303715884105728 & 340282366920938463463374607431768211456
+quote -170141183460469231731687303715884105727 & -170141183460469231731687303715884105728
+-170141183460469231731687303715884105727 & -170141183460469231731687303715884105728
+quote -170141183460469231731687303715884105727 & -170141183460469231731687303715884105727
+-170141183460469231731687303715884105727 & -170141183460469231731687303715884105727
+quote -170141183460469231731687303715884105727 & -9223372036854775808
+-170141183460469231731687303715884105727 & -9223372036854775808
+quote -170141183460469231731687303715884105727 & -9223372036854775807
+-170141183460469231731687303715884105727 & -9223372036854775807
+quote -170141183460469231731687303715884105727 & -2147483648
+-170141183460469231731687303715884105727 & -2147483648
+quote -170141183460469231731687303715884105727 & -2147483647
+-170141183460469231731687303715884105727 & -2147483647
+quote -170141183460469231731687303715884105727 & -32768
+-170141183460469231731687303715884105727 & -32768
+quote -170141183460469231731687303715884105727 & -32767
+-170141183460469231731687303715884105727 & -32767
+quote -170141183460469231731687303715884105727 & -128
+-170141183460469231731687303715884105727 & -128
+quote -170141183460469231731687303715884105727 & -127
+-170141183460469231731687303715884105727 & -127
+quote -170141183460469231731687303715884105727 & 255
+-170141183460469231731687303715884105727 & 255
+quote -170141183460469231731687303715884105727 & 256
+-170141183460469231731687303715884105727 & 256
+quote -170141183460469231731687303715884105727 & 65535
+-170141183460469231731687303715884105727 & 65535
+quote -170141183460469231731687303715884105727 & 65536
+-170141183460469231731687303715884105727 & 65536
+quote -170141183460469231731687303715884105727 & 4294967295
+-170141183460469231731687303715884105727 & 4294967295
+quote -170141183460469231731687303715884105727 & 4294967296
+-170141183460469231731687303715884105727 & 4294967296
+quote -170141183460469231731687303715884105727 & 18446744073709551615
+-170141183460469231731687303715884105727 & 18446744073709551615
+quote -170141183460469231731687303715884105727 & 18446744073709551616
+-170141183460469231731687303715884105727 & 18446744073709551616
+quote -170141183460469231731687303715884105727 & 340282366920938463463374607431768211455
+-170141183460469231731687303715884105727 & 340282366920938463463374607431768211455
+quote -170141183460469231731687303715884105727 & 340282366920938463463374607431768211456
+-170141183460469231731687303715884105727 & 340282366920938463463374607431768211456
+quote -9223372036854775808 & -170141183460469231731687303715884105728
+-9223372036854775808 & -170141183460469231731687303715884105728
+quote -9223372036854775808 & -170141183460469231731687303715884105727
+-9223372036854775808 & -170141183460469231731687303715884105727
+quote -9223372036854775808 & -9223372036854775808
+-9223372036854775808 & -9223372036854775808
+quote -9223372036854775808 & -9223372036854775807
+-9223372036854775808 & -9223372036854775807
+quote -9223372036854775808 & -2147483648
+-9223372036854775808 & -2147483648
+quote -9223372036854775808 & -2147483647
+-9223372036854775808 & -2147483647
+quote -9223372036854775808 & -32768
+-9223372036854775808 & -32768
+quote -9223372036854775808 & -32767
+-9223372036854775808 & -32767
+quote -9223372036854775808 & -128
+-9223372036854775808 & -128
+quote -9223372036854775808 & -127
+-9223372036854775808 & -127
+quote -9223372036854775808 & 255
+-9223372036854775808 & 255
+quote -9223372036854775808 & 256
+-9223372036854775808 & 256
+quote -9223372036854775808 & 65535
+-9223372036854775808 & 65535
+quote -9223372036854775808 & 65536
+-9223372036854775808 & 65536
+quote -9223372036854775808 & 4294967295
+-9223372036854775808 & 4294967295
+quote -9223372036854775808 & 4294967296
+-9223372036854775808 & 4294967296
+quote -9223372036854775808 & 18446744073709551615
+-9223372036854775808 & 18446744073709551615
+quote -9223372036854775808 & 18446744073709551616
+-9223372036854775808 & 18446744073709551616
+quote -9223372036854775808 & 340282366920938463463374607431768211455
+-9223372036854775808 & 340282366920938463463374607431768211455
+quote -9223372036854775808 & 340282366920938463463374607431768211456
+-9223372036854775808 & 340282366920938463463374607431768211456
+quote -9223372036854775807 & -170141183460469231731687303715884105728
+-9223372036854775807 & -170141183460469231731687303715884105728
+quote -9223372036854775807 & -170141183460469231731687303715884105727
+-9223372036854775807 & -170141183460469231731687303715884105727
+quote -9223372036854775807 & -9223372036854775808
+-9223372036854775807 & -9223372036854775808
+quote -9223372036854775807 & -9223372036854775807
+-9223372036854775807 & -9223372036854775807
+quote -9223372036854775807 & -2147483648
+-9223372036854775807 & -2147483648
+quote -9223372036854775807 & -2147483647
+-9223372036854775807 & -2147483647
+quote -9223372036854775807 & -32768
+-9223372036854775807 & -32768
+quote -9223372036854775807 & -32767
+-9223372036854775807 & -32767
+quote -9223372036854775807 & -128
+-9223372036854775807 & -128
+quote -9223372036854775807 & -127
+-9223372036854775807 & -127
+quote -9223372036854775807 & 255
+-9223372036854775807 & 255
+quote -9223372036854775807 & 256
+-9223372036854775807 & 256
+quote -9223372036854775807 & 65535
+-9223372036854775807 & 65535
+quote -9223372036854775807 & 65536
+-9223372036854775807 & 65536
+quote -9223372036854775807 & 4294967295
+-9223372036854775807 & 4294967295
+quote -9223372036854775807 & 4294967296
+-9223372036854775807 & 4294967296
+quote -9223372036854775807 & 18446744073709551615
+-9223372036854775807 & 18446744073709551615
+quote -9223372036854775807 & 18446744073709551616
+-9223372036854775807 & 18446744073709551616
+quote -9223372036854775807 & 340282366920938463463374607431768211455
+-9223372036854775807 & 340282366920938463463374607431768211455
+quote -9223372036854775807 & 340282366920938463463374607431768211456
+-9223372036854775807 & 340282366920938463463374607431768211456
+quote -2147483648 & -170141183460469231731687303715884105728
+-2147483648 & -170141183460469231731687303715884105728
+quote -2147483648 & -170141183460469231731687303715884105727
+-2147483648 & -170141183460469231731687303715884105727
+quote -2147483648 & -9223372036854775808
+-2147483648 & -9223372036854775808
+quote -2147483648 & -9223372036854775807
+-2147483648 & -9223372036854775807
+quote -2147483648 & -2147483648
+-2147483648 & -2147483648
+quote -2147483648 & -2147483647
+-2147483648 & -2147483647
+quote -2147483648 & -32768
+-2147483648 & -32768
+quote -2147483648 & -32767
+-2147483648 & -32767
+quote -2147483648 & -128
+-2147483648 & -128
+quote -2147483648 & -127
+-2147483648 & -127
+quote -2147483648 & 255
+-2147483648 & 255
+quote -2147483648 & 256
+-2147483648 & 256
+quote -2147483648 & 65535
+-2147483648 & 65535
+quote -2147483648 & 65536
+-2147483648 & 65536
+quote -2147483648 & 4294967295
+-2147483648 & 4294967295
+quote -2147483648 & 4294967296
+-2147483648 & 4294967296
+quote -2147483648 & 18446744073709551615
+-2147483648 & 18446744073709551615
+quote -2147483648 & 18446744073709551616
+-2147483648 & 18446744073709551616
+quote -2147483648 & 340282366920938463463374607431768211455
+-2147483648 & 340282366920938463463374607431768211455
+quote -2147483648 & 340282366920938463463374607431768211456
+-2147483648 & 340282366920938463463374607431768211456
+quote -2147483647 & -170141183460469231731687303715884105728
+-2147483647 & -170141183460469231731687303715884105728
+quote -2147483647 & -170141183460469231731687303715884105727
+-2147483647 & -170141183460469231731687303715884105727
+quote -2147483647 & -9223372036854775808
+-2147483647 & -9223372036854775808
+quote -2147483647 & -9223372036854775807
+-2147483647 & -9223372036854775807
+quote -2147483647 & -2147483648
+-2147483647 & -2147483648
+quote -2147483647 & -2147483647
+-2147483647 & -2147483647
+quote -2147483647 & -32768
+-2147483647 & -32768
+quote -2147483647 & -32767
+-2147483647 & -32767
+quote -2147483647 & -128
+-2147483647 & -128
+quote -2147483647 & -127
+-2147483647 & -127
+quote -2147483647 & 255
+-2147483647 & 255
+quote -2147483647 & 256
+-2147483647 & 256
+quote -2147483647 & 65535
+-2147483647 & 65535
+quote -2147483647 & 65536
+-2147483647 & 65536
+quote -2147483647 & 4294967295
+-2147483647 & 4294967295
+quote -2147483647 & 4294967296
+-2147483647 & 4294967296
+quote -2147483647 & 18446744073709551615
+-2147483647 & 18446744073709551615
+quote -2147483647 & 18446744073709551616
+-2147483647 & 18446744073709551616
+quote -2147483647 & 340282366920938463463374607431768211455
+-2147483647 & 340282366920938463463374607431768211455
+quote -2147483647 & 340282366920938463463374607431768211456
+-2147483647 & 340282366920938463463374607431768211456
+quote -32768 & -170141183460469231731687303715884105728
+-32768 & -170141183460469231731687303715884105728
+quote -32768 & -170141183460469231731687303715884105727
+-32768 & -170141183460469231731687303715884105727
+quote -32768 & -9223372036854775808
+-32768 & -9223372036854775808
+quote -32768 & -9223372036854775807
+-32768 & -9223372036854775807
+quote -32768 & -2147483648
+-32768 & -2147483648
+quote -32768 & -2147483647
+-32768 & -2147483647
+quote -32768 & -32768
+-32768 & -32768
+quote -32768 & -32767
+-32768 & -32767
+quote -32768 & -128
+-32768 & -128
+quote -32768 & -127
+-32768 & -127
+quote -32768 & 255
+-32768 & 255
+quote -32768 & 256
+-32768 & 256
+quote -32768 & 65535
+-32768 & 65535
+quote -32768 & 65536
+-32768 & 65536
+quote -32768 & 4294967295
+-32768 & 4294967295
+quote -32768 & 4294967296
+-32768 & 4294967296
+quote -32768 & 18446744073709551615
+-32768 & 18446744073709551615
+quote -32768 & 18446744073709551616
+-32768 & 18446744073709551616
+quote -32768 & 340282366920938463463374607431768211455
+-32768 & 340282366920938463463374607431768211455
+quote -32768 & 340282366920938463463374607431768211456
+-32768 & 340282366920938463463374607431768211456
+quote -32767 & -170141183460469231731687303715884105728
+-32767 & -170141183460469231731687303715884105728
+quote -32767 & -170141183460469231731687303715884105727
+-32767 & -170141183460469231731687303715884105727
+quote -32767 & -9223372036854775808
+-32767 & -9223372036854775808
+quote -32767 & -9223372036854775807
+-32767 & -9223372036854775807
+quote -32767 & -2147483648
+-32767 & -2147483648
+quote -32767 & -2147483647
+-32767 & -2147483647
+quote -32767 & -32768
+-32767 & -32768
+quote -32767 & -32767
+-32767 & -32767
+quote -32767 & -128
+-32767 & -128
+quote -32767 & -127
+-32767 & -127
+quote -32767 & 255
+-32767 & 255
+quote -32767 & 256
+-32767 & 256
+quote -32767 & 65535
+-32767 & 65535
+quote -32767 & 65536
+-32767 & 65536
+quote -32767 & 4294967295
+-32767 & 4294967295
+quote -32767 & 4294967296
+-32767 & 4294967296
+quote -32767 & 18446744073709551615
+-32767 & 18446744073709551615
+quote -32767 & 18446744073709551616
+-32767 & 18446744073709551616
+quote -32767 & 340282366920938463463374607431768211455
+-32767 & 340282366920938463463374607431768211455
+quote -32767 & 340282366920938463463374607431768211456
+-32767 & 340282366920938463463374607431768211456
+quote -128 & -170141183460469231731687303715884105728
+-128 & -170141183460469231731687303715884105728
+quote -128 & -170141183460469231731687303715884105727
+-128 & -170141183460469231731687303715884105727
+quote -128 & -9223372036854775808
+-128 & -9223372036854775808
+quote -128 & -9223372036854775807
+-128 & -9223372036854775807
+quote -128 & -2147483648
+-128 & -2147483648
+quote -128 & -2147483647
+-128 & -2147483647
+quote -128 & -32768
+-128 & -32768
+quote -128 & -32767
+-128 & -32767
+quote -128 & -128
+-128 & -128
+quote -128 & -127
+-128 & -127
+quote -128 & 255
+-128 & 255
+quote -128 & 256
+-128 & 256
+quote -128 & 65535
+-128 & 65535
+quote -128 & 65536
+-128 & 65536
+quote -128 & 4294967295
+-128 & 4294967295
+quote -128 & 4294967296
+-128 & 4294967296
+quote -128 & 18446744073709551615
+-128 & 18446744073709551615
+quote -128 & 18446744073709551616
+-128 & 18446744073709551616
+quote -128 & 340282366920938463463374607431768211455
+-128 & 340282366920938463463374607431768211455
+quote -128 & 340282366920938463463374607431768211456
+-128 & 340282366920938463463374607431768211456
+quote -127 & -170141183460469231731687303715884105728
+-127 & -170141183460469231731687303715884105728
+quote -127 & -170141183460469231731687303715884105727
+-127 & -170141183460469231731687303715884105727
+quote -127 & -9223372036854775808
+-127 & -9223372036854775808
+quote -127 & -9223372036854775807
+-127 & -9223372036854775807
+quote -127 & -2147483648
+-127 & -2147483648
+quote -127 & -2147483647
+-127 & -2147483647
+quote -127 & -32768
+-127 & -32768
+quote -127 & -32767
+-127 & -32767
+quote -127 & -128
+-127 & -128
+quote -127 & -127
+-127 & -127
+quote -127 & 255
+-127 & 255
+quote -127 & 256
+-127 & 256
+quote -127 & 65535
+-127 & 65535
+quote -127 & 65536
+-127 & 65536
+quote -127 & 4294967295
+-127 & 4294967295
+quote -127 & 4294967296
+-127 & 4294967296
+quote -127 & 18446744073709551615
+-127 & 18446744073709551615
+quote -127 & 18446744073709551616
+-127 & 18446744073709551616
+quote -127 & 340282366920938463463374607431768211455
+-127 & 340282366920938463463374607431768211455
+quote -127 & 340282366920938463463374607431768211456
+-127 & 340282366920938463463374607431768211456
+quote 255 & -170141183460469231731687303715884105728
+255 & -170141183460469231731687303715884105728
+quote 255 & -170141183460469231731687303715884105727
+255 & -170141183460469231731687303715884105727
+quote 255 & -9223372036854775808
+255 & -9223372036854775808
+quote 255 & -9223372036854775807
+255 & -9223372036854775807
+quote 255 & -2147483648
+255 & -2147483648
+quote 255 & -2147483647
+255 & -2147483647
+quote 255 & -32768
+255 & -32768
+quote 255 & -32767
+255 & -32767
+quote 255 & -128
+255 & -128
+quote 255 & -127
+255 & -127
+quote 255 & 255
+255 & 255
+quote 255 & 256
+255 & 256
+quote 255 & 65535
+255 & 65535
+quote 255 & 65536
+255 & 65536
+quote 255 & 4294967295
+255 & 4294967295
+quote 255 & 4294967296
+255 & 4294967296
+quote 255 & 18446744073709551615
+255 & 18446744073709551615
+quote 255 & 18446744073709551616
+255 & 18446744073709551616
+quote 255 & 340282366920938463463374607431768211455
+255 & 340282366920938463463374607431768211455
+quote 255 & 340282366920938463463374607431768211456
+255 & 340282366920938463463374607431768211456
+quote 256 & -170141183460469231731687303715884105728
+256 & -170141183460469231731687303715884105728
+quote 256 & -170141183460469231731687303715884105727
+256 & -170141183460469231731687303715884105727
+quote 256 & -9223372036854775808
+256 & -9223372036854775808
+quote 256 & -9223372036854775807
+256 & -9223372036854775807
+quote 256 & -2147483648
+256 & -2147483648
+quote 256 & -2147483647
+256 & -2147483647
+quote 256 & -32768
+256 & -32768
+quote 256 & -32767
+256 & -32767
+quote 256 & -128
+256 & -128
+quote 256 & -127
+256 & -127
+quote 256 & 255
+256 & 255
+quote 256 & 256
+256 & 256
+quote 256 & 65535
+256 & 65535
+quote 256 & 65536
+256 & 65536
+quote 256 & 4294967295
+256 & 4294967295
+quote 256 & 4294967296
+256 & 4294967296
+quote 256 & 18446744073709551615
+256 & 18446744073709551615
+quote 256 & 18446744073709551616
+256 & 18446744073709551616
+quote 256 & 340282366920938463463374607431768211455
+256 & 340282366920938463463374607431768211455
+quote 256 & 340282366920938463463374607431768211456
+256 & 340282366920938463463374607431768211456
+quote 65535 & -170141183460469231731687303715884105728
+65535 & -170141183460469231731687303715884105728
+quote 65535 & -170141183460469231731687303715884105727
+65535 & -170141183460469231731687303715884105727
+quote 65535 & -9223372036854775808
+65535 & -9223372036854775808
+quote 65535 & -9223372036854775807
+65535 & -9223372036854775807
+quote 65535 & -2147483648
+65535 & -2147483648
+quote 65535 & -2147483647
+65535 & -2147483647
+quote 65535 & -32768
+65535 & -32768
+quote 65535 & -32767
+65535 & -32767
+quote 65535 & -128
+65535 & -128
+quote 65535 & -127
+65535 & -127
+quote 65535 & 255
+65535 & 255
+quote 65535 & 256
+65535 & 256
+quote 65535 & 65535
+65535 & 65535
+quote 65535 & 65536
+65535 & 65536
+quote 65535 & 4294967295
+65535 & 4294967295
+quote 65535 & 4294967296
+65535 & 4294967296
+quote 65535 & 18446744073709551615
+65535 & 18446744073709551615
+quote 65535 & 18446744073709551616
+65535 & 18446744073709551616
+quote 65535 & 340282366920938463463374607431768211455
+65535 & 340282366920938463463374607431768211455
+quote 65535 & 340282366920938463463374607431768211456
+65535 & 340282366920938463463374607431768211456
+quote 65536 & -170141183460469231731687303715884105728
+65536 & -170141183460469231731687303715884105728
+quote 65536 & -170141183460469231731687303715884105727
+65536 & -170141183460469231731687303715884105727
+quote 65536 & -9223372036854775808
+65536 & -9223372036854775808
+quote 65536 & -9223372036854775807
+65536 & -9223372036854775807
+quote 65536 & -2147483648
+65536 & -2147483648
+quote 65536 & -2147483647
+65536 & -2147483647
+quote 65536 & -32768
+65536 & -32768
+quote 65536 & -32767
+65536 & -32767
+quote 65536 & -128
+65536 & -128
+quote 65536 & -127
+65536 & -127
+quote 65536 & 255
+65536 & 255
+quote 65536 & 256
+65536 & 256
+quote 65536 & 65535
+65536 & 65535
+quote 65536 & 65536
+65536 & 65536
+quote 65536 & 4294967295
+65536 & 4294967295
+quote 65536 & 4294967296
+65536 & 4294967296
+quote 65536 & 18446744073709551615
+65536 & 18446744073709551615
+quote 65536 & 18446744073709551616
+65536 & 18446744073709551616
+quote 65536 & 340282366920938463463374607431768211455
+65536 & 340282366920938463463374607431768211455
+quote 65536 & 340282366920938463463374607431768211456
+65536 & 340282366920938463463374607431768211456
+quote 4294967295 & -170141183460469231731687303715884105728
+4294967295 & -170141183460469231731687303715884105728
+quote 4294967295 & -170141183460469231731687303715884105727
+4294967295 & -170141183460469231731687303715884105727
+quote 4294967295 & -9223372036854775808
+4294967295 & -9223372036854775808
+quote 4294967295 & -9223372036854775807
+4294967295 & -9223372036854775807
+quote 4294967295 & -2147483648
+4294967295 & -2147483648
+quote 4294967295 & -2147483647
+4294967295 & -2147483647
+quote 4294967295 & -32768
+4294967295 & -32768
+quote 4294967295 & -32767
+4294967295 & -32767
+quote 4294967295 & -128
+4294967295 & -128
+quote 4294967295 & -127
+4294967295 & -127
+quote 4294967295 & 255
+4294967295 & 255
+quote 4294967295 & 256
+4294967295 & 256
+quote 4294967295 & 65535
+4294967295 & 65535
+quote 4294967295 & 65536
+4294967295 & 65536
+quote 4294967295 & 4294967295
+4294967295 & 4294967295
+quote 4294967295 & 4294967296
+4294967295 & 4294967296
+quote 4294967295 & 18446744073709551615
+4294967295 & 18446744073709551615
+quote 4294967295 & 18446744073709551616
+4294967295 & 18446744073709551616
+quote 4294967295 & 340282366920938463463374607431768211455
+4294967295 & 340282366920938463463374607431768211455
+quote 4294967295 & 340282366920938463463374607431768211456
+4294967295 & 340282366920938463463374607431768211456
+quote 4294967296 & -170141183460469231731687303715884105728
+4294967296 & -170141183460469231731687303715884105728
+quote 4294967296 & -170141183460469231731687303715884105727
+4294967296 & -170141183460469231731687303715884105727
+quote 4294967296 & -9223372036854775808
+4294967296 & -9223372036854775808
+quote 4294967296 & -9223372036854775807
+4294967296 & -9223372036854775807
+quote 4294967296 & -2147483648
+4294967296 & -2147483648
+quote 4294967296 & -2147483647
+4294967296 & -2147483647
+quote 4294967296 & -32768
+4294967296 & -32768
+quote 4294967296 & -32767
+4294967296 & -32767
+quote 4294967296 & -128
+4294967296 & -128
+quote 4294967296 & -127
+4294967296 & -127
+quote 4294967296 & 255
+4294967296 & 255
+quote 4294967296 & 256
+4294967296 & 256
+quote 4294967296 & 65535
+4294967296 & 65535
+quote 4294967296 & 65536
+4294967296 & 65536
+quote 4294967296 & 4294967295
+4294967296 & 4294967295
+quote 4294967296 & 4294967296
+4294967296 & 4294967296
+quote 4294967296 & 18446744073709551615
+4294967296 & 18446744073709551615
+quote 4294967296 & 18446744073709551616
+4294967296 & 18446744073709551616
+quote 4294967296 & 340282366920938463463374607431768211455
+4294967296 & 340282366920938463463374607431768211455
+quote 4294967296 & 340282366920938463463374607431768211456
+4294967296 & 340282366920938463463374607431768211456
+quote 18446744073709551615 & -170141183460469231731687303715884105728
+18446744073709551615 & -170141183460469231731687303715884105728
+quote 18446744073709551615 & -170141183460469231731687303715884105727
+18446744073709551615 & -170141183460469231731687303715884105727
+quote 18446744073709551615 & -9223372036854775808
+18446744073709551615 & -9223372036854775808
+quote 18446744073709551615 & -9223372036854775807
+18446744073709551615 & -9223372036854775807
+quote 18446744073709551615 & -2147483648
+18446744073709551615 & -2147483648
+quote 18446744073709551615 & -2147483647
+18446744073709551615 & -2147483647
+quote 18446744073709551615 & -32768
+18446744073709551615 & -32768
+quote 18446744073709551615 & -32767
+18446744073709551615 & -32767
+quote 18446744073709551615 & -128
+18446744073709551615 & -128
+quote 18446744073709551615 & -127
+18446744073709551615 & -127
+quote 18446744073709551615 & 255
+18446744073709551615 & 255
+quote 18446744073709551615 & 256
+18446744073709551615 & 256
+quote 18446744073709551615 & 65535
+18446744073709551615 & 65535
+quote 18446744073709551615 & 65536
+18446744073709551615 & 65536
+quote 18446744073709551615 & 4294967295
+18446744073709551615 & 4294967295
+quote 18446744073709551615 & 4294967296
+18446744073709551615 & 4294967296
+quote 18446744073709551615 & 18446744073709551615
+18446744073709551615 & 18446744073709551615
+quote 18446744073709551615 & 18446744073709551616
+18446744073709551615 & 18446744073709551616
+quote 18446744073709551615 & 340282366920938463463374607431768211455
+18446744073709551615 & 340282366920938463463374607431768211455
+quote 18446744073709551615 & 340282366920938463463374607431768211456
+18446744073709551615 & 340282366920938463463374607431768211456
+quote 18446744073709551616 & -170141183460469231731687303715884105728
+18446744073709551616 & -170141183460469231731687303715884105728
+quote 18446744073709551616 & -170141183460469231731687303715884105727
+18446744073709551616 & -170141183460469231731687303715884105727
+quote 18446744073709551616 & -9223372036854775808
+18446744073709551616 & -9223372036854775808
+quote 18446744073709551616 & -9223372036854775807
+18446744073709551616 & -9223372036854775807
+quote 18446744073709551616 & -2147483648
+18446744073709551616 & -2147483648
+quote 18446744073709551616 & -2147483647
+18446744073709551616 & -2147483647
+quote 18446744073709551616 & -32768
+18446744073709551616 & -32768
+quote 18446744073709551616 & -32767
+18446744073709551616 & -32767
+quote 18446744073709551616 & -128
+18446744073709551616 & -128
+quote 18446744073709551616 & -127
+18446744073709551616 & -127
+quote 18446744073709551616 & 255
+18446744073709551616 & 255
+quote 18446744073709551616 & 256
+18446744073709551616 & 256
+quote 18446744073709551616 & 65535
+18446744073709551616 & 65535
+quote 18446744073709551616 & 65536
+18446744073709551616 & 65536
+quote 18446744073709551616 & 4294967295
+18446744073709551616 & 4294967295
+quote 18446744073709551616 & 4294967296
+18446744073709551616 & 4294967296
+quote 18446744073709551616 & 18446744073709551615
+18446744073709551616 & 18446744073709551615
+quote 18446744073709551616 & 18446744073709551616
+18446744073709551616 & 18446744073709551616
+quote 18446744073709551616 & 340282366920938463463374607431768211455
+18446744073709551616 & 340282366920938463463374607431768211455
+quote 18446744073709551616 & 340282366920938463463374607431768211456
+18446744073709551616 & 340282366920938463463374607431768211456
+quote 340282366920938463463374607431768211455 & -170141183460469231731687303715884105728
+340282366920938463463374607431768211455 & -170141183460469231731687303715884105728
+quote 340282366920938463463374607431768211455 & -170141183460469231731687303715884105727
+340282366920938463463374607431768211455 & -170141183460469231731687303715884105727
+quote 340282366920938463463374607431768211455 & -9223372036854775808
+340282366920938463463374607431768211455 & -9223372036854775808
+quote 340282366920938463463374607431768211455 & -9223372036854775807
+340282366920938463463374607431768211455 & -9223372036854775807
+quote 340282366920938463463374607431768211455 & -2147483648
+340282366920938463463374607431768211455 & -2147483648
+quote 340282366920938463463374607431768211455 & -2147483647
+340282366920938463463374607431768211455 & -2147483647
+quote 340282366920938463463374607431768211455 & -32768
+340282366920938463463374607431768211455 & -32768
+quote 340282366920938463463374607431768211455 & -32767
+340282366920938463463374607431768211455 & -32767
+quote 340282366920938463463374607431768211455 & -128
+340282366920938463463374607431768211455 & -128
+quote 340282366920938463463374607431768211455 & -127
+340282366920938463463374607431768211455 & -127
+quote 340282366920938463463374607431768211455 & 255
+340282366920938463463374607431768211455 & 255
+quote 340282366920938463463374607431768211455 & 256
+340282366920938463463374607431768211455 & 256
+quote 340282366920938463463374607431768211455 & 65535
+340282366920938463463374607431768211455 & 65535
+quote 340282366920938463463374607431768211455 & 65536
+340282366920938463463374607431768211455 & 65536
+quote 340282366920938463463374607431768211455 & 4294967295
+340282366920938463463374607431768211455 & 4294967295
+quote 340282366920938463463374607431768211455 & 4294967296
+340282366920938463463374607431768211455 & 4294967296
+quote 340282366920938463463374607431768211455 & 18446744073709551615
+340282366920938463463374607431768211455 & 18446744073709551615
+quote 340282366920938463463374607431768211455 & 18446744073709551616
+340282366920938463463374607431768211455 & 18446744073709551616
+quote 340282366920938463463374607431768211455 & 340282366920938463463374607431768211455
+340282366920938463463374607431768211455 & 340282366920938463463374607431768211455
+quote 340282366920938463463374607431768211455 & 340282366920938463463374607431768211456
+340282366920938463463374607431768211455 & 340282366920938463463374607431768211456
+quote 340282366920938463463374607431768211456 & -170141183460469231731687303715884105728
+340282366920938463463374607431768211456 & -170141183460469231731687303715884105728
+quote 340282366920938463463374607431768211456 & -170141183460469231731687303715884105727
+340282366920938463463374607431768211456 & -170141183460469231731687303715884105727
+quote 340282366920938463463374607431768211456 & -9223372036854775808
+340282366920938463463374607431768211456 & -9223372036854775808
+quote 340282366920938463463374607431768211456 & -9223372036854775807
+340282366920938463463374607431768211456 & -9223372036854775807
+quote 340282366920938463463374607431768211456 & -2147483648
+340282366920938463463374607431768211456 & -2147483648
+quote 340282366920938463463374607431768211456 & -2147483647
+340282366920938463463374607431768211456 & -2147483647
+quote 340282366920938463463374607431768211456 & -32768
+340282366920938463463374607431768211456 & -32768
+quote 340282366920938463463374607431768211456 & -32767
+340282366920938463463374607431768211456 & -32767
+quote 340282366920938463463374607431768211456 & -128
+340282366920938463463374607431768211456 & -128
+quote 340282366920938463463374607431768211456 & -127
+340282366920938463463374607431768211456 & -127
+quote 340282366920938463463374607431768211456 & 255
+340282366920938463463374607431768211456 & 255
+quote 340282366920938463463374607431768211456 & 256
+340282366920938463463374607431768211456 & 256
+quote 340282366920938463463374607431768211456 & 65535
+340282366920938463463374607431768211456 & 65535
+quote 340282366920938463463374607431768211456 & 65536
+340282366920938463463374607431768211456 & 65536
+quote 340282366920938463463374607431768211456 & 4294967295
+340282366920938463463374607431768211456 & 4294967295
+quote 340282366920938463463374607431768211456 & 4294967296
+340282366920938463463374607431768211456 & 4294967296
+quote 340282366920938463463374607431768211456 & 18446744073709551615
+340282366920938463463374607431768211456 & 18446744073709551615
+quote 340282366920938463463374607431768211456 & 18446744073709551616
+340282366920938463463374607431768211456 & 18446744073709551616
+quote 340282366920938463463374607431768211456 & 340282366920938463463374607431768211455
+340282366920938463463374607431768211456 & 340282366920938463463374607431768211455
+quote 340282366920938463463374607431768211456 & 340282366920938463463374607431768211456
+340282366920938463463374607431768211456 & 340282366920938463463374607431768211456
diff --git a/test/ic3/integer_band.out.expected b/test/ic3/integer_band.out.expected
new file mode 100644
index 0000000..1da02cd
--- /dev/null
+++ b/test/ic3/integer_band.out.expected
@@ -0,0 +1,800 @@
+-170141183460469231731687303715884105728 & -170141183460469231731687303715884105728
+-170141183460469231731687303715884105728
+-170141183460469231731687303715884105728 & -170141183460469231731687303715884105727
+-170141183460469231731687303715884105728
+-170141183460469231731687303715884105728 & -9223372036854775808
+-170141183460469231731687303715884105728
+-170141183460469231731687303715884105728 & -9223372036854775807
+-170141183460469231731687303715884105728
+-170141183460469231731687303715884105728 & -2147483648
+-170141183460469231731687303715884105728
+-170141183460469231731687303715884105728 & -2147483647
+-170141183460469231731687303715884105728
+-170141183460469231731687303715884105728 & -32768
+-170141183460469231731687303715884105728
+-170141183460469231731687303715884105728 & -32767
+-170141183460469231731687303715884105728
+-170141183460469231731687303715884105728 & -128
+-170141183460469231731687303715884105728
+-170141183460469231731687303715884105728 & -127
+-170141183460469231731687303715884105728
+-170141183460469231731687303715884105728 & 255
+0
+-170141183460469231731687303715884105728 & 256
+0
+-170141183460469231731687303715884105728 & 65535
+0
+-170141183460469231731687303715884105728 & 65536
+0
+-170141183460469231731687303715884105728 & 4294967295
+0
+-170141183460469231731687303715884105728 & 4294967296
+0
+-170141183460469231731687303715884105728 & 18446744073709551615
+0
+-170141183460469231731687303715884105728 & 18446744073709551616
+0
+-170141183460469231731687303715884105728 & 340282366920938463463374607431768211455
+170141183460469231731687303715884105728
+-170141183460469231731687303715884105728 & 340282366920938463463374607431768211456
+340282366920938463463374607431768211456
+-170141183460469231731687303715884105727 & -170141183460469231731687303715884105728
+-170141183460469231731687303715884105728
+-170141183460469231731687303715884105727 & -170141183460469231731687303715884105727
+-170141183460469231731687303715884105727
+-170141183460469231731687303715884105727 & -9223372036854775808
+-170141183460469231731687303715884105728
+-170141183460469231731687303715884105727 & -9223372036854775807
+-170141183460469231731687303715884105727
+-170141183460469231731687303715884105727 & -2147483648
+-170141183460469231731687303715884105728
+-170141183460469231731687303715884105727 & -2147483647
+-170141183460469231731687303715884105727
+-170141183460469231731687303715884105727 & -32768
+-170141183460469231731687303715884105728
+-170141183460469231731687303715884105727 & -32767
+-170141183460469231731687303715884105727
+-170141183460469231731687303715884105727 & -128
+-170141183460469231731687303715884105728
+-170141183460469231731687303715884105727 & -127
+-170141183460469231731687303715884105727
+-170141183460469231731687303715884105727 & 255
+1
+-170141183460469231731687303715884105727 & 256
+0
+-170141183460469231731687303715884105727 & 65535
+1
+-170141183460469231731687303715884105727 & 65536
+0
+-170141183460469231731687303715884105727 & 4294967295
+1
+-170141183460469231731687303715884105727 & 4294967296
+0
+-170141183460469231731687303715884105727 & 18446744073709551615
+1
+-170141183460469231731687303715884105727 & 18446744073709551616
+0
+-170141183460469231731687303715884105727 & 340282366920938463463374607431768211455
+170141183460469231731687303715884105729
+-170141183460469231731687303715884105727 & 340282366920938463463374607431768211456
+340282366920938463463374607431768211456
+-9223372036854775808 & -170141183460469231731687303715884105728
+-170141183460469231731687303715884105728
+-9223372036854775808 & -170141183460469231731687303715884105727
+-170141183460469231731687303715884105728
+-9223372036854775808 & -9223372036854775808
+-9223372036854775808
+-9223372036854775808 & -9223372036854775807
+-9223372036854775808
+-9223372036854775808 & -2147483648
+-9223372036854775808
+-9223372036854775808 & -2147483647
+-9223372036854775808
+-9223372036854775808 & -32768
+-9223372036854775808
+-9223372036854775808 & -32767
+-9223372036854775808
+-9223372036854775808 & -128
+-9223372036854775808
+-9223372036854775808 & -127
+-9223372036854775808
+-9223372036854775808 & 255
+0
+-9223372036854775808 & 256
+0
+-9223372036854775808 & 65535
+0
+-9223372036854775808 & 65536
+0
+-9223372036854775808 & 4294967295
+0
+-9223372036854775808 & 4294967296
+0
+-9223372036854775808 & 18446744073709551615
+9223372036854775808
+-9223372036854775808 & 18446744073709551616
+18446744073709551616
+-9223372036854775808 & 340282366920938463463374607431768211455
+340282366920938463454151235394913435648
+-9223372036854775808 & 340282366920938463463374607431768211456
+340282366920938463463374607431768211456
+-9223372036854775807 & -170141183460469231731687303715884105728
+-170141183460469231731687303715884105728
+-9223372036854775807 & -170141183460469231731687303715884105727
+-170141183460469231731687303715884105727
+-9223372036854775807 & -9223372036854775808
+-9223372036854775808
+-9223372036854775807 & -9223372036854775807
+-9223372036854775807
+-9223372036854775807 & -2147483648
+-9223372036854775808
+-9223372036854775807 & -2147483647
+-9223372036854775807
+-9223372036854775807 & -32768
+-9223372036854775808
+-9223372036854775807 & -32767
+-9223372036854775807
+-9223372036854775807 & -128
+-9223372036854775808
+-9223372036854775807 & -127
+-9223372036854775807
+-9223372036854775807 & 255
+1
+-9223372036854775807 & 256
+0
+-9223372036854775807 & 65535
+1
+-9223372036854775807 & 65536
+0
+-9223372036854775807 & 4294967295
+1
+-9223372036854775807 & 4294967296
+0
+-9223372036854775807 & 18446744073709551615
+9223372036854775809
+-9223372036854775807 & 18446744073709551616
+18446744073709551616
+-9223372036854775807 & 340282366920938463463374607431768211455
+340282366920938463454151235394913435649
+-9223372036854775807 & 340282366920938463463374607431768211456
+340282366920938463463374607431768211456
+-2147483648 & -170141183460469231731687303715884105728
+-170141183460469231731687303715884105728
+-2147483648 & -170141183460469231731687303715884105727
+-170141183460469231731687303715884105728
+-2147483648 & -9223372036854775808
+-9223372036854775808
+-2147483648 & -9223372036854775807
+-9223372036854775808
+-2147483648 & -2147483648
+-2147483648
+-2147483648 & -2147483647
+-2147483648
+-2147483648 & -32768
+-2147483648
+-2147483648 & -32767
+-2147483648
+-2147483648 & -128
+-2147483648
+-2147483648 & -127
+-2147483648
+-2147483648 & 255
+0
+-2147483648 & 256
+0
+-2147483648 & 65535
+0
+-2147483648 & 65536
+0
+-2147483648 & 4294967295
+2147483648
+-2147483648 & 4294967296
+4294967296
+-2147483648 & 18446744073709551615
+18446744071562067968
+-2147483648 & 18446744073709551616
+18446744073709551616
+-2147483648 & 340282366920938463463374607431768211455
+340282366920938463463374607429620727808
+-2147483648 & 340282366920938463463374607431768211456
+340282366920938463463374607431768211456
+-2147483647 & -170141183460469231731687303715884105728
+-170141183460469231731687303715884105728
+-2147483647 & -170141183460469231731687303715884105727
+-170141183460469231731687303715884105727
+-2147483647 & -9223372036854775808
+-9223372036854775808
+-2147483647 & -9223372036854775807
+-9223372036854775807
+-2147483647 & -2147483648
+-2147483648
+-2147483647 & -2147483647
+-2147483647
+-2147483647 & -32768
+-2147483648
+-2147483647 & -32767
+-2147483647
+-2147483647 & -128
+-2147483648
+-2147483647 & -127
+-2147483647
+-2147483647 & 255
+1
+-2147483647 & 256
+0
+-2147483647 & 65535
+1
+-2147483647 & 65536
+0
+-2147483647 & 4294967295
+2147483649
+-2147483647 & 4294967296
+4294967296
+-2147483647 & 18446744073709551615
+18446744071562067969
+-2147483647 & 18446744073709551616
+18446744073709551616
+-2147483647 & 340282366920938463463374607431768211455
+340282366920938463463374607429620727809
+-2147483647 & 340282366920938463463374607431768211456
+340282366920938463463374607431768211456
+-32768 & -170141183460469231731687303715884105728
+-170141183460469231731687303715884105728
+-32768 & -170141183460469231731687303715884105727
+-170141183460469231731687303715884105728
+-32768 & -9223372036854775808
+-9223372036854775808
+-32768 & -9223372036854775807
+-9223372036854775808
+-32768 & -2147483648
+-2147483648
+-32768 & -2147483647
+-2147483648
+-32768 & -32768
+-32768
+-32768 & -32767
+-32768
+-32768 & -128
+-32768
+-32768 & -127
+-32768
+-32768 & 255
+0
+-32768 & 256
+0
+-32768 & 65535
+32768
+-32768 & 65536
+65536
+-32768 & 4294967295
+4294934528
+-32768 & 4294967296
+4294967296
+-32768 & 18446744073709551615
+18446744073709518848
+-32768 & 18446744073709551616
+18446744073709551616
+-32768 & 340282366920938463463374607431768211455
+340282366920938463463374607431768178688
+-32768 & 340282366920938463463374607431768211456
+340282366920938463463374607431768211456
+-32767 & -170141183460469231731687303715884105728
+-170141183460469231731687303715884105728
+-32767 & -170141183460469231731687303715884105727
+-170141183460469231731687303715884105727
+-32767 & -9223372036854775808
+-9223372036854775808
+-32767 & -9223372036854775807
+-9223372036854775807
+-32767 & -2147483648
+-2147483648
+-32767 & -2147483647
+-2147483647
+-32767 & -32768
+-32768
+-32767 & -32767
+-32767
+-32767 & -128
+-32768
+-32767 & -127
+-32767
+-32767 & 255
+1
+-32767 & 256
+0
+-32767 & 65535
+32769
+-32767 & 65536
+65536
+-32767 & 4294967295
+4294934529
+-32767 & 4294967296
+4294967296
+-32767 & 18446744073709551615
+18446744073709518849
+-32767 & 18446744073709551616
+18446744073709551616
+-32767 & 340282366920938463463374607431768211455
+340282366920938463463374607431768178689
+-32767 & 340282366920938463463374607431768211456
+340282366920938463463374607431768211456
+-128 & -170141183460469231731687303715884105728
+-170141183460469231731687303715884105728
+-128 & -170141183460469231731687303715884105727
+-170141183460469231731687303715884105728
+-128 & -9223372036854775808
+-9223372036854775808
+-128 & -9223372036854775807
+-9223372036854775808
+-128 & -2147483648
+-2147483648
+-128 & -2147483647
+-2147483648
+-128 & -32768
+-32768
+-128 & -32767
+-32768
+-128 & -128
+-128
+-128 & -127
+-128
+-128 & 255
+128
+-128 & 256
+256
+-128 & 65535
+65408
+-128 & 65536
+65536
+-128 & 4294967295
+4294967168
+-128 & 4294967296
+4294967296
+-128 & 18446744073709551615
+18446744073709551488
+-128 & 18446744073709551616
+18446744073709551616
+-128 & 340282366920938463463374607431768211455
+340282366920938463463374607431768211328
+-128 & 340282366920938463463374607431768211456
+340282366920938463463374607431768211456
+-127 & -170141183460469231731687303715884105728
+-170141183460469231731687303715884105728
+-127 & -170141183460469231731687303715884105727
+-170141183460469231731687303715884105727
+-127 & -9223372036854775808
+-9223372036854775808
+-127 & -9223372036854775807
+-9223372036854775807
+-127 & -2147483648
+-2147483648
+-127 & -2147483647
+-2147483647
+-127 & -32768
+-32768
+-127 & -32767
+-32767
+-127 & -128
+-128
+-127 & -127
+-127
+-127 & 255
+129
+-127 & 256
+256
+-127 & 65535
+65409
+-127 & 65536
+65536
+-127 & 4294967295
+4294967169
+-127 & 4294967296
+4294967296
+-127 & 18446744073709551615
+18446744073709551489
+-127 & 18446744073709551616
+18446744073709551616
+-127 & 340282366920938463463374607431768211455
+340282366920938463463374607431768211329
+-127 & 340282366920938463463374607431768211456
+340282366920938463463374607431768211456
+255 & -170141183460469231731687303715884105728
+0
+255 & -170141183460469231731687303715884105727
+1
+255 & -9223372036854775808
+0
+255 & -9223372036854775807
+1
+255 & -2147483648
+0
+255 & -2147483647
+1
+255 & -32768
+0
+255 & -32767
+1
+255 & -128
+128
+255 & -127
+129
+255 & 255
+255
+255 & 256
+0
+255 & 65535
+255
+255 & 65536
+0
+255 & 4294967295
+255
+255 & 4294967296
+0
+255 & 18446744073709551615
+255
+255 & 18446744073709551616
+0
+255 & 340282366920938463463374607431768211455
+255
+255 & 340282366920938463463374607431768211456
+0
+256 & -170141183460469231731687303715884105728
+0
+256 & -170141183460469231731687303715884105727
+0
+256 & -9223372036854775808
+0
+256 & -9223372036854775807
+0
+256 & -2147483648
+0
+256 & -2147483647
+0
+256 & -32768
+0
+256 & -32767
+0
+256 & -128
+256
+256 & -127
+256
+256 & 255
+0
+256 & 256
+256
+256 & 65535
+256
+256 & 65536
+0
+256 & 4294967295
+256
+256 & 4294967296
+0
+256 & 18446744073709551615
+256
+256 & 18446744073709551616
+0
+256 & 340282366920938463463374607431768211455
+256
+256 & 340282366920938463463374607431768211456
+0
+65535 & -170141183460469231731687303715884105728
+0
+65535 & -170141183460469231731687303715884105727
+1
+65535 & -9223372036854775808
+0
+65535 & -9223372036854775807
+1
+65535 & -2147483648
+0
+65535 & -2147483647
+1
+65535 & -32768
+32768
+65535 & -32767
+32769
+65535 & -128
+65408
+65535 & -127
+65409
+65535 & 255
+255
+65535 & 256
+256
+65535 & 65535
+65535
+65535 & 65536
+0
+65535 & 4294967295
+65535
+65535 & 4294967296
+0
+65535 & 18446744073709551615
+65535
+65535 & 18446744073709551616
+0
+65535 & 340282366920938463463374607431768211455
+65535
+65535 & 340282366920938463463374607431768211456
+0
+65536 & -170141183460469231731687303715884105728
+0
+65536 & -170141183460469231731687303715884105727
+0
+65536 & -9223372036854775808
+0
+65536 & -9223372036854775807
+0
+65536 & -2147483648
+0
+65536 & -2147483647
+0
+65536 & -32768
+65536
+65536 & -32767
+65536
+65536 & -128
+65536
+65536 & -127
+65536
+65536 & 255
+0
+65536 & 256
+0
+65536 & 65535
+0
+65536 & 65536
+65536
+65536 & 4294967295
+65536
+65536 & 4294967296
+0
+65536 & 18446744073709551615
+65536
+65536 & 18446744073709551616
+0
+65536 & 340282366920938463463374607431768211455
+65536
+65536 & 340282366920938463463374607431768211456
+0
+4294967295 & -170141183460469231731687303715884105728
+0
+4294967295 & -170141183460469231731687303715884105727
+1
+4294967295 & -9223372036854775808
+0
+4294967295 & -9223372036854775807
+1
+4294967295 & -2147483648
+2147483648
+4294967295 & -2147483647
+2147483649
+4294967295 & -32768
+4294934528
+4294967295 & -32767
+4294934529
+4294967295 & -128
+4294967168
+4294967295 & -127
+4294967169
+4294967295 & 255
+255
+4294967295 & 256
+256
+4294967295 & 65535
+65535
+4294967295 & 65536
+65536
+4294967295 & 4294967295
+4294967295
+4294967295 & 4294967296
+0
+4294967295 & 18446744073709551615
+4294967295
+4294967295 & 18446744073709551616
+0
+4294967295 & 340282366920938463463374607431768211455
+4294967295
+4294967295 & 340282366920938463463374607431768211456
+0
+4294967296 & -170141183460469231731687303715884105728
+0
+4294967296 & -170141183460469231731687303715884105727
+0
+4294967296 & -9223372036854775808
+0
+4294967296 & -9223372036854775807
+0
+4294967296 & -2147483648
+4294967296
+4294967296 & -2147483647
+4294967296
+4294967296 & -32768
+4294967296
+4294967296 & -32767
+4294967296
+4294967296 & -128
+4294967296
+4294967296 & -127
+4294967296
+4294967296 & 255
+0
+4294967296 & 256
+0
+4294967296 & 65535
+0
+4294967296 & 65536
+0
+4294967296 & 4294967295
+0
+4294967296 & 4294967296
+4294967296
+4294967296 & 18446744073709551615
+4294967296
+4294967296 & 18446744073709551616
+0
+4294967296 & 340282366920938463463374607431768211455
+4294967296
+4294967296 & 340282366920938463463374607431768211456
+0
+18446744073709551615 & -170141183460469231731687303715884105728
+0
+18446744073709551615 & -170141183460469231731687303715884105727
+1
+18446744073709551615 & -9223372036854775808
+9223372036854775808
+18446744073709551615 & -9223372036854775807
+9223372036854775809
+18446744073709551615 & -2147483648
+18446744071562067968
+18446744073709551615 & -2147483647
+18446744071562067969
+18446744073709551615 & -32768
+18446744073709518848
+18446744073709551615 & -32767
+18446744073709518849
+18446744073709551615 & -128
+18446744073709551488
+18446744073709551615 & -127
+18446744073709551489
+18446744073709551615 & 255
+255
+18446744073709551615 & 256
+256
+18446744073709551615 & 65535
+65535
+18446744073709551615 & 65536
+65536
+18446744073709551615 & 4294967295
+4294967295
+18446744073709551615 & 4294967296
+4294967296
+18446744073709551615 & 18446744073709551615
+18446744073709551615
+18446744073709551615 & 18446744073709551616
+0
+18446744073709551615 & 340282366920938463463374607431768211455
+18446744073709551615
+18446744073709551615 & 340282366920938463463374607431768211456
+0
+18446744073709551616 & -170141183460469231731687303715884105728
+0
+18446744073709551616 & -170141183460469231731687303715884105727
+0
+18446744073709551616 & -9223372036854775808
+18446744073709551616
+18446744073709551616 & -9223372036854775807
+18446744073709551616
+18446744073709551616 & -2147483648
+18446744073709551616
+18446744073709551616 & -2147483647
+18446744073709551616
+18446744073709551616 & -32768
+18446744073709551616
+18446744073709551616 & -32767
+18446744073709551616
+18446744073709551616 & -128
+18446744073709551616
+18446744073709551616 & -127
+18446744073709551616
+18446744073709551616 & 255
+0
+18446744073709551616 & 256
+0
+18446744073709551616 & 65535
+0
+18446744073709551616 & 65536
+0
+18446744073709551616 & 4294967295
+0
+18446744073709551616 & 4294967296
+0
+18446744073709551616 & 18446744073709551615
+0
+18446744073709551616 & 18446744073709551616
+18446744073709551616
+18446744073709551616 & 340282366920938463463374607431768211455
+18446744073709551616
+18446744073709551616 & 340282366920938463463374607431768211456
+0
+340282366920938463463374607431768211455 & -170141183460469231731687303715884105728
+170141183460469231731687303715884105728
+340282366920938463463374607431768211455 & -170141183460469231731687303715884105727
+170141183460469231731687303715884105729
+340282366920938463463374607431768211455 & -9223372036854775808
+340282366920938463454151235394913435648
+340282366920938463463374607431768211455 & -9223372036854775807
+340282366920938463454151235394913435649
+340282366920938463463374607431768211455 & -2147483648
+340282366920938463463374607429620727808
+340282366920938463463374607431768211455 & -2147483647
+340282366920938463463374607429620727809
+340282366920938463463374607431768211455 & -32768
+340282366920938463463374607431768178688
+340282366920938463463374607431768211455 & -32767
+340282366920938463463374607431768178689
+340282366920938463463374607431768211455 & -128
+340282366920938463463374607431768211328
+340282366920938463463374607431768211455 & -127
+340282366920938463463374607431768211329
+340282366920938463463374607431768211455 & 255
+255
+340282366920938463463374607431768211455 & 256
+256
+340282366920938463463374607431768211455 & 65535
+65535
+340282366920938463463374607431768211455 & 65536
+65536
+340282366920938463463374607431768211455 & 4294967295
+4294967295
+340282366920938463463374607431768211455 & 4294967296
+4294967296
+340282366920938463463374607431768211455 & 18446744073709551615
+18446744073709551615
+340282366920938463463374607431768211455 & 18446744073709551616
+18446744073709551616
+340282366920938463463374607431768211455 & 340282366920938463463374607431768211455
+340282366920938463463374607431768211455
+340282366920938463463374607431768211455 & 340282366920938463463374607431768211456
+0
+340282366920938463463374607431768211456 & -170141183460469231731687303715884105728
+340282366920938463463374607431768211456
+340282366920938463463374607431768211456 & -170141183460469231731687303715884105727
+340282366920938463463374607431768211456
+340282366920938463463374607431768211456 & -9223372036854775808
+340282366920938463463374607431768211456
+340282366920938463463374607431768211456 & -9223372036854775807
+340282366920938463463374607431768211456
+340282366920938463463374607431768211456 & -2147483648
+340282366920938463463374607431768211456
+340282366920938463463374607431768211456 & -2147483647
+340282366920938463463374607431768211456
+340282366920938463463374607431768211456 & -32768
+340282366920938463463374607431768211456
+340282366920938463463374607431768211456 & -32767
+340282366920938463463374607431768211456
+340282366920938463463374607431768211456 & -128
+340282366920938463463374607431768211456
+340282366920938463463374607431768211456 & -127
+340282366920938463463374607431768211456
+340282366920938463463374607431768211456 & 255
+0
+340282366920938463463374607431768211456 & 256
+0
+340282366920938463463374607431768211456 & 65535
+0
+340282366920938463463374607431768211456 & 65536
+0
+340282366920938463463374607431768211456 & 4294967295
+0
+340282366920938463463374607431768211456 & 4294967296
+0
+340282366920938463463374607431768211456 & 18446744073709551615
+0
+340282366920938463463374607431768211456 & 18446744073709551616
+0
+340282366920938463463374607431768211456 & 340282366920938463463374607431768211455
+0
+340282366920938463463374607431768211456 & 340282366920938463463374607431768211456
+340282366920938463463374607431768211456
diff --git a/test/ic3/integer_band.ret.expected b/test/ic3/integer_band.ret.expected
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/test/ic3/integer_band.ret.expected
@@ -0,0 +1 @@
+0
diff --git a/test/ic3/integer_bor.in b/test/ic3/integer_bor.in
new file mode 100644
index 0000000..c8087db
--- /dev/null
+++ b/test/ic3/integer_bor.in
@@ -0,0 +1,800 @@
+quote -170141183460469231731687303715884105728 bor -170141183460469231731687303715884105728
+-170141183460469231731687303715884105728 bor -170141183460469231731687303715884105728
+quote -170141183460469231731687303715884105728 bor -170141183460469231731687303715884105727
+-170141183460469231731687303715884105728 bor -170141183460469231731687303715884105727
+quote -170141183460469231731687303715884105728 bor -9223372036854775808
+-170141183460469231731687303715884105728 bor -9223372036854775808
+quote -170141183460469231731687303715884105728 bor -9223372036854775807
+-170141183460469231731687303715884105728 bor -9223372036854775807
+quote -170141183460469231731687303715884105728 bor -2147483648
+-170141183460469231731687303715884105728 bor -2147483648
+quote -170141183460469231731687303715884105728 bor -2147483647
+-170141183460469231731687303715884105728 bor -2147483647
+quote -170141183460469231731687303715884105728 bor -32768
+-170141183460469231731687303715884105728 bor -32768
+quote -170141183460469231731687303715884105728 bor -32767
+-170141183460469231731687303715884105728 bor -32767
+quote -170141183460469231731687303715884105728 bor -128
+-170141183460469231731687303715884105728 bor -128
+quote -170141183460469231731687303715884105728 bor -127
+-170141183460469231731687303715884105728 bor -127
+quote -170141183460469231731687303715884105728 bor 255
+-170141183460469231731687303715884105728 bor 255
+quote -170141183460469231731687303715884105728 bor 256
+-170141183460469231731687303715884105728 bor 256
+quote -170141183460469231731687303715884105728 bor 65535
+-170141183460469231731687303715884105728 bor 65535
+quote -170141183460469231731687303715884105728 bor 65536
+-170141183460469231731687303715884105728 bor 65536
+quote -170141183460469231731687303715884105728 bor 4294967295
+-170141183460469231731687303715884105728 bor 4294967295
+quote -170141183460469231731687303715884105728 bor 4294967296
+-170141183460469231731687303715884105728 bor 4294967296
+quote -170141183460469231731687303715884105728 bor 18446744073709551615
+-170141183460469231731687303715884105728 bor 18446744073709551615
+quote -170141183460469231731687303715884105728 bor 18446744073709551616
+-170141183460469231731687303715884105728 bor 18446744073709551616
+quote -170141183460469231731687303715884105728 bor 340282366920938463463374607431768211455
+-170141183460469231731687303715884105728 bor 340282366920938463463374607431768211455
+quote -170141183460469231731687303715884105728 bor 340282366920938463463374607431768211456
+-170141183460469231731687303715884105728 bor 340282366920938463463374607431768211456
+quote -170141183460469231731687303715884105727 bor -170141183460469231731687303715884105728
+-170141183460469231731687303715884105727 bor -170141183460469231731687303715884105728
+quote -170141183460469231731687303715884105727 bor -170141183460469231731687303715884105727
+-170141183460469231731687303715884105727 bor -170141183460469231731687303715884105727
+quote -170141183460469231731687303715884105727 bor -9223372036854775808
+-170141183460469231731687303715884105727 bor -9223372036854775808
+quote -170141183460469231731687303715884105727 bor -9223372036854775807
+-170141183460469231731687303715884105727 bor -9223372036854775807
+quote -170141183460469231731687303715884105727 bor -2147483648
+-170141183460469231731687303715884105727 bor -2147483648
+quote -170141183460469231731687303715884105727 bor -2147483647
+-170141183460469231731687303715884105727 bor -2147483647
+quote -170141183460469231731687303715884105727 bor -32768
+-170141183460469231731687303715884105727 bor -32768
+quote -170141183460469231731687303715884105727 bor -32767
+-170141183460469231731687303715884105727 bor -32767
+quote -170141183460469231731687303715884105727 bor -128
+-170141183460469231731687303715884105727 bor -128
+quote -170141183460469231731687303715884105727 bor -127
+-170141183460469231731687303715884105727 bor -127
+quote -170141183460469231731687303715884105727 bor 255
+-170141183460469231731687303715884105727 bor 255
+quote -170141183460469231731687303715884105727 bor 256
+-170141183460469231731687303715884105727 bor 256
+quote -170141183460469231731687303715884105727 bor 65535
+-170141183460469231731687303715884105727 bor 65535
+quote -170141183460469231731687303715884105727 bor 65536
+-170141183460469231731687303715884105727 bor 65536
+quote -170141183460469231731687303715884105727 bor 4294967295
+-170141183460469231731687303715884105727 bor 4294967295
+quote -170141183460469231731687303715884105727 bor 4294967296
+-170141183460469231731687303715884105727 bor 4294967296
+quote -170141183460469231731687303715884105727 bor 18446744073709551615
+-170141183460469231731687303715884105727 bor 18446744073709551615
+quote -170141183460469231731687303715884105727 bor 18446744073709551616
+-170141183460469231731687303715884105727 bor 18446744073709551616
+quote -170141183460469231731687303715884105727 bor 340282366920938463463374607431768211455
+-170141183460469231731687303715884105727 bor 340282366920938463463374607431768211455
+quote -170141183460469231731687303715884105727 bor 340282366920938463463374607431768211456
+-170141183460469231731687303715884105727 bor 340282366920938463463374607431768211456
+quote -9223372036854775808 bor -170141183460469231731687303715884105728
+-9223372036854775808 bor -170141183460469231731687303715884105728
+quote -9223372036854775808 bor -170141183460469231731687303715884105727
+-9223372036854775808 bor -170141183460469231731687303715884105727
+quote -9223372036854775808 bor -9223372036854775808
+-9223372036854775808 bor -9223372036854775808
+quote -9223372036854775808 bor -9223372036854775807
+-9223372036854775808 bor -9223372036854775807
+quote -9223372036854775808 bor -2147483648
+-9223372036854775808 bor -2147483648
+quote -9223372036854775808 bor -2147483647
+-9223372036854775808 bor -2147483647
+quote -9223372036854775808 bor -32768
+-9223372036854775808 bor -32768
+quote -9223372036854775808 bor -32767
+-9223372036854775808 bor -32767
+quote -9223372036854775808 bor -128
+-9223372036854775808 bor -128
+quote -9223372036854775808 bor -127
+-9223372036854775808 bor -127
+quote -9223372036854775808 bor 255
+-9223372036854775808 bor 255
+quote -9223372036854775808 bor 256
+-9223372036854775808 bor 256
+quote -9223372036854775808 bor 65535
+-9223372036854775808 bor 65535
+quote -9223372036854775808 bor 65536
+-9223372036854775808 bor 65536
+quote -9223372036854775808 bor 4294967295
+-9223372036854775808 bor 4294967295
+quote -9223372036854775808 bor 4294967296
+-9223372036854775808 bor 4294967296
+quote -9223372036854775808 bor 18446744073709551615
+-9223372036854775808 bor 18446744073709551615
+quote -9223372036854775808 bor 18446744073709551616
+-9223372036854775808 bor 18446744073709551616
+quote -9223372036854775808 bor 340282366920938463463374607431768211455
+-9223372036854775808 bor 340282366920938463463374607431768211455
+quote -9223372036854775808 bor 340282366920938463463374607431768211456
+-9223372036854775808 bor 340282366920938463463374607431768211456
+quote -9223372036854775807 bor -170141183460469231731687303715884105728
+-9223372036854775807 bor -170141183460469231731687303715884105728
+quote -9223372036854775807 bor -170141183460469231731687303715884105727
+-9223372036854775807 bor -170141183460469231731687303715884105727
+quote -9223372036854775807 bor -9223372036854775808
+-9223372036854775807 bor -9223372036854775808
+quote -9223372036854775807 bor -9223372036854775807
+-9223372036854775807 bor -9223372036854775807
+quote -9223372036854775807 bor -2147483648
+-9223372036854775807 bor -2147483648
+quote -9223372036854775807 bor -2147483647
+-9223372036854775807 bor -2147483647
+quote -9223372036854775807 bor -32768
+-9223372036854775807 bor -32768
+quote -9223372036854775807 bor -32767
+-9223372036854775807 bor -32767
+quote -9223372036854775807 bor -128
+-9223372036854775807 bor -128
+quote -9223372036854775807 bor -127
+-9223372036854775807 bor -127
+quote -9223372036854775807 bor 255
+-9223372036854775807 bor 255
+quote -9223372036854775807 bor 256
+-9223372036854775807 bor 256
+quote -9223372036854775807 bor 65535
+-9223372036854775807 bor 65535
+quote -9223372036854775807 bor 65536
+-9223372036854775807 bor 65536
+quote -9223372036854775807 bor 4294967295
+-9223372036854775807 bor 4294967295
+quote -9223372036854775807 bor 4294967296
+-9223372036854775807 bor 4294967296
+quote -9223372036854775807 bor 18446744073709551615
+-9223372036854775807 bor 18446744073709551615
+quote -9223372036854775807 bor 18446744073709551616
+-9223372036854775807 bor 18446744073709551616
+quote -9223372036854775807 bor 340282366920938463463374607431768211455
+-9223372036854775807 bor 340282366920938463463374607431768211455
+quote -9223372036854775807 bor 340282366920938463463374607431768211456
+-9223372036854775807 bor 340282366920938463463374607431768211456
+quote -2147483648 bor -170141183460469231731687303715884105728
+-2147483648 bor -170141183460469231731687303715884105728
+quote -2147483648 bor -170141183460469231731687303715884105727
+-2147483648 bor -170141183460469231731687303715884105727
+quote -2147483648 bor -9223372036854775808
+-2147483648 bor -9223372036854775808
+quote -2147483648 bor -9223372036854775807
+-2147483648 bor -9223372036854775807
+quote -2147483648 bor -2147483648
+-2147483648 bor -2147483648
+quote -2147483648 bor -2147483647
+-2147483648 bor -2147483647
+quote -2147483648 bor -32768
+-2147483648 bor -32768
+quote -2147483648 bor -32767
+-2147483648 bor -32767
+quote -2147483648 bor -128
+-2147483648 bor -128
+quote -2147483648 bor -127
+-2147483648 bor -127
+quote -2147483648 bor 255
+-2147483648 bor 255
+quote -2147483648 bor 256
+-2147483648 bor 256
+quote -2147483648 bor 65535
+-2147483648 bor 65535
+quote -2147483648 bor 65536
+-2147483648 bor 65536
+quote -2147483648 bor 4294967295
+-2147483648 bor 4294967295
+quote -2147483648 bor 4294967296
+-2147483648 bor 4294967296
+quote -2147483648 bor 18446744073709551615
+-2147483648 bor 18446744073709551615
+quote -2147483648 bor 18446744073709551616
+-2147483648 bor 18446744073709551616
+quote -2147483648 bor 340282366920938463463374607431768211455
+-2147483648 bor 340282366920938463463374607431768211455
+quote -2147483648 bor 340282366920938463463374607431768211456
+-2147483648 bor 340282366920938463463374607431768211456
+quote -2147483647 bor -170141183460469231731687303715884105728
+-2147483647 bor -170141183460469231731687303715884105728
+quote -2147483647 bor -170141183460469231731687303715884105727
+-2147483647 bor -170141183460469231731687303715884105727
+quote -2147483647 bor -9223372036854775808
+-2147483647 bor -9223372036854775808
+quote -2147483647 bor -9223372036854775807
+-2147483647 bor -9223372036854775807
+quote -2147483647 bor -2147483648
+-2147483647 bor -2147483648
+quote -2147483647 bor -2147483647
+-2147483647 bor -2147483647
+quote -2147483647 bor -32768
+-2147483647 bor -32768
+quote -2147483647 bor -32767
+-2147483647 bor -32767
+quote -2147483647 bor -128
+-2147483647 bor -128
+quote -2147483647 bor -127
+-2147483647 bor -127
+quote -2147483647 bor 255
+-2147483647 bor 255
+quote -2147483647 bor 256
+-2147483647 bor 256
+quote -2147483647 bor 65535
+-2147483647 bor 65535
+quote -2147483647 bor 65536
+-2147483647 bor 65536
+quote -2147483647 bor 4294967295
+-2147483647 bor 4294967295
+quote -2147483647 bor 4294967296
+-2147483647 bor 4294967296
+quote -2147483647 bor 18446744073709551615
+-2147483647 bor 18446744073709551615
+quote -2147483647 bor 18446744073709551616
+-2147483647 bor 18446744073709551616
+quote -2147483647 bor 340282366920938463463374607431768211455
+-2147483647 bor 340282366920938463463374607431768211455
+quote -2147483647 bor 340282366920938463463374607431768211456
+-2147483647 bor 340282366920938463463374607431768211456
+quote -32768 bor -170141183460469231731687303715884105728
+-32768 bor -170141183460469231731687303715884105728
+quote -32768 bor -170141183460469231731687303715884105727
+-32768 bor -170141183460469231731687303715884105727
+quote -32768 bor -9223372036854775808
+-32768 bor -9223372036854775808
+quote -32768 bor -9223372036854775807
+-32768 bor -9223372036854775807
+quote -32768 bor -2147483648
+-32768 bor -2147483648
+quote -32768 bor -2147483647
+-32768 bor -2147483647
+quote -32768 bor -32768
+-32768 bor -32768
+quote -32768 bor -32767
+-32768 bor -32767
+quote -32768 bor -128
+-32768 bor -128
+quote -32768 bor -127
+-32768 bor -127
+quote -32768 bor 255
+-32768 bor 255
+quote -32768 bor 256
+-32768 bor 256
+quote -32768 bor 65535
+-32768 bor 65535
+quote -32768 bor 65536
+-32768 bor 65536
+quote -32768 bor 4294967295
+-32768 bor 4294967295
+quote -32768 bor 4294967296
+-32768 bor 4294967296
+quote -32768 bor 18446744073709551615
+-32768 bor 18446744073709551615
+quote -32768 bor 18446744073709551616
+-32768 bor 18446744073709551616
+quote -32768 bor 340282366920938463463374607431768211455
+-32768 bor 340282366920938463463374607431768211455
+quote -32768 bor 340282366920938463463374607431768211456
+-32768 bor 340282366920938463463374607431768211456
+quote -32767 bor -170141183460469231731687303715884105728
+-32767 bor -170141183460469231731687303715884105728
+quote -32767 bor -170141183460469231731687303715884105727
+-32767 bor -170141183460469231731687303715884105727
+quote -32767 bor -9223372036854775808
+-32767 bor -9223372036854775808
+quote -32767 bor -9223372036854775807
+-32767 bor -9223372036854775807
+quote -32767 bor -2147483648
+-32767 bor -2147483648
+quote -32767 bor -2147483647
+-32767 bor -2147483647
+quote -32767 bor -32768
+-32767 bor -32768
+quote -32767 bor -32767
+-32767 bor -32767
+quote -32767 bor -128
+-32767 bor -128
+quote -32767 bor -127
+-32767 bor -127
+quote -32767 bor 255
+-32767 bor 255
+quote -32767 bor 256
+-32767 bor 256
+quote -32767 bor 65535
+-32767 bor 65535
+quote -32767 bor 65536
+-32767 bor 65536
+quote -32767 bor 4294967295
+-32767 bor 4294967295
+quote -32767 bor 4294967296
+-32767 bor 4294967296
+quote -32767 bor 18446744073709551615
+-32767 bor 18446744073709551615
+quote -32767 bor 18446744073709551616
+-32767 bor 18446744073709551616
+quote -32767 bor 340282366920938463463374607431768211455
+-32767 bor 340282366920938463463374607431768211455
+quote -32767 bor 340282366920938463463374607431768211456
+-32767 bor 340282366920938463463374607431768211456
+quote -128 bor -170141183460469231731687303715884105728
+-128 bor -170141183460469231731687303715884105728
+quote -128 bor -170141183460469231731687303715884105727
+-128 bor -170141183460469231731687303715884105727
+quote -128 bor -9223372036854775808
+-128 bor -9223372036854775808
+quote -128 bor -9223372036854775807
+-128 bor -9223372036854775807
+quote -128 bor -2147483648
+-128 bor -2147483648
+quote -128 bor -2147483647
+-128 bor -2147483647
+quote -128 bor -32768
+-128 bor -32768
+quote -128 bor -32767
+-128 bor -32767
+quote -128 bor -128
+-128 bor -128
+quote -128 bor -127
+-128 bor -127
+quote -128 bor 255
+-128 bor 255
+quote -128 bor 256
+-128 bor 256
+quote -128 bor 65535
+-128 bor 65535
+quote -128 bor 65536
+-128 bor 65536
+quote -128 bor 4294967295
+-128 bor 4294967295
+quote -128 bor 4294967296
+-128 bor 4294967296
+quote -128 bor 18446744073709551615
+-128 bor 18446744073709551615
+quote -128 bor 18446744073709551616
+-128 bor 18446744073709551616
+quote -128 bor 340282366920938463463374607431768211455
+-128 bor 340282366920938463463374607431768211455
+quote -128 bor 340282366920938463463374607431768211456
+-128 bor 340282366920938463463374607431768211456
+quote -127 bor -170141183460469231731687303715884105728
+-127 bor -170141183460469231731687303715884105728
+quote -127 bor -170141183460469231731687303715884105727
+-127 bor -170141183460469231731687303715884105727
+quote -127 bor -9223372036854775808
+-127 bor -9223372036854775808
+quote -127 bor -9223372036854775807
+-127 bor -9223372036854775807
+quote -127 bor -2147483648
+-127 bor -2147483648
+quote -127 bor -2147483647
+-127 bor -2147483647
+quote -127 bor -32768
+-127 bor -32768
+quote -127 bor -32767
+-127 bor -32767
+quote -127 bor -128
+-127 bor -128
+quote -127 bor -127
+-127 bor -127
+quote -127 bor 255
+-127 bor 255
+quote -127 bor 256
+-127 bor 256
+quote -127 bor 65535
+-127 bor 65535
+quote -127 bor 65536
+-127 bor 65536
+quote -127 bor 4294967295
+-127 bor 4294967295
+quote -127 bor 4294967296
+-127 bor 4294967296
+quote -127 bor 18446744073709551615
+-127 bor 18446744073709551615
+quote -127 bor 18446744073709551616
+-127 bor 18446744073709551616
+quote -127 bor 340282366920938463463374607431768211455
+-127 bor 340282366920938463463374607431768211455
+quote -127 bor 340282366920938463463374607431768211456
+-127 bor 340282366920938463463374607431768211456
+quote 255 bor -170141183460469231731687303715884105728
+255 bor -170141183460469231731687303715884105728
+quote 255 bor -170141183460469231731687303715884105727
+255 bor -170141183460469231731687303715884105727
+quote 255 bor -9223372036854775808
+255 bor -9223372036854775808
+quote 255 bor -9223372036854775807
+255 bor -9223372036854775807
+quote 255 bor -2147483648
+255 bor -2147483648
+quote 255 bor -2147483647
+255 bor -2147483647
+quote 255 bor -32768
+255 bor -32768
+quote 255 bor -32767
+255 bor -32767
+quote 255 bor -128
+255 bor -128
+quote 255 bor -127
+255 bor -127
+quote 255 bor 255
+255 bor 255
+quote 255 bor 256
+255 bor 256
+quote 255 bor 65535
+255 bor 65535
+quote 255 bor 65536
+255 bor 65536
+quote 255 bor 4294967295
+255 bor 4294967295
+quote 255 bor 4294967296
+255 bor 4294967296
+quote 255 bor 18446744073709551615
+255 bor 18446744073709551615
+quote 255 bor 18446744073709551616
+255 bor 18446744073709551616
+quote 255 bor 340282366920938463463374607431768211455
+255 bor 340282366920938463463374607431768211455
+quote 255 bor 340282366920938463463374607431768211456
+255 bor 340282366920938463463374607431768211456
+quote 256 bor -170141183460469231731687303715884105728
+256 bor -170141183460469231731687303715884105728
+quote 256 bor -170141183460469231731687303715884105727
+256 bor -170141183460469231731687303715884105727
+quote 256 bor -9223372036854775808
+256 bor -9223372036854775808
+quote 256 bor -9223372036854775807
+256 bor -9223372036854775807
+quote 256 bor -2147483648
+256 bor -2147483648
+quote 256 bor -2147483647
+256 bor -2147483647
+quote 256 bor -32768
+256 bor -32768
+quote 256 bor -32767
+256 bor -32767
+quote 256 bor -128
+256 bor -128
+quote 256 bor -127
+256 bor -127
+quote 256 bor 255
+256 bor 255
+quote 256 bor 256
+256 bor 256
+quote 256 bor 65535
+256 bor 65535
+quote 256 bor 65536
+256 bor 65536
+quote 256 bor 4294967295
+256 bor 4294967295
+quote 256 bor 4294967296
+256 bor 4294967296
+quote 256 bor 18446744073709551615
+256 bor 18446744073709551615
+quote 256 bor 18446744073709551616
+256 bor 18446744073709551616
+quote 256 bor 340282366920938463463374607431768211455
+256 bor 340282366920938463463374607431768211455
+quote 256 bor 340282366920938463463374607431768211456
+256 bor 340282366920938463463374607431768211456
+quote 65535 bor -170141183460469231731687303715884105728
+65535 bor -170141183460469231731687303715884105728
+quote 65535 bor -170141183460469231731687303715884105727
+65535 bor -170141183460469231731687303715884105727
+quote 65535 bor -9223372036854775808
+65535 bor -9223372036854775808
+quote 65535 bor -9223372036854775807
+65535 bor -9223372036854775807
+quote 65535 bor -2147483648
+65535 bor -2147483648
+quote 65535 bor -2147483647
+65535 bor -2147483647
+quote 65535 bor -32768
+65535 bor -32768
+quote 65535 bor -32767
+65535 bor -32767
+quote 65535 bor -128
+65535 bor -128
+quote 65535 bor -127
+65535 bor -127
+quote 65535 bor 255
+65535 bor 255
+quote 65535 bor 256
+65535 bor 256
+quote 65535 bor 65535
+65535 bor 65535
+quote 65535 bor 65536
+65535 bor 65536
+quote 65535 bor 4294967295
+65535 bor 4294967295
+quote 65535 bor 4294967296
+65535 bor 4294967296
+quote 65535 bor 18446744073709551615
+65535 bor 18446744073709551615
+quote 65535 bor 18446744073709551616
+65535 bor 18446744073709551616
+quote 65535 bor 340282366920938463463374607431768211455
+65535 bor 340282366920938463463374607431768211455
+quote 65535 bor 340282366920938463463374607431768211456
+65535 bor 340282366920938463463374607431768211456
+quote 65536 bor -170141183460469231731687303715884105728
+65536 bor -170141183460469231731687303715884105728
+quote 65536 bor -170141183460469231731687303715884105727
+65536 bor -170141183460469231731687303715884105727
+quote 65536 bor -9223372036854775808
+65536 bor -9223372036854775808
+quote 65536 bor -9223372036854775807
+65536 bor -9223372036854775807
+quote 65536 bor -2147483648
+65536 bor -2147483648
+quote 65536 bor -2147483647
+65536 bor -2147483647
+quote 65536 bor -32768
+65536 bor -32768
+quote 65536 bor -32767
+65536 bor -32767
+quote 65536 bor -128
+65536 bor -128
+quote 65536 bor -127
+65536 bor -127
+quote 65536 bor 255
+65536 bor 255
+quote 65536 bor 256
+65536 bor 256
+quote 65536 bor 65535
+65536 bor 65535
+quote 65536 bor 65536
+65536 bor 65536
+quote 65536 bor 4294967295
+65536 bor 4294967295
+quote 65536 bor 4294967296
+65536 bor 4294967296
+quote 65536 bor 18446744073709551615
+65536 bor 18446744073709551615
+quote 65536 bor 18446744073709551616
+65536 bor 18446744073709551616
+quote 65536 bor 340282366920938463463374607431768211455
+65536 bor 340282366920938463463374607431768211455
+quote 65536 bor 340282366920938463463374607431768211456
+65536 bor 340282366920938463463374607431768211456
+quote 4294967295 bor -170141183460469231731687303715884105728
+4294967295 bor -170141183460469231731687303715884105728
+quote 4294967295 bor -170141183460469231731687303715884105727
+4294967295 bor -170141183460469231731687303715884105727
+quote 4294967295 bor -9223372036854775808
+4294967295 bor -9223372036854775808
+quote 4294967295 bor -9223372036854775807
+4294967295 bor -9223372036854775807
+quote 4294967295 bor -2147483648
+4294967295 bor -2147483648
+quote 4294967295 bor -2147483647
+4294967295 bor -2147483647
+quote 4294967295 bor -32768
+4294967295 bor -32768
+quote 4294967295 bor -32767
+4294967295 bor -32767
+quote 4294967295 bor -128
+4294967295 bor -128
+quote 4294967295 bor -127
+4294967295 bor -127
+quote 4294967295 bor 255
+4294967295 bor 255
+quote 4294967295 bor 256
+4294967295 bor 256
+quote 4294967295 bor 65535
+4294967295 bor 65535
+quote 4294967295 bor 65536
+4294967295 bor 65536
+quote 4294967295 bor 4294967295
+4294967295 bor 4294967295
+quote 4294967295 bor 4294967296
+4294967295 bor 4294967296
+quote 4294967295 bor 18446744073709551615
+4294967295 bor 18446744073709551615
+quote 4294967295 bor 18446744073709551616
+4294967295 bor 18446744073709551616
+quote 4294967295 bor 340282366920938463463374607431768211455
+4294967295 bor 340282366920938463463374607431768211455
+quote 4294967295 bor 340282366920938463463374607431768211456
+4294967295 bor 340282366920938463463374607431768211456
+quote 4294967296 bor -170141183460469231731687303715884105728
+4294967296 bor -170141183460469231731687303715884105728
+quote 4294967296 bor -170141183460469231731687303715884105727
+4294967296 bor -170141183460469231731687303715884105727
+quote 4294967296 bor -9223372036854775808
+4294967296 bor -9223372036854775808
+quote 4294967296 bor -9223372036854775807
+4294967296 bor -9223372036854775807
+quote 4294967296 bor -2147483648
+4294967296 bor -2147483648
+quote 4294967296 bor -2147483647
+4294967296 bor -2147483647
+quote 4294967296 bor -32768
+4294967296 bor -32768
+quote 4294967296 bor -32767
+4294967296 bor -32767
+quote 4294967296 bor -128
+4294967296 bor -128
+quote 4294967296 bor -127
+4294967296 bor -127
+quote 4294967296 bor 255
+4294967296 bor 255
+quote 4294967296 bor 256
+4294967296 bor 256
+quote 4294967296 bor 65535
+4294967296 bor 65535
+quote 4294967296 bor 65536
+4294967296 bor 65536
+quote 4294967296 bor 4294967295
+4294967296 bor 4294967295
+quote 4294967296 bor 4294967296
+4294967296 bor 4294967296
+quote 4294967296 bor 18446744073709551615
+4294967296 bor 18446744073709551615
+quote 4294967296 bor 18446744073709551616
+4294967296 bor 18446744073709551616
+quote 4294967296 bor 340282366920938463463374607431768211455
+4294967296 bor 340282366920938463463374607431768211455
+quote 4294967296 bor 340282366920938463463374607431768211456
+4294967296 bor 340282366920938463463374607431768211456
+quote 18446744073709551615 bor -170141183460469231731687303715884105728
+18446744073709551615 bor -170141183460469231731687303715884105728
+quote 18446744073709551615 bor -170141183460469231731687303715884105727
+18446744073709551615 bor -170141183460469231731687303715884105727
+quote 18446744073709551615 bor -9223372036854775808
+18446744073709551615 bor -9223372036854775808
+quote 18446744073709551615 bor -9223372036854775807
+18446744073709551615 bor -9223372036854775807
+quote 18446744073709551615 bor -2147483648
+18446744073709551615 bor -2147483648
+quote 18446744073709551615 bor -2147483647
+18446744073709551615 bor -2147483647
+quote 18446744073709551615 bor -32768
+18446744073709551615 bor -32768
+quote 18446744073709551615 bor -32767
+18446744073709551615 bor -32767
+quote 18446744073709551615 bor -128
+18446744073709551615 bor -128
+quote 18446744073709551615 bor -127
+18446744073709551615 bor -127
+quote 18446744073709551615 bor 255
+18446744073709551615 bor 255
+quote 18446744073709551615 bor 256
+18446744073709551615 bor 256
+quote 18446744073709551615 bor 65535
+18446744073709551615 bor 65535
+quote 18446744073709551615 bor 65536
+18446744073709551615 bor 65536
+quote 18446744073709551615 bor 4294967295
+18446744073709551615 bor 4294967295
+quote 18446744073709551615 bor 4294967296
+18446744073709551615 bor 4294967296
+quote 18446744073709551615 bor 18446744073709551615
+18446744073709551615 bor 18446744073709551615
+quote 18446744073709551615 bor 18446744073709551616
+18446744073709551615 bor 18446744073709551616
+quote 18446744073709551615 bor 340282366920938463463374607431768211455
+18446744073709551615 bor 340282366920938463463374607431768211455
+quote 18446744073709551615 bor 340282366920938463463374607431768211456
+18446744073709551615 bor 340282366920938463463374607431768211456
+quote 18446744073709551616 bor -170141183460469231731687303715884105728
+18446744073709551616 bor -170141183460469231731687303715884105728
+quote 18446744073709551616 bor -170141183460469231731687303715884105727
+18446744073709551616 bor -170141183460469231731687303715884105727
+quote 18446744073709551616 bor -9223372036854775808
+18446744073709551616 bor -9223372036854775808
+quote 18446744073709551616 bor -9223372036854775807
+18446744073709551616 bor -9223372036854775807
+quote 18446744073709551616 bor -2147483648
+18446744073709551616 bor -2147483648
+quote 18446744073709551616 bor -2147483647
+18446744073709551616 bor -2147483647
+quote 18446744073709551616 bor -32768
+18446744073709551616 bor -32768
+quote 18446744073709551616 bor -32767
+18446744073709551616 bor -32767
+quote 18446744073709551616 bor -128
+18446744073709551616 bor -128
+quote 18446744073709551616 bor -127
+18446744073709551616 bor -127
+quote 18446744073709551616 bor 255
+18446744073709551616 bor 255
+quote 18446744073709551616 bor 256
+18446744073709551616 bor 256
+quote 18446744073709551616 bor 65535
+18446744073709551616 bor 65535
+quote 18446744073709551616 bor 65536
+18446744073709551616 bor 65536
+quote 18446744073709551616 bor 4294967295
+18446744073709551616 bor 4294967295
+quote 18446744073709551616 bor 4294967296
+18446744073709551616 bor 4294967296
+quote 18446744073709551616 bor 18446744073709551615
+18446744073709551616 bor 18446744073709551615
+quote 18446744073709551616 bor 18446744073709551616
+18446744073709551616 bor 18446744073709551616
+quote 18446744073709551616 bor 340282366920938463463374607431768211455
+18446744073709551616 bor 340282366920938463463374607431768211455
+quote 18446744073709551616 bor 340282366920938463463374607431768211456
+18446744073709551616 bor 340282366920938463463374607431768211456
+quote 340282366920938463463374607431768211455 bor -170141183460469231731687303715884105728
+340282366920938463463374607431768211455 bor -170141183460469231731687303715884105728
+quote 340282366920938463463374607431768211455 bor -170141183460469231731687303715884105727
+340282366920938463463374607431768211455 bor -170141183460469231731687303715884105727
+quote 340282366920938463463374607431768211455 bor -9223372036854775808
+340282366920938463463374607431768211455 bor -9223372036854775808
+quote 340282366920938463463374607431768211455 bor -9223372036854775807
+340282366920938463463374607431768211455 bor -9223372036854775807
+quote 340282366920938463463374607431768211455 bor -2147483648
+340282366920938463463374607431768211455 bor -2147483648
+quote 340282366920938463463374607431768211455 bor -2147483647
+340282366920938463463374607431768211455 bor -2147483647
+quote 340282366920938463463374607431768211455 bor -32768
+340282366920938463463374607431768211455 bor -32768
+quote 340282366920938463463374607431768211455 bor -32767
+340282366920938463463374607431768211455 bor -32767
+quote 340282366920938463463374607431768211455 bor -128
+340282366920938463463374607431768211455 bor -128
+quote 340282366920938463463374607431768211455 bor -127
+340282366920938463463374607431768211455 bor -127
+quote 340282366920938463463374607431768211455 bor 255
+340282366920938463463374607431768211455 bor 255
+quote 340282366920938463463374607431768211455 bor 256
+340282366920938463463374607431768211455 bor 256
+quote 340282366920938463463374607431768211455 bor 65535
+340282366920938463463374607431768211455 bor 65535
+quote 340282366920938463463374607431768211455 bor 65536
+340282366920938463463374607431768211455 bor 65536
+quote 340282366920938463463374607431768211455 bor 4294967295
+340282366920938463463374607431768211455 bor 4294967295
+quote 340282366920938463463374607431768211455 bor 4294967296
+340282366920938463463374607431768211455 bor 4294967296
+quote 340282366920938463463374607431768211455 bor 18446744073709551615
+340282366920938463463374607431768211455 bor 18446744073709551615
+quote 340282366920938463463374607431768211455 bor 18446744073709551616
+340282366920938463463374607431768211455 bor 18446744073709551616
+quote 340282366920938463463374607431768211455 bor 340282366920938463463374607431768211455
+340282366920938463463374607431768211455 bor 340282366920938463463374607431768211455
+quote 340282366920938463463374607431768211455 bor 340282366920938463463374607431768211456
+340282366920938463463374607431768211455 bor 340282366920938463463374607431768211456
+quote 340282366920938463463374607431768211456 bor -170141183460469231731687303715884105728
+340282366920938463463374607431768211456 bor -170141183460469231731687303715884105728
+quote 340282366920938463463374607431768211456 bor -170141183460469231731687303715884105727
+340282366920938463463374607431768211456 bor -170141183460469231731687303715884105727
+quote 340282366920938463463374607431768211456 bor -9223372036854775808
+340282366920938463463374607431768211456 bor -9223372036854775808
+quote 340282366920938463463374607431768211456 bor -9223372036854775807
+340282366920938463463374607431768211456 bor -9223372036854775807
+quote 340282366920938463463374607431768211456 bor -2147483648
+340282366920938463463374607431768211456 bor -2147483648
+quote 340282366920938463463374607431768211456 bor -2147483647
+340282366920938463463374607431768211456 bor -2147483647
+quote 340282366920938463463374607431768211456 bor -32768
+340282366920938463463374607431768211456 bor -32768
+quote 340282366920938463463374607431768211456 bor -32767
+340282366920938463463374607431768211456 bor -32767
+quote 340282366920938463463374607431768211456 bor -128
+340282366920938463463374607431768211456 bor -128
+quote 340282366920938463463374607431768211456 bor -127
+340282366920938463463374607431768211456 bor -127
+quote 340282366920938463463374607431768211456 bor 255
+340282366920938463463374607431768211456 bor 255
+quote 340282366920938463463374607431768211456 bor 256
+340282366920938463463374607431768211456 bor 256
+quote 340282366920938463463374607431768211456 bor 65535
+340282366920938463463374607431768211456 bor 65535
+quote 340282366920938463463374607431768211456 bor 65536
+340282366920938463463374607431768211456 bor 65536
+quote 340282366920938463463374607431768211456 bor 4294967295
+340282366920938463463374607431768211456 bor 4294967295
+quote 340282366920938463463374607431768211456 bor 4294967296
+340282366920938463463374607431768211456 bor 4294967296
+quote 340282366920938463463374607431768211456 bor 18446744073709551615
+340282366920938463463374607431768211456 bor 18446744073709551615
+quote 340282366920938463463374607431768211456 bor 18446744073709551616
+340282366920938463463374607431768211456 bor 18446744073709551616
+quote 340282366920938463463374607431768211456 bor 340282366920938463463374607431768211455
+340282366920938463463374607431768211456 bor 340282366920938463463374607431768211455
+quote 340282366920938463463374607431768211456 bor 340282366920938463463374607431768211456
+340282366920938463463374607431768211456 bor 340282366920938463463374607431768211456
diff --git a/test/ic3/integer_bor.out.expected b/test/ic3/integer_bor.out.expected
new file mode 100644
index 0000000..c0fa0ba
--- /dev/null
+++ b/test/ic3/integer_bor.out.expected
@@ -0,0 +1,800 @@
+-170141183460469231731687303715884105728 bor -170141183460469231731687303715884105728
+-170141183460469231731687303715884105728
+-170141183460469231731687303715884105728 bor -170141183460469231731687303715884105727
+-170141183460469231731687303715884105727
+-170141183460469231731687303715884105728 bor -9223372036854775808
+-9223372036854775808
+-170141183460469231731687303715884105728 bor -9223372036854775807
+-9223372036854775807
+-170141183460469231731687303715884105728 bor -2147483648
+-2147483648
+-170141183460469231731687303715884105728 bor -2147483647
+-2147483647
+-170141183460469231731687303715884105728 bor -32768
+-32768
+-170141183460469231731687303715884105728 bor -32767
+-32767
+-170141183460469231731687303715884105728 bor -128
+-128
+-170141183460469231731687303715884105728 bor -127
+-127
+-170141183460469231731687303715884105728 bor 255
+-170141183460469231731687303715884105473
+-170141183460469231731687303715884105728 bor 256
+-170141183460469231731687303715884105472
+-170141183460469231731687303715884105728 bor 65535
+-170141183460469231731687303715884040193
+-170141183460469231731687303715884105728 bor 65536
+-170141183460469231731687303715884040192
+-170141183460469231731687303715884105728 bor 4294967295
+-170141183460469231731687303711589138433
+-170141183460469231731687303715884105728 bor 4294967296
+-170141183460469231731687303711589138432
+-170141183460469231731687303715884105728 bor 18446744073709551615
+-170141183460469231713240559642174554113
+-170141183460469231731687303715884105728 bor 18446744073709551616
+-170141183460469231713240559642174554112
+-170141183460469231731687303715884105728 bor 340282366920938463463374607431768211455
+-1
+-170141183460469231731687303715884105728 bor 340282366920938463463374607431768211456
+-170141183460469231731687303715884105728
+-170141183460469231731687303715884105727 bor -170141183460469231731687303715884105728
+-170141183460469231731687303715884105727
+-170141183460469231731687303715884105727 bor -170141183460469231731687303715884105727
+-170141183460469231731687303715884105727
+-170141183460469231731687303715884105727 bor -9223372036854775808
+-9223372036854775807
+-170141183460469231731687303715884105727 bor -9223372036854775807
+-9223372036854775807
+-170141183460469231731687303715884105727 bor -2147483648
+-2147483647
+-170141183460469231731687303715884105727 bor -2147483647
+-2147483647
+-170141183460469231731687303715884105727 bor -32768
+-32767
+-170141183460469231731687303715884105727 bor -32767
+-32767
+-170141183460469231731687303715884105727 bor -128
+-127
+-170141183460469231731687303715884105727 bor -127
+-127
+-170141183460469231731687303715884105727 bor 255
+-170141183460469231731687303715884105473
+-170141183460469231731687303715884105727 bor 256
+-170141183460469231731687303715884105471
+-170141183460469231731687303715884105727 bor 65535
+-170141183460469231731687303715884040193
+-170141183460469231731687303715884105727 bor 65536
+-170141183460469231731687303715884040191
+-170141183460469231731687303715884105727 bor 4294967295
+-170141183460469231731687303711589138433
+-170141183460469231731687303715884105727 bor 4294967296
+-170141183460469231731687303711589138431
+-170141183460469231731687303715884105727 bor 18446744073709551615
+-170141183460469231713240559642174554113
+-170141183460469231731687303715884105727 bor 18446744073709551616
+-170141183460469231713240559642174554111
+-170141183460469231731687303715884105727 bor 340282366920938463463374607431768211455
+-1
+-170141183460469231731687303715884105727 bor 340282366920938463463374607431768211456
+-170141183460469231731687303715884105727
+-9223372036854775808 bor -170141183460469231731687303715884105728
+-9223372036854775808
+-9223372036854775808 bor -170141183460469231731687303715884105727
+-9223372036854775807
+-9223372036854775808 bor -9223372036854775808
+-9223372036854775808
+-9223372036854775808 bor -9223372036854775807
+-9223372036854775807
+-9223372036854775808 bor -2147483648
+-2147483648
+-9223372036854775808 bor -2147483647
+-2147483647
+-9223372036854775808 bor -32768
+-32768
+-9223372036854775808 bor -32767
+-32767
+-9223372036854775808 bor -128
+-128
+-9223372036854775808 bor -127
+-127
+-9223372036854775808 bor 255
+-9223372036854775553
+-9223372036854775808 bor 256
+-9223372036854775552
+-9223372036854775808 bor 65535
+-9223372036854710273
+-9223372036854775808 bor 65536
+-9223372036854710272
+-9223372036854775808 bor 4294967295
+-9223372032559808513
+-9223372036854775808 bor 4294967296
+-9223372032559808512
+-9223372036854775808 bor 18446744073709551615
+-1
+-9223372036854775808 bor 18446744073709551616
+-9223372036854775808
+-9223372036854775808 bor 340282366920938463463374607431768211455
+-1
+-9223372036854775808 bor 340282366920938463463374607431768211456
+-9223372036854775808
+-9223372036854775807 bor -170141183460469231731687303715884105728
+-9223372036854775807
+-9223372036854775807 bor -170141183460469231731687303715884105727
+-9223372036854775807
+-9223372036854775807 bor -9223372036854775808
+-9223372036854775807
+-9223372036854775807 bor -9223372036854775807
+-9223372036854775807
+-9223372036854775807 bor -2147483648
+-2147483647
+-9223372036854775807 bor -2147483647
+-2147483647
+-9223372036854775807 bor -32768
+-32767
+-9223372036854775807 bor -32767
+-32767
+-9223372036854775807 bor -128
+-127
+-9223372036854775807 bor -127
+-127
+-9223372036854775807 bor 255
+-9223372036854775553
+-9223372036854775807 bor 256
+-9223372036854775551
+-9223372036854775807 bor 65535
+-9223372036854710273
+-9223372036854775807 bor 65536
+-9223372036854710271
+-9223372036854775807 bor 4294967295
+-9223372032559808513
+-9223372036854775807 bor 4294967296
+-9223372032559808511
+-9223372036854775807 bor 18446744073709551615
+-1
+-9223372036854775807 bor 18446744073709551616
+-9223372036854775807
+-9223372036854775807 bor 340282366920938463463374607431768211455
+-1
+-9223372036854775807 bor 340282366920938463463374607431768211456
+-9223372036854775807
+-2147483648 bor -170141183460469231731687303715884105728
+-2147483648
+-2147483648 bor -170141183460469231731687303715884105727
+-2147483647
+-2147483648 bor -9223372036854775808
+-2147483648
+-2147483648 bor -9223372036854775807
+-2147483647
+-2147483648 bor -2147483648
+-2147483648
+-2147483648 bor -2147483647
+-2147483647
+-2147483648 bor -32768
+-32768
+-2147483648 bor -32767
+-32767
+-2147483648 bor -128
+-128
+-2147483648 bor -127
+-127
+-2147483648 bor 255
+-2147483393
+-2147483648 bor 256
+-2147483392
+-2147483648 bor 65535
+-2147418113
+-2147483648 bor 65536
+-2147418112
+-2147483648 bor 4294967295
+-1
+-2147483648 bor 4294967296
+-2147483648
+-2147483648 bor 18446744073709551615
+-1
+-2147483648 bor 18446744073709551616
+-2147483648
+-2147483648 bor 340282366920938463463374607431768211455
+-1
+-2147483648 bor 340282366920938463463374607431768211456
+-2147483648
+-2147483647 bor -170141183460469231731687303715884105728
+-2147483647
+-2147483647 bor -170141183460469231731687303715884105727
+-2147483647
+-2147483647 bor -9223372036854775808
+-2147483647
+-2147483647 bor -9223372036854775807
+-2147483647
+-2147483647 bor -2147483648
+-2147483647
+-2147483647 bor -2147483647
+-2147483647
+-2147483647 bor -32768
+-32767
+-2147483647 bor -32767
+-32767
+-2147483647 bor -128
+-127
+-2147483647 bor -127
+-127
+-2147483647 bor 255
+-2147483393
+-2147483647 bor 256
+-2147483391
+-2147483647 bor 65535
+-2147418113
+-2147483647 bor 65536
+-2147418111
+-2147483647 bor 4294967295
+-1
+-2147483647 bor 4294967296
+-2147483647
+-2147483647 bor 18446744073709551615
+-1
+-2147483647 bor 18446744073709551616
+-2147483647
+-2147483647 bor 340282366920938463463374607431768211455
+-1
+-2147483647 bor 340282366920938463463374607431768211456
+-2147483647
+-32768 bor -170141183460469231731687303715884105728
+-32768
+-32768 bor -170141183460469231731687303715884105727
+-32767
+-32768 bor -9223372036854775808
+-32768
+-32768 bor -9223372036854775807
+-32767
+-32768 bor -2147483648
+-32768
+-32768 bor -2147483647
+-32767
+-32768 bor -32768
+-32768
+-32768 bor -32767
+-32767
+-32768 bor -128
+-128
+-32768 bor -127
+-127
+-32768 bor 255
+-32513
+-32768 bor 256
+-32512
+-32768 bor 65535
+-1
+-32768 bor 65536
+-32768
+-32768 bor 4294967295
+-1
+-32768 bor 4294967296
+-32768
+-32768 bor 18446744073709551615
+-1
+-32768 bor 18446744073709551616
+-32768
+-32768 bor 340282366920938463463374607431768211455
+-1
+-32768 bor 340282366920938463463374607431768211456
+-32768
+-32767 bor -170141183460469231731687303715884105728
+-32767
+-32767 bor -170141183460469231731687303715884105727
+-32767
+-32767 bor -9223372036854775808
+-32767
+-32767 bor -9223372036854775807
+-32767
+-32767 bor -2147483648
+-32767
+-32767 bor -2147483647
+-32767
+-32767 bor -32768
+-32767
+-32767 bor -32767
+-32767
+-32767 bor -128
+-127
+-32767 bor -127
+-127
+-32767 bor 255
+-32513
+-32767 bor 256
+-32511
+-32767 bor 65535
+-1
+-32767 bor 65536
+-32767
+-32767 bor 4294967295
+-1
+-32767 bor 4294967296
+-32767
+-32767 bor 18446744073709551615
+-1
+-32767 bor 18446744073709551616
+-32767
+-32767 bor 340282366920938463463374607431768211455
+-1
+-32767 bor 340282366920938463463374607431768211456
+-32767
+-128 bor -170141183460469231731687303715884105728
+-128
+-128 bor -170141183460469231731687303715884105727
+-127
+-128 bor -9223372036854775808
+-128
+-128 bor -9223372036854775807
+-127
+-128 bor -2147483648
+-128
+-128 bor -2147483647
+-127
+-128 bor -32768
+-128
+-128 bor -32767
+-127
+-128 bor -128
+-128
+-128 bor -127
+-127
+-128 bor 255
+-1
+-128 bor 256
+-128
+-128 bor 65535
+-1
+-128 bor 65536
+-128
+-128 bor 4294967295
+-1
+-128 bor 4294967296
+-128
+-128 bor 18446744073709551615
+-1
+-128 bor 18446744073709551616
+-128
+-128 bor 340282366920938463463374607431768211455
+-1
+-128 bor 340282366920938463463374607431768211456
+-128
+-127 bor -170141183460469231731687303715884105728
+-127
+-127 bor -170141183460469231731687303715884105727
+-127
+-127 bor -9223372036854775808
+-127
+-127 bor -9223372036854775807
+-127
+-127 bor -2147483648
+-127
+-127 bor -2147483647
+-127
+-127 bor -32768
+-127
+-127 bor -32767
+-127
+-127 bor -128
+-127
+-127 bor -127
+-127
+-127 bor 255
+-1
+-127 bor 256
+-127
+-127 bor 65535
+-1
+-127 bor 65536
+-127
+-127 bor 4294967295
+-1
+-127 bor 4294967296
+-127
+-127 bor 18446744073709551615
+-1
+-127 bor 18446744073709551616
+-127
+-127 bor 340282366920938463463374607431768211455
+-1
+-127 bor 340282366920938463463374607431768211456
+-127
+255 bor -170141183460469231731687303715884105728
+-170141183460469231731687303715884105473
+255 bor -170141183460469231731687303715884105727
+-170141183460469231731687303715884105473
+255 bor -9223372036854775808
+-9223372036854775553
+255 bor -9223372036854775807
+-9223372036854775553
+255 bor -2147483648
+-2147483393
+255 bor -2147483647
+-2147483393
+255 bor -32768
+-32513
+255 bor -32767
+-32513
+255 bor -128
+-1
+255 bor -127
+-1
+255 bor 255
+255
+255 bor 256
+511
+255 bor 65535
+65535
+255 bor 65536
+65791
+255 bor 4294967295
+4294967295
+255 bor 4294967296
+4294967551
+255 bor 18446744073709551615
+18446744073709551615
+255 bor 18446744073709551616
+18446744073709551871
+255 bor 340282366920938463463374607431768211455
+340282366920938463463374607431768211455
+255 bor 340282366920938463463374607431768211456
+340282366920938463463374607431768211711
+256 bor -170141183460469231731687303715884105728
+-170141183460469231731687303715884105472
+256 bor -170141183460469231731687303715884105727
+-170141183460469231731687303715884105471
+256 bor -9223372036854775808
+-9223372036854775552
+256 bor -9223372036854775807
+-9223372036854775551
+256 bor -2147483648
+-2147483392
+256 bor -2147483647
+-2147483391
+256 bor -32768
+-32512
+256 bor -32767
+-32511
+256 bor -128
+-128
+256 bor -127
+-127
+256 bor 255
+511
+256 bor 256
+256
+256 bor 65535
+65535
+256 bor 65536
+65792
+256 bor 4294967295
+4294967295
+256 bor 4294967296
+4294967552
+256 bor 18446744073709551615
+18446744073709551615
+256 bor 18446744073709551616
+18446744073709551872
+256 bor 340282366920938463463374607431768211455
+340282366920938463463374607431768211455
+256 bor 340282366920938463463374607431768211456
+340282366920938463463374607431768211712
+65535 bor -170141183460469231731687303715884105728
+-170141183460469231731687303715884040193
+65535 bor -170141183460469231731687303715884105727
+-170141183460469231731687303715884040193
+65535 bor -9223372036854775808
+-9223372036854710273
+65535 bor -9223372036854775807
+-9223372036854710273
+65535 bor -2147483648
+-2147418113
+65535 bor -2147483647
+-2147418113
+65535 bor -32768
+-1
+65535 bor -32767
+-1
+65535 bor -128
+-1
+65535 bor -127
+-1
+65535 bor 255
+65535
+65535 bor 256
+65535
+65535 bor 65535
+65535
+65535 bor 65536
+131071
+65535 bor 4294967295
+4294967295
+65535 bor 4294967296
+4295032831
+65535 bor 18446744073709551615
+18446744073709551615
+65535 bor 18446744073709551616
+18446744073709617151
+65535 bor 340282366920938463463374607431768211455
+340282366920938463463374607431768211455
+65535 bor 340282366920938463463374607431768211456
+340282366920938463463374607431768276991
+65536 bor -170141183460469231731687303715884105728
+-170141183460469231731687303715884040192
+65536 bor -170141183460469231731687303715884105727
+-170141183460469231731687303715884040191
+65536 bor -9223372036854775808
+-9223372036854710272
+65536 bor -9223372036854775807
+-9223372036854710271
+65536 bor -2147483648
+-2147418112
+65536 bor -2147483647
+-2147418111
+65536 bor -32768
+-32768
+65536 bor -32767
+-32767
+65536 bor -128
+-128
+65536 bor -127
+-127
+65536 bor 255
+65791
+65536 bor 256
+65792
+65536 bor 65535
+131071
+65536 bor 65536
+65536
+65536 bor 4294967295
+4294967295
+65536 bor 4294967296
+4295032832
+65536 bor 18446744073709551615
+18446744073709551615
+65536 bor 18446744073709551616
+18446744073709617152
+65536 bor 340282366920938463463374607431768211455
+340282366920938463463374607431768211455
+65536 bor 340282366920938463463374607431768211456
+340282366920938463463374607431768276992
+4294967295 bor -170141183460469231731687303715884105728
+-170141183460469231731687303711589138433
+4294967295 bor -170141183460469231731687303715884105727
+-170141183460469231731687303711589138433
+4294967295 bor -9223372036854775808
+-9223372032559808513
+4294967295 bor -9223372036854775807
+-9223372032559808513
+4294967295 bor -2147483648
+-1
+4294967295 bor -2147483647
+-1
+4294967295 bor -32768
+-1
+4294967295 bor -32767
+-1
+4294967295 bor -128
+-1
+4294967295 bor -127
+-1
+4294967295 bor 255
+4294967295
+4294967295 bor 256
+4294967295
+4294967295 bor 65535
+4294967295
+4294967295 bor 65536
+4294967295
+4294967295 bor 4294967295
+4294967295
+4294967295 bor 4294967296
+8589934591
+4294967295 bor 18446744073709551615
+18446744073709551615
+4294967295 bor 18446744073709551616
+18446744078004518911
+4294967295 bor 340282366920938463463374607431768211455
+340282366920938463463374607431768211455
+4294967295 bor 340282366920938463463374607431768211456
+340282366920938463463374607436063178751
+4294967296 bor -170141183460469231731687303715884105728
+-170141183460469231731687303711589138432
+4294967296 bor -170141183460469231731687303715884105727
+-170141183460469231731687303711589138431
+4294967296 bor -9223372036854775808
+-9223372032559808512
+4294967296 bor -9223372036854775807
+-9223372032559808511
+4294967296 bor -2147483648
+-2147483648
+4294967296 bor -2147483647
+-2147483647
+4294967296 bor -32768
+-32768
+4294967296 bor -32767
+-32767
+4294967296 bor -128
+-128
+4294967296 bor -127
+-127
+4294967296 bor 255
+4294967551
+4294967296 bor 256
+4294967552
+4294967296 bor 65535
+4295032831
+4294967296 bor 65536
+4295032832
+4294967296 bor 4294967295
+8589934591
+4294967296 bor 4294967296
+4294967296
+4294967296 bor 18446744073709551615
+18446744073709551615
+4294967296 bor 18446744073709551616
+18446744078004518912
+4294967296 bor 340282366920938463463374607431768211455
+340282366920938463463374607431768211455
+4294967296 bor 340282366920938463463374607431768211456
+340282366920938463463374607436063178752
+18446744073709551615 bor -170141183460469231731687303715884105728
+-170141183460469231713240559642174554113
+18446744073709551615 bor -170141183460469231731687303715884105727
+-170141183460469231713240559642174554113
+18446744073709551615 bor -9223372036854775808
+-1
+18446744073709551615 bor -9223372036854775807
+-1
+18446744073709551615 bor -2147483648
+-1
+18446744073709551615 bor -2147483647
+-1
+18446744073709551615 bor -32768
+-1
+18446744073709551615 bor -32767
+-1
+18446744073709551615 bor -128
+-1
+18446744073709551615 bor -127
+-1
+18446744073709551615 bor 255
+18446744073709551615
+18446744073709551615 bor 256
+18446744073709551615
+18446744073709551615 bor 65535
+18446744073709551615
+18446744073709551615 bor 65536
+18446744073709551615
+18446744073709551615 bor 4294967295
+18446744073709551615
+18446744073709551615 bor 4294967296
+18446744073709551615
+18446744073709551615 bor 18446744073709551615
+18446744073709551615
+18446744073709551615 bor 18446744073709551616
+36893488147419103231
+18446744073709551615 bor 340282366920938463463374607431768211455
+340282366920938463463374607431768211455
+18446744073709551615 bor 340282366920938463463374607431768211456
+340282366920938463481821351505477763071
+18446744073709551616 bor -170141183460469231731687303715884105728
+-170141183460469231713240559642174554112
+18446744073709551616 bor -170141183460469231731687303715884105727
+-170141183460469231713240559642174554111
+18446744073709551616 bor -9223372036854775808
+-9223372036854775808
+18446744073709551616 bor -9223372036854775807
+-9223372036854775807
+18446744073709551616 bor -2147483648
+-2147483648
+18446744073709551616 bor -2147483647
+-2147483647
+18446744073709551616 bor -32768
+-32768
+18446744073709551616 bor -32767
+-32767
+18446744073709551616 bor -128
+-128
+18446744073709551616 bor -127
+-127
+18446744073709551616 bor 255
+18446744073709551871
+18446744073709551616 bor 256
+18446744073709551872
+18446744073709551616 bor 65535
+18446744073709617151
+18446744073709551616 bor 65536
+18446744073709617152
+18446744073709551616 bor 4294967295
+18446744078004518911
+18446744073709551616 bor 4294967296
+18446744078004518912
+18446744073709551616 bor 18446744073709551615
+36893488147419103231
+18446744073709551616 bor 18446744073709551616
+18446744073709551616
+18446744073709551616 bor 340282366920938463463374607431768211455
+340282366920938463463374607431768211455
+18446744073709551616 bor 340282366920938463463374607431768211456
+340282366920938463481821351505477763072
+340282366920938463463374607431768211455 bor -170141183460469231731687303715884105728
+-1
+340282366920938463463374607431768211455 bor -170141183460469231731687303715884105727
+-1
+340282366920938463463374607431768211455 bor -9223372036854775808
+-1
+340282366920938463463374607431768211455 bor -9223372036854775807
+-1
+340282366920938463463374607431768211455 bor -2147483648
+-1
+340282366920938463463374607431768211455 bor -2147483647
+-1
+340282366920938463463374607431768211455 bor -32768
+-1
+340282366920938463463374607431768211455 bor -32767
+-1
+340282366920938463463374607431768211455 bor -128
+-1
+340282366920938463463374607431768211455 bor -127
+-1
+340282366920938463463374607431768211455 bor 255
+340282366920938463463374607431768211455
+340282366920938463463374607431768211455 bor 256
+340282366920938463463374607431768211455
+340282366920938463463374607431768211455 bor 65535
+340282366920938463463374607431768211455
+340282366920938463463374607431768211455 bor 65536
+340282366920938463463374607431768211455
+340282366920938463463374607431768211455 bor 4294967295
+340282366920938463463374607431768211455
+340282366920938463463374607431768211455 bor 4294967296
+340282366920938463463374607431768211455
+340282366920938463463374607431768211455 bor 18446744073709551615
+340282366920938463463374607431768211455
+340282366920938463463374607431768211455 bor 18446744073709551616
+340282366920938463463374607431768211455
+340282366920938463463374607431768211455 bor 340282366920938463463374607431768211455
+340282366920938463463374607431768211455
+340282366920938463463374607431768211455 bor 340282366920938463463374607431768211456
+680564733841876926926749214863536422911
+340282366920938463463374607431768211456 bor -170141183460469231731687303715884105728
+-170141183460469231731687303715884105728
+340282366920938463463374607431768211456 bor -170141183460469231731687303715884105727
+-170141183460469231731687303715884105727
+340282366920938463463374607431768211456 bor -9223372036854775808
+-9223372036854775808
+340282366920938463463374607431768211456 bor -9223372036854775807
+-9223372036854775807
+340282366920938463463374607431768211456 bor -2147483648
+-2147483648
+340282366920938463463374607431768211456 bor -2147483647
+-2147483647
+340282366920938463463374607431768211456 bor -32768
+-32768
+340282366920938463463374607431768211456 bor -32767
+-32767
+340282366920938463463374607431768211456 bor -128
+-128
+340282366920938463463374607431768211456 bor -127
+-127
+340282366920938463463374607431768211456 bor 255
+340282366920938463463374607431768211711
+340282366920938463463374607431768211456 bor 256
+340282366920938463463374607431768211712
+340282366920938463463374607431768211456 bor 65535
+340282366920938463463374607431768276991
+340282366920938463463374607431768211456 bor 65536
+340282366920938463463374607431768276992
+340282366920938463463374607431768211456 bor 4294967295
+340282366920938463463374607436063178751
+340282366920938463463374607431768211456 bor 4294967296
+340282366920938463463374607436063178752
+340282366920938463463374607431768211456 bor 18446744073709551615
+340282366920938463481821351505477763071
+340282366920938463463374607431768211456 bor 18446744073709551616
+340282366920938463481821351505477763072
+340282366920938463463374607431768211456 bor 340282366920938463463374607431768211455
+680564733841876926926749214863536422911
+340282366920938463463374607431768211456 bor 340282366920938463463374607431768211456
+340282366920938463463374607431768211456
diff --git a/test/ic3/integer_bor.ret.expected b/test/ic3/integer_bor.ret.expected
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/test/ic3/integer_bor.ret.expected
@@ -0,0 +1 @@
+0
diff --git a/test/ic3/integer_bxor.in b/test/ic3/integer_bxor.in
new file mode 100644
index 0000000..d6871bf
--- /dev/null
+++ b/test/ic3/integer_bxor.in
@@ -0,0 +1,800 @@
+quote -170141183460469231731687303715884105728 ^ -170141183460469231731687303715884105728
+-170141183460469231731687303715884105728 ^ -170141183460469231731687303715884105728
+quote -170141183460469231731687303715884105728 ^ -170141183460469231731687303715884105727
+-170141183460469231731687303715884105728 ^ -170141183460469231731687303715884105727
+quote -170141183460469231731687303715884105728 ^ -9223372036854775808
+-170141183460469231731687303715884105728 ^ -9223372036854775808
+quote -170141183460469231731687303715884105728 ^ -9223372036854775807
+-170141183460469231731687303715884105728 ^ -9223372036854775807
+quote -170141183460469231731687303715884105728 ^ -2147483648
+-170141183460469231731687303715884105728 ^ -2147483648
+quote -170141183460469231731687303715884105728 ^ -2147483647
+-170141183460469231731687303715884105728 ^ -2147483647
+quote -170141183460469231731687303715884105728 ^ -32768
+-170141183460469231731687303715884105728 ^ -32768
+quote -170141183460469231731687303715884105728 ^ -32767
+-170141183460469231731687303715884105728 ^ -32767
+quote -170141183460469231731687303715884105728 ^ -128
+-170141183460469231731687303715884105728 ^ -128
+quote -170141183460469231731687303715884105728 ^ -127
+-170141183460469231731687303715884105728 ^ -127
+quote -170141183460469231731687303715884105728 ^ 255
+-170141183460469231731687303715884105728 ^ 255
+quote -170141183460469231731687303715884105728 ^ 256
+-170141183460469231731687303715884105728 ^ 256
+quote -170141183460469231731687303715884105728 ^ 65535
+-170141183460469231731687303715884105728 ^ 65535
+quote -170141183460469231731687303715884105728 ^ 65536
+-170141183460469231731687303715884105728 ^ 65536
+quote -170141183460469231731687303715884105728 ^ 4294967295
+-170141183460469231731687303715884105728 ^ 4294967295
+quote -170141183460469231731687303715884105728 ^ 4294967296
+-170141183460469231731687303715884105728 ^ 4294967296
+quote -170141183460469231731687303715884105728 ^ 18446744073709551615
+-170141183460469231731687303715884105728 ^ 18446744073709551615
+quote -170141183460469231731687303715884105728 ^ 18446744073709551616
+-170141183460469231731687303715884105728 ^ 18446744073709551616
+quote -170141183460469231731687303715884105728 ^ 340282366920938463463374607431768211455
+-170141183460469231731687303715884105728 ^ 340282366920938463463374607431768211455
+quote -170141183460469231731687303715884105728 ^ 340282366920938463463374607431768211456
+-170141183460469231731687303715884105728 ^ 340282366920938463463374607431768211456
+quote -170141183460469231731687303715884105727 ^ -170141183460469231731687303715884105728
+-170141183460469231731687303715884105727 ^ -170141183460469231731687303715884105728
+quote -170141183460469231731687303715884105727 ^ -170141183460469231731687303715884105727
+-170141183460469231731687303715884105727 ^ -170141183460469231731687303715884105727
+quote -170141183460469231731687303715884105727 ^ -9223372036854775808
+-170141183460469231731687303715884105727 ^ -9223372036854775808
+quote -170141183460469231731687303715884105727 ^ -9223372036854775807
+-170141183460469231731687303715884105727 ^ -9223372036854775807
+quote -170141183460469231731687303715884105727 ^ -2147483648
+-170141183460469231731687303715884105727 ^ -2147483648
+quote -170141183460469231731687303715884105727 ^ -2147483647
+-170141183460469231731687303715884105727 ^ -2147483647
+quote -170141183460469231731687303715884105727 ^ -32768
+-170141183460469231731687303715884105727 ^ -32768
+quote -170141183460469231731687303715884105727 ^ -32767
+-170141183460469231731687303715884105727 ^ -32767
+quote -170141183460469231731687303715884105727 ^ -128
+-170141183460469231731687303715884105727 ^ -128
+quote -170141183460469231731687303715884105727 ^ -127
+-170141183460469231731687303715884105727 ^ -127
+quote -170141183460469231731687303715884105727 ^ 255
+-170141183460469231731687303715884105727 ^ 255
+quote -170141183460469231731687303715884105727 ^ 256
+-170141183460469231731687303715884105727 ^ 256
+quote -170141183460469231731687303715884105727 ^ 65535
+-170141183460469231731687303715884105727 ^ 65535
+quote -170141183460469231731687303715884105727 ^ 65536
+-170141183460469231731687303715884105727 ^ 65536
+quote -170141183460469231731687303715884105727 ^ 4294967295
+-170141183460469231731687303715884105727 ^ 4294967295
+quote -170141183460469231731687303715884105727 ^ 4294967296
+-170141183460469231731687303715884105727 ^ 4294967296
+quote -170141183460469231731687303715884105727 ^ 18446744073709551615
+-170141183460469231731687303715884105727 ^ 18446744073709551615
+quote -170141183460469231731687303715884105727 ^ 18446744073709551616
+-170141183460469231731687303715884105727 ^ 18446744073709551616
+quote -170141183460469231731687303715884105727 ^ 340282366920938463463374607431768211455
+-170141183460469231731687303715884105727 ^ 340282366920938463463374607431768211455
+quote -170141183460469231731687303715884105727 ^ 340282366920938463463374607431768211456
+-170141183460469231731687303715884105727 ^ 340282366920938463463374607431768211456
+quote -9223372036854775808 ^ -170141183460469231731687303715884105728
+-9223372036854775808 ^ -170141183460469231731687303715884105728
+quote -9223372036854775808 ^ -170141183460469231731687303715884105727
+-9223372036854775808 ^ -170141183460469231731687303715884105727
+quote -9223372036854775808 ^ -9223372036854775808
+-9223372036854775808 ^ -9223372036854775808
+quote -9223372036854775808 ^ -9223372036854775807
+-9223372036854775808 ^ -9223372036854775807
+quote -9223372036854775808 ^ -2147483648
+-9223372036854775808 ^ -2147483648
+quote -9223372036854775808 ^ -2147483647
+-9223372036854775808 ^ -2147483647
+quote -9223372036854775808 ^ -32768
+-9223372036854775808 ^ -32768
+quote -9223372036854775808 ^ -32767
+-9223372036854775808 ^ -32767
+quote -9223372036854775808 ^ -128
+-9223372036854775808 ^ -128
+quote -9223372036854775808 ^ -127
+-9223372036854775808 ^ -127
+quote -9223372036854775808 ^ 255
+-9223372036854775808 ^ 255
+quote -9223372036854775808 ^ 256
+-9223372036854775808 ^ 256
+quote -9223372036854775808 ^ 65535
+-9223372036854775808 ^ 65535
+quote -9223372036854775808 ^ 65536
+-9223372036854775808 ^ 65536
+quote -9223372036854775808 ^ 4294967295
+-9223372036854775808 ^ 4294967295
+quote -9223372036854775808 ^ 4294967296
+-9223372036854775808 ^ 4294967296
+quote -9223372036854775808 ^ 18446744073709551615
+-9223372036854775808 ^ 18446744073709551615
+quote -9223372036854775808 ^ 18446744073709551616
+-9223372036854775808 ^ 18446744073709551616
+quote -9223372036854775808 ^ 340282366920938463463374607431768211455
+-9223372036854775808 ^ 340282366920938463463374607431768211455
+quote -9223372036854775808 ^ 340282366920938463463374607431768211456
+-9223372036854775808 ^ 340282366920938463463374607431768211456
+quote -9223372036854775807 ^ -170141183460469231731687303715884105728
+-9223372036854775807 ^ -170141183460469231731687303715884105728
+quote -9223372036854775807 ^ -170141183460469231731687303715884105727
+-9223372036854775807 ^ -170141183460469231731687303715884105727
+quote -9223372036854775807 ^ -9223372036854775808
+-9223372036854775807 ^ -9223372036854775808
+quote -9223372036854775807 ^ -9223372036854775807
+-9223372036854775807 ^ -9223372036854775807
+quote -9223372036854775807 ^ -2147483648
+-9223372036854775807 ^ -2147483648
+quote -9223372036854775807 ^ -2147483647
+-9223372036854775807 ^ -2147483647
+quote -9223372036854775807 ^ -32768
+-9223372036854775807 ^ -32768
+quote -9223372036854775807 ^ -32767
+-9223372036854775807 ^ -32767
+quote -9223372036854775807 ^ -128
+-9223372036854775807 ^ -128
+quote -9223372036854775807 ^ -127
+-9223372036854775807 ^ -127
+quote -9223372036854775807 ^ 255
+-9223372036854775807 ^ 255
+quote -9223372036854775807 ^ 256
+-9223372036854775807 ^ 256
+quote -9223372036854775807 ^ 65535
+-9223372036854775807 ^ 65535
+quote -9223372036854775807 ^ 65536
+-9223372036854775807 ^ 65536
+quote -9223372036854775807 ^ 4294967295
+-9223372036854775807 ^ 4294967295
+quote -9223372036854775807 ^ 4294967296
+-9223372036854775807 ^ 4294967296
+quote -9223372036854775807 ^ 18446744073709551615
+-9223372036854775807 ^ 18446744073709551615
+quote -9223372036854775807 ^ 18446744073709551616
+-9223372036854775807 ^ 18446744073709551616
+quote -9223372036854775807 ^ 340282366920938463463374607431768211455
+-9223372036854775807 ^ 340282366920938463463374607431768211455
+quote -9223372036854775807 ^ 340282366920938463463374607431768211456
+-9223372036854775807 ^ 340282366920938463463374607431768211456
+quote -2147483648 ^ -170141183460469231731687303715884105728
+-2147483648 ^ -170141183460469231731687303715884105728
+quote -2147483648 ^ -170141183460469231731687303715884105727
+-2147483648 ^ -170141183460469231731687303715884105727
+quote -2147483648 ^ -9223372036854775808
+-2147483648 ^ -9223372036854775808
+quote -2147483648 ^ -9223372036854775807
+-2147483648 ^ -9223372036854775807
+quote -2147483648 ^ -2147483648
+-2147483648 ^ -2147483648
+quote -2147483648 ^ -2147483647
+-2147483648 ^ -2147483647
+quote -2147483648 ^ -32768
+-2147483648 ^ -32768
+quote -2147483648 ^ -32767
+-2147483648 ^ -32767
+quote -2147483648 ^ -128
+-2147483648 ^ -128
+quote -2147483648 ^ -127
+-2147483648 ^ -127
+quote -2147483648 ^ 255
+-2147483648 ^ 255
+quote -2147483648 ^ 256
+-2147483648 ^ 256
+quote -2147483648 ^ 65535
+-2147483648 ^ 65535
+quote -2147483648 ^ 65536
+-2147483648 ^ 65536
+quote -2147483648 ^ 4294967295
+-2147483648 ^ 4294967295
+quote -2147483648 ^ 4294967296
+-2147483648 ^ 4294967296
+quote -2147483648 ^ 18446744073709551615
+-2147483648 ^ 18446744073709551615
+quote -2147483648 ^ 18446744073709551616
+-2147483648 ^ 18446744073709551616
+quote -2147483648 ^ 340282366920938463463374607431768211455
+-2147483648 ^ 340282366920938463463374607431768211455
+quote -2147483648 ^ 340282366920938463463374607431768211456
+-2147483648 ^ 340282366920938463463374607431768211456
+quote -2147483647 ^ -170141183460469231731687303715884105728
+-2147483647 ^ -170141183460469231731687303715884105728
+quote -2147483647 ^ -170141183460469231731687303715884105727
+-2147483647 ^ -170141183460469231731687303715884105727
+quote -2147483647 ^ -9223372036854775808
+-2147483647 ^ -9223372036854775808
+quote -2147483647 ^ -9223372036854775807
+-2147483647 ^ -9223372036854775807
+quote -2147483647 ^ -2147483648
+-2147483647 ^ -2147483648
+quote -2147483647 ^ -2147483647
+-2147483647 ^ -2147483647
+quote -2147483647 ^ -32768
+-2147483647 ^ -32768
+quote -2147483647 ^ -32767
+-2147483647 ^ -32767
+quote -2147483647 ^ -128
+-2147483647 ^ -128
+quote -2147483647 ^ -127
+-2147483647 ^ -127
+quote -2147483647 ^ 255
+-2147483647 ^ 255
+quote -2147483647 ^ 256
+-2147483647 ^ 256
+quote -2147483647 ^ 65535
+-2147483647 ^ 65535
+quote -2147483647 ^ 65536
+-2147483647 ^ 65536
+quote -2147483647 ^ 4294967295
+-2147483647 ^ 4294967295
+quote -2147483647 ^ 4294967296
+-2147483647 ^ 4294967296
+quote -2147483647 ^ 18446744073709551615
+-2147483647 ^ 18446744073709551615
+quote -2147483647 ^ 18446744073709551616
+-2147483647 ^ 18446744073709551616
+quote -2147483647 ^ 340282366920938463463374607431768211455
+-2147483647 ^ 340282366920938463463374607431768211455
+quote -2147483647 ^ 340282366920938463463374607431768211456
+-2147483647 ^ 340282366920938463463374607431768211456
+quote -32768 ^ -170141183460469231731687303715884105728
+-32768 ^ -170141183460469231731687303715884105728
+quote -32768 ^ -170141183460469231731687303715884105727
+-32768 ^ -170141183460469231731687303715884105727
+quote -32768 ^ -9223372036854775808
+-32768 ^ -9223372036854775808
+quote -32768 ^ -9223372036854775807
+-32768 ^ -9223372036854775807
+quote -32768 ^ -2147483648
+-32768 ^ -2147483648
+quote -32768 ^ -2147483647
+-32768 ^ -2147483647
+quote -32768 ^ -32768
+-32768 ^ -32768
+quote -32768 ^ -32767
+-32768 ^ -32767
+quote -32768 ^ -128
+-32768 ^ -128
+quote -32768 ^ -127
+-32768 ^ -127
+quote -32768 ^ 255
+-32768 ^ 255
+quote -32768 ^ 256
+-32768 ^ 256
+quote -32768 ^ 65535
+-32768 ^ 65535
+quote -32768 ^ 65536
+-32768 ^ 65536
+quote -32768 ^ 4294967295
+-32768 ^ 4294967295
+quote -32768 ^ 4294967296
+-32768 ^ 4294967296
+quote -32768 ^ 18446744073709551615
+-32768 ^ 18446744073709551615
+quote -32768 ^ 18446744073709551616
+-32768 ^ 18446744073709551616
+quote -32768 ^ 340282366920938463463374607431768211455
+-32768 ^ 340282366920938463463374607431768211455
+quote -32768 ^ 340282366920938463463374607431768211456
+-32768 ^ 340282366920938463463374607431768211456
+quote -32767 ^ -170141183460469231731687303715884105728
+-32767 ^ -170141183460469231731687303715884105728
+quote -32767 ^ -170141183460469231731687303715884105727
+-32767 ^ -170141183460469231731687303715884105727
+quote -32767 ^ -9223372036854775808
+-32767 ^ -9223372036854775808
+quote -32767 ^ -9223372036854775807
+-32767 ^ -9223372036854775807
+quote -32767 ^ -2147483648
+-32767 ^ -2147483648
+quote -32767 ^ -2147483647
+-32767 ^ -2147483647
+quote -32767 ^ -32768
+-32767 ^ -32768
+quote -32767 ^ -32767
+-32767 ^ -32767
+quote -32767 ^ -128
+-32767 ^ -128
+quote -32767 ^ -127
+-32767 ^ -127
+quote -32767 ^ 255
+-32767 ^ 255
+quote -32767 ^ 256
+-32767 ^ 256
+quote -32767 ^ 65535
+-32767 ^ 65535
+quote -32767 ^ 65536
+-32767 ^ 65536
+quote -32767 ^ 4294967295
+-32767 ^ 4294967295
+quote -32767 ^ 4294967296
+-32767 ^ 4294967296
+quote -32767 ^ 18446744073709551615
+-32767 ^ 18446744073709551615
+quote -32767 ^ 18446744073709551616
+-32767 ^ 18446744073709551616
+quote -32767 ^ 340282366920938463463374607431768211455
+-32767 ^ 340282366920938463463374607431768211455
+quote -32767 ^ 340282366920938463463374607431768211456
+-32767 ^ 340282366920938463463374607431768211456
+quote -128 ^ -170141183460469231731687303715884105728
+-128 ^ -170141183460469231731687303715884105728
+quote -128 ^ -170141183460469231731687303715884105727
+-128 ^ -170141183460469231731687303715884105727
+quote -128 ^ -9223372036854775808
+-128 ^ -9223372036854775808
+quote -128 ^ -9223372036854775807
+-128 ^ -9223372036854775807
+quote -128 ^ -2147483648
+-128 ^ -2147483648
+quote -128 ^ -2147483647
+-128 ^ -2147483647
+quote -128 ^ -32768
+-128 ^ -32768
+quote -128 ^ -32767
+-128 ^ -32767
+quote -128 ^ -128
+-128 ^ -128
+quote -128 ^ -127
+-128 ^ -127
+quote -128 ^ 255
+-128 ^ 255
+quote -128 ^ 256
+-128 ^ 256
+quote -128 ^ 65535
+-128 ^ 65535
+quote -128 ^ 65536
+-128 ^ 65536
+quote -128 ^ 4294967295
+-128 ^ 4294967295
+quote -128 ^ 4294967296
+-128 ^ 4294967296
+quote -128 ^ 18446744073709551615
+-128 ^ 18446744073709551615
+quote -128 ^ 18446744073709551616
+-128 ^ 18446744073709551616
+quote -128 ^ 340282366920938463463374607431768211455
+-128 ^ 340282366920938463463374607431768211455
+quote -128 ^ 340282366920938463463374607431768211456
+-128 ^ 340282366920938463463374607431768211456
+quote -127 ^ -170141183460469231731687303715884105728
+-127 ^ -170141183460469231731687303715884105728
+quote -127 ^ -170141183460469231731687303715884105727
+-127 ^ -170141183460469231731687303715884105727
+quote -127 ^ -9223372036854775808
+-127 ^ -9223372036854775808
+quote -127 ^ -9223372036854775807
+-127 ^ -9223372036854775807
+quote -127 ^ -2147483648
+-127 ^ -2147483648
+quote -127 ^ -2147483647
+-127 ^ -2147483647
+quote -127 ^ -32768
+-127 ^ -32768
+quote -127 ^ -32767
+-127 ^ -32767
+quote -127 ^ -128
+-127 ^ -128
+quote -127 ^ -127
+-127 ^ -127
+quote -127 ^ 255
+-127 ^ 255
+quote -127 ^ 256
+-127 ^ 256
+quote -127 ^ 65535
+-127 ^ 65535
+quote -127 ^ 65536
+-127 ^ 65536
+quote -127 ^ 4294967295
+-127 ^ 4294967295
+quote -127 ^ 4294967296
+-127 ^ 4294967296
+quote -127 ^ 18446744073709551615
+-127 ^ 18446744073709551615
+quote -127 ^ 18446744073709551616
+-127 ^ 18446744073709551616
+quote -127 ^ 340282366920938463463374607431768211455
+-127 ^ 340282366920938463463374607431768211455
+quote -127 ^ 340282366920938463463374607431768211456
+-127 ^ 340282366920938463463374607431768211456
+quote 255 ^ -170141183460469231731687303715884105728
+255 ^ -170141183460469231731687303715884105728
+quote 255 ^ -170141183460469231731687303715884105727
+255 ^ -170141183460469231731687303715884105727
+quote 255 ^ -9223372036854775808
+255 ^ -9223372036854775808
+quote 255 ^ -9223372036854775807
+255 ^ -9223372036854775807
+quote 255 ^ -2147483648
+255 ^ -2147483648
+quote 255 ^ -2147483647
+255 ^ -2147483647
+quote 255 ^ -32768
+255 ^ -32768
+quote 255 ^ -32767
+255 ^ -32767
+quote 255 ^ -128
+255 ^ -128
+quote 255 ^ -127
+255 ^ -127
+quote 255 ^ 255
+255 ^ 255
+quote 255 ^ 256
+255 ^ 256
+quote 255 ^ 65535
+255 ^ 65535
+quote 255 ^ 65536
+255 ^ 65536
+quote 255 ^ 4294967295
+255 ^ 4294967295
+quote 255 ^ 4294967296
+255 ^ 4294967296
+quote 255 ^ 18446744073709551615
+255 ^ 18446744073709551615
+quote 255 ^ 18446744073709551616
+255 ^ 18446744073709551616
+quote 255 ^ 340282366920938463463374607431768211455
+255 ^ 340282366920938463463374607431768211455
+quote 255 ^ 340282366920938463463374607431768211456
+255 ^ 340282366920938463463374607431768211456
+quote 256 ^ -170141183460469231731687303715884105728
+256 ^ -170141183460469231731687303715884105728
+quote 256 ^ -170141183460469231731687303715884105727
+256 ^ -170141183460469231731687303715884105727
+quote 256 ^ -9223372036854775808
+256 ^ -9223372036854775808
+quote 256 ^ -9223372036854775807
+256 ^ -9223372036854775807
+quote 256 ^ -2147483648
+256 ^ -2147483648
+quote 256 ^ -2147483647
+256 ^ -2147483647
+quote 256 ^ -32768
+256 ^ -32768
+quote 256 ^ -32767
+256 ^ -32767
+quote 256 ^ -128
+256 ^ -128
+quote 256 ^ -127
+256 ^ -127
+quote 256 ^ 255
+256 ^ 255
+quote 256 ^ 256
+256 ^ 256
+quote 256 ^ 65535
+256 ^ 65535
+quote 256 ^ 65536
+256 ^ 65536
+quote 256 ^ 4294967295
+256 ^ 4294967295
+quote 256 ^ 4294967296
+256 ^ 4294967296
+quote 256 ^ 18446744073709551615
+256 ^ 18446744073709551615
+quote 256 ^ 18446744073709551616
+256 ^ 18446744073709551616
+quote 256 ^ 340282366920938463463374607431768211455
+256 ^ 340282366920938463463374607431768211455
+quote 256 ^ 340282366920938463463374607431768211456
+256 ^ 340282366920938463463374607431768211456
+quote 65535 ^ -170141183460469231731687303715884105728
+65535 ^ -170141183460469231731687303715884105728
+quote 65535 ^ -170141183460469231731687303715884105727
+65535 ^ -170141183460469231731687303715884105727
+quote 65535 ^ -9223372036854775808
+65535 ^ -9223372036854775808
+quote 65535 ^ -9223372036854775807
+65535 ^ -9223372036854775807
+quote 65535 ^ -2147483648
+65535 ^ -2147483648
+quote 65535 ^ -2147483647
+65535 ^ -2147483647
+quote 65535 ^ -32768
+65535 ^ -32768
+quote 65535 ^ -32767
+65535 ^ -32767
+quote 65535 ^ -128
+65535 ^ -128
+quote 65535 ^ -127
+65535 ^ -127
+quote 65535 ^ 255
+65535 ^ 255
+quote 65535 ^ 256
+65535 ^ 256
+quote 65535 ^ 65535
+65535 ^ 65535
+quote 65535 ^ 65536
+65535 ^ 65536
+quote 65535 ^ 4294967295
+65535 ^ 4294967295
+quote 65535 ^ 4294967296
+65535 ^ 4294967296
+quote 65535 ^ 18446744073709551615
+65535 ^ 18446744073709551615
+quote 65535 ^ 18446744073709551616
+65535 ^ 18446744073709551616
+quote 65535 ^ 340282366920938463463374607431768211455
+65535 ^ 340282366920938463463374607431768211455
+quote 65535 ^ 340282366920938463463374607431768211456
+65535 ^ 340282366920938463463374607431768211456
+quote 65536 ^ -170141183460469231731687303715884105728
+65536 ^ -170141183460469231731687303715884105728
+quote 65536 ^ -170141183460469231731687303715884105727
+65536 ^ -170141183460469231731687303715884105727
+quote 65536 ^ -9223372036854775808
+65536 ^ -9223372036854775808
+quote 65536 ^ -9223372036854775807
+65536 ^ -9223372036854775807
+quote 65536 ^ -2147483648
+65536 ^ -2147483648
+quote 65536 ^ -2147483647
+65536 ^ -2147483647
+quote 65536 ^ -32768
+65536 ^ -32768
+quote 65536 ^ -32767
+65536 ^ -32767
+quote 65536 ^ -128
+65536 ^ -128
+quote 65536 ^ -127
+65536 ^ -127
+quote 65536 ^ 255
+65536 ^ 255
+quote 65536 ^ 256
+65536 ^ 256
+quote 65536 ^ 65535
+65536 ^ 65535
+quote 65536 ^ 65536
+65536 ^ 65536
+quote 65536 ^ 4294967295
+65536 ^ 4294967295
+quote 65536 ^ 4294967296
+65536 ^ 4294967296
+quote 65536 ^ 18446744073709551615
+65536 ^ 18446744073709551615
+quote 65536 ^ 18446744073709551616
+65536 ^ 18446744073709551616
+quote 65536 ^ 340282366920938463463374607431768211455
+65536 ^ 340282366920938463463374607431768211455
+quote 65536 ^ 340282366920938463463374607431768211456
+65536 ^ 340282366920938463463374607431768211456
+quote 4294967295 ^ -170141183460469231731687303715884105728
+4294967295 ^ -170141183460469231731687303715884105728
+quote 4294967295 ^ -170141183460469231731687303715884105727
+4294967295 ^ -170141183460469231731687303715884105727
+quote 4294967295 ^ -9223372036854775808
+4294967295 ^ -9223372036854775808
+quote 4294967295 ^ -9223372036854775807
+4294967295 ^ -9223372036854775807
+quote 4294967295 ^ -2147483648
+4294967295 ^ -2147483648
+quote 4294967295 ^ -2147483647
+4294967295 ^ -2147483647
+quote 4294967295 ^ -32768
+4294967295 ^ -32768
+quote 4294967295 ^ -32767
+4294967295 ^ -32767
+quote 4294967295 ^ -128
+4294967295 ^ -128
+quote 4294967295 ^ -127
+4294967295 ^ -127
+quote 4294967295 ^ 255
+4294967295 ^ 255
+quote 4294967295 ^ 256
+4294967295 ^ 256
+quote 4294967295 ^ 65535
+4294967295 ^ 65535
+quote 4294967295 ^ 65536
+4294967295 ^ 65536
+quote 4294967295 ^ 4294967295
+4294967295 ^ 4294967295
+quote 4294967295 ^ 4294967296
+4294967295 ^ 4294967296
+quote 4294967295 ^ 18446744073709551615
+4294967295 ^ 18446744073709551615
+quote 4294967295 ^ 18446744073709551616
+4294967295 ^ 18446744073709551616
+quote 4294967295 ^ 340282366920938463463374607431768211455
+4294967295 ^ 340282366920938463463374607431768211455
+quote 4294967295 ^ 340282366920938463463374607431768211456
+4294967295 ^ 340282366920938463463374607431768211456
+quote 4294967296 ^ -170141183460469231731687303715884105728
+4294967296 ^ -170141183460469231731687303715884105728
+quote 4294967296 ^ -170141183460469231731687303715884105727
+4294967296 ^ -170141183460469231731687303715884105727
+quote 4294967296 ^ -9223372036854775808
+4294967296 ^ -9223372036854775808
+quote 4294967296 ^ -9223372036854775807
+4294967296 ^ -9223372036854775807
+quote 4294967296 ^ -2147483648
+4294967296 ^ -2147483648
+quote 4294967296 ^ -2147483647
+4294967296 ^ -2147483647
+quote 4294967296 ^ -32768
+4294967296 ^ -32768
+quote 4294967296 ^ -32767
+4294967296 ^ -32767
+quote 4294967296 ^ -128
+4294967296 ^ -128
+quote 4294967296 ^ -127
+4294967296 ^ -127
+quote 4294967296 ^ 255
+4294967296 ^ 255
+quote 4294967296 ^ 256
+4294967296 ^ 256
+quote 4294967296 ^ 65535
+4294967296 ^ 65535
+quote 4294967296 ^ 65536
+4294967296 ^ 65536
+quote 4294967296 ^ 4294967295
+4294967296 ^ 4294967295
+quote 4294967296 ^ 4294967296
+4294967296 ^ 4294967296
+quote 4294967296 ^ 18446744073709551615
+4294967296 ^ 18446744073709551615
+quote 4294967296 ^ 18446744073709551616
+4294967296 ^ 18446744073709551616
+quote 4294967296 ^ 340282366920938463463374607431768211455
+4294967296 ^ 340282366920938463463374607431768211455
+quote 4294967296 ^ 340282366920938463463374607431768211456
+4294967296 ^ 340282366920938463463374607431768211456
+quote 18446744073709551615 ^ -170141183460469231731687303715884105728
+18446744073709551615 ^ -170141183460469231731687303715884105728
+quote 18446744073709551615 ^ -170141183460469231731687303715884105727
+18446744073709551615 ^ -170141183460469231731687303715884105727
+quote 18446744073709551615 ^ -9223372036854775808
+18446744073709551615 ^ -9223372036854775808
+quote 18446744073709551615 ^ -9223372036854775807
+18446744073709551615 ^ -9223372036854775807
+quote 18446744073709551615 ^ -2147483648
+18446744073709551615 ^ -2147483648
+quote 18446744073709551615 ^ -2147483647
+18446744073709551615 ^ -2147483647
+quote 18446744073709551615 ^ -32768
+18446744073709551615 ^ -32768
+quote 18446744073709551615 ^ -32767
+18446744073709551615 ^ -32767
+quote 18446744073709551615 ^ -128
+18446744073709551615 ^ -128
+quote 18446744073709551615 ^ -127
+18446744073709551615 ^ -127
+quote 18446744073709551615 ^ 255
+18446744073709551615 ^ 255
+quote 18446744073709551615 ^ 256
+18446744073709551615 ^ 256
+quote 18446744073709551615 ^ 65535
+18446744073709551615 ^ 65535
+quote 18446744073709551615 ^ 65536
+18446744073709551615 ^ 65536
+quote 18446744073709551615 ^ 4294967295
+18446744073709551615 ^ 4294967295
+quote 18446744073709551615 ^ 4294967296
+18446744073709551615 ^ 4294967296
+quote 18446744073709551615 ^ 18446744073709551615
+18446744073709551615 ^ 18446744073709551615
+quote 18446744073709551615 ^ 18446744073709551616
+18446744073709551615 ^ 18446744073709551616
+quote 18446744073709551615 ^ 340282366920938463463374607431768211455
+18446744073709551615 ^ 340282366920938463463374607431768211455
+quote 18446744073709551615 ^ 340282366920938463463374607431768211456
+18446744073709551615 ^ 340282366920938463463374607431768211456
+quote 18446744073709551616 ^ -170141183460469231731687303715884105728
+18446744073709551616 ^ -170141183460469231731687303715884105728
+quote 18446744073709551616 ^ -170141183460469231731687303715884105727
+18446744073709551616 ^ -170141183460469231731687303715884105727
+quote 18446744073709551616 ^ -9223372036854775808
+18446744073709551616 ^ -9223372036854775808
+quote 18446744073709551616 ^ -9223372036854775807
+18446744073709551616 ^ -9223372036854775807
+quote 18446744073709551616 ^ -2147483648
+18446744073709551616 ^ -2147483648
+quote 18446744073709551616 ^ -2147483647
+18446744073709551616 ^ -2147483647
+quote 18446744073709551616 ^ -32768
+18446744073709551616 ^ -32768
+quote 18446744073709551616 ^ -32767
+18446744073709551616 ^ -32767
+quote 18446744073709551616 ^ -128
+18446744073709551616 ^ -128
+quote 18446744073709551616 ^ -127
+18446744073709551616 ^ -127
+quote 18446744073709551616 ^ 255
+18446744073709551616 ^ 255
+quote 18446744073709551616 ^ 256
+18446744073709551616 ^ 256
+quote 18446744073709551616 ^ 65535
+18446744073709551616 ^ 65535
+quote 18446744073709551616 ^ 65536
+18446744073709551616 ^ 65536
+quote 18446744073709551616 ^ 4294967295
+18446744073709551616 ^ 4294967295
+quote 18446744073709551616 ^ 4294967296
+18446744073709551616 ^ 4294967296
+quote 18446744073709551616 ^ 18446744073709551615
+18446744073709551616 ^ 18446744073709551615
+quote 18446744073709551616 ^ 18446744073709551616
+18446744073709551616 ^ 18446744073709551616
+quote 18446744073709551616 ^ 340282366920938463463374607431768211455
+18446744073709551616 ^ 340282366920938463463374607431768211455
+quote 18446744073709551616 ^ 340282366920938463463374607431768211456
+18446744073709551616 ^ 340282366920938463463374607431768211456
+quote 340282366920938463463374607431768211455 ^ -170141183460469231731687303715884105728
+340282366920938463463374607431768211455 ^ -170141183460469231731687303715884105728
+quote 340282366920938463463374607431768211455 ^ -170141183460469231731687303715884105727
+340282366920938463463374607431768211455 ^ -170141183460469231731687303715884105727
+quote 340282366920938463463374607431768211455 ^ -9223372036854775808
+340282366920938463463374607431768211455 ^ -9223372036854775808
+quote 340282366920938463463374607431768211455 ^ -9223372036854775807
+340282366920938463463374607431768211455 ^ -9223372036854775807
+quote 340282366920938463463374607431768211455 ^ -2147483648
+340282366920938463463374607431768211455 ^ -2147483648
+quote 340282366920938463463374607431768211455 ^ -2147483647
+340282366920938463463374607431768211455 ^ -2147483647
+quote 340282366920938463463374607431768211455 ^ -32768
+340282366920938463463374607431768211455 ^ -32768
+quote 340282366920938463463374607431768211455 ^ -32767
+340282366920938463463374607431768211455 ^ -32767
+quote 340282366920938463463374607431768211455 ^ -128
+340282366920938463463374607431768211455 ^ -128
+quote 340282366920938463463374607431768211455 ^ -127
+340282366920938463463374607431768211455 ^ -127
+quote 340282366920938463463374607431768211455 ^ 255
+340282366920938463463374607431768211455 ^ 255
+quote 340282366920938463463374607431768211455 ^ 256
+340282366920938463463374607431768211455 ^ 256
+quote 340282366920938463463374607431768211455 ^ 65535
+340282366920938463463374607431768211455 ^ 65535
+quote 340282366920938463463374607431768211455 ^ 65536
+340282366920938463463374607431768211455 ^ 65536
+quote 340282366920938463463374607431768211455 ^ 4294967295
+340282366920938463463374607431768211455 ^ 4294967295
+quote 340282366920938463463374607431768211455 ^ 4294967296
+340282366920938463463374607431768211455 ^ 4294967296
+quote 340282366920938463463374607431768211455 ^ 18446744073709551615
+340282366920938463463374607431768211455 ^ 18446744073709551615
+quote 340282366920938463463374607431768211455 ^ 18446744073709551616
+340282366920938463463374607431768211455 ^ 18446744073709551616
+quote 340282366920938463463374607431768211455 ^ 340282366920938463463374607431768211455
+340282366920938463463374607431768211455 ^ 340282366920938463463374607431768211455
+quote 340282366920938463463374607431768211455 ^ 340282366920938463463374607431768211456
+340282366920938463463374607431768211455 ^ 340282366920938463463374607431768211456
+quote 340282366920938463463374607431768211456 ^ -170141183460469231731687303715884105728
+340282366920938463463374607431768211456 ^ -170141183460469231731687303715884105728
+quote 340282366920938463463374607431768211456 ^ -170141183460469231731687303715884105727
+340282366920938463463374607431768211456 ^ -170141183460469231731687303715884105727
+quote 340282366920938463463374607431768211456 ^ -9223372036854775808
+340282366920938463463374607431768211456 ^ -9223372036854775808
+quote 340282366920938463463374607431768211456 ^ -9223372036854775807
+340282366920938463463374607431768211456 ^ -9223372036854775807
+quote 340282366920938463463374607431768211456 ^ -2147483648
+340282366920938463463374607431768211456 ^ -2147483648
+quote 340282366920938463463374607431768211456 ^ -2147483647
+340282366920938463463374607431768211456 ^ -2147483647
+quote 340282366920938463463374607431768211456 ^ -32768
+340282366920938463463374607431768211456 ^ -32768
+quote 340282366920938463463374607431768211456 ^ -32767
+340282366920938463463374607431768211456 ^ -32767
+quote 340282366920938463463374607431768211456 ^ -128
+340282366920938463463374607431768211456 ^ -128
+quote 340282366920938463463374607431768211456 ^ -127
+340282366920938463463374607431768211456 ^ -127
+quote 340282366920938463463374607431768211456 ^ 255
+340282366920938463463374607431768211456 ^ 255
+quote 340282366920938463463374607431768211456 ^ 256
+340282366920938463463374607431768211456 ^ 256
+quote 340282366920938463463374607431768211456 ^ 65535
+340282366920938463463374607431768211456 ^ 65535
+quote 340282366920938463463374607431768211456 ^ 65536
+340282366920938463463374607431768211456 ^ 65536
+quote 340282366920938463463374607431768211456 ^ 4294967295
+340282366920938463463374607431768211456 ^ 4294967295
+quote 340282366920938463463374607431768211456 ^ 4294967296
+340282366920938463463374607431768211456 ^ 4294967296
+quote 340282366920938463463374607431768211456 ^ 18446744073709551615
+340282366920938463463374607431768211456 ^ 18446744073709551615
+quote 340282366920938463463374607431768211456 ^ 18446744073709551616
+340282366920938463463374607431768211456 ^ 18446744073709551616
+quote 340282366920938463463374607431768211456 ^ 340282366920938463463374607431768211455
+340282366920938463463374607431768211456 ^ 340282366920938463463374607431768211455
+quote 340282366920938463463374607431768211456 ^ 340282366920938463463374607431768211456
+340282366920938463463374607431768211456 ^ 340282366920938463463374607431768211456
diff --git a/test/ic3/integer_bxor.out.expected b/test/ic3/integer_bxor.out.expected
new file mode 100644
index 0000000..835766b
--- /dev/null
+++ b/test/ic3/integer_bxor.out.expected
@@ -0,0 +1,800 @@
+-170141183460469231731687303715884105728 ^ -170141183460469231731687303715884105728
+0
+-170141183460469231731687303715884105728 ^ -170141183460469231731687303715884105727
+1
+-170141183460469231731687303715884105728 ^ -9223372036854775808
+170141183460469231722463931679029329920
+-170141183460469231731687303715884105728 ^ -9223372036854775807
+170141183460469231722463931679029329921
+-170141183460469231731687303715884105728 ^ -2147483648
+170141183460469231731687303713736622080
+-170141183460469231731687303715884105728 ^ -2147483647
+170141183460469231731687303713736622081
+-170141183460469231731687303715884105728 ^ -32768
+170141183460469231731687303715884072960
+-170141183460469231731687303715884105728 ^ -32767
+170141183460469231731687303715884072961
+-170141183460469231731687303715884105728 ^ -128
+170141183460469231731687303715884105600
+-170141183460469231731687303715884105728 ^ -127
+170141183460469231731687303715884105601
+-170141183460469231731687303715884105728 ^ 255
+-170141183460469231731687303715884105473
+-170141183460469231731687303715884105728 ^ 256
+-170141183460469231731687303715884105472
+-170141183460469231731687303715884105728 ^ 65535
+-170141183460469231731687303715884040193
+-170141183460469231731687303715884105728 ^ 65536
+-170141183460469231731687303715884040192
+-170141183460469231731687303715884105728 ^ 4294967295
+-170141183460469231731687303711589138433
+-170141183460469231731687303715884105728 ^ 4294967296
+-170141183460469231731687303711589138432
+-170141183460469231731687303715884105728 ^ 18446744073709551615
+-170141183460469231713240559642174554113
+-170141183460469231731687303715884105728 ^ 18446744073709551616
+-170141183460469231713240559642174554112
+-170141183460469231731687303715884105728 ^ 340282366920938463463374607431768211455
+-170141183460469231731687303715884105729
+-170141183460469231731687303715884105728 ^ 340282366920938463463374607431768211456
+-510423550381407695195061911147652317184
+-170141183460469231731687303715884105727 ^ -170141183460469231731687303715884105728
+1
+-170141183460469231731687303715884105727 ^ -170141183460469231731687303715884105727
+0
+-170141183460469231731687303715884105727 ^ -9223372036854775808
+170141183460469231722463931679029329921
+-170141183460469231731687303715884105727 ^ -9223372036854775807
+170141183460469231722463931679029329920
+-170141183460469231731687303715884105727 ^ -2147483648
+170141183460469231731687303713736622081
+-170141183460469231731687303715884105727 ^ -2147483647
+170141183460469231731687303713736622080
+-170141183460469231731687303715884105727 ^ -32768
+170141183460469231731687303715884072961
+-170141183460469231731687303715884105727 ^ -32767
+170141183460469231731687303715884072960
+-170141183460469231731687303715884105727 ^ -128
+170141183460469231731687303715884105601
+-170141183460469231731687303715884105727 ^ -127
+170141183460469231731687303715884105600
+-170141183460469231731687303715884105727 ^ 255
+-170141183460469231731687303715884105474
+-170141183460469231731687303715884105727 ^ 256
+-170141183460469231731687303715884105471
+-170141183460469231731687303715884105727 ^ 65535
+-170141183460469231731687303715884040194
+-170141183460469231731687303715884105727 ^ 65536
+-170141183460469231731687303715884040191
+-170141183460469231731687303715884105727 ^ 4294967295
+-170141183460469231731687303711589138434
+-170141183460469231731687303715884105727 ^ 4294967296
+-170141183460469231731687303711589138431
+-170141183460469231731687303715884105727 ^ 18446744073709551615
+-170141183460469231713240559642174554114
+-170141183460469231731687303715884105727 ^ 18446744073709551616
+-170141183460469231713240559642174554111
+-170141183460469231731687303715884105727 ^ 340282366920938463463374607431768211455
+-170141183460469231731687303715884105730
+-170141183460469231731687303715884105727 ^ 340282366920938463463374607431768211456
+-510423550381407695195061911147652317183
+-9223372036854775808 ^ -170141183460469231731687303715884105728
+170141183460469231722463931679029329920
+-9223372036854775808 ^ -170141183460469231731687303715884105727
+170141183460469231722463931679029329921
+-9223372036854775808 ^ -9223372036854775808
+0
+-9223372036854775808 ^ -9223372036854775807
+1
+-9223372036854775808 ^ -2147483648
+9223372034707292160
+-9223372036854775808 ^ -2147483647
+9223372034707292161
+-9223372036854775808 ^ -32768
+9223372036854743040
+-9223372036854775808 ^ -32767
+9223372036854743041
+-9223372036854775808 ^ -128
+9223372036854775680
+-9223372036854775808 ^ -127
+9223372036854775681
+-9223372036854775808 ^ 255
+-9223372036854775553
+-9223372036854775808 ^ 256
+-9223372036854775552
+-9223372036854775808 ^ 65535
+-9223372036854710273
+-9223372036854775808 ^ 65536
+-9223372036854710272
+-9223372036854775808 ^ 4294967295
+-9223372032559808513
+-9223372036854775808 ^ 4294967296
+-9223372032559808512
+-9223372036854775808 ^ 18446744073709551615
+-9223372036854775809
+-9223372036854775808 ^ 18446744073709551616
+-27670116110564327424
+-9223372036854775808 ^ 340282366920938463463374607431768211455
+-340282366920938463454151235394913435649
+-9223372036854775808 ^ 340282366920938463463374607431768211456
+-340282366920938463472597979468622987264
+-9223372036854775807 ^ -170141183460469231731687303715884105728
+170141183460469231722463931679029329921
+-9223372036854775807 ^ -170141183460469231731687303715884105727
+170141183460469231722463931679029329920
+-9223372036854775807 ^ -9223372036854775808
+1
+-9223372036854775807 ^ -9223372036854775807
+0
+-9223372036854775807 ^ -2147483648
+9223372034707292161
+-9223372036854775807 ^ -2147483647
+9223372034707292160
+-9223372036854775807 ^ -32768
+9223372036854743041
+-9223372036854775807 ^ -32767
+9223372036854743040
+-9223372036854775807 ^ -128
+9223372036854775681
+-9223372036854775807 ^ -127
+9223372036854775680
+-9223372036854775807 ^ 255
+-9223372036854775554
+-9223372036854775807 ^ 256
+-9223372036854775551
+-9223372036854775807 ^ 65535
+-9223372036854710274
+-9223372036854775807 ^ 65536
+-9223372036854710271
+-9223372036854775807 ^ 4294967295
+-9223372032559808514
+-9223372036854775807 ^ 4294967296
+-9223372032559808511
+-9223372036854775807 ^ 18446744073709551615
+-9223372036854775810
+-9223372036854775807 ^ 18446744073709551616
+-27670116110564327423
+-9223372036854775807 ^ 340282366920938463463374607431768211455
+-340282366920938463454151235394913435650
+-9223372036854775807 ^ 340282366920938463463374607431768211456
+-340282366920938463472597979468622987263
+-2147483648 ^ -170141183460469231731687303715884105728
+170141183460469231731687303713736622080
+-2147483648 ^ -170141183460469231731687303715884105727
+170141183460469231731687303713736622081
+-2147483648 ^ -9223372036854775808
+9223372034707292160
+-2147483648 ^ -9223372036854775807
+9223372034707292161
+-2147483648 ^ -2147483648
+0
+-2147483648 ^ -2147483647
+1
+-2147483648 ^ -32768
+2147450880
+-2147483648 ^ -32767
+2147450881
+-2147483648 ^ -128
+2147483520
+-2147483648 ^ -127
+2147483521
+-2147483648 ^ 255
+-2147483393
+-2147483648 ^ 256
+-2147483392
+-2147483648 ^ 65535
+-2147418113
+-2147483648 ^ 65536
+-2147418112
+-2147483648 ^ 4294967295
+-2147483649
+-2147483648 ^ 4294967296
+-6442450944
+-2147483648 ^ 18446744073709551615
+-18446744071562067969
+-2147483648 ^ 18446744073709551616
+-18446744075857035264
+-2147483648 ^ 340282366920938463463374607431768211455
+-340282366920938463463374607429620727809
+-2147483648 ^ 340282366920938463463374607431768211456
+-340282366920938463463374607433915695104
+-2147483647 ^ -170141183460469231731687303715884105728
+170141183460469231731687303713736622081
+-2147483647 ^ -170141183460469231731687303715884105727
+170141183460469231731687303713736622080
+-2147483647 ^ -9223372036854775808
+9223372034707292161
+-2147483647 ^ -9223372036854775807
+9223372034707292160
+-2147483647 ^ -2147483648
+1
+-2147483647 ^ -2147483647
+0
+-2147483647 ^ -32768
+2147450881
+-2147483647 ^ -32767
+2147450880
+-2147483647 ^ -128
+2147483521
+-2147483647 ^ -127
+2147483520
+-2147483647 ^ 255
+-2147483394
+-2147483647 ^ 256
+-2147483391
+-2147483647 ^ 65535
+-2147418114
+-2147483647 ^ 65536
+-2147418111
+-2147483647 ^ 4294967295
+-2147483650
+-2147483647 ^ 4294967296
+-6442450943
+-2147483647 ^ 18446744073709551615
+-18446744071562067970
+-2147483647 ^ 18446744073709551616
+-18446744075857035263
+-2147483647 ^ 340282366920938463463374607431768211455
+-340282366920938463463374607429620727810
+-2147483647 ^ 340282366920938463463374607431768211456
+-340282366920938463463374607433915695103
+-32768 ^ -170141183460469231731687303715884105728
+170141183460469231731687303715884072960
+-32768 ^ -170141183460469231731687303715884105727
+170141183460469231731687303715884072961
+-32768 ^ -9223372036854775808
+9223372036854743040
+-32768 ^ -9223372036854775807
+9223372036854743041
+-32768 ^ -2147483648
+2147450880
+-32768 ^ -2147483647
+2147450881
+-32768 ^ -32768
+0
+-32768 ^ -32767
+1
+-32768 ^ -128
+32640
+-32768 ^ -127
+32641
+-32768 ^ 255
+-32513
+-32768 ^ 256
+-32512
+-32768 ^ 65535
+-32769
+-32768 ^ 65536
+-98304
+-32768 ^ 4294967295
+-4294934529
+-32768 ^ 4294967296
+-4295000064
+-32768 ^ 18446744073709551615
+-18446744073709518849
+-32768 ^ 18446744073709551616
+-18446744073709584384
+-32768 ^ 340282366920938463463374607431768211455
+-340282366920938463463374607431768178689
+-32768 ^ 340282366920938463463374607431768211456
+-340282366920938463463374607431768244224
+-32767 ^ -170141183460469231731687303715884105728
+170141183460469231731687303715884072961
+-32767 ^ -170141183460469231731687303715884105727
+170141183460469231731687303715884072960
+-32767 ^ -9223372036854775808
+9223372036854743041
+-32767 ^ -9223372036854775807
+9223372036854743040
+-32767 ^ -2147483648
+2147450881
+-32767 ^ -2147483647
+2147450880
+-32767 ^ -32768
+1
+-32767 ^ -32767
+0
+-32767 ^ -128
+32641
+-32767 ^ -127
+32640
+-32767 ^ 255
+-32514
+-32767 ^ 256
+-32511
+-32767 ^ 65535
+-32770
+-32767 ^ 65536
+-98303
+-32767 ^ 4294967295
+-4294934530
+-32767 ^ 4294967296
+-4295000063
+-32767 ^ 18446744073709551615
+-18446744073709518850
+-32767 ^ 18446744073709551616
+-18446744073709584383
+-32767 ^ 340282366920938463463374607431768211455
+-340282366920938463463374607431768178690
+-32767 ^ 340282366920938463463374607431768211456
+-340282366920938463463374607431768244223
+-128 ^ -170141183460469231731687303715884105728
+170141183460469231731687303715884105600
+-128 ^ -170141183460469231731687303715884105727
+170141183460469231731687303715884105601
+-128 ^ -9223372036854775808
+9223372036854775680
+-128 ^ -9223372036854775807
+9223372036854775681
+-128 ^ -2147483648
+2147483520
+-128 ^ -2147483647
+2147483521
+-128 ^ -32768
+32640
+-128 ^ -32767
+32641
+-128 ^ -128
+0
+-128 ^ -127
+1
+-128 ^ 255
+-129
+-128 ^ 256
+-384
+-128 ^ 65535
+-65409
+-128 ^ 65536
+-65664
+-128 ^ 4294967295
+-4294967169
+-128 ^ 4294967296
+-4294967424
+-128 ^ 18446744073709551615
+-18446744073709551489
+-128 ^ 18446744073709551616
+-18446744073709551744
+-128 ^ 340282366920938463463374607431768211455
+-340282366920938463463374607431768211329
+-128 ^ 340282366920938463463374607431768211456
+-340282366920938463463374607431768211584
+-127 ^ -170141183460469231731687303715884105728
+170141183460469231731687303715884105601
+-127 ^ -170141183460469231731687303715884105727
+170141183460469231731687303715884105600
+-127 ^ -9223372036854775808
+9223372036854775681
+-127 ^ -9223372036854775807
+9223372036854775680
+-127 ^ -2147483648
+2147483521
+-127 ^ -2147483647
+2147483520
+-127 ^ -32768
+32641
+-127 ^ -32767
+32640
+-127 ^ -128
+1
+-127 ^ -127
+0
+-127 ^ 255
+-130
+-127 ^ 256
+-383
+-127 ^ 65535
+-65410
+-127 ^ 65536
+-65663
+-127 ^ 4294967295
+-4294967170
+-127 ^ 4294967296
+-4294967423
+-127 ^ 18446744073709551615
+-18446744073709551490
+-127 ^ 18446744073709551616
+-18446744073709551743
+-127 ^ 340282366920938463463374607431768211455
+-340282366920938463463374607431768211330
+-127 ^ 340282366920938463463374607431768211456
+-340282366920938463463374607431768211583
+255 ^ -170141183460469231731687303715884105728
+-170141183460469231731687303715884105473
+255 ^ -170141183460469231731687303715884105727
+-170141183460469231731687303715884105474
+255 ^ -9223372036854775808
+-9223372036854775553
+255 ^ -9223372036854775807
+-9223372036854775554
+255 ^ -2147483648
+-2147483393
+255 ^ -2147483647
+-2147483394
+255 ^ -32768
+-32513
+255 ^ -32767
+-32514
+255 ^ -128
+-129
+255 ^ -127
+-130
+255 ^ 255
+0
+255 ^ 256
+511
+255 ^ 65535
+65280
+255 ^ 65536
+65791
+255 ^ 4294967295
+4294967040
+255 ^ 4294967296
+4294967551
+255 ^ 18446744073709551615
+18446744073709551360
+255 ^ 18446744073709551616
+18446744073709551871
+255 ^ 340282366920938463463374607431768211455
+340282366920938463463374607431768211200
+255 ^ 340282366920938463463374607431768211456
+340282366920938463463374607431768211711
+256 ^ -170141183460469231731687303715884105728
+-170141183460469231731687303715884105472
+256 ^ -170141183460469231731687303715884105727
+-170141183460469231731687303715884105471
+256 ^ -9223372036854775808
+-9223372036854775552
+256 ^ -9223372036854775807
+-9223372036854775551
+256 ^ -2147483648
+-2147483392
+256 ^ -2147483647
+-2147483391
+256 ^ -32768
+-32512
+256 ^ -32767
+-32511
+256 ^ -128
+-384
+256 ^ -127
+-383
+256 ^ 255
+511
+256 ^ 256
+0
+256 ^ 65535
+65279
+256 ^ 65536
+65792
+256 ^ 4294967295
+4294967039
+256 ^ 4294967296
+4294967552
+256 ^ 18446744073709551615
+18446744073709551359
+256 ^ 18446744073709551616
+18446744073709551872
+256 ^ 340282366920938463463374607431768211455
+340282366920938463463374607431768211199
+256 ^ 340282366920938463463374607431768211456
+340282366920938463463374607431768211712
+65535 ^ -170141183460469231731687303715884105728
+-170141183460469231731687303715884040193
+65535 ^ -170141183460469231731687303715884105727
+-170141183460469231731687303715884040194
+65535 ^ -9223372036854775808
+-9223372036854710273
+65535 ^ -9223372036854775807
+-9223372036854710274
+65535 ^ -2147483648
+-2147418113
+65535 ^ -2147483647
+-2147418114
+65535 ^ -32768
+-32769
+65535 ^ -32767
+-32770
+65535 ^ -128
+-65409
+65535 ^ -127
+-65410
+65535 ^ 255
+65280
+65535 ^ 256
+65279
+65535 ^ 65535
+0
+65535 ^ 65536
+131071
+65535 ^ 4294967295
+4294901760
+65535 ^ 4294967296
+4295032831
+65535 ^ 18446744073709551615
+18446744073709486080
+65535 ^ 18446744073709551616
+18446744073709617151
+65535 ^ 340282366920938463463374607431768211455
+340282366920938463463374607431768145920
+65535 ^ 340282366920938463463374607431768211456
+340282366920938463463374607431768276991
+65536 ^ -170141183460469231731687303715884105728
+-170141183460469231731687303715884040192
+65536 ^ -170141183460469231731687303715884105727
+-170141183460469231731687303715884040191
+65536 ^ -9223372036854775808
+-9223372036854710272
+65536 ^ -9223372036854775807
+-9223372036854710271
+65536 ^ -2147483648
+-2147418112
+65536 ^ -2147483647
+-2147418111
+65536 ^ -32768
+-98304
+65536 ^ -32767
+-98303
+65536 ^ -128
+-65664
+65536 ^ -127
+-65663
+65536 ^ 255
+65791
+65536 ^ 256
+65792
+65536 ^ 65535
+131071
+65536 ^ 65536
+0
+65536 ^ 4294967295
+4294901759
+65536 ^ 4294967296
+4295032832
+65536 ^ 18446744073709551615
+18446744073709486079
+65536 ^ 18446744073709551616
+18446744073709617152
+65536 ^ 340282366920938463463374607431768211455
+340282366920938463463374607431768145919
+65536 ^ 340282366920938463463374607431768211456
+340282366920938463463374607431768276992
+4294967295 ^ -170141183460469231731687303715884105728
+-170141183460469231731687303711589138433
+4294967295 ^ -170141183460469231731687303715884105727
+-170141183460469231731687303711589138434
+4294967295 ^ -9223372036854775808
+-9223372032559808513
+4294967295 ^ -9223372036854775807
+-9223372032559808514
+4294967295 ^ -2147483648
+-2147483649
+4294967295 ^ -2147483647
+-2147483650
+4294967295 ^ -32768
+-4294934529
+4294967295 ^ -32767
+-4294934530
+4294967295 ^ -128
+-4294967169
+4294967295 ^ -127
+-4294967170
+4294967295 ^ 255
+4294967040
+4294967295 ^ 256
+4294967039
+4294967295 ^ 65535
+4294901760
+4294967295 ^ 65536
+4294901759
+4294967295 ^ 4294967295
+0
+4294967295 ^ 4294967296
+8589934591
+4294967295 ^ 18446744073709551615
+18446744069414584320
+4294967295 ^ 18446744073709551616
+18446744078004518911
+4294967295 ^ 340282366920938463463374607431768211455
+340282366920938463463374607427473244160
+4294967295 ^ 340282366920938463463374607431768211456
+340282366920938463463374607436063178751
+4294967296 ^ -170141183460469231731687303715884105728
+-170141183460469231731687303711589138432
+4294967296 ^ -170141183460469231731687303715884105727
+-170141183460469231731687303711589138431
+4294967296 ^ -9223372036854775808
+-9223372032559808512
+4294967296 ^ -9223372036854775807
+-9223372032559808511
+4294967296 ^ -2147483648
+-6442450944
+4294967296 ^ -2147483647
+-6442450943
+4294967296 ^ -32768
+-4295000064
+4294967296 ^ -32767
+-4295000063
+4294967296 ^ -128
+-4294967424
+4294967296 ^ -127
+-4294967423
+4294967296 ^ 255
+4294967551
+4294967296 ^ 256
+4294967552
+4294967296 ^ 65535
+4295032831
+4294967296 ^ 65536
+4295032832
+4294967296 ^ 4294967295
+8589934591
+4294967296 ^ 4294967296
+0
+4294967296 ^ 18446744073709551615
+18446744069414584319
+4294967296 ^ 18446744073709551616
+18446744078004518912
+4294967296 ^ 340282366920938463463374607431768211455
+340282366920938463463374607427473244159
+4294967296 ^ 340282366920938463463374607431768211456
+340282366920938463463374607436063178752
+18446744073709551615 ^ -170141183460469231731687303715884105728
+-170141183460469231713240559642174554113
+18446744073709551615 ^ -170141183460469231731687303715884105727
+-170141183460469231713240559642174554114
+18446744073709551615 ^ -9223372036854775808
+-9223372036854775809
+18446744073709551615 ^ -9223372036854775807
+-9223372036854775810
+18446744073709551615 ^ -2147483648
+-18446744071562067969
+18446744073709551615 ^ -2147483647
+-18446744071562067970
+18446744073709551615 ^ -32768
+-18446744073709518849
+18446744073709551615 ^ -32767
+-18446744073709518850
+18446744073709551615 ^ -128
+-18446744073709551489
+18446744073709551615 ^ -127
+-18446744073709551490
+18446744073709551615 ^ 255
+18446744073709551360
+18446744073709551615 ^ 256
+18446744073709551359
+18446744073709551615 ^ 65535
+18446744073709486080
+18446744073709551615 ^ 65536
+18446744073709486079
+18446744073709551615 ^ 4294967295
+18446744069414584320
+18446744073709551615 ^ 4294967296
+18446744069414584319
+18446744073709551615 ^ 18446744073709551615
+0
+18446744073709551615 ^ 18446744073709551616
+36893488147419103231
+18446744073709551615 ^ 340282366920938463463374607431768211455
+340282366920938463444927863358058659840
+18446744073709551615 ^ 340282366920938463463374607431768211456
+340282366920938463481821351505477763071
+18446744073709551616 ^ -170141183460469231731687303715884105728
+-170141183460469231713240559642174554112
+18446744073709551616 ^ -170141183460469231731687303715884105727
+-170141183460469231713240559642174554111
+18446744073709551616 ^ -9223372036854775808
+-27670116110564327424
+18446744073709551616 ^ -9223372036854775807
+-27670116110564327423
+18446744073709551616 ^ -2147483648
+-18446744075857035264
+18446744073709551616 ^ -2147483647
+-18446744075857035263
+18446744073709551616 ^ -32768
+-18446744073709584384
+18446744073709551616 ^ -32767
+-18446744073709584383
+18446744073709551616 ^ -128
+-18446744073709551744
+18446744073709551616 ^ -127
+-18446744073709551743
+18446744073709551616 ^ 255
+18446744073709551871
+18446744073709551616 ^ 256
+18446744073709551872
+18446744073709551616 ^ 65535
+18446744073709617151
+18446744073709551616 ^ 65536
+18446744073709617152
+18446744073709551616 ^ 4294967295
+18446744078004518911
+18446744073709551616 ^ 4294967296
+18446744078004518912
+18446744073709551616 ^ 18446744073709551615
+36893488147419103231
+18446744073709551616 ^ 18446744073709551616
+0
+18446744073709551616 ^ 340282366920938463463374607431768211455
+340282366920938463444927863358058659839
+18446744073709551616 ^ 340282366920938463463374607431768211456
+340282366920938463481821351505477763072
+340282366920938463463374607431768211455 ^ -170141183460469231731687303715884105728
+-170141183460469231731687303715884105729
+340282366920938463463374607431768211455 ^ -170141183460469231731687303715884105727
+-170141183460469231731687303715884105730
+340282366920938463463374607431768211455 ^ -9223372036854775808
+-340282366920938463454151235394913435649
+340282366920938463463374607431768211455 ^ -9223372036854775807
+-340282366920938463454151235394913435650
+340282366920938463463374607431768211455 ^ -2147483648
+-340282366920938463463374607429620727809
+340282366920938463463374607431768211455 ^ -2147483647
+-340282366920938463463374607429620727810
+340282366920938463463374607431768211455 ^ -32768
+-340282366920938463463374607431768178689
+340282366920938463463374607431768211455 ^ -32767
+-340282366920938463463374607431768178690
+340282366920938463463374607431768211455 ^ -128
+-340282366920938463463374607431768211329
+340282366920938463463374607431768211455 ^ -127
+-340282366920938463463374607431768211330
+340282366920938463463374607431768211455 ^ 255
+340282366920938463463374607431768211200
+340282366920938463463374607431768211455 ^ 256
+340282366920938463463374607431768211199
+340282366920938463463374607431768211455 ^ 65535
+340282366920938463463374607431768145920
+340282366920938463463374607431768211455 ^ 65536
+340282366920938463463374607431768145919
+340282366920938463463374607431768211455 ^ 4294967295
+340282366920938463463374607427473244160
+340282366920938463463374607431768211455 ^ 4294967296
+340282366920938463463374607427473244159
+340282366920938463463374607431768211455 ^ 18446744073709551615
+340282366920938463444927863358058659840
+340282366920938463463374607431768211455 ^ 18446744073709551616
+340282366920938463444927863358058659839
+340282366920938463463374607431768211455 ^ 340282366920938463463374607431768211455
+0
+340282366920938463463374607431768211455 ^ 340282366920938463463374607431768211456
+680564733841876926926749214863536422911
+340282366920938463463374607431768211456 ^ -170141183460469231731687303715884105728
+-510423550381407695195061911147652317184
+340282366920938463463374607431768211456 ^ -170141183460469231731687303715884105727
+-510423550381407695195061911147652317183
+340282366920938463463374607431768211456 ^ -9223372036854775808
+-340282366920938463472597979468622987264
+340282366920938463463374607431768211456 ^ -9223372036854775807
+-340282366920938463472597979468622987263
+340282366920938463463374607431768211456 ^ -2147483648
+-340282366920938463463374607433915695104
+340282366920938463463374607431768211456 ^ -2147483647
+-340282366920938463463374607433915695103
+340282366920938463463374607431768211456 ^ -32768
+-340282366920938463463374607431768244224
+340282366920938463463374607431768211456 ^ -32767
+-340282366920938463463374607431768244223
+340282366920938463463374607431768211456 ^ -128
+-340282366920938463463374607431768211584
+340282366920938463463374607431768211456 ^ -127
+-340282366920938463463374607431768211583
+340282366920938463463374607431768211456 ^ 255
+340282366920938463463374607431768211711
+340282366920938463463374607431768211456 ^ 256
+340282366920938463463374607431768211712
+340282366920938463463374607431768211456 ^ 65535
+340282366920938463463374607431768276991
+340282366920938463463374607431768211456 ^ 65536
+340282366920938463463374607431768276992
+340282366920938463463374607431768211456 ^ 4294967295
+340282366920938463463374607436063178751
+340282366920938463463374607431768211456 ^ 4294967296
+340282366920938463463374607436063178752
+340282366920938463463374607431768211456 ^ 18446744073709551615
+340282366920938463481821351505477763071
+340282366920938463463374607431768211456 ^ 18446744073709551616
+340282366920938463481821351505477763072
+340282366920938463463374607431768211456 ^ 340282366920938463463374607431768211455
+680564733841876926926749214863536422911
+340282366920938463463374607431768211456 ^ 340282366920938463463374607431768211456
+0
diff --git a/test/ic3/integer_bxor.ret.expected b/test/ic3/integer_bxor.ret.expected
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/test/ic3/integer_bxor.ret.expected
@@ -0,0 +1 @@
+0
diff --git a/test/ic3/integer_div.in b/test/ic3/integer_div.in
new file mode 100644
index 0000000..9bf4f54
--- /dev/null
+++ b/test/ic3/integer_div.in
@@ -0,0 +1,800 @@
+quote -170141183460469231731687303715884105728 / -170141183460469231731687303715884105728
+-170141183460469231731687303715884105728 / -170141183460469231731687303715884105728
+quote -170141183460469231731687303715884105728 / -170141183460469231731687303715884105727
+-170141183460469231731687303715884105728 / -170141183460469231731687303715884105727
+quote -170141183460469231731687303715884105728 / -9223372036854775808
+-170141183460469231731687303715884105728 / -9223372036854775808
+quote -170141183460469231731687303715884105728 / -9223372036854775807
+-170141183460469231731687303715884105728 / -9223372036854775807
+quote -170141183460469231731687303715884105728 / -2147483648
+-170141183460469231731687303715884105728 / -2147483648
+quote -170141183460469231731687303715884105728 / -2147483647
+-170141183460469231731687303715884105728 / -2147483647
+quote -170141183460469231731687303715884105728 / -32768
+-170141183460469231731687303715884105728 / -32768
+quote -170141183460469231731687303715884105728 / -32767
+-170141183460469231731687303715884105728 / -32767
+quote -170141183460469231731687303715884105728 / -128
+-170141183460469231731687303715884105728 / -128
+quote -170141183460469231731687303715884105728 / -127
+-170141183460469231731687303715884105728 / -127
+quote -170141183460469231731687303715884105728 / 255
+-170141183460469231731687303715884105728 / 255
+quote -170141183460469231731687303715884105728 / 256
+-170141183460469231731687303715884105728 / 256
+quote -170141183460469231731687303715884105728 / 65535
+-170141183460469231731687303715884105728 / 65535
+quote -170141183460469231731687303715884105728 / 65536
+-170141183460469231731687303715884105728 / 65536
+quote -170141183460469231731687303715884105728 / 4294967295
+-170141183460469231731687303715884105728 / 4294967295
+quote -170141183460469231731687303715884105728 / 4294967296
+-170141183460469231731687303715884105728 / 4294967296
+quote -170141183460469231731687303715884105728 / 18446744073709551615
+-170141183460469231731687303715884105728 / 18446744073709551615
+quote -170141183460469231731687303715884105728 / 18446744073709551616
+-170141183460469231731687303715884105728 / 18446744073709551616
+quote -170141183460469231731687303715884105728 / 340282366920938463463374607431768211455
+-170141183460469231731687303715884105728 / 340282366920938463463374607431768211455
+quote -170141183460469231731687303715884105728 / 340282366920938463463374607431768211456
+-170141183460469231731687303715884105728 / 340282366920938463463374607431768211456
+quote -170141183460469231731687303715884105727 / -170141183460469231731687303715884105728
+-170141183460469231731687303715884105727 / -170141183460469231731687303715884105728
+quote -170141183460469231731687303715884105727 / -170141183460469231731687303715884105727
+-170141183460469231731687303715884105727 / -170141183460469231731687303715884105727
+quote -170141183460469231731687303715884105727 / -9223372036854775808
+-170141183460469231731687303715884105727 / -9223372036854775808
+quote -170141183460469231731687303715884105727 / -9223372036854775807
+-170141183460469231731687303715884105727 / -9223372036854775807
+quote -170141183460469231731687303715884105727 / -2147483648
+-170141183460469231731687303715884105727 / -2147483648
+quote -170141183460469231731687303715884105727 / -2147483647
+-170141183460469231731687303715884105727 / -2147483647
+quote -170141183460469231731687303715884105727 / -32768
+-170141183460469231731687303715884105727 / -32768
+quote -170141183460469231731687303715884105727 / -32767
+-170141183460469231731687303715884105727 / -32767
+quote -170141183460469231731687303715884105727 / -128
+-170141183460469231731687303715884105727 / -128
+quote -170141183460469231731687303715884105727 / -127
+-170141183460469231731687303715884105727 / -127
+quote -170141183460469231731687303715884105727 / 255
+-170141183460469231731687303715884105727 / 255
+quote -170141183460469231731687303715884105727 / 256
+-170141183460469231731687303715884105727 / 256
+quote -170141183460469231731687303715884105727 / 65535
+-170141183460469231731687303715884105727 / 65535
+quote -170141183460469231731687303715884105727 / 65536
+-170141183460469231731687303715884105727 / 65536
+quote -170141183460469231731687303715884105727 / 4294967295
+-170141183460469231731687303715884105727 / 4294967295
+quote -170141183460469231731687303715884105727 / 4294967296
+-170141183460469231731687303715884105727 / 4294967296
+quote -170141183460469231731687303715884105727 / 18446744073709551615
+-170141183460469231731687303715884105727 / 18446744073709551615
+quote -170141183460469231731687303715884105727 / 18446744073709551616
+-170141183460469231731687303715884105727 / 18446744073709551616
+quote -170141183460469231731687303715884105727 / 340282366920938463463374607431768211455
+-170141183460469231731687303715884105727 / 340282366920938463463374607431768211455
+quote -170141183460469231731687303715884105727 / 340282366920938463463374607431768211456
+-170141183460469231731687303715884105727 / 340282366920938463463374607431768211456
+quote -9223372036854775808 / -170141183460469231731687303715884105728
+-9223372036854775808 / -170141183460469231731687303715884105728
+quote -9223372036854775808 / -170141183460469231731687303715884105727
+-9223372036854775808 / -170141183460469231731687303715884105727
+quote -9223372036854775808 / -9223372036854775808
+-9223372036854775808 / -9223372036854775808
+quote -9223372036854775808 / -9223372036854775807
+-9223372036854775808 / -9223372036854775807
+quote -9223372036854775808 / -2147483648
+-9223372036854775808 / -2147483648
+quote -9223372036854775808 / -2147483647
+-9223372036854775808 / -2147483647
+quote -9223372036854775808 / -32768
+-9223372036854775808 / -32768
+quote -9223372036854775808 / -32767
+-9223372036854775808 / -32767
+quote -9223372036854775808 / -128
+-9223372036854775808 / -128
+quote -9223372036854775808 / -127
+-9223372036854775808 / -127
+quote -9223372036854775808 / 255
+-9223372036854775808 / 255
+quote -9223372036854775808 / 256
+-9223372036854775808 / 256
+quote -9223372036854775808 / 65535
+-9223372036854775808 / 65535
+quote -9223372036854775808 / 65536
+-9223372036854775808 / 65536
+quote -9223372036854775808 / 4294967295
+-9223372036854775808 / 4294967295
+quote -9223372036854775808 / 4294967296
+-9223372036854775808 / 4294967296
+quote -9223372036854775808 / 18446744073709551615
+-9223372036854775808 / 18446744073709551615
+quote -9223372036854775808 / 18446744073709551616
+-9223372036854775808 / 18446744073709551616
+quote -9223372036854775808 / 340282366920938463463374607431768211455
+-9223372036854775808 / 340282366920938463463374607431768211455
+quote -9223372036854775808 / 340282366920938463463374607431768211456
+-9223372036854775808 / 340282366920938463463374607431768211456
+quote -9223372036854775807 / -170141183460469231731687303715884105728
+-9223372036854775807 / -170141183460469231731687303715884105728
+quote -9223372036854775807 / -170141183460469231731687303715884105727
+-9223372036854775807 / -170141183460469231731687303715884105727
+quote -9223372036854775807 / -9223372036854775808
+-9223372036854775807 / -9223372036854775808
+quote -9223372036854775807 / -9223372036854775807
+-9223372036854775807 / -9223372036854775807
+quote -9223372036854775807 / -2147483648
+-9223372036854775807 / -2147483648
+quote -9223372036854775807 / -2147483647
+-9223372036854775807 / -2147483647
+quote -9223372036854775807 / -32768
+-9223372036854775807 / -32768
+quote -9223372036854775807 / -32767
+-9223372036854775807 / -32767
+quote -9223372036854775807 / -128
+-9223372036854775807 / -128
+quote -9223372036854775807 / -127
+-9223372036854775807 / -127
+quote -9223372036854775807 / 255
+-9223372036854775807 / 255
+quote -9223372036854775807 / 256
+-9223372036854775807 / 256
+quote -9223372036854775807 / 65535
+-9223372036854775807 / 65535
+quote -9223372036854775807 / 65536
+-9223372036854775807 / 65536
+quote -9223372036854775807 / 4294967295
+-9223372036854775807 / 4294967295
+quote -9223372036854775807 / 4294967296
+-9223372036854775807 / 4294967296
+quote -9223372036854775807 / 18446744073709551615
+-9223372036854775807 / 18446744073709551615
+quote -9223372036854775807 / 18446744073709551616
+-9223372036854775807 / 18446744073709551616
+quote -9223372036854775807 / 340282366920938463463374607431768211455
+-9223372036854775807 / 340282366920938463463374607431768211455
+quote -9223372036854775807 / 340282366920938463463374607431768211456
+-9223372036854775807 / 340282366920938463463374607431768211456
+quote -2147483648 / -170141183460469231731687303715884105728
+-2147483648 / -170141183460469231731687303715884105728
+quote -2147483648 / -170141183460469231731687303715884105727
+-2147483648 / -170141183460469231731687303715884105727
+quote -2147483648 / -9223372036854775808
+-2147483648 / -9223372036854775808
+quote -2147483648 / -9223372036854775807
+-2147483648 / -9223372036854775807
+quote -2147483648 / -2147483648
+-2147483648 / -2147483648
+quote -2147483648 / -2147483647
+-2147483648 / -2147483647
+quote -2147483648 / -32768
+-2147483648 / -32768
+quote -2147483648 / -32767
+-2147483648 / -32767
+quote -2147483648 / -128
+-2147483648 / -128
+quote -2147483648 / -127
+-2147483648 / -127
+quote -2147483648 / 255
+-2147483648 / 255
+quote -2147483648 / 256
+-2147483648 / 256
+quote -2147483648 / 65535
+-2147483648 / 65535
+quote -2147483648 / 65536
+-2147483648 / 65536
+quote -2147483648 / 4294967295
+-2147483648 / 4294967295
+quote -2147483648 / 4294967296
+-2147483648 / 4294967296
+quote -2147483648 / 18446744073709551615
+-2147483648 / 18446744073709551615
+quote -2147483648 / 18446744073709551616
+-2147483648 / 18446744073709551616
+quote -2147483648 / 340282366920938463463374607431768211455
+-2147483648 / 340282366920938463463374607431768211455
+quote -2147483648 / 340282366920938463463374607431768211456
+-2147483648 / 340282366920938463463374607431768211456
+quote -2147483647 / -170141183460469231731687303715884105728
+-2147483647 / -170141183460469231731687303715884105728
+quote -2147483647 / -170141183460469231731687303715884105727
+-2147483647 / -170141183460469231731687303715884105727
+quote -2147483647 / -9223372036854775808
+-2147483647 / -9223372036854775808
+quote -2147483647 / -9223372036854775807
+-2147483647 / -9223372036854775807
+quote -2147483647 / -2147483648
+-2147483647 / -2147483648
+quote -2147483647 / -2147483647
+-2147483647 / -2147483647
+quote -2147483647 / -32768
+-2147483647 / -32768
+quote -2147483647 / -32767
+-2147483647 / -32767
+quote -2147483647 / -128
+-2147483647 / -128
+quote -2147483647 / -127
+-2147483647 / -127
+quote -2147483647 / 255
+-2147483647 / 255
+quote -2147483647 / 256
+-2147483647 / 256
+quote -2147483647 / 65535
+-2147483647 / 65535
+quote -2147483647 / 65536
+-2147483647 / 65536
+quote -2147483647 / 4294967295
+-2147483647 / 4294967295
+quote -2147483647 / 4294967296
+-2147483647 / 4294967296
+quote -2147483647 / 18446744073709551615
+-2147483647 / 18446744073709551615
+quote -2147483647 / 18446744073709551616
+-2147483647 / 18446744073709551616
+quote -2147483647 / 340282366920938463463374607431768211455
+-2147483647 / 340282366920938463463374607431768211455
+quote -2147483647 / 340282366920938463463374607431768211456
+-2147483647 / 340282366920938463463374607431768211456
+quote -32768 / -170141183460469231731687303715884105728
+-32768 / -170141183460469231731687303715884105728
+quote -32768 / -170141183460469231731687303715884105727
+-32768 / -170141183460469231731687303715884105727
+quote -32768 / -9223372036854775808
+-32768 / -9223372036854775808
+quote -32768 / -9223372036854775807
+-32768 / -9223372036854775807
+quote -32768 / -2147483648
+-32768 / -2147483648
+quote -32768 / -2147483647
+-32768 / -2147483647
+quote -32768 / -32768
+-32768 / -32768
+quote -32768 / -32767
+-32768 / -32767
+quote -32768 / -128
+-32768 / -128
+quote -32768 / -127
+-32768 / -127
+quote -32768 / 255
+-32768 / 255
+quote -32768 / 256
+-32768 / 256
+quote -32768 / 65535
+-32768 / 65535
+quote -32768 / 65536
+-32768 / 65536
+quote -32768 / 4294967295
+-32768 / 4294967295
+quote -32768 / 4294967296
+-32768 / 4294967296
+quote -32768 / 18446744073709551615
+-32768 / 18446744073709551615
+quote -32768 / 18446744073709551616
+-32768 / 18446744073709551616
+quote -32768 / 340282366920938463463374607431768211455
+-32768 / 340282366920938463463374607431768211455
+quote -32768 / 340282366920938463463374607431768211456
+-32768 / 340282366920938463463374607431768211456
+quote -32767 / -170141183460469231731687303715884105728
+-32767 / -170141183460469231731687303715884105728
+quote -32767 / -170141183460469231731687303715884105727
+-32767 / -170141183460469231731687303715884105727
+quote -32767 / -9223372036854775808
+-32767 / -9223372036854775808
+quote -32767 / -9223372036854775807
+-32767 / -9223372036854775807
+quote -32767 / -2147483648
+-32767 / -2147483648
+quote -32767 / -2147483647
+-32767 / -2147483647
+quote -32767 / -32768
+-32767 / -32768
+quote -32767 / -32767
+-32767 / -32767
+quote -32767 / -128
+-32767 / -128
+quote -32767 / -127
+-32767 / -127
+quote -32767 / 255
+-32767 / 255
+quote -32767 / 256
+-32767 / 256
+quote -32767 / 65535
+-32767 / 65535
+quote -32767 / 65536
+-32767 / 65536
+quote -32767 / 4294967295
+-32767 / 4294967295
+quote -32767 / 4294967296
+-32767 / 4294967296
+quote -32767 / 18446744073709551615
+-32767 / 18446744073709551615
+quote -32767 / 18446744073709551616
+-32767 / 18446744073709551616
+quote -32767 / 340282366920938463463374607431768211455
+-32767 / 340282366920938463463374607431768211455
+quote -32767 / 340282366920938463463374607431768211456
+-32767 / 340282366920938463463374607431768211456
+quote -128 / -170141183460469231731687303715884105728
+-128 / -170141183460469231731687303715884105728
+quote -128 / -170141183460469231731687303715884105727
+-128 / -170141183460469231731687303715884105727
+quote -128 / -9223372036854775808
+-128 / -9223372036854775808
+quote -128 / -9223372036854775807
+-128 / -9223372036854775807
+quote -128 / -2147483648
+-128 / -2147483648
+quote -128 / -2147483647
+-128 / -2147483647
+quote -128 / -32768
+-128 / -32768
+quote -128 / -32767
+-128 / -32767
+quote -128 / -128
+-128 / -128
+quote -128 / -127
+-128 / -127
+quote -128 / 255
+-128 / 255
+quote -128 / 256
+-128 / 256
+quote -128 / 65535
+-128 / 65535
+quote -128 / 65536
+-128 / 65536
+quote -128 / 4294967295
+-128 / 4294967295
+quote -128 / 4294967296
+-128 / 4294967296
+quote -128 / 18446744073709551615
+-128 / 18446744073709551615
+quote -128 / 18446744073709551616
+-128 / 18446744073709551616
+quote -128 / 340282366920938463463374607431768211455
+-128 / 340282366920938463463374607431768211455
+quote -128 / 340282366920938463463374607431768211456
+-128 / 340282366920938463463374607431768211456
+quote -127 / -170141183460469231731687303715884105728
+-127 / -170141183460469231731687303715884105728
+quote -127 / -170141183460469231731687303715884105727
+-127 / -170141183460469231731687303715884105727
+quote -127 / -9223372036854775808
+-127 / -9223372036854775808
+quote -127 / -9223372036854775807
+-127 / -9223372036854775807
+quote -127 / -2147483648
+-127 / -2147483648
+quote -127 / -2147483647
+-127 / -2147483647
+quote -127 / -32768
+-127 / -32768
+quote -127 / -32767
+-127 / -32767
+quote -127 / -128
+-127 / -128
+quote -127 / -127
+-127 / -127
+quote -127 / 255
+-127 / 255
+quote -127 / 256
+-127 / 256
+quote -127 / 65535
+-127 / 65535
+quote -127 / 65536
+-127 / 65536
+quote -127 / 4294967295
+-127 / 4294967295
+quote -127 / 4294967296
+-127 / 4294967296
+quote -127 / 18446744073709551615
+-127 / 18446744073709551615
+quote -127 / 18446744073709551616
+-127 / 18446744073709551616
+quote -127 / 340282366920938463463374607431768211455
+-127 / 340282366920938463463374607431768211455
+quote -127 / 340282366920938463463374607431768211456
+-127 / 340282366920938463463374607431768211456
+quote 255 / -170141183460469231731687303715884105728
+255 / -170141183460469231731687303715884105728
+quote 255 / -170141183460469231731687303715884105727
+255 / -170141183460469231731687303715884105727
+quote 255 / -9223372036854775808
+255 / -9223372036854775808
+quote 255 / -9223372036854775807
+255 / -9223372036854775807
+quote 255 / -2147483648
+255 / -2147483648
+quote 255 / -2147483647
+255 / -2147483647
+quote 255 / -32768
+255 / -32768
+quote 255 / -32767
+255 / -32767
+quote 255 / -128
+255 / -128
+quote 255 / -127
+255 / -127
+quote 255 / 255
+255 / 255
+quote 255 / 256
+255 / 256
+quote 255 / 65535
+255 / 65535
+quote 255 / 65536
+255 / 65536
+quote 255 / 4294967295
+255 / 4294967295
+quote 255 / 4294967296
+255 / 4294967296
+quote 255 / 18446744073709551615
+255 / 18446744073709551615
+quote 255 / 18446744073709551616
+255 / 18446744073709551616
+quote 255 / 340282366920938463463374607431768211455
+255 / 340282366920938463463374607431768211455
+quote 255 / 340282366920938463463374607431768211456
+255 / 340282366920938463463374607431768211456
+quote 256 / -170141183460469231731687303715884105728
+256 / -170141183460469231731687303715884105728
+quote 256 / -170141183460469231731687303715884105727
+256 / -170141183460469231731687303715884105727
+quote 256 / -9223372036854775808
+256 / -9223372036854775808
+quote 256 / -9223372036854775807
+256 / -9223372036854775807
+quote 256 / -2147483648
+256 / -2147483648
+quote 256 / -2147483647
+256 / -2147483647
+quote 256 / -32768
+256 / -32768
+quote 256 / -32767
+256 / -32767
+quote 256 / -128
+256 / -128
+quote 256 / -127
+256 / -127
+quote 256 / 255
+256 / 255
+quote 256 / 256
+256 / 256
+quote 256 / 65535
+256 / 65535
+quote 256 / 65536
+256 / 65536
+quote 256 / 4294967295
+256 / 4294967295
+quote 256 / 4294967296
+256 / 4294967296
+quote 256 / 18446744073709551615
+256 / 18446744073709551615
+quote 256 / 18446744073709551616
+256 / 18446744073709551616
+quote 256 / 340282366920938463463374607431768211455
+256 / 340282366920938463463374607431768211455
+quote 256 / 340282366920938463463374607431768211456
+256 / 340282366920938463463374607431768211456
+quote 65535 / -170141183460469231731687303715884105728
+65535 / -170141183460469231731687303715884105728
+quote 65535 / -170141183460469231731687303715884105727
+65535 / -170141183460469231731687303715884105727
+quote 65535 / -9223372036854775808
+65535 / -9223372036854775808
+quote 65535 / -9223372036854775807
+65535 / -9223372036854775807
+quote 65535 / -2147483648
+65535 / -2147483648
+quote 65535 / -2147483647
+65535 / -2147483647
+quote 65535 / -32768
+65535 / -32768
+quote 65535 / -32767
+65535 / -32767
+quote 65535 / -128
+65535 / -128
+quote 65535 / -127
+65535 / -127
+quote 65535 / 255
+65535 / 255
+quote 65535 / 256
+65535 / 256
+quote 65535 / 65535
+65535 / 65535
+quote 65535 / 65536
+65535 / 65536
+quote 65535 / 4294967295
+65535 / 4294967295
+quote 65535 / 4294967296
+65535 / 4294967296
+quote 65535 / 18446744073709551615
+65535 / 18446744073709551615
+quote 65535 / 18446744073709551616
+65535 / 18446744073709551616
+quote 65535 / 340282366920938463463374607431768211455
+65535 / 340282366920938463463374607431768211455
+quote 65535 / 340282366920938463463374607431768211456
+65535 / 340282366920938463463374607431768211456
+quote 65536 / -170141183460469231731687303715884105728
+65536 / -170141183460469231731687303715884105728
+quote 65536 / -170141183460469231731687303715884105727
+65536 / -170141183460469231731687303715884105727
+quote 65536 / -9223372036854775808
+65536 / -9223372036854775808
+quote 65536 / -9223372036854775807
+65536 / -9223372036854775807
+quote 65536 / -2147483648
+65536 / -2147483648
+quote 65536 / -2147483647
+65536 / -2147483647
+quote 65536 / -32768
+65536 / -32768
+quote 65536 / -32767
+65536 / -32767
+quote 65536 / -128
+65536 / -128
+quote 65536 / -127
+65536 / -127
+quote 65536 / 255
+65536 / 255
+quote 65536 / 256
+65536 / 256
+quote 65536 / 65535
+65536 / 65535
+quote 65536 / 65536
+65536 / 65536
+quote 65536 / 4294967295
+65536 / 4294967295
+quote 65536 / 4294967296
+65536 / 4294967296
+quote 65536 / 18446744073709551615
+65536 / 18446744073709551615
+quote 65536 / 18446744073709551616
+65536 / 18446744073709551616
+quote 65536 / 340282366920938463463374607431768211455
+65536 / 340282366920938463463374607431768211455
+quote 65536 / 340282366920938463463374607431768211456
+65536 / 340282366920938463463374607431768211456
+quote 4294967295 / -170141183460469231731687303715884105728
+4294967295 / -170141183460469231731687303715884105728
+quote 4294967295 / -170141183460469231731687303715884105727
+4294967295 / -170141183460469231731687303715884105727
+quote 4294967295 / -9223372036854775808
+4294967295 / -9223372036854775808
+quote 4294967295 / -9223372036854775807
+4294967295 / -9223372036854775807
+quote 4294967295 / -2147483648
+4294967295 / -2147483648
+quote 4294967295 / -2147483647
+4294967295 / -2147483647
+quote 4294967295 / -32768
+4294967295 / -32768
+quote 4294967295 / -32767
+4294967295 / -32767
+quote 4294967295 / -128
+4294967295 / -128
+quote 4294967295 / -127
+4294967295 / -127
+quote 4294967295 / 255
+4294967295 / 255
+quote 4294967295 / 256
+4294967295 / 256
+quote 4294967295 / 65535
+4294967295 / 65535
+quote 4294967295 / 65536
+4294967295 / 65536
+quote 4294967295 / 4294967295
+4294967295 / 4294967295
+quote 4294967295 / 4294967296
+4294967295 / 4294967296
+quote 4294967295 / 18446744073709551615
+4294967295 / 18446744073709551615
+quote 4294967295 / 18446744073709551616
+4294967295 / 18446744073709551616
+quote 4294967295 / 340282366920938463463374607431768211455
+4294967295 / 340282366920938463463374607431768211455
+quote 4294967295 / 340282366920938463463374607431768211456
+4294967295 / 340282366920938463463374607431768211456
+quote 4294967296 / -170141183460469231731687303715884105728
+4294967296 / -170141183460469231731687303715884105728
+quote 4294967296 / -170141183460469231731687303715884105727
+4294967296 / -170141183460469231731687303715884105727
+quote 4294967296 / -9223372036854775808
+4294967296 / -9223372036854775808
+quote 4294967296 / -9223372036854775807
+4294967296 / -9223372036854775807
+quote 4294967296 / -2147483648
+4294967296 / -2147483648
+quote 4294967296 / -2147483647
+4294967296 / -2147483647
+quote 4294967296 / -32768
+4294967296 / -32768
+quote 4294967296 / -32767
+4294967296 / -32767
+quote 4294967296 / -128
+4294967296 / -128
+quote 4294967296 / -127
+4294967296 / -127
+quote 4294967296 / 255
+4294967296 / 255
+quote 4294967296 / 256
+4294967296 / 256
+quote 4294967296 / 65535
+4294967296 / 65535
+quote 4294967296 / 65536
+4294967296 / 65536
+quote 4294967296 / 4294967295
+4294967296 / 4294967295
+quote 4294967296 / 4294967296
+4294967296 / 4294967296
+quote 4294967296 / 18446744073709551615
+4294967296 / 18446744073709551615
+quote 4294967296 / 18446744073709551616
+4294967296 / 18446744073709551616
+quote 4294967296 / 340282366920938463463374607431768211455
+4294967296 / 340282366920938463463374607431768211455
+quote 4294967296 / 340282366920938463463374607431768211456
+4294967296 / 340282366920938463463374607431768211456
+quote 18446744073709551615 / -170141183460469231731687303715884105728
+18446744073709551615 / -170141183460469231731687303715884105728
+quote 18446744073709551615 / -170141183460469231731687303715884105727
+18446744073709551615 / -170141183460469231731687303715884105727
+quote 18446744073709551615 / -9223372036854775808
+18446744073709551615 / -9223372036854775808
+quote 18446744073709551615 / -9223372036854775807
+18446744073709551615 / -9223372036854775807
+quote 18446744073709551615 / -2147483648
+18446744073709551615 / -2147483648
+quote 18446744073709551615 / -2147483647
+18446744073709551615 / -2147483647
+quote 18446744073709551615 / -32768
+18446744073709551615 / -32768
+quote 18446744073709551615 / -32767
+18446744073709551615 / -32767
+quote 18446744073709551615 / -128
+18446744073709551615 / -128
+quote 18446744073709551615 / -127
+18446744073709551615 / -127
+quote 18446744073709551615 / 255
+18446744073709551615 / 255
+quote 18446744073709551615 / 256
+18446744073709551615 / 256
+quote 18446744073709551615 / 65535
+18446744073709551615 / 65535
+quote 18446744073709551615 / 65536
+18446744073709551615 / 65536
+quote 18446744073709551615 / 4294967295
+18446744073709551615 / 4294967295
+quote 18446744073709551615 / 4294967296
+18446744073709551615 / 4294967296
+quote 18446744073709551615 / 18446744073709551615
+18446744073709551615 / 18446744073709551615
+quote 18446744073709551615 / 18446744073709551616
+18446744073709551615 / 18446744073709551616
+quote 18446744073709551615 / 340282366920938463463374607431768211455
+18446744073709551615 / 340282366920938463463374607431768211455
+quote 18446744073709551615 / 340282366920938463463374607431768211456
+18446744073709551615 / 340282366920938463463374607431768211456
+quote 18446744073709551616 / -170141183460469231731687303715884105728
+18446744073709551616 / -170141183460469231731687303715884105728
+quote 18446744073709551616 / -170141183460469231731687303715884105727
+18446744073709551616 / -170141183460469231731687303715884105727
+quote 18446744073709551616 / -9223372036854775808
+18446744073709551616 / -9223372036854775808
+quote 18446744073709551616 / -9223372036854775807
+18446744073709551616 / -9223372036854775807
+quote 18446744073709551616 / -2147483648
+18446744073709551616 / -2147483648
+quote 18446744073709551616 / -2147483647
+18446744073709551616 / -2147483647
+quote 18446744073709551616 / -32768
+18446744073709551616 / -32768
+quote 18446744073709551616 / -32767
+18446744073709551616 / -32767
+quote 18446744073709551616 / -128
+18446744073709551616 / -128
+quote 18446744073709551616 / -127
+18446744073709551616 / -127
+quote 18446744073709551616 / 255
+18446744073709551616 / 255
+quote 18446744073709551616 / 256
+18446744073709551616 / 256
+quote 18446744073709551616 / 65535
+18446744073709551616 / 65535
+quote 18446744073709551616 / 65536
+18446744073709551616 / 65536
+quote 18446744073709551616 / 4294967295
+18446744073709551616 / 4294967295
+quote 18446744073709551616 / 4294967296
+18446744073709551616 / 4294967296
+quote 18446744073709551616 / 18446744073709551615
+18446744073709551616 / 18446744073709551615
+quote 18446744073709551616 / 18446744073709551616
+18446744073709551616 / 18446744073709551616
+quote 18446744073709551616 / 340282366920938463463374607431768211455
+18446744073709551616 / 340282366920938463463374607431768211455
+quote 18446744073709551616 / 340282366920938463463374607431768211456
+18446744073709551616 / 340282366920938463463374607431768211456
+quote 340282366920938463463374607431768211455 / -170141183460469231731687303715884105728
+340282366920938463463374607431768211455 / -170141183460469231731687303715884105728
+quote 340282366920938463463374607431768211455 / -170141183460469231731687303715884105727
+340282366920938463463374607431768211455 / -170141183460469231731687303715884105727
+quote 340282366920938463463374607431768211455 / -9223372036854775808
+340282366920938463463374607431768211455 / -9223372036854775808
+quote 340282366920938463463374607431768211455 / -9223372036854775807
+340282366920938463463374607431768211455 / -9223372036854775807
+quote 340282366920938463463374607431768211455 / -2147483648
+340282366920938463463374607431768211455 / -2147483648
+quote 340282366920938463463374607431768211455 / -2147483647
+340282366920938463463374607431768211455 / -2147483647
+quote 340282366920938463463374607431768211455 / -32768
+340282366920938463463374607431768211455 / -32768
+quote 340282366920938463463374607431768211455 / -32767
+340282366920938463463374607431768211455 / -32767
+quote 340282366920938463463374607431768211455 / -128
+340282366920938463463374607431768211455 / -128
+quote 340282366920938463463374607431768211455 / -127
+340282366920938463463374607431768211455 / -127
+quote 340282366920938463463374607431768211455 / 255
+340282366920938463463374607431768211455 / 255
+quote 340282366920938463463374607431768211455 / 256
+340282366920938463463374607431768211455 / 256
+quote 340282366920938463463374607431768211455 / 65535
+340282366920938463463374607431768211455 / 65535
+quote 340282366920938463463374607431768211455 / 65536
+340282366920938463463374607431768211455 / 65536
+quote 340282366920938463463374607431768211455 / 4294967295
+340282366920938463463374607431768211455 / 4294967295
+quote 340282366920938463463374607431768211455 / 4294967296
+340282366920938463463374607431768211455 / 4294967296
+quote 340282366920938463463374607431768211455 / 18446744073709551615
+340282366920938463463374607431768211455 / 18446744073709551615
+quote 340282366920938463463374607431768211455 / 18446744073709551616
+340282366920938463463374607431768211455 / 18446744073709551616
+quote 340282366920938463463374607431768211455 / 340282366920938463463374607431768211455
+340282366920938463463374607431768211455 / 340282366920938463463374607431768211455
+quote 340282366920938463463374607431768211455 / 340282366920938463463374607431768211456
+340282366920938463463374607431768211455 / 340282366920938463463374607431768211456
+quote 340282366920938463463374607431768211456 / -170141183460469231731687303715884105728
+340282366920938463463374607431768211456 / -170141183460469231731687303715884105728
+quote 340282366920938463463374607431768211456 / -170141183460469231731687303715884105727
+340282366920938463463374607431768211456 / -170141183460469231731687303715884105727
+quote 340282366920938463463374607431768211456 / -9223372036854775808
+340282366920938463463374607431768211456 / -9223372036854775808
+quote 340282366920938463463374607431768211456 / -9223372036854775807
+340282366920938463463374607431768211456 / -9223372036854775807
+quote 340282366920938463463374607431768211456 / -2147483648
+340282366920938463463374607431768211456 / -2147483648
+quote 340282366920938463463374607431768211456 / -2147483647
+340282366920938463463374607431768211456 / -2147483647
+quote 340282366920938463463374607431768211456 / -32768
+340282366920938463463374607431768211456 / -32768
+quote 340282366920938463463374607431768211456 / -32767
+340282366920938463463374607431768211456 / -32767
+quote 340282366920938463463374607431768211456 / -128
+340282366920938463463374607431768211456 / -128
+quote 340282366920938463463374607431768211456 / -127
+340282366920938463463374607431768211456 / -127
+quote 340282366920938463463374607431768211456 / 255
+340282366920938463463374607431768211456 / 255
+quote 340282366920938463463374607431768211456 / 256
+340282366920938463463374607431768211456 / 256
+quote 340282366920938463463374607431768211456 / 65535
+340282366920938463463374607431768211456 / 65535
+quote 340282366920938463463374607431768211456 / 65536
+340282366920938463463374607431768211456 / 65536
+quote 340282366920938463463374607431768211456 / 4294967295
+340282366920938463463374607431768211456 / 4294967295
+quote 340282366920938463463374607431768211456 / 4294967296
+340282366920938463463374607431768211456 / 4294967296
+quote 340282366920938463463374607431768211456 / 18446744073709551615
+340282366920938463463374607431768211456 / 18446744073709551615
+quote 340282366920938463463374607431768211456 / 18446744073709551616
+340282366920938463463374607431768211456 / 18446744073709551616
+quote 340282366920938463463374607431768211456 / 340282366920938463463374607431768211455
+340282366920938463463374607431768211456 / 340282366920938463463374607431768211455
+quote 340282366920938463463374607431768211456 / 340282366920938463463374607431768211456
+340282366920938463463374607431768211456 / 340282366920938463463374607431768211456
diff --git a/test/ic3/integer_div.out.expected b/test/ic3/integer_div.out.expected
new file mode 100644
index 0000000..02be5ec
--- /dev/null
+++ b/test/ic3/integer_div.out.expected
@@ -0,0 +1,800 @@
+-170141183460469231731687303715884105728 / -170141183460469231731687303715884105728
+1
+-170141183460469231731687303715884105728 / -170141183460469231731687303715884105727
+1
+-170141183460469231731687303715884105728 / -9223372036854775808
+18446744073709551616
+-170141183460469231731687303715884105728 / -9223372036854775807
+18446744073709551618
+-170141183460469231731687303715884105728 / -2147483648
+79228162514264337593543950336
+-170141183460469231731687303715884105728 / -2147483647
+79228162551157825758142922760
+-170141183460469231731687303715884105728 / -32768
+5192296858534827628530496329220096
+-170141183460469231731687303715884105728 / -32767
+5192455319695707014120526862876800
+-170141183460469231731687303715884105728 / -128
+1329227995784915872903807060280344576
+-170141183460469231731687303715884105728 / -127
+1339694357956450643556592942644756738
+-170141183460469231731687303715884105728 / 255
+-667220327295957771496812955748565120
+-170141183460469231731687303715884105728 / 256
+-664613997892457936451903530140172288
+-170141183460469231731687303715884105728 / 65535
+-2596188043953143079754136014585856
+-170141183460469231731687303715884105728 / 65536
+-2596148429267413814265248164610048
+-170141183460469231731687303715884105728 / 4294967295
+-39614081266355540835774234624
+-170141183460469231731687303715884105728 / 4294967296
+-39614081257132168796771975168
+-170141183460469231731687303715884105728 / 18446744073709551615
+-9223372036854775808
+-170141183460469231731687303715884105728 / 18446744073709551616
+-9223372036854775808
+-170141183460469231731687303715884105728 / 340282366920938463463374607431768211455
+0
+-170141183460469231731687303715884105728 / 340282366920938463463374607431768211456
+0
+-170141183460469231731687303715884105727 / -170141183460469231731687303715884105728
+0
+-170141183460469231731687303715884105727 / -170141183460469231731687303715884105727
+1
+-170141183460469231731687303715884105727 / -9223372036854775808
+18446744073709551615
+-170141183460469231731687303715884105727 / -9223372036854775807
+18446744073709551618
+-170141183460469231731687303715884105727 / -2147483648
+79228162514264337593543950335
+-170141183460469231731687303715884105727 / -2147483647
+79228162551157825758142922760
+-170141183460469231731687303715884105727 / -32768
+5192296858534827628530496329220095
+-170141183460469231731687303715884105727 / -32767
+5192455319695707014120526862876800
+-170141183460469231731687303715884105727 / -128
+1329227995784915872903807060280344575
+-170141183460469231731687303715884105727 / -127
+1339694357956450643556592942644756738
+-170141183460469231731687303715884105727 / 255
+-667220327295957771496812955748565120
+-170141183460469231731687303715884105727 / 256
+-664613997892457936451903530140172287
+-170141183460469231731687303715884105727 / 65535
+-2596188043953143079754136014585856
+-170141183460469231731687303715884105727 / 65536
+-2596148429267413814265248164610047
+-170141183460469231731687303715884105727 / 4294967295
+-39614081266355540835774234624
+-170141183460469231731687303715884105727 / 4294967296
+-39614081257132168796771975167
+-170141183460469231731687303715884105727 / 18446744073709551615
+-9223372036854775808
+-170141183460469231731687303715884105727 / 18446744073709551616
+-9223372036854775807
+-170141183460469231731687303715884105727 / 340282366920938463463374607431768211455
+0
+-170141183460469231731687303715884105727 / 340282366920938463463374607431768211456
+0
+-9223372036854775808 / -170141183460469231731687303715884105728
+0
+-9223372036854775808 / -170141183460469231731687303715884105727
+0
+-9223372036854775808 / -9223372036854775808
+1
+-9223372036854775808 / -9223372036854775807
+1
+-9223372036854775808 / -2147483648
+4294967296
+-9223372036854775808 / -2147483647
+4294967298
+-9223372036854775808 / -32768
+281474976710656
+-9223372036854775808 / -32767
+281483566907400
+-9223372036854775808 / -128
+72057594037927936
+-9223372036854775808 / -127
+72624976668147841
+-9223372036854775808 / 255
+-36170086419038336
+-9223372036854775808 / 256
+-36028797018963968
+-9223372036854775808 / 65535
+-140739635871744
+-9223372036854775808 / 65536
+-140737488355328
+-9223372036854775808 / 4294967295
+-2147483648
+-9223372036854775808 / 4294967296
+-2147483648
+-9223372036854775808 / 18446744073709551615
+0
+-9223372036854775808 / 18446744073709551616
+0
+-9223372036854775808 / 340282366920938463463374607431768211455
+0
+-9223372036854775808 / 340282366920938463463374607431768211456
+0
+-9223372036854775807 / -170141183460469231731687303715884105728
+0
+-9223372036854775807 / -170141183460469231731687303715884105727
+0
+-9223372036854775807 / -9223372036854775808
+0
+-9223372036854775807 / -9223372036854775807
+1
+-9223372036854775807 / -2147483648
+4294967295
+-9223372036854775807 / -2147483647
+4294967298
+-9223372036854775807 / -32768
+281474976710655
+-9223372036854775807 / -32767
+281483566907400
+-9223372036854775807 / -128
+72057594037927935
+-9223372036854775807 / -127
+72624976668147841
+-9223372036854775807 / 255
+-36170086419038336
+-9223372036854775807 / 256
+-36028797018963967
+-9223372036854775807 / 65535
+-140739635871744
+-9223372036854775807 / 65536
+-140737488355327
+-9223372036854775807 / 4294967295
+-2147483648
+-9223372036854775807 / 4294967296
+-2147483647
+-9223372036854775807 / 18446744073709551615
+0
+-9223372036854775807 / 18446744073709551616
+0
+-9223372036854775807 / 340282366920938463463374607431768211455
+0
+-9223372036854775807 / 340282366920938463463374607431768211456
+0
+-2147483648 / -170141183460469231731687303715884105728
+0
+-2147483648 / -170141183460469231731687303715884105727
+0
+-2147483648 / -9223372036854775808
+0
+-2147483648 / -9223372036854775807
+0
+-2147483648 / -2147483648
+1
+-2147483648 / -2147483647
+1
+-2147483648 / -32768
+65536
+-2147483648 / -32767
+65538
+-2147483648 / -128
+16777216
+-2147483648 / -127
+16909320
+-2147483648 / 255
+-8421504
+-2147483648 / 256
+-8388608
+-2147483648 / 65535
+-32768
+-2147483648 / 65536
+-32768
+-2147483648 / 4294967295
+0
+-2147483648 / 4294967296
+0
+-2147483648 / 18446744073709551615
+0
+-2147483648 / 18446744073709551616
+0
+-2147483648 / 340282366920938463463374607431768211455
+0
+-2147483648 / 340282366920938463463374607431768211456
+0
+-2147483647 / -170141183460469231731687303715884105728
+0
+-2147483647 / -170141183460469231731687303715884105727
+0
+-2147483647 / -9223372036854775808
+0
+-2147483647 / -9223372036854775807
+0
+-2147483647 / -2147483648
+0
+-2147483647 / -2147483647
+1
+-2147483647 / -32768
+65535
+-2147483647 / -32767
+65538
+-2147483647 / -128
+16777215
+-2147483647 / -127
+16909320
+-2147483647 / 255
+-8421504
+-2147483647 / 256
+-8388607
+-2147483647 / 65535
+-32768
+-2147483647 / 65536
+-32767
+-2147483647 / 4294967295
+0
+-2147483647 / 4294967296
+0
+-2147483647 / 18446744073709551615
+0
+-2147483647 / 18446744073709551616
+0
+-2147483647 / 340282366920938463463374607431768211455
+0
+-2147483647 / 340282366920938463463374607431768211456
+0
+-32768 / -170141183460469231731687303715884105728
+0
+-32768 / -170141183460469231731687303715884105727
+0
+-32768 / -9223372036854775808
+0
+-32768 / -9223372036854775807
+0
+-32768 / -2147483648
+0
+-32768 / -2147483647
+0
+-32768 / -32768
+1
+-32768 / -32767
+1
+-32768 / -128
+256
+-32768 / -127
+258
+-32768 / 255
+-128
+-32768 / 256
+-128
+-32768 / 65535
+0
+-32768 / 65536
+0
+-32768 / 4294967295
+0
+-32768 / 4294967296
+0
+-32768 / 18446744073709551615
+0
+-32768 / 18446744073709551616
+0
+-32768 / 340282366920938463463374607431768211455
+0
+-32768 / 340282366920938463463374607431768211456
+0
+-32767 / -170141183460469231731687303715884105728
+0
+-32767 / -170141183460469231731687303715884105727
+0
+-32767 / -9223372036854775808
+0
+-32767 / -9223372036854775807
+0
+-32767 / -2147483648
+0
+-32767 / -2147483647
+0
+-32767 / -32768
+0
+-32767 / -32767
+1
+-32767 / -128
+255
+-32767 / -127
+258
+-32767 / 255
+-128
+-32767 / 256
+-127
+-32767 / 65535
+0
+-32767 / 65536
+0
+-32767 / 4294967295
+0
+-32767 / 4294967296
+0
+-32767 / 18446744073709551615
+0
+-32767 / 18446744073709551616
+0
+-32767 / 340282366920938463463374607431768211455
+0
+-32767 / 340282366920938463463374607431768211456
+0
+-128 / -170141183460469231731687303715884105728
+0
+-128 / -170141183460469231731687303715884105727
+0
+-128 / -9223372036854775808
+0
+-128 / -9223372036854775807
+0
+-128 / -2147483648
+0
+-128 / -2147483647
+0
+-128 / -32768
+0
+-128 / -32767
+0
+-128 / -128
+1
+-128 / -127
+1
+-128 / 255
+0
+-128 / 256
+0
+-128 / 65535
+0
+-128 / 65536
+0
+-128 / 4294967295
+0
+-128 / 4294967296
+0
+-128 / 18446744073709551615
+0
+-128 / 18446744073709551616
+0
+-128 / 340282366920938463463374607431768211455
+0
+-128 / 340282366920938463463374607431768211456
+0
+-127 / -170141183460469231731687303715884105728
+0
+-127 / -170141183460469231731687303715884105727
+0
+-127 / -9223372036854775808
+0
+-127 / -9223372036854775807
+0
+-127 / -2147483648
+0
+-127 / -2147483647
+0
+-127 / -32768
+0
+-127 / -32767
+0
+-127 / -128
+0
+-127 / -127
+1
+-127 / 255
+0
+-127 / 256
+0
+-127 / 65535
+0
+-127 / 65536
+0
+-127 / 4294967295
+0
+-127 / 4294967296
+0
+-127 / 18446744073709551615
+0
+-127 / 18446744073709551616
+0
+-127 / 340282366920938463463374607431768211455
+0
+-127 / 340282366920938463463374607431768211456
+0
+255 / -170141183460469231731687303715884105728
+0
+255 / -170141183460469231731687303715884105727
+0
+255 / -9223372036854775808
+0
+255 / -9223372036854775807
+0
+255 / -2147483648
+0
+255 / -2147483647
+0
+255 / -32768
+0
+255 / -32767
+0
+255 / -128
+-1
+255 / -127
+-2
+255 / 255
+1
+255 / 256
+0
+255 / 65535
+0
+255 / 65536
+0
+255 / 4294967295
+0
+255 / 4294967296
+0
+255 / 18446744073709551615
+0
+255 / 18446744073709551616
+0
+255 / 340282366920938463463374607431768211455
+0
+255 / 340282366920938463463374607431768211456
+0
+256 / -170141183460469231731687303715884105728
+0
+256 / -170141183460469231731687303715884105727
+0
+256 / -9223372036854775808
+0
+256 / -9223372036854775807
+0
+256 / -2147483648
+0
+256 / -2147483647
+0
+256 / -32768
+0
+256 / -32767
+0
+256 / -128
+-2
+256 / -127
+-2
+256 / 255
+1
+256 / 256
+1
+256 / 65535
+0
+256 / 65536
+0
+256 / 4294967295
+0
+256 / 4294967296
+0
+256 / 18446744073709551615
+0
+256 / 18446744073709551616
+0
+256 / 340282366920938463463374607431768211455
+0
+256 / 340282366920938463463374607431768211456
+0
+65535 / -170141183460469231731687303715884105728
+0
+65535 / -170141183460469231731687303715884105727
+0
+65535 / -9223372036854775808
+0
+65535 / -9223372036854775807
+0
+65535 / -2147483648
+0
+65535 / -2147483647
+0
+65535 / -32768
+-1
+65535 / -32767
+-2
+65535 / -128
+-511
+65535 / -127
+-516
+65535 / 255
+257
+65535 / 256
+255
+65535 / 65535
+1
+65535 / 65536
+0
+65535 / 4294967295
+0
+65535 / 4294967296
+0
+65535 / 18446744073709551615
+0
+65535 / 18446744073709551616
+0
+65535 / 340282366920938463463374607431768211455
+0
+65535 / 340282366920938463463374607431768211456
+0
+65536 / -170141183460469231731687303715884105728
+0
+65536 / -170141183460469231731687303715884105727
+0
+65536 / -9223372036854775808
+0
+65536 / -9223372036854775807
+0
+65536 / -2147483648
+0
+65536 / -2147483647
+0
+65536 / -32768
+-2
+65536 / -32767
+-2
+65536 / -128
+-512
+65536 / -127
+-516
+65536 / 255
+257
+65536 / 256
+256
+65536 / 65535
+1
+65536 / 65536
+1
+65536 / 4294967295
+0
+65536 / 4294967296
+0
+65536 / 18446744073709551615
+0
+65536 / 18446744073709551616
+0
+65536 / 340282366920938463463374607431768211455
+0
+65536 / 340282366920938463463374607431768211456
+0
+4294967295 / -170141183460469231731687303715884105728
+0
+4294967295 / -170141183460469231731687303715884105727
+0
+4294967295 / -9223372036854775808
+0
+4294967295 / -9223372036854775807
+0
+4294967295 / -2147483648
+-1
+4294967295 / -2147483647
+-2
+4294967295 / -32768
+-131071
+4294967295 / -32767
+-131076
+4294967295 / -128
+-33554431
+4294967295 / -127
+-33818640
+4294967295 / 255
+16843009
+4294967295 / 256
+16777215
+4294967295 / 65535
+65537
+4294967295 / 65536
+65535
+4294967295 / 4294967295
+1
+4294967295 / 4294967296
+0
+4294967295 / 18446744073709551615
+0
+4294967295 / 18446744073709551616
+0
+4294967295 / 340282366920938463463374607431768211455
+0
+4294967295 / 340282366920938463463374607431768211456
+0
+4294967296 / -170141183460469231731687303715884105728
+0
+4294967296 / -170141183460469231731687303715884105727
+0
+4294967296 / -9223372036854775808
+0
+4294967296 / -9223372036854775807
+0
+4294967296 / -2147483648
+-2
+4294967296 / -2147483647
+-2
+4294967296 / -32768
+-131072
+4294967296 / -32767
+-131076
+4294967296 / -128
+-33554432
+4294967296 / -127
+-33818640
+4294967296 / 255
+16843009
+4294967296 / 256
+16777216
+4294967296 / 65535
+65537
+4294967296 / 65536
+65536
+4294967296 / 4294967295
+1
+4294967296 / 4294967296
+1
+4294967296 / 18446744073709551615
+0
+4294967296 / 18446744073709551616
+0
+4294967296 / 340282366920938463463374607431768211455
+0
+4294967296 / 340282366920938463463374607431768211456
+0
+18446744073709551615 / -170141183460469231731687303715884105728
+0
+18446744073709551615 / -170141183460469231731687303715884105727
+0
+18446744073709551615 / -9223372036854775808
+-1
+18446744073709551615 / -9223372036854775807
+-2
+18446744073709551615 / -2147483648
+-8589934591
+18446744073709551615 / -2147483647
+-8589934596
+18446744073709551615 / -32768
+-562949953421311
+18446744073709551615 / -32767
+-562967133814800
+18446744073709551615 / -128
+-144115188075855871
+18446744073709551615 / -127
+-145249953336295682
+18446744073709551615 / 255
+72340172838076673
+18446744073709551615 / 256
+72057594037927935
+18446744073709551615 / 65535
+281479271743489
+18446744073709551615 / 65536
+281474976710655
+18446744073709551615 / 4294967295
+4294967297
+18446744073709551615 / 4294967296
+4294967295
+18446744073709551615 / 18446744073709551615
+1
+18446744073709551615 / 18446744073709551616
+0
+18446744073709551615 / 340282366920938463463374607431768211455
+0
+18446744073709551615 / 340282366920938463463374607431768211456
+0
+18446744073709551616 / -170141183460469231731687303715884105728
+0
+18446744073709551616 / -170141183460469231731687303715884105727
+0
+18446744073709551616 / -9223372036854775808
+-2
+18446744073709551616 / -9223372036854775807
+-2
+18446744073709551616 / -2147483648
+-8589934592
+18446744073709551616 / -2147483647
+-8589934596
+18446744073709551616 / -32768
+-562949953421312
+18446744073709551616 / -32767
+-562967133814800
+18446744073709551616 / -128
+-144115188075855872
+18446744073709551616 / -127
+-145249953336295682
+18446744073709551616 / 255
+72340172838076673
+18446744073709551616 / 256
+72057594037927936
+18446744073709551616 / 65535
+281479271743489
+18446744073709551616 / 65536
+281474976710656
+18446744073709551616 / 4294967295
+4294967297
+18446744073709551616 / 4294967296
+4294967296
+18446744073709551616 / 18446744073709551615
+1
+18446744073709551616 / 18446744073709551616
+1
+18446744073709551616 / 340282366920938463463374607431768211455
+0
+18446744073709551616 / 340282366920938463463374607431768211456
+0
+340282366920938463463374607431768211455 / -170141183460469231731687303715884105728
+-1
+340282366920938463463374607431768211455 / -170141183460469231731687303715884105727
+-2
+340282366920938463463374607431768211455 / -9223372036854775808
+-36893488147419103231
+340282366920938463463374607431768211455 / -9223372036854775807
+-36893488147419103236
+340282366920938463463374607431768211455 / -2147483648
+-158456325028528675187087900671
+340282366920938463463374607431768211455 / -2147483647
+-158456325102315651516285845520
+340282366920938463463374607431768211455 / -32768
+-10384593717069655257060992658440191
+340282366920938463463374607431768211455 / -32767
+-10384910639391414028241053725753600
+340282366920938463463374607431768211455 / -128
+-2658455991569831745807614120560689151
+340282366920938463463374607431768211455 / -127
+-2679388715912901287113185885289513476
+340282366920938463463374607431768211455 / 255
+1334440654591915542993625911497130241
+340282366920938463463374607431768211455 / 256
+1329227995784915872903807060280344575
+340282366920938463463374607431768211455 / 65535
+5192376087906286159508272029171713
+340282366920938463463374607431768211455 / 65536
+5192296858534827628530496329220095
+340282366920938463463374607431768211455 / 4294967295
+79228162532711081671548469249
+340282366920938463463374607431768211455 / 4294967296
+79228162514264337593543950335
+340282366920938463463374607431768211455 / 18446744073709551615
+18446744073709551617
+340282366920938463463374607431768211455 / 18446744073709551616
+18446744073709551615
+340282366920938463463374607431768211455 / 340282366920938463463374607431768211455
+1
+340282366920938463463374607431768211455 / 340282366920938463463374607431768211456
+0
+340282366920938463463374607431768211456 / -170141183460469231731687303715884105728
+-2
+340282366920938463463374607431768211456 / -170141183460469231731687303715884105727
+-2
+340282366920938463463374607431768211456 / -9223372036854775808
+-36893488147419103232
+340282366920938463463374607431768211456 / -9223372036854775807
+-36893488147419103236
+340282366920938463463374607431768211456 / -2147483648
+-158456325028528675187087900672
+340282366920938463463374607431768211456 / -2147483647
+-158456325102315651516285845520
+340282366920938463463374607431768211456 / -32768
+-10384593717069655257060992658440192
+340282366920938463463374607431768211456 / -32767
+-10384910639391414028241053725753600
+340282366920938463463374607431768211456 / -128
+-2658455991569831745807614120560689152
+340282366920938463463374607431768211456 / -127
+-2679388715912901287113185885289513476
+340282366920938463463374607431768211456 / 255
+1334440654591915542993625911497130241
+340282366920938463463374607431768211456 / 256
+1329227995784915872903807060280344576
+340282366920938463463374607431768211456 / 65535
+5192376087906286159508272029171713
+340282366920938463463374607431768211456 / 65536
+5192296858534827628530496329220096
+340282366920938463463374607431768211456 / 4294967295
+79228162532711081671548469249
+340282366920938463463374607431768211456 / 4294967296
+79228162514264337593543950336
+340282366920938463463374607431768211456 / 18446744073709551615
+18446744073709551617
+340282366920938463463374607431768211456 / 18446744073709551616
+18446744073709551616
+340282366920938463463374607431768211456 / 340282366920938463463374607431768211455
+1
+340282366920938463463374607431768211456 / 340282366920938463463374607431768211456
+1
diff --git a/test/ic3/integer_div.ret.expected b/test/ic3/integer_div.ret.expected
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/test/ic3/integer_div.ret.expected
@@ -0,0 +1 @@
+0
diff --git a/test/ic3/integer_eq.in b/test/ic3/integer_eq.in
new file mode 100644
index 0000000..c966b99
--- /dev/null
+++ b/test/ic3/integer_eq.in
@@ -0,0 +1,800 @@
+quote -170141183460469231731687303715884105728 == -170141183460469231731687303715884105728
+-170141183460469231731687303715884105728 == -170141183460469231731687303715884105728
+quote -170141183460469231731687303715884105728 == -170141183460469231731687303715884105727
+-170141183460469231731687303715884105728 == -170141183460469231731687303715884105727
+quote -170141183460469231731687303715884105728 == -9223372036854775808
+-170141183460469231731687303715884105728 == -9223372036854775808
+quote -170141183460469231731687303715884105728 == -9223372036854775807
+-170141183460469231731687303715884105728 == -9223372036854775807
+quote -170141183460469231731687303715884105728 == -2147483648
+-170141183460469231731687303715884105728 == -2147483648
+quote -170141183460469231731687303715884105728 == -2147483647
+-170141183460469231731687303715884105728 == -2147483647
+quote -170141183460469231731687303715884105728 == -32768
+-170141183460469231731687303715884105728 == -32768
+quote -170141183460469231731687303715884105728 == -32767
+-170141183460469231731687303715884105728 == -32767
+quote -170141183460469231731687303715884105728 == -128
+-170141183460469231731687303715884105728 == -128
+quote -170141183460469231731687303715884105728 == -127
+-170141183460469231731687303715884105728 == -127
+quote -170141183460469231731687303715884105728 == 255
+-170141183460469231731687303715884105728 == 255
+quote -170141183460469231731687303715884105728 == 256
+-170141183460469231731687303715884105728 == 256
+quote -170141183460469231731687303715884105728 == 65535
+-170141183460469231731687303715884105728 == 65535
+quote -170141183460469231731687303715884105728 == 65536
+-170141183460469231731687303715884105728 == 65536
+quote -170141183460469231731687303715884105728 == 4294967295
+-170141183460469231731687303715884105728 == 4294967295
+quote -170141183460469231731687303715884105728 == 4294967296
+-170141183460469231731687303715884105728 == 4294967296
+quote -170141183460469231731687303715884105728 == 18446744073709551615
+-170141183460469231731687303715884105728 == 18446744073709551615
+quote -170141183460469231731687303715884105728 == 18446744073709551616
+-170141183460469231731687303715884105728 == 18446744073709551616
+quote -170141183460469231731687303715884105728 == 340282366920938463463374607431768211455
+-170141183460469231731687303715884105728 == 340282366920938463463374607431768211455
+quote -170141183460469231731687303715884105728 == 340282366920938463463374607431768211456
+-170141183460469231731687303715884105728 == 340282366920938463463374607431768211456
+quote -170141183460469231731687303715884105727 == -170141183460469231731687303715884105728
+-170141183460469231731687303715884105727 == -170141183460469231731687303715884105728
+quote -170141183460469231731687303715884105727 == -170141183460469231731687303715884105727
+-170141183460469231731687303715884105727 == -170141183460469231731687303715884105727
+quote -170141183460469231731687303715884105727 == -9223372036854775808
+-170141183460469231731687303715884105727 == -9223372036854775808
+quote -170141183460469231731687303715884105727 == -9223372036854775807
+-170141183460469231731687303715884105727 == -9223372036854775807
+quote -170141183460469231731687303715884105727 == -2147483648
+-170141183460469231731687303715884105727 == -2147483648
+quote -170141183460469231731687303715884105727 == -2147483647
+-170141183460469231731687303715884105727 == -2147483647
+quote -170141183460469231731687303715884105727 == -32768
+-170141183460469231731687303715884105727 == -32768
+quote -170141183460469231731687303715884105727 == -32767
+-170141183460469231731687303715884105727 == -32767
+quote -170141183460469231731687303715884105727 == -128
+-170141183460469231731687303715884105727 == -128
+quote -170141183460469231731687303715884105727 == -127
+-170141183460469231731687303715884105727 == -127
+quote -170141183460469231731687303715884105727 == 255
+-170141183460469231731687303715884105727 == 255
+quote -170141183460469231731687303715884105727 == 256
+-170141183460469231731687303715884105727 == 256
+quote -170141183460469231731687303715884105727 == 65535
+-170141183460469231731687303715884105727 == 65535
+quote -170141183460469231731687303715884105727 == 65536
+-170141183460469231731687303715884105727 == 65536
+quote -170141183460469231731687303715884105727 == 4294967295
+-170141183460469231731687303715884105727 == 4294967295
+quote -170141183460469231731687303715884105727 == 4294967296
+-170141183460469231731687303715884105727 == 4294967296
+quote -170141183460469231731687303715884105727 == 18446744073709551615
+-170141183460469231731687303715884105727 == 18446744073709551615
+quote -170141183460469231731687303715884105727 == 18446744073709551616
+-170141183460469231731687303715884105727 == 18446744073709551616
+quote -170141183460469231731687303715884105727 == 340282366920938463463374607431768211455
+-170141183460469231731687303715884105727 == 340282366920938463463374607431768211455
+quote -170141183460469231731687303715884105727 == 340282366920938463463374607431768211456
+-170141183460469231731687303715884105727 == 340282366920938463463374607431768211456
+quote -9223372036854775808 == -170141183460469231731687303715884105728
+-9223372036854775808 == -170141183460469231731687303715884105728
+quote -9223372036854775808 == -170141183460469231731687303715884105727
+-9223372036854775808 == -170141183460469231731687303715884105727
+quote -9223372036854775808 == -9223372036854775808
+-9223372036854775808 == -9223372036854775808
+quote -9223372036854775808 == -9223372036854775807
+-9223372036854775808 == -9223372036854775807
+quote -9223372036854775808 == -2147483648
+-9223372036854775808 == -2147483648
+quote -9223372036854775808 == -2147483647
+-9223372036854775808 == -2147483647
+quote -9223372036854775808 == -32768
+-9223372036854775808 == -32768
+quote -9223372036854775808 == -32767
+-9223372036854775808 == -32767
+quote -9223372036854775808 == -128
+-9223372036854775808 == -128
+quote -9223372036854775808 == -127
+-9223372036854775808 == -127
+quote -9223372036854775808 == 255
+-9223372036854775808 == 255
+quote -9223372036854775808 == 256
+-9223372036854775808 == 256
+quote -9223372036854775808 == 65535
+-9223372036854775808 == 65535
+quote -9223372036854775808 == 65536
+-9223372036854775808 == 65536
+quote -9223372036854775808 == 4294967295
+-9223372036854775808 == 4294967295
+quote -9223372036854775808 == 4294967296
+-9223372036854775808 == 4294967296
+quote -9223372036854775808 == 18446744073709551615
+-9223372036854775808 == 18446744073709551615
+quote -9223372036854775808 == 18446744073709551616
+-9223372036854775808 == 18446744073709551616
+quote -9223372036854775808 == 340282366920938463463374607431768211455
+-9223372036854775808 == 340282366920938463463374607431768211455
+quote -9223372036854775808 == 340282366920938463463374607431768211456
+-9223372036854775808 == 340282366920938463463374607431768211456
+quote -9223372036854775807 == -170141183460469231731687303715884105728
+-9223372036854775807 == -170141183460469231731687303715884105728
+quote -9223372036854775807 == -170141183460469231731687303715884105727
+-9223372036854775807 == -170141183460469231731687303715884105727
+quote -9223372036854775807 == -9223372036854775808
+-9223372036854775807 == -9223372036854775808
+quote -9223372036854775807 == -9223372036854775807
+-9223372036854775807 == -9223372036854775807
+quote -9223372036854775807 == -2147483648
+-9223372036854775807 == -2147483648
+quote -9223372036854775807 == -2147483647
+-9223372036854775807 == -2147483647
+quote -9223372036854775807 == -32768
+-9223372036854775807 == -32768
+quote -9223372036854775807 == -32767
+-9223372036854775807 == -32767
+quote -9223372036854775807 == -128
+-9223372036854775807 == -128
+quote -9223372036854775807 == -127
+-9223372036854775807 == -127
+quote -9223372036854775807 == 255
+-9223372036854775807 == 255
+quote -9223372036854775807 == 256
+-9223372036854775807 == 256
+quote -9223372036854775807 == 65535
+-9223372036854775807 == 65535
+quote -9223372036854775807 == 65536
+-9223372036854775807 == 65536
+quote -9223372036854775807 == 4294967295
+-9223372036854775807 == 4294967295
+quote -9223372036854775807 == 4294967296
+-9223372036854775807 == 4294967296
+quote -9223372036854775807 == 18446744073709551615
+-9223372036854775807 == 18446744073709551615
+quote -9223372036854775807 == 18446744073709551616
+-9223372036854775807 == 18446744073709551616
+quote -9223372036854775807 == 340282366920938463463374607431768211455
+-9223372036854775807 == 340282366920938463463374607431768211455
+quote -9223372036854775807 == 340282366920938463463374607431768211456
+-9223372036854775807 == 340282366920938463463374607431768211456
+quote -2147483648 == -170141183460469231731687303715884105728
+-2147483648 == -170141183460469231731687303715884105728
+quote -2147483648 == -170141183460469231731687303715884105727
+-2147483648 == -170141183460469231731687303715884105727
+quote -2147483648 == -9223372036854775808
+-2147483648 == -9223372036854775808
+quote -2147483648 == -9223372036854775807
+-2147483648 == -9223372036854775807
+quote -2147483648 == -2147483648
+-2147483648 == -2147483648
+quote -2147483648 == -2147483647
+-2147483648 == -2147483647
+quote -2147483648 == -32768
+-2147483648 == -32768
+quote -2147483648 == -32767
+-2147483648 == -32767
+quote -2147483648 == -128
+-2147483648 == -128
+quote -2147483648 == -127
+-2147483648 == -127
+quote -2147483648 == 255
+-2147483648 == 255
+quote -2147483648 == 256
+-2147483648 == 256
+quote -2147483648 == 65535
+-2147483648 == 65535
+quote -2147483648 == 65536
+-2147483648 == 65536
+quote -2147483648 == 4294967295
+-2147483648 == 4294967295
+quote -2147483648 == 4294967296
+-2147483648 == 4294967296
+quote -2147483648 == 18446744073709551615
+-2147483648 == 18446744073709551615
+quote -2147483648 == 18446744073709551616
+-2147483648 == 18446744073709551616
+quote -2147483648 == 340282366920938463463374607431768211455
+-2147483648 == 340282366920938463463374607431768211455
+quote -2147483648 == 340282366920938463463374607431768211456
+-2147483648 == 340282366920938463463374607431768211456
+quote -2147483647 == -170141183460469231731687303715884105728
+-2147483647 == -170141183460469231731687303715884105728
+quote -2147483647 == -170141183460469231731687303715884105727
+-2147483647 == -170141183460469231731687303715884105727
+quote -2147483647 == -9223372036854775808
+-2147483647 == -9223372036854775808
+quote -2147483647 == -9223372036854775807
+-2147483647 == -9223372036854775807
+quote -2147483647 == -2147483648
+-2147483647 == -2147483648
+quote -2147483647 == -2147483647
+-2147483647 == -2147483647
+quote -2147483647 == -32768
+-2147483647 == -32768
+quote -2147483647 == -32767
+-2147483647 == -32767
+quote -2147483647 == -128
+-2147483647 == -128
+quote -2147483647 == -127
+-2147483647 == -127
+quote -2147483647 == 255
+-2147483647 == 255
+quote -2147483647 == 256
+-2147483647 == 256
+quote -2147483647 == 65535
+-2147483647 == 65535
+quote -2147483647 == 65536
+-2147483647 == 65536
+quote -2147483647 == 4294967295
+-2147483647 == 4294967295
+quote -2147483647 == 4294967296
+-2147483647 == 4294967296
+quote -2147483647 == 18446744073709551615
+-2147483647 == 18446744073709551615
+quote -2147483647 == 18446744073709551616
+-2147483647 == 18446744073709551616
+quote -2147483647 == 340282366920938463463374607431768211455
+-2147483647 == 340282366920938463463374607431768211455
+quote -2147483647 == 340282366920938463463374607431768211456
+-2147483647 == 340282366920938463463374607431768211456
+quote -32768 == -170141183460469231731687303715884105728
+-32768 == -170141183460469231731687303715884105728
+quote -32768 == -170141183460469231731687303715884105727
+-32768 == -170141183460469231731687303715884105727
+quote -32768 == -9223372036854775808
+-32768 == -9223372036854775808
+quote -32768 == -9223372036854775807
+-32768 == -9223372036854775807
+quote -32768 == -2147483648
+-32768 == -2147483648
+quote -32768 == -2147483647
+-32768 == -2147483647
+quote -32768 == -32768
+-32768 == -32768
+quote -32768 == -32767
+-32768 == -32767
+quote -32768 == -128
+-32768 == -128
+quote -32768 == -127
+-32768 == -127
+quote -32768 == 255
+-32768 == 255
+quote -32768 == 256
+-32768 == 256
+quote -32768 == 65535
+-32768 == 65535
+quote -32768 == 65536
+-32768 == 65536
+quote -32768 == 4294967295
+-32768 == 4294967295
+quote -32768 == 4294967296
+-32768 == 4294967296
+quote -32768 == 18446744073709551615
+-32768 == 18446744073709551615
+quote -32768 == 18446744073709551616
+-32768 == 18446744073709551616
+quote -32768 == 340282366920938463463374607431768211455
+-32768 == 340282366920938463463374607431768211455
+quote -32768 == 340282366920938463463374607431768211456
+-32768 == 340282366920938463463374607431768211456
+quote -32767 == -170141183460469231731687303715884105728
+-32767 == -170141183460469231731687303715884105728
+quote -32767 == -170141183460469231731687303715884105727
+-32767 == -170141183460469231731687303715884105727
+quote -32767 == -9223372036854775808
+-32767 == -9223372036854775808
+quote -32767 == -9223372036854775807
+-32767 == -9223372036854775807
+quote -32767 == -2147483648
+-32767 == -2147483648
+quote -32767 == -2147483647
+-32767 == -2147483647
+quote -32767 == -32768
+-32767 == -32768
+quote -32767 == -32767
+-32767 == -32767
+quote -32767 == -128
+-32767 == -128
+quote -32767 == -127
+-32767 == -127
+quote -32767 == 255
+-32767 == 255
+quote -32767 == 256
+-32767 == 256
+quote -32767 == 65535
+-32767 == 65535
+quote -32767 == 65536
+-32767 == 65536
+quote -32767 == 4294967295
+-32767 == 4294967295
+quote -32767 == 4294967296
+-32767 == 4294967296
+quote -32767 == 18446744073709551615
+-32767 == 18446744073709551615
+quote -32767 == 18446744073709551616
+-32767 == 18446744073709551616
+quote -32767 == 340282366920938463463374607431768211455
+-32767 == 340282366920938463463374607431768211455
+quote -32767 == 340282366920938463463374607431768211456
+-32767 == 340282366920938463463374607431768211456
+quote -128 == -170141183460469231731687303715884105728
+-128 == -170141183460469231731687303715884105728
+quote -128 == -170141183460469231731687303715884105727
+-128 == -170141183460469231731687303715884105727
+quote -128 == -9223372036854775808
+-128 == -9223372036854775808
+quote -128 == -9223372036854775807
+-128 == -9223372036854775807
+quote -128 == -2147483648
+-128 == -2147483648
+quote -128 == -2147483647
+-128 == -2147483647
+quote -128 == -32768
+-128 == -32768
+quote -128 == -32767
+-128 == -32767
+quote -128 == -128
+-128 == -128
+quote -128 == -127
+-128 == -127
+quote -128 == 255
+-128 == 255
+quote -128 == 256
+-128 == 256
+quote -128 == 65535
+-128 == 65535
+quote -128 == 65536
+-128 == 65536
+quote -128 == 4294967295
+-128 == 4294967295
+quote -128 == 4294967296
+-128 == 4294967296
+quote -128 == 18446744073709551615
+-128 == 18446744073709551615
+quote -128 == 18446744073709551616
+-128 == 18446744073709551616
+quote -128 == 340282366920938463463374607431768211455
+-128 == 340282366920938463463374607431768211455
+quote -128 == 340282366920938463463374607431768211456
+-128 == 340282366920938463463374607431768211456
+quote -127 == -170141183460469231731687303715884105728
+-127 == -170141183460469231731687303715884105728
+quote -127 == -170141183460469231731687303715884105727
+-127 == -170141183460469231731687303715884105727
+quote -127 == -9223372036854775808
+-127 == -9223372036854775808
+quote -127 == -9223372036854775807
+-127 == -9223372036854775807
+quote -127 == -2147483648
+-127 == -2147483648
+quote -127 == -2147483647
+-127 == -2147483647
+quote -127 == -32768
+-127 == -32768
+quote -127 == -32767
+-127 == -32767
+quote -127 == -128
+-127 == -128
+quote -127 == -127
+-127 == -127
+quote -127 == 255
+-127 == 255
+quote -127 == 256
+-127 == 256
+quote -127 == 65535
+-127 == 65535
+quote -127 == 65536
+-127 == 65536
+quote -127 == 4294967295
+-127 == 4294967295
+quote -127 == 4294967296
+-127 == 4294967296
+quote -127 == 18446744073709551615
+-127 == 18446744073709551615
+quote -127 == 18446744073709551616
+-127 == 18446744073709551616
+quote -127 == 340282366920938463463374607431768211455
+-127 == 340282366920938463463374607431768211455
+quote -127 == 340282366920938463463374607431768211456
+-127 == 340282366920938463463374607431768211456
+quote 255 == -170141183460469231731687303715884105728
+255 == -170141183460469231731687303715884105728
+quote 255 == -170141183460469231731687303715884105727
+255 == -170141183460469231731687303715884105727
+quote 255 == -9223372036854775808
+255 == -9223372036854775808
+quote 255 == -9223372036854775807
+255 == -9223372036854775807
+quote 255 == -2147483648
+255 == -2147483648
+quote 255 == -2147483647
+255 == -2147483647
+quote 255 == -32768
+255 == -32768
+quote 255 == -32767
+255 == -32767
+quote 255 == -128
+255 == -128
+quote 255 == -127
+255 == -127
+quote 255 == 255
+255 == 255
+quote 255 == 256
+255 == 256
+quote 255 == 65535
+255 == 65535
+quote 255 == 65536
+255 == 65536
+quote 255 == 4294967295
+255 == 4294967295
+quote 255 == 4294967296
+255 == 4294967296
+quote 255 == 18446744073709551615
+255 == 18446744073709551615
+quote 255 == 18446744073709551616
+255 == 18446744073709551616
+quote 255 == 340282366920938463463374607431768211455
+255 == 340282366920938463463374607431768211455
+quote 255 == 340282366920938463463374607431768211456
+255 == 340282366920938463463374607431768211456
+quote 256 == -170141183460469231731687303715884105728
+256 == -170141183460469231731687303715884105728
+quote 256 == -170141183460469231731687303715884105727
+256 == -170141183460469231731687303715884105727
+quote 256 == -9223372036854775808
+256 == -9223372036854775808
+quote 256 == -9223372036854775807
+256 == -9223372036854775807
+quote 256 == -2147483648
+256 == -2147483648
+quote 256 == -2147483647
+256 == -2147483647
+quote 256 == -32768
+256 == -32768
+quote 256 == -32767
+256 == -32767
+quote 256 == -128
+256 == -128
+quote 256 == -127
+256 == -127
+quote 256 == 255
+256 == 255
+quote 256 == 256
+256 == 256
+quote 256 == 65535
+256 == 65535
+quote 256 == 65536
+256 == 65536
+quote 256 == 4294967295
+256 == 4294967295
+quote 256 == 4294967296
+256 == 4294967296
+quote 256 == 18446744073709551615
+256 == 18446744073709551615
+quote 256 == 18446744073709551616
+256 == 18446744073709551616
+quote 256 == 340282366920938463463374607431768211455
+256 == 340282366920938463463374607431768211455
+quote 256 == 340282366920938463463374607431768211456
+256 == 340282366920938463463374607431768211456
+quote 65535 == -170141183460469231731687303715884105728
+65535 == -170141183460469231731687303715884105728
+quote 65535 == -170141183460469231731687303715884105727
+65535 == -170141183460469231731687303715884105727
+quote 65535 == -9223372036854775808
+65535 == -9223372036854775808
+quote 65535 == -9223372036854775807
+65535 == -9223372036854775807
+quote 65535 == -2147483648
+65535 == -2147483648
+quote 65535 == -2147483647
+65535 == -2147483647
+quote 65535 == -32768
+65535 == -32768
+quote 65535 == -32767
+65535 == -32767
+quote 65535 == -128
+65535 == -128
+quote 65535 == -127
+65535 == -127
+quote 65535 == 255
+65535 == 255
+quote 65535 == 256
+65535 == 256
+quote 65535 == 65535
+65535 == 65535
+quote 65535 == 65536
+65535 == 65536
+quote 65535 == 4294967295
+65535 == 4294967295
+quote 65535 == 4294967296
+65535 == 4294967296
+quote 65535 == 18446744073709551615
+65535 == 18446744073709551615
+quote 65535 == 18446744073709551616
+65535 == 18446744073709551616
+quote 65535 == 340282366920938463463374607431768211455
+65535 == 340282366920938463463374607431768211455
+quote 65535 == 340282366920938463463374607431768211456
+65535 == 340282366920938463463374607431768211456
+quote 65536 == -170141183460469231731687303715884105728
+65536 == -170141183460469231731687303715884105728
+quote 65536 == -170141183460469231731687303715884105727
+65536 == -170141183460469231731687303715884105727
+quote 65536 == -9223372036854775808
+65536 == -9223372036854775808
+quote 65536 == -9223372036854775807
+65536 == -9223372036854775807
+quote 65536 == -2147483648
+65536 == -2147483648
+quote 65536 == -2147483647
+65536 == -2147483647
+quote 65536 == -32768
+65536 == -32768
+quote 65536 == -32767
+65536 == -32767
+quote 65536 == -128
+65536 == -128
+quote 65536 == -127
+65536 == -127
+quote 65536 == 255
+65536 == 255
+quote 65536 == 256
+65536 == 256
+quote 65536 == 65535
+65536 == 65535
+quote 65536 == 65536
+65536 == 65536
+quote 65536 == 4294967295
+65536 == 4294967295
+quote 65536 == 4294967296
+65536 == 4294967296
+quote 65536 == 18446744073709551615
+65536 == 18446744073709551615
+quote 65536 == 18446744073709551616
+65536 == 18446744073709551616
+quote 65536 == 340282366920938463463374607431768211455
+65536 == 340282366920938463463374607431768211455
+quote 65536 == 340282366920938463463374607431768211456
+65536 == 340282366920938463463374607431768211456
+quote 4294967295 == -170141183460469231731687303715884105728
+4294967295 == -170141183460469231731687303715884105728
+quote 4294967295 == -170141183460469231731687303715884105727
+4294967295 == -170141183460469231731687303715884105727
+quote 4294967295 == -9223372036854775808
+4294967295 == -9223372036854775808
+quote 4294967295 == -9223372036854775807
+4294967295 == -9223372036854775807
+quote 4294967295 == -2147483648
+4294967295 == -2147483648
+quote 4294967295 == -2147483647
+4294967295 == -2147483647
+quote 4294967295 == -32768
+4294967295 == -32768
+quote 4294967295 == -32767
+4294967295 == -32767
+quote 4294967295 == -128
+4294967295 == -128
+quote 4294967295 == -127
+4294967295 == -127
+quote 4294967295 == 255
+4294967295 == 255
+quote 4294967295 == 256
+4294967295 == 256
+quote 4294967295 == 65535
+4294967295 == 65535
+quote 4294967295 == 65536
+4294967295 == 65536
+quote 4294967295 == 4294967295
+4294967295 == 4294967295
+quote 4294967295 == 4294967296
+4294967295 == 4294967296
+quote 4294967295 == 18446744073709551615
+4294967295 == 18446744073709551615
+quote 4294967295 == 18446744073709551616
+4294967295 == 18446744073709551616
+quote 4294967295 == 340282366920938463463374607431768211455
+4294967295 == 340282366920938463463374607431768211455
+quote 4294967295 == 340282366920938463463374607431768211456
+4294967295 == 340282366920938463463374607431768211456
+quote 4294967296 == -170141183460469231731687303715884105728
+4294967296 == -170141183460469231731687303715884105728
+quote 4294967296 == -170141183460469231731687303715884105727
+4294967296 == -170141183460469231731687303715884105727
+quote 4294967296 == -9223372036854775808
+4294967296 == -9223372036854775808
+quote 4294967296 == -9223372036854775807
+4294967296 == -9223372036854775807
+quote 4294967296 == -2147483648
+4294967296 == -2147483648
+quote 4294967296 == -2147483647
+4294967296 == -2147483647
+quote 4294967296 == -32768
+4294967296 == -32768
+quote 4294967296 == -32767
+4294967296 == -32767
+quote 4294967296 == -128
+4294967296 == -128
+quote 4294967296 == -127
+4294967296 == -127
+quote 4294967296 == 255
+4294967296 == 255
+quote 4294967296 == 256
+4294967296 == 256
+quote 4294967296 == 65535
+4294967296 == 65535
+quote 4294967296 == 65536
+4294967296 == 65536
+quote 4294967296 == 4294967295
+4294967296 == 4294967295
+quote 4294967296 == 4294967296
+4294967296 == 4294967296
+quote 4294967296 == 18446744073709551615
+4294967296 == 18446744073709551615
+quote 4294967296 == 18446744073709551616
+4294967296 == 18446744073709551616
+quote 4294967296 == 340282366920938463463374607431768211455
+4294967296 == 340282366920938463463374607431768211455
+quote 4294967296 == 340282366920938463463374607431768211456
+4294967296 == 340282366920938463463374607431768211456
+quote 18446744073709551615 == -170141183460469231731687303715884105728
+18446744073709551615 == -170141183460469231731687303715884105728
+quote 18446744073709551615 == -170141183460469231731687303715884105727
+18446744073709551615 == -170141183460469231731687303715884105727
+quote 18446744073709551615 == -9223372036854775808
+18446744073709551615 == -9223372036854775808
+quote 18446744073709551615 == -9223372036854775807
+18446744073709551615 == -9223372036854775807
+quote 18446744073709551615 == -2147483648
+18446744073709551615 == -2147483648
+quote 18446744073709551615 == -2147483647
+18446744073709551615 == -2147483647
+quote 18446744073709551615 == -32768
+18446744073709551615 == -32768
+quote 18446744073709551615 == -32767
+18446744073709551615 == -32767
+quote 18446744073709551615 == -128
+18446744073709551615 == -128
+quote 18446744073709551615 == -127
+18446744073709551615 == -127
+quote 18446744073709551615 == 255
+18446744073709551615 == 255
+quote 18446744073709551615 == 256
+18446744073709551615 == 256
+quote 18446744073709551615 == 65535
+18446744073709551615 == 65535
+quote 18446744073709551615 == 65536
+18446744073709551615 == 65536
+quote 18446744073709551615 == 4294967295
+18446744073709551615 == 4294967295
+quote 18446744073709551615 == 4294967296
+18446744073709551615 == 4294967296
+quote 18446744073709551615 == 18446744073709551615
+18446744073709551615 == 18446744073709551615
+quote 18446744073709551615 == 18446744073709551616
+18446744073709551615 == 18446744073709551616
+quote 18446744073709551615 == 340282366920938463463374607431768211455
+18446744073709551615 == 340282366920938463463374607431768211455
+quote 18446744073709551615 == 340282366920938463463374607431768211456
+18446744073709551615 == 340282366920938463463374607431768211456
+quote 18446744073709551616 == -170141183460469231731687303715884105728
+18446744073709551616 == -170141183460469231731687303715884105728
+quote 18446744073709551616 == -170141183460469231731687303715884105727
+18446744073709551616 == -170141183460469231731687303715884105727
+quote 18446744073709551616 == -9223372036854775808
+18446744073709551616 == -9223372036854775808
+quote 18446744073709551616 == -9223372036854775807
+18446744073709551616 == -9223372036854775807
+quote 18446744073709551616 == -2147483648
+18446744073709551616 == -2147483648
+quote 18446744073709551616 == -2147483647
+18446744073709551616 == -2147483647
+quote 18446744073709551616 == -32768
+18446744073709551616 == -32768
+quote 18446744073709551616 == -32767
+18446744073709551616 == -32767
+quote 18446744073709551616 == -128
+18446744073709551616 == -128
+quote 18446744073709551616 == -127
+18446744073709551616 == -127
+quote 18446744073709551616 == 255
+18446744073709551616 == 255
+quote 18446744073709551616 == 256
+18446744073709551616 == 256
+quote 18446744073709551616 == 65535
+18446744073709551616 == 65535
+quote 18446744073709551616 == 65536
+18446744073709551616 == 65536
+quote 18446744073709551616 == 4294967295
+18446744073709551616 == 4294967295
+quote 18446744073709551616 == 4294967296
+18446744073709551616 == 4294967296
+quote 18446744073709551616 == 18446744073709551615
+18446744073709551616 == 18446744073709551615
+quote 18446744073709551616 == 18446744073709551616
+18446744073709551616 == 18446744073709551616
+quote 18446744073709551616 == 340282366920938463463374607431768211455
+18446744073709551616 == 340282366920938463463374607431768211455
+quote 18446744073709551616 == 340282366920938463463374607431768211456
+18446744073709551616 == 340282366920938463463374607431768211456
+quote 340282366920938463463374607431768211455 == -170141183460469231731687303715884105728
+340282366920938463463374607431768211455 == -170141183460469231731687303715884105728
+quote 340282366920938463463374607431768211455 == -170141183460469231731687303715884105727
+340282366920938463463374607431768211455 == -170141183460469231731687303715884105727
+quote 340282366920938463463374607431768211455 == -9223372036854775808
+340282366920938463463374607431768211455 == -9223372036854775808
+quote 340282366920938463463374607431768211455 == -9223372036854775807
+340282366920938463463374607431768211455 == -9223372036854775807
+quote 340282366920938463463374607431768211455 == -2147483648
+340282366920938463463374607431768211455 == -2147483648
+quote 340282366920938463463374607431768211455 == -2147483647
+340282366920938463463374607431768211455 == -2147483647
+quote 340282366920938463463374607431768211455 == -32768
+340282366920938463463374607431768211455 == -32768
+quote 340282366920938463463374607431768211455 == -32767
+340282366920938463463374607431768211455 == -32767
+quote 340282366920938463463374607431768211455 == -128
+340282366920938463463374607431768211455 == -128
+quote 340282366920938463463374607431768211455 == -127
+340282366920938463463374607431768211455 == -127
+quote 340282366920938463463374607431768211455 == 255
+340282366920938463463374607431768211455 == 255
+quote 340282366920938463463374607431768211455 == 256
+340282366920938463463374607431768211455 == 256
+quote 340282366920938463463374607431768211455 == 65535
+340282366920938463463374607431768211455 == 65535
+quote 340282366920938463463374607431768211455 == 65536
+340282366920938463463374607431768211455 == 65536
+quote 340282366920938463463374607431768211455 == 4294967295
+340282366920938463463374607431768211455 == 4294967295
+quote 340282366920938463463374607431768211455 == 4294967296
+340282366920938463463374607431768211455 == 4294967296
+quote 340282366920938463463374607431768211455 == 18446744073709551615
+340282366920938463463374607431768211455 == 18446744073709551615
+quote 340282366920938463463374607431768211455 == 18446744073709551616
+340282366920938463463374607431768211455 == 18446744073709551616
+quote 340282366920938463463374607431768211455 == 340282366920938463463374607431768211455
+340282366920938463463374607431768211455 == 340282366920938463463374607431768211455
+quote 340282366920938463463374607431768211455 == 340282366920938463463374607431768211456
+340282366920938463463374607431768211455 == 340282366920938463463374607431768211456
+quote 340282366920938463463374607431768211456 == -170141183460469231731687303715884105728
+340282366920938463463374607431768211456 == -170141183460469231731687303715884105728
+quote 340282366920938463463374607431768211456 == -170141183460469231731687303715884105727
+340282366920938463463374607431768211456 == -170141183460469231731687303715884105727
+quote 340282366920938463463374607431768211456 == -9223372036854775808
+340282366920938463463374607431768211456 == -9223372036854775808
+quote 340282366920938463463374607431768211456 == -9223372036854775807
+340282366920938463463374607431768211456 == -9223372036854775807
+quote 340282366920938463463374607431768211456 == -2147483648
+340282366920938463463374607431768211456 == -2147483648
+quote 340282366920938463463374607431768211456 == -2147483647
+340282366920938463463374607431768211456 == -2147483647
+quote 340282366920938463463374607431768211456 == -32768
+340282366920938463463374607431768211456 == -32768
+quote 340282366920938463463374607431768211456 == -32767
+340282366920938463463374607431768211456 == -32767
+quote 340282366920938463463374607431768211456 == -128
+340282366920938463463374607431768211456 == -128
+quote 340282366920938463463374607431768211456 == -127
+340282366920938463463374607431768211456 == -127
+quote 340282366920938463463374607431768211456 == 255
+340282366920938463463374607431768211456 == 255
+quote 340282366920938463463374607431768211456 == 256
+340282366920938463463374607431768211456 == 256
+quote 340282366920938463463374607431768211456 == 65535
+340282366920938463463374607431768211456 == 65535
+quote 340282366920938463463374607431768211456 == 65536
+340282366920938463463374607431768211456 == 65536
+quote 340282366920938463463374607431768211456 == 4294967295
+340282366920938463463374607431768211456 == 4294967295
+quote 340282366920938463463374607431768211456 == 4294967296
+340282366920938463463374607431768211456 == 4294967296
+quote 340282366920938463463374607431768211456 == 18446744073709551615
+340282366920938463463374607431768211456 == 18446744073709551615
+quote 340282366920938463463374607431768211456 == 18446744073709551616
+340282366920938463463374607431768211456 == 18446744073709551616
+quote 340282366920938463463374607431768211456 == 340282366920938463463374607431768211455
+340282366920938463463374607431768211456 == 340282366920938463463374607431768211455
+quote 340282366920938463463374607431768211456 == 340282366920938463463374607431768211456
+340282366920938463463374607431768211456 == 340282366920938463463374607431768211456
diff --git a/test/ic3/integer_eq.out.expected b/test/ic3/integer_eq.out.expected
new file mode 100644
index 0000000..23605cf
--- /dev/null
+++ b/test/ic3/integer_eq.out.expected
@@ -0,0 +1,800 @@
+-170141183460469231731687303715884105728 == -170141183460469231731687303715884105728
+true
+-170141183460469231731687303715884105728 == -170141183460469231731687303715884105727
+false
+-170141183460469231731687303715884105728 == -9223372036854775808
+false
+-170141183460469231731687303715884105728 == -9223372036854775807
+false
+-170141183460469231731687303715884105728 == -2147483648
+false
+-170141183460469231731687303715884105728 == -2147483647
+false
+-170141183460469231731687303715884105728 == -32768
+false
+-170141183460469231731687303715884105728 == -32767
+false
+-170141183460469231731687303715884105728 == -128
+false
+-170141183460469231731687303715884105728 == -127
+false
+-170141183460469231731687303715884105728 == 255
+false
+-170141183460469231731687303715884105728 == 256
+false
+-170141183460469231731687303715884105728 == 65535
+false
+-170141183460469231731687303715884105728 == 65536
+false
+-170141183460469231731687303715884105728 == 4294967295
+false
+-170141183460469231731687303715884105728 == 4294967296
+false
+-170141183460469231731687303715884105728 == 18446744073709551615
+false
+-170141183460469231731687303715884105728 == 18446744073709551616
+false
+-170141183460469231731687303715884105728 == 340282366920938463463374607431768211455
+false
+-170141183460469231731687303715884105728 == 340282366920938463463374607431768211456
+false
+-170141183460469231731687303715884105727 == -170141183460469231731687303715884105728
+false
+-170141183460469231731687303715884105727 == -170141183460469231731687303715884105727
+true
+-170141183460469231731687303715884105727 == -9223372036854775808
+false
+-170141183460469231731687303715884105727 == -9223372036854775807
+false
+-170141183460469231731687303715884105727 == -2147483648
+false
+-170141183460469231731687303715884105727 == -2147483647
+false
+-170141183460469231731687303715884105727 == -32768
+false
+-170141183460469231731687303715884105727 == -32767
+false
+-170141183460469231731687303715884105727 == -128
+false
+-170141183460469231731687303715884105727 == -127
+false
+-170141183460469231731687303715884105727 == 255
+false
+-170141183460469231731687303715884105727 == 256
+false
+-170141183460469231731687303715884105727 == 65535
+false
+-170141183460469231731687303715884105727 == 65536
+false
+-170141183460469231731687303715884105727 == 4294967295
+false
+-170141183460469231731687303715884105727 == 4294967296
+false
+-170141183460469231731687303715884105727 == 18446744073709551615
+false
+-170141183460469231731687303715884105727 == 18446744073709551616
+false
+-170141183460469231731687303715884105727 == 340282366920938463463374607431768211455
+false
+-170141183460469231731687303715884105727 == 340282366920938463463374607431768211456
+false
+-9223372036854775808 == -170141183460469231731687303715884105728
+false
+-9223372036854775808 == -170141183460469231731687303715884105727
+false
+-9223372036854775808 == -9223372036854775808
+true
+-9223372036854775808 == -9223372036854775807
+false
+-9223372036854775808 == -2147483648
+false
+-9223372036854775808 == -2147483647
+false
+-9223372036854775808 == -32768
+false
+-9223372036854775808 == -32767
+false
+-9223372036854775808 == -128
+false
+-9223372036854775808 == -127
+false
+-9223372036854775808 == 255
+false
+-9223372036854775808 == 256
+false
+-9223372036854775808 == 65535
+false
+-9223372036854775808 == 65536
+false
+-9223372036854775808 == 4294967295
+false
+-9223372036854775808 == 4294967296
+false
+-9223372036854775808 == 18446744073709551615
+false
+-9223372036854775808 == 18446744073709551616
+false
+-9223372036854775808 == 340282366920938463463374607431768211455
+false
+-9223372036854775808 == 340282366920938463463374607431768211456
+false
+-9223372036854775807 == -170141183460469231731687303715884105728
+false
+-9223372036854775807 == -170141183460469231731687303715884105727
+false
+-9223372036854775807 == -9223372036854775808
+false
+-9223372036854775807 == -9223372036854775807
+true
+-9223372036854775807 == -2147483648
+false
+-9223372036854775807 == -2147483647
+false
+-9223372036854775807 == -32768
+false
+-9223372036854775807 == -32767
+false
+-9223372036854775807 == -128
+false
+-9223372036854775807 == -127
+false
+-9223372036854775807 == 255
+false
+-9223372036854775807 == 256
+false
+-9223372036854775807 == 65535
+false
+-9223372036854775807 == 65536
+false
+-9223372036854775807 == 4294967295
+false
+-9223372036854775807 == 4294967296
+false
+-9223372036854775807 == 18446744073709551615
+false
+-9223372036854775807 == 18446744073709551616
+false
+-9223372036854775807 == 340282366920938463463374607431768211455
+false
+-9223372036854775807 == 340282366920938463463374607431768211456
+false
+-2147483648 == -170141183460469231731687303715884105728
+false
+-2147483648 == -170141183460469231731687303715884105727
+false
+-2147483648 == -9223372036854775808
+false
+-2147483648 == -9223372036854775807
+false
+-2147483648 == -2147483648
+true
+-2147483648 == -2147483647
+false
+-2147483648 == -32768
+false
+-2147483648 == -32767
+false
+-2147483648 == -128
+false
+-2147483648 == -127
+false
+-2147483648 == 255
+false
+-2147483648 == 256
+false
+-2147483648 == 65535
+false
+-2147483648 == 65536
+false
+-2147483648 == 4294967295
+false
+-2147483648 == 4294967296
+false
+-2147483648 == 18446744073709551615
+false
+-2147483648 == 18446744073709551616
+false
+-2147483648 == 340282366920938463463374607431768211455
+false
+-2147483648 == 340282366920938463463374607431768211456
+false
+-2147483647 == -170141183460469231731687303715884105728
+false
+-2147483647 == -170141183460469231731687303715884105727
+false
+-2147483647 == -9223372036854775808
+false
+-2147483647 == -9223372036854775807
+false
+-2147483647 == -2147483648
+false
+-2147483647 == -2147483647
+true
+-2147483647 == -32768
+false
+-2147483647 == -32767
+false
+-2147483647 == -128
+false
+-2147483647 == -127
+false
+-2147483647 == 255
+false
+-2147483647 == 256
+false
+-2147483647 == 65535
+false
+-2147483647 == 65536
+false
+-2147483647 == 4294967295
+false
+-2147483647 == 4294967296
+false
+-2147483647 == 18446744073709551615
+false
+-2147483647 == 18446744073709551616
+false
+-2147483647 == 340282366920938463463374607431768211455
+false
+-2147483647 == 340282366920938463463374607431768211456
+false
+-32768 == -170141183460469231731687303715884105728
+false
+-32768 == -170141183460469231731687303715884105727
+false
+-32768 == -9223372036854775808
+false
+-32768 == -9223372036854775807
+false
+-32768 == -2147483648
+false
+-32768 == -2147483647
+false
+-32768 == -32768
+true
+-32768 == -32767
+false
+-32768 == -128
+false
+-32768 == -127
+false
+-32768 == 255
+false
+-32768 == 256
+false
+-32768 == 65535
+false
+-32768 == 65536
+false
+-32768 == 4294967295
+false
+-32768 == 4294967296
+false
+-32768 == 18446744073709551615
+false
+-32768 == 18446744073709551616
+false
+-32768 == 340282366920938463463374607431768211455
+false
+-32768 == 340282366920938463463374607431768211456
+false
+-32767 == -170141183460469231731687303715884105728
+false
+-32767 == -170141183460469231731687303715884105727
+false
+-32767 == -9223372036854775808
+false
+-32767 == -9223372036854775807
+false
+-32767 == -2147483648
+false
+-32767 == -2147483647
+false
+-32767 == -32768
+false
+-32767 == -32767
+true
+-32767 == -128
+false
+-32767 == -127
+false
+-32767 == 255
+false
+-32767 == 256
+false
+-32767 == 65535
+false
+-32767 == 65536
+false
+-32767 == 4294967295
+false
+-32767 == 4294967296
+false
+-32767 == 18446744073709551615
+false
+-32767 == 18446744073709551616
+false
+-32767 == 340282366920938463463374607431768211455
+false
+-32767 == 340282366920938463463374607431768211456
+false
+-128 == -170141183460469231731687303715884105728
+false
+-128 == -170141183460469231731687303715884105727
+false
+-128 == -9223372036854775808
+false
+-128 == -9223372036854775807
+false
+-128 == -2147483648
+false
+-128 == -2147483647
+false
+-128 == -32768
+false
+-128 == -32767
+false
+-128 == -128
+true
+-128 == -127
+false
+-128 == 255
+false
+-128 == 256
+false
+-128 == 65535
+false
+-128 == 65536
+false
+-128 == 4294967295
+false
+-128 == 4294967296
+false
+-128 == 18446744073709551615
+false
+-128 == 18446744073709551616
+false
+-128 == 340282366920938463463374607431768211455
+false
+-128 == 340282366920938463463374607431768211456
+false
+-127 == -170141183460469231731687303715884105728
+false
+-127 == -170141183460469231731687303715884105727
+false
+-127 == -9223372036854775808
+false
+-127 == -9223372036854775807
+false
+-127 == -2147483648
+false
+-127 == -2147483647
+false
+-127 == -32768
+false
+-127 == -32767
+false
+-127 == -128
+false
+-127 == -127
+true
+-127 == 255
+false
+-127 == 256
+false
+-127 == 65535
+false
+-127 == 65536
+false
+-127 == 4294967295
+false
+-127 == 4294967296
+false
+-127 == 18446744073709551615
+false
+-127 == 18446744073709551616
+false
+-127 == 340282366920938463463374607431768211455
+false
+-127 == 340282366920938463463374607431768211456
+false
+255 == -170141183460469231731687303715884105728
+false
+255 == -170141183460469231731687303715884105727
+false
+255 == -9223372036854775808
+false
+255 == -9223372036854775807
+false
+255 == -2147483648
+false
+255 == -2147483647
+false
+255 == -32768
+false
+255 == -32767
+false
+255 == -128
+false
+255 == -127
+false
+255 == 255
+true
+255 == 256
+false
+255 == 65535
+false
+255 == 65536
+false
+255 == 4294967295
+false
+255 == 4294967296
+false
+255 == 18446744073709551615
+false
+255 == 18446744073709551616
+false
+255 == 340282366920938463463374607431768211455
+false
+255 == 340282366920938463463374607431768211456
+false
+256 == -170141183460469231731687303715884105728
+false
+256 == -170141183460469231731687303715884105727
+false
+256 == -9223372036854775808
+false
+256 == -9223372036854775807
+false
+256 == -2147483648
+false
+256 == -2147483647
+false
+256 == -32768
+false
+256 == -32767
+false
+256 == -128
+false
+256 == -127
+false
+256 == 255
+false
+256 == 256
+true
+256 == 65535
+false
+256 == 65536
+false
+256 == 4294967295
+false
+256 == 4294967296
+false
+256 == 18446744073709551615
+false
+256 == 18446744073709551616
+false
+256 == 340282366920938463463374607431768211455
+false
+256 == 340282366920938463463374607431768211456
+false
+65535 == -170141183460469231731687303715884105728
+false
+65535 == -170141183460469231731687303715884105727
+false
+65535 == -9223372036854775808
+false
+65535 == -9223372036854775807
+false
+65535 == -2147483648
+false
+65535 == -2147483647
+false
+65535 == -32768
+false
+65535 == -32767
+false
+65535 == -128
+false
+65535 == -127
+false
+65535 == 255
+false
+65535 == 256
+false
+65535 == 65535
+true
+65535 == 65536
+false
+65535 == 4294967295
+false
+65535 == 4294967296
+false
+65535 == 18446744073709551615
+false
+65535 == 18446744073709551616
+false
+65535 == 340282366920938463463374607431768211455
+false
+65535 == 340282366920938463463374607431768211456
+false
+65536 == -170141183460469231731687303715884105728
+false
+65536 == -170141183460469231731687303715884105727
+false
+65536 == -9223372036854775808
+false
+65536 == -9223372036854775807
+false
+65536 == -2147483648
+false
+65536 == -2147483647
+false
+65536 == -32768
+false
+65536 == -32767
+false
+65536 == -128
+false
+65536 == -127
+false
+65536 == 255
+false
+65536 == 256
+false
+65536 == 65535
+false
+65536 == 65536
+true
+65536 == 4294967295
+false
+65536 == 4294967296
+false
+65536 == 18446744073709551615
+false
+65536 == 18446744073709551616
+false
+65536 == 340282366920938463463374607431768211455
+false
+65536 == 340282366920938463463374607431768211456
+false
+4294967295 == -170141183460469231731687303715884105728
+false
+4294967295 == -170141183460469231731687303715884105727
+false
+4294967295 == -9223372036854775808
+false
+4294967295 == -9223372036854775807
+false
+4294967295 == -2147483648
+false
+4294967295 == -2147483647
+false
+4294967295 == -32768
+false
+4294967295 == -32767
+false
+4294967295 == -128
+false
+4294967295 == -127
+false
+4294967295 == 255
+false
+4294967295 == 256
+false
+4294967295 == 65535
+false
+4294967295 == 65536
+false
+4294967295 == 4294967295
+true
+4294967295 == 4294967296
+false
+4294967295 == 18446744073709551615
+false
+4294967295 == 18446744073709551616
+false
+4294967295 == 340282366920938463463374607431768211455
+false
+4294967295 == 340282366920938463463374607431768211456
+false
+4294967296 == -170141183460469231731687303715884105728
+false
+4294967296 == -170141183460469231731687303715884105727
+false
+4294967296 == -9223372036854775808
+false
+4294967296 == -9223372036854775807
+false
+4294967296 == -2147483648
+false
+4294967296 == -2147483647
+false
+4294967296 == -32768
+false
+4294967296 == -32767
+false
+4294967296 == -128
+false
+4294967296 == -127
+false
+4294967296 == 255
+false
+4294967296 == 256
+false
+4294967296 == 65535
+false
+4294967296 == 65536
+false
+4294967296 == 4294967295
+false
+4294967296 == 4294967296
+true
+4294967296 == 18446744073709551615
+false
+4294967296 == 18446744073709551616
+false
+4294967296 == 340282366920938463463374607431768211455
+false
+4294967296 == 340282366920938463463374607431768211456
+false
+18446744073709551615 == -170141183460469231731687303715884105728
+false
+18446744073709551615 == -170141183460469231731687303715884105727
+false
+18446744073709551615 == -9223372036854775808
+false
+18446744073709551615 == -9223372036854775807
+false
+18446744073709551615 == -2147483648
+false
+18446744073709551615 == -2147483647
+false
+18446744073709551615 == -32768
+false
+18446744073709551615 == -32767
+false
+18446744073709551615 == -128
+false
+18446744073709551615 == -127
+false
+18446744073709551615 == 255
+false
+18446744073709551615 == 256
+false
+18446744073709551615 == 65535
+false
+18446744073709551615 == 65536
+false
+18446744073709551615 == 4294967295
+false
+18446744073709551615 == 4294967296
+false
+18446744073709551615 == 18446744073709551615
+true
+18446744073709551615 == 18446744073709551616
+false
+18446744073709551615 == 340282366920938463463374607431768211455
+false
+18446744073709551615 == 340282366920938463463374607431768211456
+false
+18446744073709551616 == -170141183460469231731687303715884105728
+false
+18446744073709551616 == -170141183460469231731687303715884105727
+false
+18446744073709551616 == -9223372036854775808
+false
+18446744073709551616 == -9223372036854775807
+false
+18446744073709551616 == -2147483648
+false
+18446744073709551616 == -2147483647
+false
+18446744073709551616 == -32768
+false
+18446744073709551616 == -32767
+false
+18446744073709551616 == -128
+false
+18446744073709551616 == -127
+false
+18446744073709551616 == 255
+false
+18446744073709551616 == 256
+false
+18446744073709551616 == 65535
+false
+18446744073709551616 == 65536
+false
+18446744073709551616 == 4294967295
+false
+18446744073709551616 == 4294967296
+false
+18446744073709551616 == 18446744073709551615
+false
+18446744073709551616 == 18446744073709551616
+true
+18446744073709551616 == 340282366920938463463374607431768211455
+false
+18446744073709551616 == 340282366920938463463374607431768211456
+false
+340282366920938463463374607431768211455 == -170141183460469231731687303715884105728
+false
+340282366920938463463374607431768211455 == -170141183460469231731687303715884105727
+false
+340282366920938463463374607431768211455 == -9223372036854775808
+false
+340282366920938463463374607431768211455 == -9223372036854775807
+false
+340282366920938463463374607431768211455 == -2147483648
+false
+340282366920938463463374607431768211455 == -2147483647
+false
+340282366920938463463374607431768211455 == -32768
+false
+340282366920938463463374607431768211455 == -32767
+false
+340282366920938463463374607431768211455 == -128
+false
+340282366920938463463374607431768211455 == -127
+false
+340282366920938463463374607431768211455 == 255
+false
+340282366920938463463374607431768211455 == 256
+false
+340282366920938463463374607431768211455 == 65535
+false
+340282366920938463463374607431768211455 == 65536
+false
+340282366920938463463374607431768211455 == 4294967295
+false
+340282366920938463463374607431768211455 == 4294967296
+false
+340282366920938463463374607431768211455 == 18446744073709551615
+false
+340282366920938463463374607431768211455 == 18446744073709551616
+false
+340282366920938463463374607431768211455 == 340282366920938463463374607431768211455
+true
+340282366920938463463374607431768211455 == 340282366920938463463374607431768211456
+false
+340282366920938463463374607431768211456 == -170141183460469231731687303715884105728
+false
+340282366920938463463374607431768211456 == -170141183460469231731687303715884105727
+false
+340282366920938463463374607431768211456 == -9223372036854775808
+false
+340282366920938463463374607431768211456 == -9223372036854775807
+false
+340282366920938463463374607431768211456 == -2147483648
+false
+340282366920938463463374607431768211456 == -2147483647
+false
+340282366920938463463374607431768211456 == -32768
+false
+340282366920938463463374607431768211456 == -32767
+false
+340282366920938463463374607431768211456 == -128
+false
+340282366920938463463374607431768211456 == -127
+false
+340282366920938463463374607431768211456 == 255
+false
+340282366920938463463374607431768211456 == 256
+false
+340282366920938463463374607431768211456 == 65535
+false
+340282366920938463463374607431768211456 == 65536
+false
+340282366920938463463374607431768211456 == 4294967295
+false
+340282366920938463463374607431768211456 == 4294967296
+false
+340282366920938463463374607431768211456 == 18446744073709551615
+false
+340282366920938463463374607431768211456 == 18446744073709551616
+false
+340282366920938463463374607431768211456 == 340282366920938463463374607431768211455
+false
+340282366920938463463374607431768211456 == 340282366920938463463374607431768211456
+true
diff --git a/test/ic3/integer_eq.ret.expected b/test/ic3/integer_eq.ret.expected
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/test/ic3/integer_eq.ret.expected
@@ -0,0 +1 @@
+0
diff --git a/test/ic3/integer_gt.in b/test/ic3/integer_gt.in
new file mode 100644
index 0000000..c27a0ab
--- /dev/null
+++ b/test/ic3/integer_gt.in
@@ -0,0 +1,800 @@
+quote -170141183460469231731687303715884105728 > -170141183460469231731687303715884105728
+-170141183460469231731687303715884105728 > -170141183460469231731687303715884105728
+quote -170141183460469231731687303715884105728 > -170141183460469231731687303715884105727
+-170141183460469231731687303715884105728 > -170141183460469231731687303715884105727
+quote -170141183460469231731687303715884105728 > -9223372036854775808
+-170141183460469231731687303715884105728 > -9223372036854775808
+quote -170141183460469231731687303715884105728 > -9223372036854775807
+-170141183460469231731687303715884105728 > -9223372036854775807
+quote -170141183460469231731687303715884105728 > -2147483648
+-170141183460469231731687303715884105728 > -2147483648
+quote -170141183460469231731687303715884105728 > -2147483647
+-170141183460469231731687303715884105728 > -2147483647
+quote -170141183460469231731687303715884105728 > -32768
+-170141183460469231731687303715884105728 > -32768
+quote -170141183460469231731687303715884105728 > -32767
+-170141183460469231731687303715884105728 > -32767
+quote -170141183460469231731687303715884105728 > -128
+-170141183460469231731687303715884105728 > -128
+quote -170141183460469231731687303715884105728 > -127
+-170141183460469231731687303715884105728 > -127
+quote -170141183460469231731687303715884105728 > 255
+-170141183460469231731687303715884105728 > 255
+quote -170141183460469231731687303715884105728 > 256
+-170141183460469231731687303715884105728 > 256
+quote -170141183460469231731687303715884105728 > 65535
+-170141183460469231731687303715884105728 > 65535
+quote -170141183460469231731687303715884105728 > 65536
+-170141183460469231731687303715884105728 > 65536
+quote -170141183460469231731687303715884105728 > 4294967295
+-170141183460469231731687303715884105728 > 4294967295
+quote -170141183460469231731687303715884105728 > 4294967296
+-170141183460469231731687303715884105728 > 4294967296
+quote -170141183460469231731687303715884105728 > 18446744073709551615
+-170141183460469231731687303715884105728 > 18446744073709551615
+quote -170141183460469231731687303715884105728 > 18446744073709551616
+-170141183460469231731687303715884105728 > 18446744073709551616
+quote -170141183460469231731687303715884105728 > 340282366920938463463374607431768211455
+-170141183460469231731687303715884105728 > 340282366920938463463374607431768211455
+quote -170141183460469231731687303715884105728 > 340282366920938463463374607431768211456
+-170141183460469231731687303715884105728 > 340282366920938463463374607431768211456
+quote -170141183460469231731687303715884105727 > -170141183460469231731687303715884105728
+-170141183460469231731687303715884105727 > -170141183460469231731687303715884105728
+quote -170141183460469231731687303715884105727 > -170141183460469231731687303715884105727
+-170141183460469231731687303715884105727 > -170141183460469231731687303715884105727
+quote -170141183460469231731687303715884105727 > -9223372036854775808
+-170141183460469231731687303715884105727 > -9223372036854775808
+quote -170141183460469231731687303715884105727 > -9223372036854775807
+-170141183460469231731687303715884105727 > -9223372036854775807
+quote -170141183460469231731687303715884105727 > -2147483648
+-170141183460469231731687303715884105727 > -2147483648
+quote -170141183460469231731687303715884105727 > -2147483647
+-170141183460469231731687303715884105727 > -2147483647
+quote -170141183460469231731687303715884105727 > -32768
+-170141183460469231731687303715884105727 > -32768
+quote -170141183460469231731687303715884105727 > -32767
+-170141183460469231731687303715884105727 > -32767
+quote -170141183460469231731687303715884105727 > -128
+-170141183460469231731687303715884105727 > -128
+quote -170141183460469231731687303715884105727 > -127
+-170141183460469231731687303715884105727 > -127
+quote -170141183460469231731687303715884105727 > 255
+-170141183460469231731687303715884105727 > 255
+quote -170141183460469231731687303715884105727 > 256
+-170141183460469231731687303715884105727 > 256
+quote -170141183460469231731687303715884105727 > 65535
+-170141183460469231731687303715884105727 > 65535
+quote -170141183460469231731687303715884105727 > 65536
+-170141183460469231731687303715884105727 > 65536
+quote -170141183460469231731687303715884105727 > 4294967295
+-170141183460469231731687303715884105727 > 4294967295
+quote -170141183460469231731687303715884105727 > 4294967296
+-170141183460469231731687303715884105727 > 4294967296
+quote -170141183460469231731687303715884105727 > 18446744073709551615
+-170141183460469231731687303715884105727 > 18446744073709551615
+quote -170141183460469231731687303715884105727 > 18446744073709551616
+-170141183460469231731687303715884105727 > 18446744073709551616
+quote -170141183460469231731687303715884105727 > 340282366920938463463374607431768211455
+-170141183460469231731687303715884105727 > 340282366920938463463374607431768211455
+quote -170141183460469231731687303715884105727 > 340282366920938463463374607431768211456
+-170141183460469231731687303715884105727 > 340282366920938463463374607431768211456
+quote -9223372036854775808 > -170141183460469231731687303715884105728
+-9223372036854775808 > -170141183460469231731687303715884105728
+quote -9223372036854775808 > -170141183460469231731687303715884105727
+-9223372036854775808 > -170141183460469231731687303715884105727
+quote -9223372036854775808 > -9223372036854775808
+-9223372036854775808 > -9223372036854775808
+quote -9223372036854775808 > -9223372036854775807
+-9223372036854775808 > -9223372036854775807
+quote -9223372036854775808 > -2147483648
+-9223372036854775808 > -2147483648
+quote -9223372036854775808 > -2147483647
+-9223372036854775808 > -2147483647
+quote -9223372036854775808 > -32768
+-9223372036854775808 > -32768
+quote -9223372036854775808 > -32767
+-9223372036854775808 > -32767
+quote -9223372036854775808 > -128
+-9223372036854775808 > -128
+quote -9223372036854775808 > -127
+-9223372036854775808 > -127
+quote -9223372036854775808 > 255
+-9223372036854775808 > 255
+quote -9223372036854775808 > 256
+-9223372036854775808 > 256
+quote -9223372036854775808 > 65535
+-9223372036854775808 > 65535
+quote -9223372036854775808 > 65536
+-9223372036854775808 > 65536
+quote -9223372036854775808 > 4294967295
+-9223372036854775808 > 4294967295
+quote -9223372036854775808 > 4294967296
+-9223372036854775808 > 4294967296
+quote -9223372036854775808 > 18446744073709551615
+-9223372036854775808 > 18446744073709551615
+quote -9223372036854775808 > 18446744073709551616
+-9223372036854775808 > 18446744073709551616
+quote -9223372036854775808 > 340282366920938463463374607431768211455
+-9223372036854775808 > 340282366920938463463374607431768211455
+quote -9223372036854775808 > 340282366920938463463374607431768211456
+-9223372036854775808 > 340282366920938463463374607431768211456
+quote -9223372036854775807 > -170141183460469231731687303715884105728
+-9223372036854775807 > -170141183460469231731687303715884105728
+quote -9223372036854775807 > -170141183460469231731687303715884105727
+-9223372036854775807 > -170141183460469231731687303715884105727
+quote -9223372036854775807 > -9223372036854775808
+-9223372036854775807 > -9223372036854775808
+quote -9223372036854775807 > -9223372036854775807
+-9223372036854775807 > -9223372036854775807
+quote -9223372036854775807 > -2147483648
+-9223372036854775807 > -2147483648
+quote -9223372036854775807 > -2147483647
+-9223372036854775807 > -2147483647
+quote -9223372036854775807 > -32768
+-9223372036854775807 > -32768
+quote -9223372036854775807 > -32767
+-9223372036854775807 > -32767
+quote -9223372036854775807 > -128
+-9223372036854775807 > -128
+quote -9223372036854775807 > -127
+-9223372036854775807 > -127
+quote -9223372036854775807 > 255
+-9223372036854775807 > 255
+quote -9223372036854775807 > 256
+-9223372036854775807 > 256
+quote -9223372036854775807 > 65535
+-9223372036854775807 > 65535
+quote -9223372036854775807 > 65536
+-9223372036854775807 > 65536
+quote -9223372036854775807 > 4294967295
+-9223372036854775807 > 4294967295
+quote -9223372036854775807 > 4294967296
+-9223372036854775807 > 4294967296
+quote -9223372036854775807 > 18446744073709551615
+-9223372036854775807 > 18446744073709551615
+quote -9223372036854775807 > 18446744073709551616
+-9223372036854775807 > 18446744073709551616
+quote -9223372036854775807 > 340282366920938463463374607431768211455
+-9223372036854775807 > 340282366920938463463374607431768211455
+quote -9223372036854775807 > 340282366920938463463374607431768211456
+-9223372036854775807 > 340282366920938463463374607431768211456
+quote -2147483648 > -170141183460469231731687303715884105728
+-2147483648 > -170141183460469231731687303715884105728
+quote -2147483648 > -170141183460469231731687303715884105727
+-2147483648 > -170141183460469231731687303715884105727
+quote -2147483648 > -9223372036854775808
+-2147483648 > -9223372036854775808
+quote -2147483648 > -9223372036854775807
+-2147483648 > -9223372036854775807
+quote -2147483648 > -2147483648
+-2147483648 > -2147483648
+quote -2147483648 > -2147483647
+-2147483648 > -2147483647
+quote -2147483648 > -32768
+-2147483648 > -32768
+quote -2147483648 > -32767
+-2147483648 > -32767
+quote -2147483648 > -128
+-2147483648 > -128
+quote -2147483648 > -127
+-2147483648 > -127
+quote -2147483648 > 255
+-2147483648 > 255
+quote -2147483648 > 256
+-2147483648 > 256
+quote -2147483648 > 65535
+-2147483648 > 65535
+quote -2147483648 > 65536
+-2147483648 > 65536
+quote -2147483648 > 4294967295
+-2147483648 > 4294967295
+quote -2147483648 > 4294967296
+-2147483648 > 4294967296
+quote -2147483648 > 18446744073709551615
+-2147483648 > 18446744073709551615
+quote -2147483648 > 18446744073709551616
+-2147483648 > 18446744073709551616
+quote -2147483648 > 340282366920938463463374607431768211455
+-2147483648 > 340282366920938463463374607431768211455
+quote -2147483648 > 340282366920938463463374607431768211456
+-2147483648 > 340282366920938463463374607431768211456
+quote -2147483647 > -170141183460469231731687303715884105728
+-2147483647 > -170141183460469231731687303715884105728
+quote -2147483647 > -170141183460469231731687303715884105727
+-2147483647 > -170141183460469231731687303715884105727
+quote -2147483647 > -9223372036854775808
+-2147483647 > -9223372036854775808
+quote -2147483647 > -9223372036854775807
+-2147483647 > -9223372036854775807
+quote -2147483647 > -2147483648
+-2147483647 > -2147483648
+quote -2147483647 > -2147483647
+-2147483647 > -2147483647
+quote -2147483647 > -32768
+-2147483647 > -32768
+quote -2147483647 > -32767
+-2147483647 > -32767
+quote -2147483647 > -128
+-2147483647 > -128
+quote -2147483647 > -127
+-2147483647 > -127
+quote -2147483647 > 255
+-2147483647 > 255
+quote -2147483647 > 256
+-2147483647 > 256
+quote -2147483647 > 65535
+-2147483647 > 65535
+quote -2147483647 > 65536
+-2147483647 > 65536
+quote -2147483647 > 4294967295
+-2147483647 > 4294967295
+quote -2147483647 > 4294967296
+-2147483647 > 4294967296
+quote -2147483647 > 18446744073709551615
+-2147483647 > 18446744073709551615
+quote -2147483647 > 18446744073709551616
+-2147483647 > 18446744073709551616
+quote -2147483647 > 340282366920938463463374607431768211455
+-2147483647 > 340282366920938463463374607431768211455
+quote -2147483647 > 340282366920938463463374607431768211456
+-2147483647 > 340282366920938463463374607431768211456
+quote -32768 > -170141183460469231731687303715884105728
+-32768 > -170141183460469231731687303715884105728
+quote -32768 > -170141183460469231731687303715884105727
+-32768 > -170141183460469231731687303715884105727
+quote -32768 > -9223372036854775808
+-32768 > -9223372036854775808
+quote -32768 > -9223372036854775807
+-32768 > -9223372036854775807
+quote -32768 > -2147483648
+-32768 > -2147483648
+quote -32768 > -2147483647
+-32768 > -2147483647
+quote -32768 > -32768
+-32768 > -32768
+quote -32768 > -32767
+-32768 > -32767
+quote -32768 > -128
+-32768 > -128
+quote -32768 > -127
+-32768 > -127
+quote -32768 > 255
+-32768 > 255
+quote -32768 > 256
+-32768 > 256
+quote -32768 > 65535
+-32768 > 65535
+quote -32768 > 65536
+-32768 > 65536
+quote -32768 > 4294967295
+-32768 > 4294967295
+quote -32768 > 4294967296
+-32768 > 4294967296
+quote -32768 > 18446744073709551615
+-32768 > 18446744073709551615
+quote -32768 > 18446744073709551616
+-32768 > 18446744073709551616
+quote -32768 > 340282366920938463463374607431768211455
+-32768 > 340282366920938463463374607431768211455
+quote -32768 > 340282366920938463463374607431768211456
+-32768 > 340282366920938463463374607431768211456
+quote -32767 > -170141183460469231731687303715884105728
+-32767 > -170141183460469231731687303715884105728
+quote -32767 > -170141183460469231731687303715884105727
+-32767 > -170141183460469231731687303715884105727
+quote -32767 > -9223372036854775808
+-32767 > -9223372036854775808
+quote -32767 > -9223372036854775807
+-32767 > -9223372036854775807
+quote -32767 > -2147483648
+-32767 > -2147483648
+quote -32767 > -2147483647
+-32767 > -2147483647
+quote -32767 > -32768
+-32767 > -32768
+quote -32767 > -32767
+-32767 > -32767
+quote -32767 > -128
+-32767 > -128
+quote -32767 > -127
+-32767 > -127
+quote -32767 > 255
+-32767 > 255
+quote -32767 > 256
+-32767 > 256
+quote -32767 > 65535
+-32767 > 65535
+quote -32767 > 65536
+-32767 > 65536
+quote -32767 > 4294967295
+-32767 > 4294967295
+quote -32767 > 4294967296
+-32767 > 4294967296
+quote -32767 > 18446744073709551615
+-32767 > 18446744073709551615
+quote -32767 > 18446744073709551616
+-32767 > 18446744073709551616
+quote -32767 > 340282366920938463463374607431768211455
+-32767 > 340282366920938463463374607431768211455
+quote -32767 > 340282366920938463463374607431768211456
+-32767 > 340282366920938463463374607431768211456
+quote -128 > -170141183460469231731687303715884105728
+-128 > -170141183460469231731687303715884105728
+quote -128 > -170141183460469231731687303715884105727
+-128 > -170141183460469231731687303715884105727
+quote -128 > -9223372036854775808
+-128 > -9223372036854775808
+quote -128 > -9223372036854775807
+-128 > -9223372036854775807
+quote -128 > -2147483648
+-128 > -2147483648
+quote -128 > -2147483647
+-128 > -2147483647
+quote -128 > -32768
+-128 > -32768
+quote -128 > -32767
+-128 > -32767
+quote -128 > -128
+-128 > -128
+quote -128 > -127
+-128 > -127
+quote -128 > 255
+-128 > 255
+quote -128 > 256
+-128 > 256
+quote -128 > 65535
+-128 > 65535
+quote -128 > 65536
+-128 > 65536
+quote -128 > 4294967295
+-128 > 4294967295
+quote -128 > 4294967296
+-128 > 4294967296
+quote -128 > 18446744073709551615
+-128 > 18446744073709551615
+quote -128 > 18446744073709551616
+-128 > 18446744073709551616
+quote -128 > 340282366920938463463374607431768211455
+-128 > 340282366920938463463374607431768211455
+quote -128 > 340282366920938463463374607431768211456
+-128 > 340282366920938463463374607431768211456
+quote -127 > -170141183460469231731687303715884105728
+-127 > -170141183460469231731687303715884105728
+quote -127 > -170141183460469231731687303715884105727
+-127 > -170141183460469231731687303715884105727
+quote -127 > -9223372036854775808
+-127 > -9223372036854775808
+quote -127 > -9223372036854775807
+-127 > -9223372036854775807
+quote -127 > -2147483648
+-127 > -2147483648
+quote -127 > -2147483647
+-127 > -2147483647
+quote -127 > -32768
+-127 > -32768
+quote -127 > -32767
+-127 > -32767
+quote -127 > -128
+-127 > -128
+quote -127 > -127
+-127 > -127
+quote -127 > 255
+-127 > 255
+quote -127 > 256
+-127 > 256
+quote -127 > 65535
+-127 > 65535
+quote -127 > 65536
+-127 > 65536
+quote -127 > 4294967295
+-127 > 4294967295
+quote -127 > 4294967296
+-127 > 4294967296
+quote -127 > 18446744073709551615
+-127 > 18446744073709551615
+quote -127 > 18446744073709551616
+-127 > 18446744073709551616
+quote -127 > 340282366920938463463374607431768211455
+-127 > 340282366920938463463374607431768211455
+quote -127 > 340282366920938463463374607431768211456
+-127 > 340282366920938463463374607431768211456
+quote 255 > -170141183460469231731687303715884105728
+255 > -170141183460469231731687303715884105728
+quote 255 > -170141183460469231731687303715884105727
+255 > -170141183460469231731687303715884105727
+quote 255 > -9223372036854775808
+255 > -9223372036854775808
+quote 255 > -9223372036854775807
+255 > -9223372036854775807
+quote 255 > -2147483648
+255 > -2147483648
+quote 255 > -2147483647
+255 > -2147483647
+quote 255 > -32768
+255 > -32768
+quote 255 > -32767
+255 > -32767
+quote 255 > -128
+255 > -128
+quote 255 > -127
+255 > -127
+quote 255 > 255
+255 > 255
+quote 255 > 256
+255 > 256
+quote 255 > 65535
+255 > 65535
+quote 255 > 65536
+255 > 65536
+quote 255 > 4294967295
+255 > 4294967295
+quote 255 > 4294967296
+255 > 4294967296
+quote 255 > 18446744073709551615
+255 > 18446744073709551615
+quote 255 > 18446744073709551616
+255 > 18446744073709551616
+quote 255 > 340282366920938463463374607431768211455
+255 > 340282366920938463463374607431768211455
+quote 255 > 340282366920938463463374607431768211456
+255 > 340282366920938463463374607431768211456
+quote 256 > -170141183460469231731687303715884105728
+256 > -170141183460469231731687303715884105728
+quote 256 > -170141183460469231731687303715884105727
+256 > -170141183460469231731687303715884105727
+quote 256 > -9223372036854775808
+256 > -9223372036854775808
+quote 256 > -9223372036854775807
+256 > -9223372036854775807
+quote 256 > -2147483648
+256 > -2147483648
+quote 256 > -2147483647
+256 > -2147483647
+quote 256 > -32768
+256 > -32768
+quote 256 > -32767
+256 > -32767
+quote 256 > -128
+256 > -128
+quote 256 > -127
+256 > -127
+quote 256 > 255
+256 > 255
+quote 256 > 256
+256 > 256
+quote 256 > 65535
+256 > 65535
+quote 256 > 65536
+256 > 65536
+quote 256 > 4294967295
+256 > 4294967295
+quote 256 > 4294967296
+256 > 4294967296
+quote 256 > 18446744073709551615
+256 > 18446744073709551615
+quote 256 > 18446744073709551616
+256 > 18446744073709551616
+quote 256 > 340282366920938463463374607431768211455
+256 > 340282366920938463463374607431768211455
+quote 256 > 340282366920938463463374607431768211456
+256 > 340282366920938463463374607431768211456
+quote 65535 > -170141183460469231731687303715884105728
+65535 > -170141183460469231731687303715884105728
+quote 65535 > -170141183460469231731687303715884105727
+65535 > -170141183460469231731687303715884105727
+quote 65535 > -9223372036854775808
+65535 > -9223372036854775808
+quote 65535 > -9223372036854775807
+65535 > -9223372036854775807
+quote 65535 > -2147483648
+65535 > -2147483648
+quote 65535 > -2147483647
+65535 > -2147483647
+quote 65535 > -32768
+65535 > -32768
+quote 65535 > -32767
+65535 > -32767
+quote 65535 > -128
+65535 > -128
+quote 65535 > -127
+65535 > -127
+quote 65535 > 255
+65535 > 255
+quote 65535 > 256
+65535 > 256
+quote 65535 > 65535
+65535 > 65535
+quote 65535 > 65536
+65535 > 65536
+quote 65535 > 4294967295
+65535 > 4294967295
+quote 65535 > 4294967296
+65535 > 4294967296
+quote 65535 > 18446744073709551615
+65535 > 18446744073709551615
+quote 65535 > 18446744073709551616
+65535 > 18446744073709551616
+quote 65535 > 340282366920938463463374607431768211455
+65535 > 340282366920938463463374607431768211455
+quote 65535 > 340282366920938463463374607431768211456
+65535 > 340282366920938463463374607431768211456
+quote 65536 > -170141183460469231731687303715884105728
+65536 > -170141183460469231731687303715884105728
+quote 65536 > -170141183460469231731687303715884105727
+65536 > -170141183460469231731687303715884105727
+quote 65536 > -9223372036854775808
+65536 > -9223372036854775808
+quote 65536 > -9223372036854775807
+65536 > -9223372036854775807
+quote 65536 > -2147483648
+65536 > -2147483648
+quote 65536 > -2147483647
+65536 > -2147483647
+quote 65536 > -32768
+65536 > -32768
+quote 65536 > -32767
+65536 > -32767
+quote 65536 > -128
+65536 > -128
+quote 65536 > -127
+65536 > -127
+quote 65536 > 255
+65536 > 255
+quote 65536 > 256
+65536 > 256
+quote 65536 > 65535
+65536 > 65535
+quote 65536 > 65536
+65536 > 65536
+quote 65536 > 4294967295
+65536 > 4294967295
+quote 65536 > 4294967296
+65536 > 4294967296
+quote 65536 > 18446744073709551615
+65536 > 18446744073709551615
+quote 65536 > 18446744073709551616
+65536 > 18446744073709551616
+quote 65536 > 340282366920938463463374607431768211455
+65536 > 340282366920938463463374607431768211455
+quote 65536 > 340282366920938463463374607431768211456
+65536 > 340282366920938463463374607431768211456
+quote 4294967295 > -170141183460469231731687303715884105728
+4294967295 > -170141183460469231731687303715884105728
+quote 4294967295 > -170141183460469231731687303715884105727
+4294967295 > -170141183460469231731687303715884105727
+quote 4294967295 > -9223372036854775808
+4294967295 > -9223372036854775808
+quote 4294967295 > -9223372036854775807
+4294967295 > -9223372036854775807
+quote 4294967295 > -2147483648
+4294967295 > -2147483648
+quote 4294967295 > -2147483647
+4294967295 > -2147483647
+quote 4294967295 > -32768
+4294967295 > -32768
+quote 4294967295 > -32767
+4294967295 > -32767
+quote 4294967295 > -128
+4294967295 > -128
+quote 4294967295 > -127
+4294967295 > -127
+quote 4294967295 > 255
+4294967295 > 255
+quote 4294967295 > 256
+4294967295 > 256
+quote 4294967295 > 65535
+4294967295 > 65535
+quote 4294967295 > 65536
+4294967295 > 65536
+quote 4294967295 > 4294967295
+4294967295 > 4294967295
+quote 4294967295 > 4294967296
+4294967295 > 4294967296
+quote 4294967295 > 18446744073709551615
+4294967295 > 18446744073709551615
+quote 4294967295 > 18446744073709551616
+4294967295 > 18446744073709551616
+quote 4294967295 > 340282366920938463463374607431768211455
+4294967295 > 340282366920938463463374607431768211455
+quote 4294967295 > 340282366920938463463374607431768211456
+4294967295 > 340282366920938463463374607431768211456
+quote 4294967296 > -170141183460469231731687303715884105728
+4294967296 > -170141183460469231731687303715884105728
+quote 4294967296 > -170141183460469231731687303715884105727
+4294967296 > -170141183460469231731687303715884105727
+quote 4294967296 > -9223372036854775808
+4294967296 > -9223372036854775808
+quote 4294967296 > -9223372036854775807
+4294967296 > -9223372036854775807
+quote 4294967296 > -2147483648
+4294967296 > -2147483648
+quote 4294967296 > -2147483647
+4294967296 > -2147483647
+quote 4294967296 > -32768
+4294967296 > -32768
+quote 4294967296 > -32767
+4294967296 > -32767
+quote 4294967296 > -128
+4294967296 > -128
+quote 4294967296 > -127
+4294967296 > -127
+quote 4294967296 > 255
+4294967296 > 255
+quote 4294967296 > 256
+4294967296 > 256
+quote 4294967296 > 65535
+4294967296 > 65535
+quote 4294967296 > 65536
+4294967296 > 65536
+quote 4294967296 > 4294967295
+4294967296 > 4294967295
+quote 4294967296 > 4294967296
+4294967296 > 4294967296
+quote 4294967296 > 18446744073709551615
+4294967296 > 18446744073709551615
+quote 4294967296 > 18446744073709551616
+4294967296 > 18446744073709551616
+quote 4294967296 > 340282366920938463463374607431768211455
+4294967296 > 340282366920938463463374607431768211455
+quote 4294967296 > 340282366920938463463374607431768211456
+4294967296 > 340282366920938463463374607431768211456
+quote 18446744073709551615 > -170141183460469231731687303715884105728
+18446744073709551615 > -170141183460469231731687303715884105728
+quote 18446744073709551615 > -170141183460469231731687303715884105727
+18446744073709551615 > -170141183460469231731687303715884105727
+quote 18446744073709551615 > -9223372036854775808
+18446744073709551615 > -9223372036854775808
+quote 18446744073709551615 > -9223372036854775807
+18446744073709551615 > -9223372036854775807
+quote 18446744073709551615 > -2147483648
+18446744073709551615 > -2147483648
+quote 18446744073709551615 > -2147483647
+18446744073709551615 > -2147483647
+quote 18446744073709551615 > -32768
+18446744073709551615 > -32768
+quote 18446744073709551615 > -32767
+18446744073709551615 > -32767
+quote 18446744073709551615 > -128
+18446744073709551615 > -128
+quote 18446744073709551615 > -127
+18446744073709551615 > -127
+quote 18446744073709551615 > 255
+18446744073709551615 > 255
+quote 18446744073709551615 > 256
+18446744073709551615 > 256
+quote 18446744073709551615 > 65535
+18446744073709551615 > 65535
+quote 18446744073709551615 > 65536
+18446744073709551615 > 65536
+quote 18446744073709551615 > 4294967295
+18446744073709551615 > 4294967295
+quote 18446744073709551615 > 4294967296
+18446744073709551615 > 4294967296
+quote 18446744073709551615 > 18446744073709551615
+18446744073709551615 > 18446744073709551615
+quote 18446744073709551615 > 18446744073709551616
+18446744073709551615 > 18446744073709551616
+quote 18446744073709551615 > 340282366920938463463374607431768211455
+18446744073709551615 > 340282366920938463463374607431768211455
+quote 18446744073709551615 > 340282366920938463463374607431768211456
+18446744073709551615 > 340282366920938463463374607431768211456
+quote 18446744073709551616 > -170141183460469231731687303715884105728
+18446744073709551616 > -170141183460469231731687303715884105728
+quote 18446744073709551616 > -170141183460469231731687303715884105727
+18446744073709551616 > -170141183460469231731687303715884105727
+quote 18446744073709551616 > -9223372036854775808
+18446744073709551616 > -9223372036854775808
+quote 18446744073709551616 > -9223372036854775807
+18446744073709551616 > -9223372036854775807
+quote 18446744073709551616 > -2147483648
+18446744073709551616 > -2147483648
+quote 18446744073709551616 > -2147483647
+18446744073709551616 > -2147483647
+quote 18446744073709551616 > -32768
+18446744073709551616 > -32768
+quote 18446744073709551616 > -32767
+18446744073709551616 > -32767
+quote 18446744073709551616 > -128
+18446744073709551616 > -128
+quote 18446744073709551616 > -127
+18446744073709551616 > -127
+quote 18446744073709551616 > 255
+18446744073709551616 > 255
+quote 18446744073709551616 > 256
+18446744073709551616 > 256
+quote 18446744073709551616 > 65535
+18446744073709551616 > 65535
+quote 18446744073709551616 > 65536
+18446744073709551616 > 65536
+quote 18446744073709551616 > 4294967295
+18446744073709551616 > 4294967295
+quote 18446744073709551616 > 4294967296
+18446744073709551616 > 4294967296
+quote 18446744073709551616 > 18446744073709551615
+18446744073709551616 > 18446744073709551615
+quote 18446744073709551616 > 18446744073709551616
+18446744073709551616 > 18446744073709551616
+quote 18446744073709551616 > 340282366920938463463374607431768211455
+18446744073709551616 > 340282366920938463463374607431768211455
+quote 18446744073709551616 > 340282366920938463463374607431768211456
+18446744073709551616 > 340282366920938463463374607431768211456
+quote 340282366920938463463374607431768211455 > -170141183460469231731687303715884105728
+340282366920938463463374607431768211455 > -170141183460469231731687303715884105728
+quote 340282366920938463463374607431768211455 > -170141183460469231731687303715884105727
+340282366920938463463374607431768211455 > -170141183460469231731687303715884105727
+quote 340282366920938463463374607431768211455 > -9223372036854775808
+340282366920938463463374607431768211455 > -9223372036854775808
+quote 340282366920938463463374607431768211455 > -9223372036854775807
+340282366920938463463374607431768211455 > -9223372036854775807
+quote 340282366920938463463374607431768211455 > -2147483648
+340282366920938463463374607431768211455 > -2147483648
+quote 340282366920938463463374607431768211455 > -2147483647
+340282366920938463463374607431768211455 > -2147483647
+quote 340282366920938463463374607431768211455 > -32768
+340282366920938463463374607431768211455 > -32768
+quote 340282366920938463463374607431768211455 > -32767
+340282366920938463463374607431768211455 > -32767
+quote 340282366920938463463374607431768211455 > -128
+340282366920938463463374607431768211455 > -128
+quote 340282366920938463463374607431768211455 > -127
+340282366920938463463374607431768211455 > -127
+quote 340282366920938463463374607431768211455 > 255
+340282366920938463463374607431768211455 > 255
+quote 340282366920938463463374607431768211455 > 256
+340282366920938463463374607431768211455 > 256
+quote 340282366920938463463374607431768211455 > 65535
+340282366920938463463374607431768211455 > 65535
+quote 340282366920938463463374607431768211455 > 65536
+340282366920938463463374607431768211455 > 65536
+quote 340282366920938463463374607431768211455 > 4294967295
+340282366920938463463374607431768211455 > 4294967295
+quote 340282366920938463463374607431768211455 > 4294967296
+340282366920938463463374607431768211455 > 4294967296
+quote 340282366920938463463374607431768211455 > 18446744073709551615
+340282366920938463463374607431768211455 > 18446744073709551615
+quote 340282366920938463463374607431768211455 > 18446744073709551616
+340282366920938463463374607431768211455 > 18446744073709551616
+quote 340282366920938463463374607431768211455 > 340282366920938463463374607431768211455
+340282366920938463463374607431768211455 > 340282366920938463463374607431768211455
+quote 340282366920938463463374607431768211455 > 340282366920938463463374607431768211456
+340282366920938463463374607431768211455 > 340282366920938463463374607431768211456
+quote 340282366920938463463374607431768211456 > -170141183460469231731687303715884105728
+340282366920938463463374607431768211456 > -170141183460469231731687303715884105728
+quote 340282366920938463463374607431768211456 > -170141183460469231731687303715884105727
+340282366920938463463374607431768211456 > -170141183460469231731687303715884105727
+quote 340282366920938463463374607431768211456 > -9223372036854775808
+340282366920938463463374607431768211456 > -9223372036854775808
+quote 340282366920938463463374607431768211456 > -9223372036854775807
+340282366920938463463374607431768211456 > -9223372036854775807
+quote 340282366920938463463374607431768211456 > -2147483648
+340282366920938463463374607431768211456 > -2147483648
+quote 340282366920938463463374607431768211456 > -2147483647
+340282366920938463463374607431768211456 > -2147483647
+quote 340282366920938463463374607431768211456 > -32768
+340282366920938463463374607431768211456 > -32768
+quote 340282366920938463463374607431768211456 > -32767
+340282366920938463463374607431768211456 > -32767
+quote 340282366920938463463374607431768211456 > -128
+340282366920938463463374607431768211456 > -128
+quote 340282366920938463463374607431768211456 > -127
+340282366920938463463374607431768211456 > -127
+quote 340282366920938463463374607431768211456 > 255
+340282366920938463463374607431768211456 > 255
+quote 340282366920938463463374607431768211456 > 256
+340282366920938463463374607431768211456 > 256
+quote 340282366920938463463374607431768211456 > 65535
+340282366920938463463374607431768211456 > 65535
+quote 340282366920938463463374607431768211456 > 65536
+340282366920938463463374607431768211456 > 65536
+quote 340282366920938463463374607431768211456 > 4294967295
+340282366920938463463374607431768211456 > 4294967295
+quote 340282366920938463463374607431768211456 > 4294967296
+340282366920938463463374607431768211456 > 4294967296
+quote 340282366920938463463374607431768211456 > 18446744073709551615
+340282366920938463463374607431768211456 > 18446744073709551615
+quote 340282366920938463463374607431768211456 > 18446744073709551616
+340282366920938463463374607431768211456 > 18446744073709551616
+quote 340282366920938463463374607431768211456 > 340282366920938463463374607431768211455
+340282366920938463463374607431768211456 > 340282366920938463463374607431768211455
+quote 340282366920938463463374607431768211456 > 340282366920938463463374607431768211456
+340282366920938463463374607431768211456 > 340282366920938463463374607431768211456
diff --git a/test/ic3/integer_gt.out.expected b/test/ic3/integer_gt.out.expected
new file mode 100644
index 0000000..57daf68
--- /dev/null
+++ b/test/ic3/integer_gt.out.expected
@@ -0,0 +1,800 @@
+-170141183460469231731687303715884105728 > -170141183460469231731687303715884105728
+false
+-170141183460469231731687303715884105728 > -170141183460469231731687303715884105727
+false
+-170141183460469231731687303715884105728 > -9223372036854775808
+false
+-170141183460469231731687303715884105728 > -9223372036854775807
+false
+-170141183460469231731687303715884105728 > -2147483648
+false
+-170141183460469231731687303715884105728 > -2147483647
+false
+-170141183460469231731687303715884105728 > -32768
+false
+-170141183460469231731687303715884105728 > -32767
+false
+-170141183460469231731687303715884105728 > -128
+false
+-170141183460469231731687303715884105728 > -127
+false
+-170141183460469231731687303715884105728 > 255
+false
+-170141183460469231731687303715884105728 > 256
+false
+-170141183460469231731687303715884105728 > 65535
+false
+-170141183460469231731687303715884105728 > 65536
+false
+-170141183460469231731687303715884105728 > 4294967295
+false
+-170141183460469231731687303715884105728 > 4294967296
+false
+-170141183460469231731687303715884105728 > 18446744073709551615
+false
+-170141183460469231731687303715884105728 > 18446744073709551616
+false
+-170141183460469231731687303715884105728 > 340282366920938463463374607431768211455
+false
+-170141183460469231731687303715884105728 > 340282366920938463463374607431768211456
+false
+-170141183460469231731687303715884105727 > -170141183460469231731687303715884105728
+true
+-170141183460469231731687303715884105727 > -170141183460469231731687303715884105727
+false
+-170141183460469231731687303715884105727 > -9223372036854775808
+false
+-170141183460469231731687303715884105727 > -9223372036854775807
+false
+-170141183460469231731687303715884105727 > -2147483648
+false
+-170141183460469231731687303715884105727 > -2147483647
+false
+-170141183460469231731687303715884105727 > -32768
+false
+-170141183460469231731687303715884105727 > -32767
+false
+-170141183460469231731687303715884105727 > -128
+false
+-170141183460469231731687303715884105727 > -127
+false
+-170141183460469231731687303715884105727 > 255
+false
+-170141183460469231731687303715884105727 > 256
+false
+-170141183460469231731687303715884105727 > 65535
+false
+-170141183460469231731687303715884105727 > 65536
+false
+-170141183460469231731687303715884105727 > 4294967295
+false
+-170141183460469231731687303715884105727 > 4294967296
+false
+-170141183460469231731687303715884105727 > 18446744073709551615
+false
+-170141183460469231731687303715884105727 > 18446744073709551616
+false
+-170141183460469231731687303715884105727 > 340282366920938463463374607431768211455
+false
+-170141183460469231731687303715884105727 > 340282366920938463463374607431768211456
+false
+-9223372036854775808 > -170141183460469231731687303715884105728
+true
+-9223372036854775808 > -170141183460469231731687303715884105727
+true
+-9223372036854775808 > -9223372036854775808
+false
+-9223372036854775808 > -9223372036854775807
+false
+-9223372036854775808 > -2147483648
+false
+-9223372036854775808 > -2147483647
+false
+-9223372036854775808 > -32768
+false
+-9223372036854775808 > -32767
+false
+-9223372036854775808 > -128
+false
+-9223372036854775808 > -127
+false
+-9223372036854775808 > 255
+false
+-9223372036854775808 > 256
+false
+-9223372036854775808 > 65535
+false
+-9223372036854775808 > 65536
+false
+-9223372036854775808 > 4294967295
+false
+-9223372036854775808 > 4294967296
+false
+-9223372036854775808 > 18446744073709551615
+false
+-9223372036854775808 > 18446744073709551616
+false
+-9223372036854775808 > 340282366920938463463374607431768211455
+false
+-9223372036854775808 > 340282366920938463463374607431768211456
+false
+-9223372036854775807 > -170141183460469231731687303715884105728
+true
+-9223372036854775807 > -170141183460469231731687303715884105727
+true
+-9223372036854775807 > -9223372036854775808
+true
+-9223372036854775807 > -9223372036854775807
+false
+-9223372036854775807 > -2147483648
+false
+-9223372036854775807 > -2147483647
+false
+-9223372036854775807 > -32768
+false
+-9223372036854775807 > -32767
+false
+-9223372036854775807 > -128
+false
+-9223372036854775807 > -127
+false
+-9223372036854775807 > 255
+false
+-9223372036854775807 > 256
+false
+-9223372036854775807 > 65535
+false
+-9223372036854775807 > 65536
+false
+-9223372036854775807 > 4294967295
+false
+-9223372036854775807 > 4294967296
+false
+-9223372036854775807 > 18446744073709551615
+false
+-9223372036854775807 > 18446744073709551616
+false
+-9223372036854775807 > 340282366920938463463374607431768211455
+false
+-9223372036854775807 > 340282366920938463463374607431768211456
+false
+-2147483648 > -170141183460469231731687303715884105728
+true
+-2147483648 > -170141183460469231731687303715884105727
+true
+-2147483648 > -9223372036854775808
+true
+-2147483648 > -9223372036854775807
+true
+-2147483648 > -2147483648
+false
+-2147483648 > -2147483647
+false
+-2147483648 > -32768
+false
+-2147483648 > -32767
+false
+-2147483648 > -128
+false
+-2147483648 > -127
+false
+-2147483648 > 255
+false
+-2147483648 > 256
+false
+-2147483648 > 65535
+false
+-2147483648 > 65536
+false
+-2147483648 > 4294967295
+false
+-2147483648 > 4294967296
+false
+-2147483648 > 18446744073709551615
+false
+-2147483648 > 18446744073709551616
+false
+-2147483648 > 340282366920938463463374607431768211455
+false
+-2147483648 > 340282366920938463463374607431768211456
+false
+-2147483647 > -170141183460469231731687303715884105728
+true
+-2147483647 > -170141183460469231731687303715884105727
+true
+-2147483647 > -9223372036854775808
+true
+-2147483647 > -9223372036854775807
+true
+-2147483647 > -2147483648
+true
+-2147483647 > -2147483647
+false
+-2147483647 > -32768
+false
+-2147483647 > -32767
+false
+-2147483647 > -128
+false
+-2147483647 > -127
+false
+-2147483647 > 255
+false
+-2147483647 > 256
+false
+-2147483647 > 65535
+false
+-2147483647 > 65536
+false
+-2147483647 > 4294967295
+false
+-2147483647 > 4294967296
+false
+-2147483647 > 18446744073709551615
+false
+-2147483647 > 18446744073709551616
+false
+-2147483647 > 340282366920938463463374607431768211455
+false
+-2147483647 > 340282366920938463463374607431768211456
+false
+-32768 > -170141183460469231731687303715884105728
+true
+-32768 > -170141183460469231731687303715884105727
+true
+-32768 > -9223372036854775808
+true
+-32768 > -9223372036854775807
+true
+-32768 > -2147483648
+true
+-32768 > -2147483647
+true
+-32768 > -32768
+false
+-32768 > -32767
+false
+-32768 > -128
+false
+-32768 > -127
+false
+-32768 > 255
+false
+-32768 > 256
+false
+-32768 > 65535
+false
+-32768 > 65536
+false
+-32768 > 4294967295
+false
+-32768 > 4294967296
+false
+-32768 > 18446744073709551615
+false
+-32768 > 18446744073709551616
+false
+-32768 > 340282366920938463463374607431768211455
+false
+-32768 > 340282366920938463463374607431768211456
+false
+-32767 > -170141183460469231731687303715884105728
+true
+-32767 > -170141183460469231731687303715884105727
+true
+-32767 > -9223372036854775808
+true
+-32767 > -9223372036854775807
+true
+-32767 > -2147483648
+true
+-32767 > -2147483647
+true
+-32767 > -32768
+true
+-32767 > -32767
+false
+-32767 > -128
+false
+-32767 > -127
+false
+-32767 > 255
+false
+-32767 > 256
+false
+-32767 > 65535
+false
+-32767 > 65536
+false
+-32767 > 4294967295
+false
+-32767 > 4294967296
+false
+-32767 > 18446744073709551615
+false
+-32767 > 18446744073709551616
+false
+-32767 > 340282366920938463463374607431768211455
+false
+-32767 > 340282366920938463463374607431768211456
+false
+-128 > -170141183460469231731687303715884105728
+true
+-128 > -170141183460469231731687303715884105727
+true
+-128 > -9223372036854775808
+true
+-128 > -9223372036854775807
+true
+-128 > -2147483648
+true
+-128 > -2147483647
+true
+-128 > -32768
+true
+-128 > -32767
+true
+-128 > -128
+false
+-128 > -127
+false
+-128 > 255
+false
+-128 > 256
+false
+-128 > 65535
+false
+-128 > 65536
+false
+-128 > 4294967295
+false
+-128 > 4294967296
+false
+-128 > 18446744073709551615
+false
+-128 > 18446744073709551616
+false
+-128 > 340282366920938463463374607431768211455
+false
+-128 > 340282366920938463463374607431768211456
+false
+-127 > -170141183460469231731687303715884105728
+true
+-127 > -170141183460469231731687303715884105727
+true
+-127 > -9223372036854775808
+true
+-127 > -9223372036854775807
+true
+-127 > -2147483648
+true
+-127 > -2147483647
+true
+-127 > -32768
+true
+-127 > -32767
+true
+-127 > -128
+true
+-127 > -127
+false
+-127 > 255
+false
+-127 > 256
+false
+-127 > 65535
+false
+-127 > 65536
+false
+-127 > 4294967295
+false
+-127 > 4294967296
+false
+-127 > 18446744073709551615
+false
+-127 > 18446744073709551616
+false
+-127 > 340282366920938463463374607431768211455
+false
+-127 > 340282366920938463463374607431768211456
+false
+255 > -170141183460469231731687303715884105728
+true
+255 > -170141183460469231731687303715884105727
+true
+255 > -9223372036854775808
+true
+255 > -9223372036854775807
+true
+255 > -2147483648
+true
+255 > -2147483647
+true
+255 > -32768
+true
+255 > -32767
+true
+255 > -128
+true
+255 > -127
+true
+255 > 255
+false
+255 > 256
+false
+255 > 65535
+false
+255 > 65536
+false
+255 > 4294967295
+false
+255 > 4294967296
+false
+255 > 18446744073709551615
+false
+255 > 18446744073709551616
+false
+255 > 340282366920938463463374607431768211455
+false
+255 > 340282366920938463463374607431768211456
+false
+256 > -170141183460469231731687303715884105728
+true
+256 > -170141183460469231731687303715884105727
+true
+256 > -9223372036854775808
+true
+256 > -9223372036854775807
+true
+256 > -2147483648
+true
+256 > -2147483647
+true
+256 > -32768
+true
+256 > -32767
+true
+256 > -128
+true
+256 > -127
+true
+256 > 255
+true
+256 > 256
+false
+256 > 65535
+false
+256 > 65536
+false
+256 > 4294967295
+false
+256 > 4294967296
+false
+256 > 18446744073709551615
+false
+256 > 18446744073709551616
+false
+256 > 340282366920938463463374607431768211455
+false
+256 > 340282366920938463463374607431768211456
+false
+65535 > -170141183460469231731687303715884105728
+true
+65535 > -170141183460469231731687303715884105727
+true
+65535 > -9223372036854775808
+true
+65535 > -9223372036854775807
+true
+65535 > -2147483648
+true
+65535 > -2147483647
+true
+65535 > -32768
+true
+65535 > -32767
+true
+65535 > -128
+true
+65535 > -127
+true
+65535 > 255
+true
+65535 > 256
+true
+65535 > 65535
+false
+65535 > 65536
+false
+65535 > 4294967295
+false
+65535 > 4294967296
+false
+65535 > 18446744073709551615
+false
+65535 > 18446744073709551616
+false
+65535 > 340282366920938463463374607431768211455
+false
+65535 > 340282366920938463463374607431768211456
+false
+65536 > -170141183460469231731687303715884105728
+true
+65536 > -170141183460469231731687303715884105727
+true
+65536 > -9223372036854775808
+true
+65536 > -9223372036854775807
+true
+65536 > -2147483648
+true
+65536 > -2147483647
+true
+65536 > -32768
+true
+65536 > -32767
+true
+65536 > -128
+true
+65536 > -127
+true
+65536 > 255
+true
+65536 > 256
+true
+65536 > 65535
+true
+65536 > 65536
+false
+65536 > 4294967295
+false
+65536 > 4294967296
+false
+65536 > 18446744073709551615
+false
+65536 > 18446744073709551616
+false
+65536 > 340282366920938463463374607431768211455
+false
+65536 > 340282366920938463463374607431768211456
+false
+4294967295 > -170141183460469231731687303715884105728
+true
+4294967295 > -170141183460469231731687303715884105727
+true
+4294967295 > -9223372036854775808
+true
+4294967295 > -9223372036854775807
+true
+4294967295 > -2147483648
+true
+4294967295 > -2147483647
+true
+4294967295 > -32768
+true
+4294967295 > -32767
+true
+4294967295 > -128
+true
+4294967295 > -127
+true
+4294967295 > 255
+true
+4294967295 > 256
+true
+4294967295 > 65535
+true
+4294967295 > 65536
+true
+4294967295 > 4294967295
+false
+4294967295 > 4294967296
+false
+4294967295 > 18446744073709551615
+false
+4294967295 > 18446744073709551616
+false
+4294967295 > 340282366920938463463374607431768211455
+false
+4294967295 > 340282366920938463463374607431768211456
+false
+4294967296 > -170141183460469231731687303715884105728
+true
+4294967296 > -170141183460469231731687303715884105727
+true
+4294967296 > -9223372036854775808
+true
+4294967296 > -9223372036854775807
+true
+4294967296 > -2147483648
+true
+4294967296 > -2147483647
+true
+4294967296 > -32768
+true
+4294967296 > -32767
+true
+4294967296 > -128
+true
+4294967296 > -127
+true
+4294967296 > 255
+true
+4294967296 > 256
+true
+4294967296 > 65535
+true
+4294967296 > 65536
+true
+4294967296 > 4294967295
+true
+4294967296 > 4294967296
+false
+4294967296 > 18446744073709551615
+false
+4294967296 > 18446744073709551616
+false
+4294967296 > 340282366920938463463374607431768211455
+false
+4294967296 > 340282366920938463463374607431768211456
+false
+18446744073709551615 > -170141183460469231731687303715884105728
+true
+18446744073709551615 > -170141183460469231731687303715884105727
+true
+18446744073709551615 > -9223372036854775808
+true
+18446744073709551615 > -9223372036854775807
+true
+18446744073709551615 > -2147483648
+true
+18446744073709551615 > -2147483647
+true
+18446744073709551615 > -32768
+true
+18446744073709551615 > -32767
+true
+18446744073709551615 > -128
+true
+18446744073709551615 > -127
+true
+18446744073709551615 > 255
+true
+18446744073709551615 > 256
+true
+18446744073709551615 > 65535
+true
+18446744073709551615 > 65536
+true
+18446744073709551615 > 4294967295
+true
+18446744073709551615 > 4294967296
+true
+18446744073709551615 > 18446744073709551615
+false
+18446744073709551615 > 18446744073709551616
+false
+18446744073709551615 > 340282366920938463463374607431768211455
+false
+18446744073709551615 > 340282366920938463463374607431768211456
+false
+18446744073709551616 > -170141183460469231731687303715884105728
+true
+18446744073709551616 > -170141183460469231731687303715884105727
+true
+18446744073709551616 > -9223372036854775808
+true
+18446744073709551616 > -9223372036854775807
+true
+18446744073709551616 > -2147483648
+true
+18446744073709551616 > -2147483647
+true
+18446744073709551616 > -32768
+true
+18446744073709551616 > -32767
+true
+18446744073709551616 > -128
+true
+18446744073709551616 > -127
+true
+18446744073709551616 > 255
+true
+18446744073709551616 > 256
+true
+18446744073709551616 > 65535
+true
+18446744073709551616 > 65536
+true
+18446744073709551616 > 4294967295
+true
+18446744073709551616 > 4294967296
+true
+18446744073709551616 > 18446744073709551615
+true
+18446744073709551616 > 18446744073709551616
+false
+18446744073709551616 > 340282366920938463463374607431768211455
+false
+18446744073709551616 > 340282366920938463463374607431768211456
+false
+340282366920938463463374607431768211455 > -170141183460469231731687303715884105728
+true
+340282366920938463463374607431768211455 > -170141183460469231731687303715884105727
+true
+340282366920938463463374607431768211455 > -9223372036854775808
+true
+340282366920938463463374607431768211455 > -9223372036854775807
+true
+340282366920938463463374607431768211455 > -2147483648
+true
+340282366920938463463374607431768211455 > -2147483647
+true
+340282366920938463463374607431768211455 > -32768
+true
+340282366920938463463374607431768211455 > -32767
+true
+340282366920938463463374607431768211455 > -128
+true
+340282366920938463463374607431768211455 > -127
+true
+340282366920938463463374607431768211455 > 255
+true
+340282366920938463463374607431768211455 > 256
+true
+340282366920938463463374607431768211455 > 65535
+true
+340282366920938463463374607431768211455 > 65536
+true
+340282366920938463463374607431768211455 > 4294967295
+true
+340282366920938463463374607431768211455 > 4294967296
+true
+340282366920938463463374607431768211455 > 18446744073709551615
+true
+340282366920938463463374607431768211455 > 18446744073709551616
+true
+340282366920938463463374607431768211455 > 340282366920938463463374607431768211455
+false
+340282366920938463463374607431768211455 > 340282366920938463463374607431768211456
+false
+340282366920938463463374607431768211456 > -170141183460469231731687303715884105728
+true
+340282366920938463463374607431768211456 > -170141183460469231731687303715884105727
+true
+340282366920938463463374607431768211456 > -9223372036854775808
+true
+340282366920938463463374607431768211456 > -9223372036854775807
+true
+340282366920938463463374607431768211456 > -2147483648
+true
+340282366920938463463374607431768211456 > -2147483647
+true
+340282366920938463463374607431768211456 > -32768
+true
+340282366920938463463374607431768211456 > -32767
+true
+340282366920938463463374607431768211456 > -128
+true
+340282366920938463463374607431768211456 > -127
+true
+340282366920938463463374607431768211456 > 255
+true
+340282366920938463463374607431768211456 > 256
+true
+340282366920938463463374607431768211456 > 65535
+true
+340282366920938463463374607431768211456 > 65536
+true
+340282366920938463463374607431768211456 > 4294967295
+true
+340282366920938463463374607431768211456 > 4294967296
+true
+340282366920938463463374607431768211456 > 18446744073709551615
+true
+340282366920938463463374607431768211456 > 18446744073709551616
+true
+340282366920938463463374607431768211456 > 340282366920938463463374607431768211455
+true
+340282366920938463463374607431768211456 > 340282366920938463463374607431768211456
+false
diff --git a/test/ic3/integer_gt.ret.expected b/test/ic3/integer_gt.ret.expected
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/test/ic3/integer_gt.ret.expected
@@ -0,0 +1 @@
+0
diff --git a/test/ic3/integer_lt.in b/test/ic3/integer_lt.in
new file mode 100644
index 0000000..89f9c79
--- /dev/null
+++ b/test/ic3/integer_lt.in
@@ -0,0 +1,800 @@
+quote -170141183460469231731687303715884105728 < -170141183460469231731687303715884105728
+-170141183460469231731687303715884105728 < -170141183460469231731687303715884105728
+quote -170141183460469231731687303715884105728 < -170141183460469231731687303715884105727
+-170141183460469231731687303715884105728 < -170141183460469231731687303715884105727
+quote -170141183460469231731687303715884105728 < -9223372036854775808
+-170141183460469231731687303715884105728 < -9223372036854775808
+quote -170141183460469231731687303715884105728 < -9223372036854775807
+-170141183460469231731687303715884105728 < -9223372036854775807
+quote -170141183460469231731687303715884105728 < -2147483648
+-170141183460469231731687303715884105728 < -2147483648
+quote -170141183460469231731687303715884105728 < -2147483647
+-170141183460469231731687303715884105728 < -2147483647
+quote -170141183460469231731687303715884105728 < -32768
+-170141183460469231731687303715884105728 < -32768
+quote -170141183460469231731687303715884105728 < -32767
+-170141183460469231731687303715884105728 < -32767
+quote -170141183460469231731687303715884105728 < -128
+-170141183460469231731687303715884105728 < -128
+quote -170141183460469231731687303715884105728 < -127
+-170141183460469231731687303715884105728 < -127
+quote -170141183460469231731687303715884105728 < 255
+-170141183460469231731687303715884105728 < 255
+quote -170141183460469231731687303715884105728 < 256
+-170141183460469231731687303715884105728 < 256
+quote -170141183460469231731687303715884105728 < 65535
+-170141183460469231731687303715884105728 < 65535
+quote -170141183460469231731687303715884105728 < 65536
+-170141183460469231731687303715884105728 < 65536
+quote -170141183460469231731687303715884105728 < 4294967295
+-170141183460469231731687303715884105728 < 4294967295
+quote -170141183460469231731687303715884105728 < 4294967296
+-170141183460469231731687303715884105728 < 4294967296
+quote -170141183460469231731687303715884105728 < 18446744073709551615
+-170141183460469231731687303715884105728 < 18446744073709551615
+quote -170141183460469231731687303715884105728 < 18446744073709551616
+-170141183460469231731687303715884105728 < 18446744073709551616
+quote -170141183460469231731687303715884105728 < 340282366920938463463374607431768211455
+-170141183460469231731687303715884105728 < 340282366920938463463374607431768211455
+quote -170141183460469231731687303715884105728 < 340282366920938463463374607431768211456
+-170141183460469231731687303715884105728 < 340282366920938463463374607431768211456
+quote -170141183460469231731687303715884105727 < -170141183460469231731687303715884105728
+-170141183460469231731687303715884105727 < -170141183460469231731687303715884105728
+quote -170141183460469231731687303715884105727 < -170141183460469231731687303715884105727
+-170141183460469231731687303715884105727 < -170141183460469231731687303715884105727
+quote -170141183460469231731687303715884105727 < -9223372036854775808
+-170141183460469231731687303715884105727 < -9223372036854775808
+quote -170141183460469231731687303715884105727 < -9223372036854775807
+-170141183460469231731687303715884105727 < -9223372036854775807
+quote -170141183460469231731687303715884105727 < -2147483648
+-170141183460469231731687303715884105727 < -2147483648
+quote -170141183460469231731687303715884105727 < -2147483647
+-170141183460469231731687303715884105727 < -2147483647
+quote -170141183460469231731687303715884105727 < -32768
+-170141183460469231731687303715884105727 < -32768
+quote -170141183460469231731687303715884105727 < -32767
+-170141183460469231731687303715884105727 < -32767
+quote -170141183460469231731687303715884105727 < -128
+-170141183460469231731687303715884105727 < -128
+quote -170141183460469231731687303715884105727 < -127
+-170141183460469231731687303715884105727 < -127
+quote -170141183460469231731687303715884105727 < 255
+-170141183460469231731687303715884105727 < 255
+quote -170141183460469231731687303715884105727 < 256
+-170141183460469231731687303715884105727 < 256
+quote -170141183460469231731687303715884105727 < 65535
+-170141183460469231731687303715884105727 < 65535
+quote -170141183460469231731687303715884105727 < 65536
+-170141183460469231731687303715884105727 < 65536
+quote -170141183460469231731687303715884105727 < 4294967295
+-170141183460469231731687303715884105727 < 4294967295
+quote -170141183460469231731687303715884105727 < 4294967296
+-170141183460469231731687303715884105727 < 4294967296
+quote -170141183460469231731687303715884105727 < 18446744073709551615
+-170141183460469231731687303715884105727 < 18446744073709551615
+quote -170141183460469231731687303715884105727 < 18446744073709551616
+-170141183460469231731687303715884105727 < 18446744073709551616
+quote -170141183460469231731687303715884105727 < 340282366920938463463374607431768211455
+-170141183460469231731687303715884105727 < 340282366920938463463374607431768211455
+quote -170141183460469231731687303715884105727 < 340282366920938463463374607431768211456
+-170141183460469231731687303715884105727 < 340282366920938463463374607431768211456
+quote -9223372036854775808 < -170141183460469231731687303715884105728
+-9223372036854775808 < -170141183460469231731687303715884105728
+quote -9223372036854775808 < -170141183460469231731687303715884105727
+-9223372036854775808 < -170141183460469231731687303715884105727
+quote -9223372036854775808 < -9223372036854775808
+-9223372036854775808 < -9223372036854775808
+quote -9223372036854775808 < -9223372036854775807
+-9223372036854775808 < -9223372036854775807
+quote -9223372036854775808 < -2147483648
+-9223372036854775808 < -2147483648
+quote -9223372036854775808 < -2147483647
+-9223372036854775808 < -2147483647
+quote -9223372036854775808 < -32768
+-9223372036854775808 < -32768
+quote -9223372036854775808 < -32767
+-9223372036854775808 < -32767
+quote -9223372036854775808 < -128
+-9223372036854775808 < -128
+quote -9223372036854775808 < -127
+-9223372036854775808 < -127
+quote -9223372036854775808 < 255
+-9223372036854775808 < 255
+quote -9223372036854775808 < 256
+-9223372036854775808 < 256
+quote -9223372036854775808 < 65535
+-9223372036854775808 < 65535
+quote -9223372036854775808 < 65536
+-9223372036854775808 < 65536
+quote -9223372036854775808 < 4294967295
+-9223372036854775808 < 4294967295
+quote -9223372036854775808 < 4294967296
+-9223372036854775808 < 4294967296
+quote -9223372036854775808 < 18446744073709551615
+-9223372036854775808 < 18446744073709551615
+quote -9223372036854775808 < 18446744073709551616
+-9223372036854775808 < 18446744073709551616
+quote -9223372036854775808 < 340282366920938463463374607431768211455
+-9223372036854775808 < 340282366920938463463374607431768211455
+quote -9223372036854775808 < 340282366920938463463374607431768211456
+-9223372036854775808 < 340282366920938463463374607431768211456
+quote -9223372036854775807 < -170141183460469231731687303715884105728
+-9223372036854775807 < -170141183460469231731687303715884105728
+quote -9223372036854775807 < -170141183460469231731687303715884105727
+-9223372036854775807 < -170141183460469231731687303715884105727
+quote -9223372036854775807 < -9223372036854775808
+-9223372036854775807 < -9223372036854775808
+quote -9223372036854775807 < -9223372036854775807
+-9223372036854775807 < -9223372036854775807
+quote -9223372036854775807 < -2147483648
+-9223372036854775807 < -2147483648
+quote -9223372036854775807 < -2147483647
+-9223372036854775807 < -2147483647
+quote -9223372036854775807 < -32768
+-9223372036854775807 < -32768
+quote -9223372036854775807 < -32767
+-9223372036854775807 < -32767
+quote -9223372036854775807 < -128
+-9223372036854775807 < -128
+quote -9223372036854775807 < -127
+-9223372036854775807 < -127
+quote -9223372036854775807 < 255
+-9223372036854775807 < 255
+quote -9223372036854775807 < 256
+-9223372036854775807 < 256
+quote -9223372036854775807 < 65535
+-9223372036854775807 < 65535
+quote -9223372036854775807 < 65536
+-9223372036854775807 < 65536
+quote -9223372036854775807 < 4294967295
+-9223372036854775807 < 4294967295
+quote -9223372036854775807 < 4294967296
+-9223372036854775807 < 4294967296
+quote -9223372036854775807 < 18446744073709551615
+-9223372036854775807 < 18446744073709551615
+quote -9223372036854775807 < 18446744073709551616
+-9223372036854775807 < 18446744073709551616
+quote -9223372036854775807 < 340282366920938463463374607431768211455
+-9223372036854775807 < 340282366920938463463374607431768211455
+quote -9223372036854775807 < 340282366920938463463374607431768211456
+-9223372036854775807 < 340282366920938463463374607431768211456
+quote -2147483648 < -170141183460469231731687303715884105728
+-2147483648 < -170141183460469231731687303715884105728
+quote -2147483648 < -170141183460469231731687303715884105727
+-2147483648 < -170141183460469231731687303715884105727
+quote -2147483648 < -9223372036854775808
+-2147483648 < -9223372036854775808
+quote -2147483648 < -9223372036854775807
+-2147483648 < -9223372036854775807
+quote -2147483648 < -2147483648
+-2147483648 < -2147483648
+quote -2147483648 < -2147483647
+-2147483648 < -2147483647
+quote -2147483648 < -32768
+-2147483648 < -32768
+quote -2147483648 < -32767
+-2147483648 < -32767
+quote -2147483648 < -128
+-2147483648 < -128
+quote -2147483648 < -127
+-2147483648 < -127
+quote -2147483648 < 255
+-2147483648 < 255
+quote -2147483648 < 256
+-2147483648 < 256
+quote -2147483648 < 65535
+-2147483648 < 65535
+quote -2147483648 < 65536
+-2147483648 < 65536
+quote -2147483648 < 4294967295
+-2147483648 < 4294967295
+quote -2147483648 < 4294967296
+-2147483648 < 4294967296
+quote -2147483648 < 18446744073709551615
+-2147483648 < 18446744073709551615
+quote -2147483648 < 18446744073709551616
+-2147483648 < 18446744073709551616
+quote -2147483648 < 340282366920938463463374607431768211455
+-2147483648 < 340282366920938463463374607431768211455
+quote -2147483648 < 340282366920938463463374607431768211456
+-2147483648 < 340282366920938463463374607431768211456
+quote -2147483647 < -170141183460469231731687303715884105728
+-2147483647 < -170141183460469231731687303715884105728
+quote -2147483647 < -170141183460469231731687303715884105727
+-2147483647 < -170141183460469231731687303715884105727
+quote -2147483647 < -9223372036854775808
+-2147483647 < -9223372036854775808
+quote -2147483647 < -9223372036854775807
+-2147483647 < -9223372036854775807
+quote -2147483647 < -2147483648
+-2147483647 < -2147483648
+quote -2147483647 < -2147483647
+-2147483647 < -2147483647
+quote -2147483647 < -32768
+-2147483647 < -32768
+quote -2147483647 < -32767
+-2147483647 < -32767
+quote -2147483647 < -128
+-2147483647 < -128
+quote -2147483647 < -127
+-2147483647 < -127
+quote -2147483647 < 255
+-2147483647 < 255
+quote -2147483647 < 256
+-2147483647 < 256
+quote -2147483647 < 65535
+-2147483647 < 65535
+quote -2147483647 < 65536
+-2147483647 < 65536
+quote -2147483647 < 4294967295
+-2147483647 < 4294967295
+quote -2147483647 < 4294967296
+-2147483647 < 4294967296
+quote -2147483647 < 18446744073709551615
+-2147483647 < 18446744073709551615
+quote -2147483647 < 18446744073709551616
+-2147483647 < 18446744073709551616
+quote -2147483647 < 340282366920938463463374607431768211455
+-2147483647 < 340282366920938463463374607431768211455
+quote -2147483647 < 340282366920938463463374607431768211456
+-2147483647 < 340282366920938463463374607431768211456
+quote -32768 < -170141183460469231731687303715884105728
+-32768 < -170141183460469231731687303715884105728
+quote -32768 < -170141183460469231731687303715884105727
+-32768 < -170141183460469231731687303715884105727
+quote -32768 < -9223372036854775808
+-32768 < -9223372036854775808
+quote -32768 < -9223372036854775807
+-32768 < -9223372036854775807
+quote -32768 < -2147483648
+-32768 < -2147483648
+quote -32768 < -2147483647
+-32768 < -2147483647
+quote -32768 < -32768
+-32768 < -32768
+quote -32768 < -32767
+-32768 < -32767
+quote -32768 < -128
+-32768 < -128
+quote -32768 < -127
+-32768 < -127
+quote -32768 < 255
+-32768 < 255
+quote -32768 < 256
+-32768 < 256
+quote -32768 < 65535
+-32768 < 65535
+quote -32768 < 65536
+-32768 < 65536
+quote -32768 < 4294967295
+-32768 < 4294967295
+quote -32768 < 4294967296
+-32768 < 4294967296
+quote -32768 < 18446744073709551615
+-32768 < 18446744073709551615
+quote -32768 < 18446744073709551616
+-32768 < 18446744073709551616
+quote -32768 < 340282366920938463463374607431768211455
+-32768 < 340282366920938463463374607431768211455
+quote -32768 < 340282366920938463463374607431768211456
+-32768 < 340282366920938463463374607431768211456
+quote -32767 < -170141183460469231731687303715884105728
+-32767 < -170141183460469231731687303715884105728
+quote -32767 < -170141183460469231731687303715884105727
+-32767 < -170141183460469231731687303715884105727
+quote -32767 < -9223372036854775808
+-32767 < -9223372036854775808
+quote -32767 < -9223372036854775807
+-32767 < -9223372036854775807
+quote -32767 < -2147483648
+-32767 < -2147483648
+quote -32767 < -2147483647
+-32767 < -2147483647
+quote -32767 < -32768
+-32767 < -32768
+quote -32767 < -32767
+-32767 < -32767
+quote -32767 < -128
+-32767 < -128
+quote -32767 < -127
+-32767 < -127
+quote -32767 < 255
+-32767 < 255
+quote -32767 < 256
+-32767 < 256
+quote -32767 < 65535
+-32767 < 65535
+quote -32767 < 65536
+-32767 < 65536
+quote -32767 < 4294967295
+-32767 < 4294967295
+quote -32767 < 4294967296
+-32767 < 4294967296
+quote -32767 < 18446744073709551615
+-32767 < 18446744073709551615
+quote -32767 < 18446744073709551616
+-32767 < 18446744073709551616
+quote -32767 < 340282366920938463463374607431768211455
+-32767 < 340282366920938463463374607431768211455
+quote -32767 < 340282366920938463463374607431768211456
+-32767 < 340282366920938463463374607431768211456
+quote -128 < -170141183460469231731687303715884105728
+-128 < -170141183460469231731687303715884105728
+quote -128 < -170141183460469231731687303715884105727
+-128 < -170141183460469231731687303715884105727
+quote -128 < -9223372036854775808
+-128 < -9223372036854775808
+quote -128 < -9223372036854775807
+-128 < -9223372036854775807
+quote -128 < -2147483648
+-128 < -2147483648
+quote -128 < -2147483647
+-128 < -2147483647
+quote -128 < -32768
+-128 < -32768
+quote -128 < -32767
+-128 < -32767
+quote -128 < -128
+-128 < -128
+quote -128 < -127
+-128 < -127
+quote -128 < 255
+-128 < 255
+quote -128 < 256
+-128 < 256
+quote -128 < 65535
+-128 < 65535
+quote -128 < 65536
+-128 < 65536
+quote -128 < 4294967295
+-128 < 4294967295
+quote -128 < 4294967296
+-128 < 4294967296
+quote -128 < 18446744073709551615
+-128 < 18446744073709551615
+quote -128 < 18446744073709551616
+-128 < 18446744073709551616
+quote -128 < 340282366920938463463374607431768211455
+-128 < 340282366920938463463374607431768211455
+quote -128 < 340282366920938463463374607431768211456
+-128 < 340282366920938463463374607431768211456
+quote -127 < -170141183460469231731687303715884105728
+-127 < -170141183460469231731687303715884105728
+quote -127 < -170141183460469231731687303715884105727
+-127 < -170141183460469231731687303715884105727
+quote -127 < -9223372036854775808
+-127 < -9223372036854775808
+quote -127 < -9223372036854775807
+-127 < -9223372036854775807
+quote -127 < -2147483648
+-127 < -2147483648
+quote -127 < -2147483647
+-127 < -2147483647
+quote -127 < -32768
+-127 < -32768
+quote -127 < -32767
+-127 < -32767
+quote -127 < -128
+-127 < -128
+quote -127 < -127
+-127 < -127
+quote -127 < 255
+-127 < 255
+quote -127 < 256
+-127 < 256
+quote -127 < 65535
+-127 < 65535
+quote -127 < 65536
+-127 < 65536
+quote -127 < 4294967295
+-127 < 4294967295
+quote -127 < 4294967296
+-127 < 4294967296
+quote -127 < 18446744073709551615
+-127 < 18446744073709551615
+quote -127 < 18446744073709551616
+-127 < 18446744073709551616
+quote -127 < 340282366920938463463374607431768211455
+-127 < 340282366920938463463374607431768211455
+quote -127 < 340282366920938463463374607431768211456
+-127 < 340282366920938463463374607431768211456
+quote 255 < -170141183460469231731687303715884105728
+255 < -170141183460469231731687303715884105728
+quote 255 < -170141183460469231731687303715884105727
+255 < -170141183460469231731687303715884105727
+quote 255 < -9223372036854775808
+255 < -9223372036854775808
+quote 255 < -9223372036854775807
+255 < -9223372036854775807
+quote 255 < -2147483648
+255 < -2147483648
+quote 255 < -2147483647
+255 < -2147483647
+quote 255 < -32768
+255 < -32768
+quote 255 < -32767
+255 < -32767
+quote 255 < -128
+255 < -128
+quote 255 < -127
+255 < -127
+quote 255 < 255
+255 < 255
+quote 255 < 256
+255 < 256
+quote 255 < 65535
+255 < 65535
+quote 255 < 65536
+255 < 65536
+quote 255 < 4294967295
+255 < 4294967295
+quote 255 < 4294967296
+255 < 4294967296
+quote 255 < 18446744073709551615
+255 < 18446744073709551615
+quote 255 < 18446744073709551616
+255 < 18446744073709551616
+quote 255 < 340282366920938463463374607431768211455
+255 < 340282366920938463463374607431768211455
+quote 255 < 340282366920938463463374607431768211456
+255 < 340282366920938463463374607431768211456
+quote 256 < -170141183460469231731687303715884105728
+256 < -170141183460469231731687303715884105728
+quote 256 < -170141183460469231731687303715884105727
+256 < -170141183460469231731687303715884105727
+quote 256 < -9223372036854775808
+256 < -9223372036854775808
+quote 256 < -9223372036854775807
+256 < -9223372036854775807
+quote 256 < -2147483648
+256 < -2147483648
+quote 256 < -2147483647
+256 < -2147483647
+quote 256 < -32768
+256 < -32768
+quote 256 < -32767
+256 < -32767
+quote 256 < -128
+256 < -128
+quote 256 < -127
+256 < -127
+quote 256 < 255
+256 < 255
+quote 256 < 256
+256 < 256
+quote 256 < 65535
+256 < 65535
+quote 256 < 65536
+256 < 65536
+quote 256 < 4294967295
+256 < 4294967295
+quote 256 < 4294967296
+256 < 4294967296
+quote 256 < 18446744073709551615
+256 < 18446744073709551615
+quote 256 < 18446744073709551616
+256 < 18446744073709551616
+quote 256 < 340282366920938463463374607431768211455
+256 < 340282366920938463463374607431768211455
+quote 256 < 340282366920938463463374607431768211456
+256 < 340282366920938463463374607431768211456
+quote 65535 < -170141183460469231731687303715884105728
+65535 < -170141183460469231731687303715884105728
+quote 65535 < -170141183460469231731687303715884105727
+65535 < -170141183460469231731687303715884105727
+quote 65535 < -9223372036854775808
+65535 < -9223372036854775808
+quote 65535 < -9223372036854775807
+65535 < -9223372036854775807
+quote 65535 < -2147483648
+65535 < -2147483648
+quote 65535 < -2147483647
+65535 < -2147483647
+quote 65535 < -32768
+65535 < -32768
+quote 65535 < -32767
+65535 < -32767
+quote 65535 < -128
+65535 < -128
+quote 65535 < -127
+65535 < -127
+quote 65535 < 255
+65535 < 255
+quote 65535 < 256
+65535 < 256
+quote 65535 < 65535
+65535 < 65535
+quote 65535 < 65536
+65535 < 65536
+quote 65535 < 4294967295
+65535 < 4294967295
+quote 65535 < 4294967296
+65535 < 4294967296
+quote 65535 < 18446744073709551615
+65535 < 18446744073709551615
+quote 65535 < 18446744073709551616
+65535 < 18446744073709551616
+quote 65535 < 340282366920938463463374607431768211455
+65535 < 340282366920938463463374607431768211455
+quote 65535 < 340282366920938463463374607431768211456
+65535 < 340282366920938463463374607431768211456
+quote 65536 < -170141183460469231731687303715884105728
+65536 < -170141183460469231731687303715884105728
+quote 65536 < -170141183460469231731687303715884105727
+65536 < -170141183460469231731687303715884105727
+quote 65536 < -9223372036854775808
+65536 < -9223372036854775808
+quote 65536 < -9223372036854775807
+65536 < -9223372036854775807
+quote 65536 < -2147483648
+65536 < -2147483648
+quote 65536 < -2147483647
+65536 < -2147483647
+quote 65536 < -32768
+65536 < -32768
+quote 65536 < -32767
+65536 < -32767
+quote 65536 < -128
+65536 < -128
+quote 65536 < -127
+65536 < -127
+quote 65536 < 255
+65536 < 255
+quote 65536 < 256
+65536 < 256
+quote 65536 < 65535
+65536 < 65535
+quote 65536 < 65536
+65536 < 65536
+quote 65536 < 4294967295
+65536 < 4294967295
+quote 65536 < 4294967296
+65536 < 4294967296
+quote 65536 < 18446744073709551615
+65536 < 18446744073709551615
+quote 65536 < 18446744073709551616
+65536 < 18446744073709551616
+quote 65536 < 340282366920938463463374607431768211455
+65536 < 340282366920938463463374607431768211455
+quote 65536 < 340282366920938463463374607431768211456
+65536 < 340282366920938463463374607431768211456
+quote 4294967295 < -170141183460469231731687303715884105728
+4294967295 < -170141183460469231731687303715884105728
+quote 4294967295 < -170141183460469231731687303715884105727
+4294967295 < -170141183460469231731687303715884105727
+quote 4294967295 < -9223372036854775808
+4294967295 < -9223372036854775808
+quote 4294967295 < -9223372036854775807
+4294967295 < -9223372036854775807
+quote 4294967295 < -2147483648
+4294967295 < -2147483648
+quote 4294967295 < -2147483647
+4294967295 < -2147483647
+quote 4294967295 < -32768
+4294967295 < -32768
+quote 4294967295 < -32767
+4294967295 < -32767
+quote 4294967295 < -128
+4294967295 < -128
+quote 4294967295 < -127
+4294967295 < -127
+quote 4294967295 < 255
+4294967295 < 255
+quote 4294967295 < 256
+4294967295 < 256
+quote 4294967295 < 65535
+4294967295 < 65535
+quote 4294967295 < 65536
+4294967295 < 65536
+quote 4294967295 < 4294967295
+4294967295 < 4294967295
+quote 4294967295 < 4294967296
+4294967295 < 4294967296
+quote 4294967295 < 18446744073709551615
+4294967295 < 18446744073709551615
+quote 4294967295 < 18446744073709551616
+4294967295 < 18446744073709551616
+quote 4294967295 < 340282366920938463463374607431768211455
+4294967295 < 340282366920938463463374607431768211455
+quote 4294967295 < 340282366920938463463374607431768211456
+4294967295 < 340282366920938463463374607431768211456
+quote 4294967296 < -170141183460469231731687303715884105728
+4294967296 < -170141183460469231731687303715884105728
+quote 4294967296 < -170141183460469231731687303715884105727
+4294967296 < -170141183460469231731687303715884105727
+quote 4294967296 < -9223372036854775808
+4294967296 < -9223372036854775808
+quote 4294967296 < -9223372036854775807
+4294967296 < -9223372036854775807
+quote 4294967296 < -2147483648
+4294967296 < -2147483648
+quote 4294967296 < -2147483647
+4294967296 < -2147483647
+quote 4294967296 < -32768
+4294967296 < -32768
+quote 4294967296 < -32767
+4294967296 < -32767
+quote 4294967296 < -128
+4294967296 < -128
+quote 4294967296 < -127
+4294967296 < -127
+quote 4294967296 < 255
+4294967296 < 255
+quote 4294967296 < 256
+4294967296 < 256
+quote 4294967296 < 65535
+4294967296 < 65535
+quote 4294967296 < 65536
+4294967296 < 65536
+quote 4294967296 < 4294967295
+4294967296 < 4294967295
+quote 4294967296 < 4294967296
+4294967296 < 4294967296
+quote 4294967296 < 18446744073709551615
+4294967296 < 18446744073709551615
+quote 4294967296 < 18446744073709551616
+4294967296 < 18446744073709551616
+quote 4294967296 < 340282366920938463463374607431768211455
+4294967296 < 340282366920938463463374607431768211455
+quote 4294967296 < 340282366920938463463374607431768211456
+4294967296 < 340282366920938463463374607431768211456
+quote 18446744073709551615 < -170141183460469231731687303715884105728
+18446744073709551615 < -170141183460469231731687303715884105728
+quote 18446744073709551615 < -170141183460469231731687303715884105727
+18446744073709551615 < -170141183460469231731687303715884105727
+quote 18446744073709551615 < -9223372036854775808
+18446744073709551615 < -9223372036854775808
+quote 18446744073709551615 < -9223372036854775807
+18446744073709551615 < -9223372036854775807
+quote 18446744073709551615 < -2147483648
+18446744073709551615 < -2147483648
+quote 18446744073709551615 < -2147483647
+18446744073709551615 < -2147483647
+quote 18446744073709551615 < -32768
+18446744073709551615 < -32768
+quote 18446744073709551615 < -32767
+18446744073709551615 < -32767
+quote 18446744073709551615 < -128
+18446744073709551615 < -128
+quote 18446744073709551615 < -127
+18446744073709551615 < -127
+quote 18446744073709551615 < 255
+18446744073709551615 < 255
+quote 18446744073709551615 < 256
+18446744073709551615 < 256
+quote 18446744073709551615 < 65535
+18446744073709551615 < 65535
+quote 18446744073709551615 < 65536
+18446744073709551615 < 65536
+quote 18446744073709551615 < 4294967295
+18446744073709551615 < 4294967295
+quote 18446744073709551615 < 4294967296
+18446744073709551615 < 4294967296
+quote 18446744073709551615 < 18446744073709551615
+18446744073709551615 < 18446744073709551615
+quote 18446744073709551615 < 18446744073709551616
+18446744073709551615 < 18446744073709551616
+quote 18446744073709551615 < 340282366920938463463374607431768211455
+18446744073709551615 < 340282366920938463463374607431768211455
+quote 18446744073709551615 < 340282366920938463463374607431768211456
+18446744073709551615 < 340282366920938463463374607431768211456
+quote 18446744073709551616 < -170141183460469231731687303715884105728
+18446744073709551616 < -170141183460469231731687303715884105728
+quote 18446744073709551616 < -170141183460469231731687303715884105727
+18446744073709551616 < -170141183460469231731687303715884105727
+quote 18446744073709551616 < -9223372036854775808
+18446744073709551616 < -9223372036854775808
+quote 18446744073709551616 < -9223372036854775807
+18446744073709551616 < -9223372036854775807
+quote 18446744073709551616 < -2147483648
+18446744073709551616 < -2147483648
+quote 18446744073709551616 < -2147483647
+18446744073709551616 < -2147483647
+quote 18446744073709551616 < -32768
+18446744073709551616 < -32768
+quote 18446744073709551616 < -32767
+18446744073709551616 < -32767
+quote 18446744073709551616 < -128
+18446744073709551616 < -128
+quote 18446744073709551616 < -127
+18446744073709551616 < -127
+quote 18446744073709551616 < 255
+18446744073709551616 < 255
+quote 18446744073709551616 < 256
+18446744073709551616 < 256
+quote 18446744073709551616 < 65535
+18446744073709551616 < 65535
+quote 18446744073709551616 < 65536
+18446744073709551616 < 65536
+quote 18446744073709551616 < 4294967295
+18446744073709551616 < 4294967295
+quote 18446744073709551616 < 4294967296
+18446744073709551616 < 4294967296
+quote 18446744073709551616 < 18446744073709551615
+18446744073709551616 < 18446744073709551615
+quote 18446744073709551616 < 18446744073709551616
+18446744073709551616 < 18446744073709551616
+quote 18446744073709551616 < 340282366920938463463374607431768211455
+18446744073709551616 < 340282366920938463463374607431768211455
+quote 18446744073709551616 < 340282366920938463463374607431768211456
+18446744073709551616 < 340282366920938463463374607431768211456
+quote 340282366920938463463374607431768211455 < -170141183460469231731687303715884105728
+340282366920938463463374607431768211455 < -170141183460469231731687303715884105728
+quote 340282366920938463463374607431768211455 < -170141183460469231731687303715884105727
+340282366920938463463374607431768211455 < -170141183460469231731687303715884105727
+quote 340282366920938463463374607431768211455 < -9223372036854775808
+340282366920938463463374607431768211455 < -9223372036854775808
+quote 340282366920938463463374607431768211455 < -9223372036854775807
+340282366920938463463374607431768211455 < -9223372036854775807
+quote 340282366920938463463374607431768211455 < -2147483648
+340282366920938463463374607431768211455 < -2147483648
+quote 340282366920938463463374607431768211455 < -2147483647
+340282366920938463463374607431768211455 < -2147483647
+quote 340282366920938463463374607431768211455 < -32768
+340282366920938463463374607431768211455 < -32768
+quote 340282366920938463463374607431768211455 < -32767
+340282366920938463463374607431768211455 < -32767
+quote 340282366920938463463374607431768211455 < -128
+340282366920938463463374607431768211455 < -128
+quote 340282366920938463463374607431768211455 < -127
+340282366920938463463374607431768211455 < -127
+quote 340282366920938463463374607431768211455 < 255
+340282366920938463463374607431768211455 < 255
+quote 340282366920938463463374607431768211455 < 256
+340282366920938463463374607431768211455 < 256
+quote 340282366920938463463374607431768211455 < 65535
+340282366920938463463374607431768211455 < 65535
+quote 340282366920938463463374607431768211455 < 65536
+340282366920938463463374607431768211455 < 65536
+quote 340282366920938463463374607431768211455 < 4294967295
+340282366920938463463374607431768211455 < 4294967295
+quote 340282366920938463463374607431768211455 < 4294967296
+340282366920938463463374607431768211455 < 4294967296
+quote 340282366920938463463374607431768211455 < 18446744073709551615
+340282366920938463463374607431768211455 < 18446744073709551615
+quote 340282366920938463463374607431768211455 < 18446744073709551616
+340282366920938463463374607431768211455 < 18446744073709551616
+quote 340282366920938463463374607431768211455 < 340282366920938463463374607431768211455
+340282366920938463463374607431768211455 < 340282366920938463463374607431768211455
+quote 340282366920938463463374607431768211455 < 340282366920938463463374607431768211456
+340282366920938463463374607431768211455 < 340282366920938463463374607431768211456
+quote 340282366920938463463374607431768211456 < -170141183460469231731687303715884105728
+340282366920938463463374607431768211456 < -170141183460469231731687303715884105728
+quote 340282366920938463463374607431768211456 < -170141183460469231731687303715884105727
+340282366920938463463374607431768211456 < -170141183460469231731687303715884105727
+quote 340282366920938463463374607431768211456 < -9223372036854775808
+340282366920938463463374607431768211456 < -9223372036854775808
+quote 340282366920938463463374607431768211456 < -9223372036854775807
+340282366920938463463374607431768211456 < -9223372036854775807
+quote 340282366920938463463374607431768211456 < -2147483648
+340282366920938463463374607431768211456 < -2147483648
+quote 340282366920938463463374607431768211456 < -2147483647
+340282366920938463463374607431768211456 < -2147483647
+quote 340282366920938463463374607431768211456 < -32768
+340282366920938463463374607431768211456 < -32768
+quote 340282366920938463463374607431768211456 < -32767
+340282366920938463463374607431768211456 < -32767
+quote 340282366920938463463374607431768211456 < -128
+340282366920938463463374607431768211456 < -128
+quote 340282366920938463463374607431768211456 < -127
+340282366920938463463374607431768211456 < -127
+quote 340282366920938463463374607431768211456 < 255
+340282366920938463463374607431768211456 < 255
+quote 340282366920938463463374607431768211456 < 256
+340282366920938463463374607431768211456 < 256
+quote 340282366920938463463374607431768211456 < 65535
+340282366920938463463374607431768211456 < 65535
+quote 340282366920938463463374607431768211456 < 65536
+340282366920938463463374607431768211456 < 65536
+quote 340282366920938463463374607431768211456 < 4294967295
+340282366920938463463374607431768211456 < 4294967295
+quote 340282366920938463463374607431768211456 < 4294967296
+340282366920938463463374607431768211456 < 4294967296
+quote 340282366920938463463374607431768211456 < 18446744073709551615
+340282366920938463463374607431768211456 < 18446744073709551615
+quote 340282366920938463463374607431768211456 < 18446744073709551616
+340282366920938463463374607431768211456 < 18446744073709551616
+quote 340282366920938463463374607431768211456 < 340282366920938463463374607431768211455
+340282366920938463463374607431768211456 < 340282366920938463463374607431768211455
+quote 340282366920938463463374607431768211456 < 340282366920938463463374607431768211456
+340282366920938463463374607431768211456 < 340282366920938463463374607431768211456
diff --git a/test/ic3/integer_lt.out.expected b/test/ic3/integer_lt.out.expected
new file mode 100644
index 0000000..1fa364c
--- /dev/null
+++ b/test/ic3/integer_lt.out.expected
@@ -0,0 +1,800 @@
+-170141183460469231731687303715884105728 < -170141183460469231731687303715884105728
+false
+-170141183460469231731687303715884105728 < -170141183460469231731687303715884105727
+true
+-170141183460469231731687303715884105728 < -9223372036854775808
+true
+-170141183460469231731687303715884105728 < -9223372036854775807
+true
+-170141183460469231731687303715884105728 < -2147483648
+true
+-170141183460469231731687303715884105728 < -2147483647
+true
+-170141183460469231731687303715884105728 < -32768
+true
+-170141183460469231731687303715884105728 < -32767
+true
+-170141183460469231731687303715884105728 < -128
+true
+-170141183460469231731687303715884105728 < -127
+true
+-170141183460469231731687303715884105728 < 255
+true
+-170141183460469231731687303715884105728 < 256
+true
+-170141183460469231731687303715884105728 < 65535
+true
+-170141183460469231731687303715884105728 < 65536
+true
+-170141183460469231731687303715884105728 < 4294967295
+true
+-170141183460469231731687303715884105728 < 4294967296
+true
+-170141183460469231731687303715884105728 < 18446744073709551615
+true
+-170141183460469231731687303715884105728 < 18446744073709551616
+true
+-170141183460469231731687303715884105728 < 340282366920938463463374607431768211455
+true
+-170141183460469231731687303715884105728 < 340282366920938463463374607431768211456
+true
+-170141183460469231731687303715884105727 < -170141183460469231731687303715884105728
+false
+-170141183460469231731687303715884105727 < -170141183460469231731687303715884105727
+false
+-170141183460469231731687303715884105727 < -9223372036854775808
+true
+-170141183460469231731687303715884105727 < -9223372036854775807
+true
+-170141183460469231731687303715884105727 < -2147483648
+true
+-170141183460469231731687303715884105727 < -2147483647
+true
+-170141183460469231731687303715884105727 < -32768
+true
+-170141183460469231731687303715884105727 < -32767
+true
+-170141183460469231731687303715884105727 < -128
+true
+-170141183460469231731687303715884105727 < -127
+true
+-170141183460469231731687303715884105727 < 255
+true
+-170141183460469231731687303715884105727 < 256
+true
+-170141183460469231731687303715884105727 < 65535
+true
+-170141183460469231731687303715884105727 < 65536
+true
+-170141183460469231731687303715884105727 < 4294967295
+true
+-170141183460469231731687303715884105727 < 4294967296
+true
+-170141183460469231731687303715884105727 < 18446744073709551615
+true
+-170141183460469231731687303715884105727 < 18446744073709551616
+true
+-170141183460469231731687303715884105727 < 340282366920938463463374607431768211455
+true
+-170141183460469231731687303715884105727 < 340282366920938463463374607431768211456
+true
+-9223372036854775808 < -170141183460469231731687303715884105728
+false
+-9223372036854775808 < -170141183460469231731687303715884105727
+false
+-9223372036854775808 < -9223372036854775808
+false
+-9223372036854775808 < -9223372036854775807
+true
+-9223372036854775808 < -2147483648
+true
+-9223372036854775808 < -2147483647
+true
+-9223372036854775808 < -32768
+true
+-9223372036854775808 < -32767
+true
+-9223372036854775808 < -128
+true
+-9223372036854775808 < -127
+true
+-9223372036854775808 < 255
+true
+-9223372036854775808 < 256
+true
+-9223372036854775808 < 65535
+true
+-9223372036854775808 < 65536
+true
+-9223372036854775808 < 4294967295
+true
+-9223372036854775808 < 4294967296
+true
+-9223372036854775808 < 18446744073709551615
+true
+-9223372036854775808 < 18446744073709551616
+true
+-9223372036854775808 < 340282366920938463463374607431768211455
+true
+-9223372036854775808 < 340282366920938463463374607431768211456
+true
+-9223372036854775807 < -170141183460469231731687303715884105728
+false
+-9223372036854775807 < -170141183460469231731687303715884105727
+false
+-9223372036854775807 < -9223372036854775808
+false
+-9223372036854775807 < -9223372036854775807
+false
+-9223372036854775807 < -2147483648
+true
+-9223372036854775807 < -2147483647
+true
+-9223372036854775807 < -32768
+true
+-9223372036854775807 < -32767
+true
+-9223372036854775807 < -128
+true
+-9223372036854775807 < -127
+true
+-9223372036854775807 < 255
+true
+-9223372036854775807 < 256
+true
+-9223372036854775807 < 65535
+true
+-9223372036854775807 < 65536
+true
+-9223372036854775807 < 4294967295
+true
+-9223372036854775807 < 4294967296
+true
+-9223372036854775807 < 18446744073709551615
+true
+-9223372036854775807 < 18446744073709551616
+true
+-9223372036854775807 < 340282366920938463463374607431768211455
+true
+-9223372036854775807 < 340282366920938463463374607431768211456
+true
+-2147483648 < -170141183460469231731687303715884105728
+false
+-2147483648 < -170141183460469231731687303715884105727
+false
+-2147483648 < -9223372036854775808
+false
+-2147483648 < -9223372036854775807
+false
+-2147483648 < -2147483648
+false
+-2147483648 < -2147483647
+true
+-2147483648 < -32768
+true
+-2147483648 < -32767
+true
+-2147483648 < -128
+true
+-2147483648 < -127
+true
+-2147483648 < 255
+true
+-2147483648 < 256
+true
+-2147483648 < 65535
+true
+-2147483648 < 65536
+true
+-2147483648 < 4294967295
+true
+-2147483648 < 4294967296
+true
+-2147483648 < 18446744073709551615
+true
+-2147483648 < 18446744073709551616
+true
+-2147483648 < 340282366920938463463374607431768211455
+true
+-2147483648 < 340282366920938463463374607431768211456
+true
+-2147483647 < -170141183460469231731687303715884105728
+false
+-2147483647 < -170141183460469231731687303715884105727
+false
+-2147483647 < -9223372036854775808
+false
+-2147483647 < -9223372036854775807
+false
+-2147483647 < -2147483648
+false
+-2147483647 < -2147483647
+false
+-2147483647 < -32768
+true
+-2147483647 < -32767
+true
+-2147483647 < -128
+true
+-2147483647 < -127
+true
+-2147483647 < 255
+true
+-2147483647 < 256
+true
+-2147483647 < 65535
+true
+-2147483647 < 65536
+true
+-2147483647 < 4294967295
+true
+-2147483647 < 4294967296
+true
+-2147483647 < 18446744073709551615
+true
+-2147483647 < 18446744073709551616
+true
+-2147483647 < 340282366920938463463374607431768211455
+true
+-2147483647 < 340282366920938463463374607431768211456
+true
+-32768 < -170141183460469231731687303715884105728
+false
+-32768 < -170141183460469231731687303715884105727
+false
+-32768 < -9223372036854775808
+false
+-32768 < -9223372036854775807
+false
+-32768 < -2147483648
+false
+-32768 < -2147483647
+false
+-32768 < -32768
+false
+-32768 < -32767
+true
+-32768 < -128
+true
+-32768 < -127
+true
+-32768 < 255
+true
+-32768 < 256
+true
+-32768 < 65535
+true
+-32768 < 65536
+true
+-32768 < 4294967295
+true
+-32768 < 4294967296
+true
+-32768 < 18446744073709551615
+true
+-32768 < 18446744073709551616
+true
+-32768 < 340282366920938463463374607431768211455
+true
+-32768 < 340282366920938463463374607431768211456
+true
+-32767 < -170141183460469231731687303715884105728
+false
+-32767 < -170141183460469231731687303715884105727
+false
+-32767 < -9223372036854775808
+false
+-32767 < -9223372036854775807
+false
+-32767 < -2147483648
+false
+-32767 < -2147483647
+false
+-32767 < -32768
+false
+-32767 < -32767
+false
+-32767 < -128
+true
+-32767 < -127
+true
+-32767 < 255
+true
+-32767 < 256
+true
+-32767 < 65535
+true
+-32767 < 65536
+true
+-32767 < 4294967295
+true
+-32767 < 4294967296
+true
+-32767 < 18446744073709551615
+true
+-32767 < 18446744073709551616
+true
+-32767 < 340282366920938463463374607431768211455
+true
+-32767 < 340282366920938463463374607431768211456
+true
+-128 < -170141183460469231731687303715884105728
+false
+-128 < -170141183460469231731687303715884105727
+false
+-128 < -9223372036854775808
+false
+-128 < -9223372036854775807
+false
+-128 < -2147483648
+false
+-128 < -2147483647
+false
+-128 < -32768
+false
+-128 < -32767
+false
+-128 < -128
+false
+-128 < -127
+true
+-128 < 255
+true
+-128 < 256
+true
+-128 < 65535
+true
+-128 < 65536
+true
+-128 < 4294967295
+true
+-128 < 4294967296
+true
+-128 < 18446744073709551615
+true
+-128 < 18446744073709551616
+true
+-128 < 340282366920938463463374607431768211455
+true
+-128 < 340282366920938463463374607431768211456
+true
+-127 < -170141183460469231731687303715884105728
+false
+-127 < -170141183460469231731687303715884105727
+false
+-127 < -9223372036854775808
+false
+-127 < -9223372036854775807
+false
+-127 < -2147483648
+false
+-127 < -2147483647
+false
+-127 < -32768
+false
+-127 < -32767
+false
+-127 < -128
+false
+-127 < -127
+false
+-127 < 255
+true
+-127 < 256
+true
+-127 < 65535
+true
+-127 < 65536
+true
+-127 < 4294967295
+true
+-127 < 4294967296
+true
+-127 < 18446744073709551615
+true
+-127 < 18446744073709551616
+true
+-127 < 340282366920938463463374607431768211455
+true
+-127 < 340282366920938463463374607431768211456
+true
+255 < -170141183460469231731687303715884105728
+false
+255 < -170141183460469231731687303715884105727
+false
+255 < -9223372036854775808
+false
+255 < -9223372036854775807
+false
+255 < -2147483648
+false
+255 < -2147483647
+false
+255 < -32768
+false
+255 < -32767
+false
+255 < -128
+false
+255 < -127
+false
+255 < 255
+false
+255 < 256
+true
+255 < 65535
+true
+255 < 65536
+true
+255 < 4294967295
+true
+255 < 4294967296
+true
+255 < 18446744073709551615
+true
+255 < 18446744073709551616
+true
+255 < 340282366920938463463374607431768211455
+true
+255 < 340282366920938463463374607431768211456
+true
+256 < -170141183460469231731687303715884105728
+false
+256 < -170141183460469231731687303715884105727
+false
+256 < -9223372036854775808
+false
+256 < -9223372036854775807
+false
+256 < -2147483648
+false
+256 < -2147483647
+false
+256 < -32768
+false
+256 < -32767
+false
+256 < -128
+false
+256 < -127
+false
+256 < 255
+false
+256 < 256
+false
+256 < 65535
+true
+256 < 65536
+true
+256 < 4294967295
+true
+256 < 4294967296
+true
+256 < 18446744073709551615
+true
+256 < 18446744073709551616
+true
+256 < 340282366920938463463374607431768211455
+true
+256 < 340282366920938463463374607431768211456
+true
+65535 < -170141183460469231731687303715884105728
+false
+65535 < -170141183460469231731687303715884105727
+false
+65535 < -9223372036854775808
+false
+65535 < -9223372036854775807
+false
+65535 < -2147483648
+false
+65535 < -2147483647
+false
+65535 < -32768
+false
+65535 < -32767
+false
+65535 < -128
+false
+65535 < -127
+false
+65535 < 255
+false
+65535 < 256
+false
+65535 < 65535
+false
+65535 < 65536
+true
+65535 < 4294967295
+true
+65535 < 4294967296
+true
+65535 < 18446744073709551615
+true
+65535 < 18446744073709551616
+true
+65535 < 340282366920938463463374607431768211455
+true
+65535 < 340282366920938463463374607431768211456
+true
+65536 < -170141183460469231731687303715884105728
+false
+65536 < -170141183460469231731687303715884105727
+false
+65536 < -9223372036854775808
+false
+65536 < -9223372036854775807
+false
+65536 < -2147483648
+false
+65536 < -2147483647
+false
+65536 < -32768
+false
+65536 < -32767
+false
+65536 < -128
+false
+65536 < -127
+false
+65536 < 255
+false
+65536 < 256
+false
+65536 < 65535
+false
+65536 < 65536
+false
+65536 < 4294967295
+true
+65536 < 4294967296
+true
+65536 < 18446744073709551615
+true
+65536 < 18446744073709551616
+true
+65536 < 340282366920938463463374607431768211455
+true
+65536 < 340282366920938463463374607431768211456
+true
+4294967295 < -170141183460469231731687303715884105728
+false
+4294967295 < -170141183460469231731687303715884105727
+false
+4294967295 < -9223372036854775808
+false
+4294967295 < -9223372036854775807
+false
+4294967295 < -2147483648
+false
+4294967295 < -2147483647
+false
+4294967295 < -32768
+false
+4294967295 < -32767
+false
+4294967295 < -128
+false
+4294967295 < -127
+false
+4294967295 < 255
+false
+4294967295 < 256
+false
+4294967295 < 65535
+false
+4294967295 < 65536
+false
+4294967295 < 4294967295
+false
+4294967295 < 4294967296
+true
+4294967295 < 18446744073709551615
+true
+4294967295 < 18446744073709551616
+true
+4294967295 < 340282366920938463463374607431768211455
+true
+4294967295 < 340282366920938463463374607431768211456
+true
+4294967296 < -170141183460469231731687303715884105728
+false
+4294967296 < -170141183460469231731687303715884105727
+false
+4294967296 < -9223372036854775808
+false
+4294967296 < -9223372036854775807
+false
+4294967296 < -2147483648
+false
+4294967296 < -2147483647
+false
+4294967296 < -32768
+false
+4294967296 < -32767
+false
+4294967296 < -128
+false
+4294967296 < -127
+false
+4294967296 < 255
+false
+4294967296 < 256
+false
+4294967296 < 65535
+false
+4294967296 < 65536
+false
+4294967296 < 4294967295
+false
+4294967296 < 4294967296
+false
+4294967296 < 18446744073709551615
+true
+4294967296 < 18446744073709551616
+true
+4294967296 < 340282366920938463463374607431768211455
+true
+4294967296 < 340282366920938463463374607431768211456
+true
+18446744073709551615 < -170141183460469231731687303715884105728
+false
+18446744073709551615 < -170141183460469231731687303715884105727
+false
+18446744073709551615 < -9223372036854775808
+false
+18446744073709551615 < -9223372036854775807
+false
+18446744073709551615 < -2147483648
+false
+18446744073709551615 < -2147483647
+false
+18446744073709551615 < -32768
+false
+18446744073709551615 < -32767
+false
+18446744073709551615 < -128
+false
+18446744073709551615 < -127
+false
+18446744073709551615 < 255
+false
+18446744073709551615 < 256
+false
+18446744073709551615 < 65535
+false
+18446744073709551615 < 65536
+false
+18446744073709551615 < 4294967295
+false
+18446744073709551615 < 4294967296
+false
+18446744073709551615 < 18446744073709551615
+false
+18446744073709551615 < 18446744073709551616
+true
+18446744073709551615 < 340282366920938463463374607431768211455
+true
+18446744073709551615 < 340282366920938463463374607431768211456
+true
+18446744073709551616 < -170141183460469231731687303715884105728
+false
+18446744073709551616 < -170141183460469231731687303715884105727
+false
+18446744073709551616 < -9223372036854775808
+false
+18446744073709551616 < -9223372036854775807
+false
+18446744073709551616 < -2147483648
+false
+18446744073709551616 < -2147483647
+false
+18446744073709551616 < -32768
+false
+18446744073709551616 < -32767
+false
+18446744073709551616 < -128
+false
+18446744073709551616 < -127
+false
+18446744073709551616 < 255
+false
+18446744073709551616 < 256
+false
+18446744073709551616 < 65535
+false
+18446744073709551616 < 65536
+false
+18446744073709551616 < 4294967295
+false
+18446744073709551616 < 4294967296
+false
+18446744073709551616 < 18446744073709551615
+false
+18446744073709551616 < 18446744073709551616
+false
+18446744073709551616 < 340282366920938463463374607431768211455
+true
+18446744073709551616 < 340282366920938463463374607431768211456
+true
+340282366920938463463374607431768211455 < -170141183460469231731687303715884105728
+false
+340282366920938463463374607431768211455 < -170141183460469231731687303715884105727
+false
+340282366920938463463374607431768211455 < -9223372036854775808
+false
+340282366920938463463374607431768211455 < -9223372036854775807
+false
+340282366920938463463374607431768211455 < -2147483648
+false
+340282366920938463463374607431768211455 < -2147483647
+false
+340282366920938463463374607431768211455 < -32768
+false
+340282366920938463463374607431768211455 < -32767
+false
+340282366920938463463374607431768211455 < -128
+false
+340282366920938463463374607431768211455 < -127
+false
+340282366920938463463374607431768211455 < 255
+false
+340282366920938463463374607431768211455 < 256
+false
+340282366920938463463374607431768211455 < 65535
+false
+340282366920938463463374607431768211455 < 65536
+false
+340282366920938463463374607431768211455 < 4294967295
+false
+340282366920938463463374607431768211455 < 4294967296
+false
+340282366920938463463374607431768211455 < 18446744073709551615
+false
+340282366920938463463374607431768211455 < 18446744073709551616
+false
+340282366920938463463374607431768211455 < 340282366920938463463374607431768211455
+false
+340282366920938463463374607431768211455 < 340282366920938463463374607431768211456
+true
+340282366920938463463374607431768211456 < -170141183460469231731687303715884105728
+false
+340282366920938463463374607431768211456 < -170141183460469231731687303715884105727
+false
+340282366920938463463374607431768211456 < -9223372036854775808
+false
+340282366920938463463374607431768211456 < -9223372036854775807
+false
+340282366920938463463374607431768211456 < -2147483648
+false
+340282366920938463463374607431768211456 < -2147483647
+false
+340282366920938463463374607431768211456 < -32768
+false
+340282366920938463463374607431768211456 < -32767
+false
+340282366920938463463374607431768211456 < -128
+false
+340282366920938463463374607431768211456 < -127
+false
+340282366920938463463374607431768211456 < 255
+false
+340282366920938463463374607431768211456 < 256
+false
+340282366920938463463374607431768211456 < 65535
+false
+340282366920938463463374607431768211456 < 65536
+false
+340282366920938463463374607431768211456 < 4294967295
+false
+340282366920938463463374607431768211456 < 4294967296
+false
+340282366920938463463374607431768211456 < 18446744073709551615
+false
+340282366920938463463374607431768211456 < 18446744073709551616
+false
+340282366920938463463374607431768211456 < 340282366920938463463374607431768211455
+false
+340282366920938463463374607431768211456 < 340282366920938463463374607431768211456
+false
diff --git a/test/ic3/integer_lt.ret.expected b/test/ic3/integer_lt.ret.expected
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/test/ic3/integer_lt.ret.expected
@@ -0,0 +1 @@
+0
diff --git a/test/ic3/integer_mod.in b/test/ic3/integer_mod.in
new file mode 100644
index 0000000..a434d2f
--- /dev/null
+++ b/test/ic3/integer_mod.in
@@ -0,0 +1,800 @@
+quote -170141183460469231731687303715884105728 mod -170141183460469231731687303715884105728
+-170141183460469231731687303715884105728 mod -170141183460469231731687303715884105728
+quote -170141183460469231731687303715884105728 mod -170141183460469231731687303715884105727
+-170141183460469231731687303715884105728 mod -170141183460469231731687303715884105727
+quote -170141183460469231731687303715884105728 mod -9223372036854775808
+-170141183460469231731687303715884105728 mod -9223372036854775808
+quote -170141183460469231731687303715884105728 mod -9223372036854775807
+-170141183460469231731687303715884105728 mod -9223372036854775807
+quote -170141183460469231731687303715884105728 mod -2147483648
+-170141183460469231731687303715884105728 mod -2147483648
+quote -170141183460469231731687303715884105728 mod -2147483647
+-170141183460469231731687303715884105728 mod -2147483647
+quote -170141183460469231731687303715884105728 mod -32768
+-170141183460469231731687303715884105728 mod -32768
+quote -170141183460469231731687303715884105728 mod -32767
+-170141183460469231731687303715884105728 mod -32767
+quote -170141183460469231731687303715884105728 mod -128
+-170141183460469231731687303715884105728 mod -128
+quote -170141183460469231731687303715884105728 mod -127
+-170141183460469231731687303715884105728 mod -127
+quote -170141183460469231731687303715884105728 mod 255
+-170141183460469231731687303715884105728 mod 255
+quote -170141183460469231731687303715884105728 mod 256
+-170141183460469231731687303715884105728 mod 256
+quote -170141183460469231731687303715884105728 mod 65535
+-170141183460469231731687303715884105728 mod 65535
+quote -170141183460469231731687303715884105728 mod 65536
+-170141183460469231731687303715884105728 mod 65536
+quote -170141183460469231731687303715884105728 mod 4294967295
+-170141183460469231731687303715884105728 mod 4294967295
+quote -170141183460469231731687303715884105728 mod 4294967296
+-170141183460469231731687303715884105728 mod 4294967296
+quote -170141183460469231731687303715884105728 mod 18446744073709551615
+-170141183460469231731687303715884105728 mod 18446744073709551615
+quote -170141183460469231731687303715884105728 mod 18446744073709551616
+-170141183460469231731687303715884105728 mod 18446744073709551616
+quote -170141183460469231731687303715884105728 mod 340282366920938463463374607431768211455
+-170141183460469231731687303715884105728 mod 340282366920938463463374607431768211455
+quote -170141183460469231731687303715884105728 mod 340282366920938463463374607431768211456
+-170141183460469231731687303715884105728 mod 340282366920938463463374607431768211456
+quote -170141183460469231731687303715884105727 mod -170141183460469231731687303715884105728
+-170141183460469231731687303715884105727 mod -170141183460469231731687303715884105728
+quote -170141183460469231731687303715884105727 mod -170141183460469231731687303715884105727
+-170141183460469231731687303715884105727 mod -170141183460469231731687303715884105727
+quote -170141183460469231731687303715884105727 mod -9223372036854775808
+-170141183460469231731687303715884105727 mod -9223372036854775808
+quote -170141183460469231731687303715884105727 mod -9223372036854775807
+-170141183460469231731687303715884105727 mod -9223372036854775807
+quote -170141183460469231731687303715884105727 mod -2147483648
+-170141183460469231731687303715884105727 mod -2147483648
+quote -170141183460469231731687303715884105727 mod -2147483647
+-170141183460469231731687303715884105727 mod -2147483647
+quote -170141183460469231731687303715884105727 mod -32768
+-170141183460469231731687303715884105727 mod -32768
+quote -170141183460469231731687303715884105727 mod -32767
+-170141183460469231731687303715884105727 mod -32767
+quote -170141183460469231731687303715884105727 mod -128
+-170141183460469231731687303715884105727 mod -128
+quote -170141183460469231731687303715884105727 mod -127
+-170141183460469231731687303715884105727 mod -127
+quote -170141183460469231731687303715884105727 mod 255
+-170141183460469231731687303715884105727 mod 255
+quote -170141183460469231731687303715884105727 mod 256
+-170141183460469231731687303715884105727 mod 256
+quote -170141183460469231731687303715884105727 mod 65535
+-170141183460469231731687303715884105727 mod 65535
+quote -170141183460469231731687303715884105727 mod 65536
+-170141183460469231731687303715884105727 mod 65536
+quote -170141183460469231731687303715884105727 mod 4294967295
+-170141183460469231731687303715884105727 mod 4294967295
+quote -170141183460469231731687303715884105727 mod 4294967296
+-170141183460469231731687303715884105727 mod 4294967296
+quote -170141183460469231731687303715884105727 mod 18446744073709551615
+-170141183460469231731687303715884105727 mod 18446744073709551615
+quote -170141183460469231731687303715884105727 mod 18446744073709551616
+-170141183460469231731687303715884105727 mod 18446744073709551616
+quote -170141183460469231731687303715884105727 mod 340282366920938463463374607431768211455
+-170141183460469231731687303715884105727 mod 340282366920938463463374607431768211455
+quote -170141183460469231731687303715884105727 mod 340282366920938463463374607431768211456
+-170141183460469231731687303715884105727 mod 340282366920938463463374607431768211456
+quote -9223372036854775808 mod -170141183460469231731687303715884105728
+-9223372036854775808 mod -170141183460469231731687303715884105728
+quote -9223372036854775808 mod -170141183460469231731687303715884105727
+-9223372036854775808 mod -170141183460469231731687303715884105727
+quote -9223372036854775808 mod -9223372036854775808
+-9223372036854775808 mod -9223372036854775808
+quote -9223372036854775808 mod -9223372036854775807
+-9223372036854775808 mod -9223372036854775807
+quote -9223372036854775808 mod -2147483648
+-9223372036854775808 mod -2147483648
+quote -9223372036854775808 mod -2147483647
+-9223372036854775808 mod -2147483647
+quote -9223372036854775808 mod -32768
+-9223372036854775808 mod -32768
+quote -9223372036854775808 mod -32767
+-9223372036854775808 mod -32767
+quote -9223372036854775808 mod -128
+-9223372036854775808 mod -128
+quote -9223372036854775808 mod -127
+-9223372036854775808 mod -127
+quote -9223372036854775808 mod 255
+-9223372036854775808 mod 255
+quote -9223372036854775808 mod 256
+-9223372036854775808 mod 256
+quote -9223372036854775808 mod 65535
+-9223372036854775808 mod 65535
+quote -9223372036854775808 mod 65536
+-9223372036854775808 mod 65536
+quote -9223372036854775808 mod 4294967295
+-9223372036854775808 mod 4294967295
+quote -9223372036854775808 mod 4294967296
+-9223372036854775808 mod 4294967296
+quote -9223372036854775808 mod 18446744073709551615
+-9223372036854775808 mod 18446744073709551615
+quote -9223372036854775808 mod 18446744073709551616
+-9223372036854775808 mod 18446744073709551616
+quote -9223372036854775808 mod 340282366920938463463374607431768211455
+-9223372036854775808 mod 340282366920938463463374607431768211455
+quote -9223372036854775808 mod 340282366920938463463374607431768211456
+-9223372036854775808 mod 340282366920938463463374607431768211456
+quote -9223372036854775807 mod -170141183460469231731687303715884105728
+-9223372036854775807 mod -170141183460469231731687303715884105728
+quote -9223372036854775807 mod -170141183460469231731687303715884105727
+-9223372036854775807 mod -170141183460469231731687303715884105727
+quote -9223372036854775807 mod -9223372036854775808
+-9223372036854775807 mod -9223372036854775808
+quote -9223372036854775807 mod -9223372036854775807
+-9223372036854775807 mod -9223372036854775807
+quote -9223372036854775807 mod -2147483648
+-9223372036854775807 mod -2147483648
+quote -9223372036854775807 mod -2147483647
+-9223372036854775807 mod -2147483647
+quote -9223372036854775807 mod -32768
+-9223372036854775807 mod -32768
+quote -9223372036854775807 mod -32767
+-9223372036854775807 mod -32767
+quote -9223372036854775807 mod -128
+-9223372036854775807 mod -128
+quote -9223372036854775807 mod -127
+-9223372036854775807 mod -127
+quote -9223372036854775807 mod 255
+-9223372036854775807 mod 255
+quote -9223372036854775807 mod 256
+-9223372036854775807 mod 256
+quote -9223372036854775807 mod 65535
+-9223372036854775807 mod 65535
+quote -9223372036854775807 mod 65536
+-9223372036854775807 mod 65536
+quote -9223372036854775807 mod 4294967295
+-9223372036854775807 mod 4294967295
+quote -9223372036854775807 mod 4294967296
+-9223372036854775807 mod 4294967296
+quote -9223372036854775807 mod 18446744073709551615
+-9223372036854775807 mod 18446744073709551615
+quote -9223372036854775807 mod 18446744073709551616
+-9223372036854775807 mod 18446744073709551616
+quote -9223372036854775807 mod 340282366920938463463374607431768211455
+-9223372036854775807 mod 340282366920938463463374607431768211455
+quote -9223372036854775807 mod 340282366920938463463374607431768211456
+-9223372036854775807 mod 340282366920938463463374607431768211456
+quote -2147483648 mod -170141183460469231731687303715884105728
+-2147483648 mod -170141183460469231731687303715884105728
+quote -2147483648 mod -170141183460469231731687303715884105727
+-2147483648 mod -170141183460469231731687303715884105727
+quote -2147483648 mod -9223372036854775808
+-2147483648 mod -9223372036854775808
+quote -2147483648 mod -9223372036854775807
+-2147483648 mod -9223372036854775807
+quote -2147483648 mod -2147483648
+-2147483648 mod -2147483648
+quote -2147483648 mod -2147483647
+-2147483648 mod -2147483647
+quote -2147483648 mod -32768
+-2147483648 mod -32768
+quote -2147483648 mod -32767
+-2147483648 mod -32767
+quote -2147483648 mod -128
+-2147483648 mod -128
+quote -2147483648 mod -127
+-2147483648 mod -127
+quote -2147483648 mod 255
+-2147483648 mod 255
+quote -2147483648 mod 256
+-2147483648 mod 256
+quote -2147483648 mod 65535
+-2147483648 mod 65535
+quote -2147483648 mod 65536
+-2147483648 mod 65536
+quote -2147483648 mod 4294967295
+-2147483648 mod 4294967295
+quote -2147483648 mod 4294967296
+-2147483648 mod 4294967296
+quote -2147483648 mod 18446744073709551615
+-2147483648 mod 18446744073709551615
+quote -2147483648 mod 18446744073709551616
+-2147483648 mod 18446744073709551616
+quote -2147483648 mod 340282366920938463463374607431768211455
+-2147483648 mod 340282366920938463463374607431768211455
+quote -2147483648 mod 340282366920938463463374607431768211456
+-2147483648 mod 340282366920938463463374607431768211456
+quote -2147483647 mod -170141183460469231731687303715884105728
+-2147483647 mod -170141183460469231731687303715884105728
+quote -2147483647 mod -170141183460469231731687303715884105727
+-2147483647 mod -170141183460469231731687303715884105727
+quote -2147483647 mod -9223372036854775808
+-2147483647 mod -9223372036854775808
+quote -2147483647 mod -9223372036854775807
+-2147483647 mod -9223372036854775807
+quote -2147483647 mod -2147483648
+-2147483647 mod -2147483648
+quote -2147483647 mod -2147483647
+-2147483647 mod -2147483647
+quote -2147483647 mod -32768
+-2147483647 mod -32768
+quote -2147483647 mod -32767
+-2147483647 mod -32767
+quote -2147483647 mod -128
+-2147483647 mod -128
+quote -2147483647 mod -127
+-2147483647 mod -127
+quote -2147483647 mod 255
+-2147483647 mod 255
+quote -2147483647 mod 256
+-2147483647 mod 256
+quote -2147483647 mod 65535
+-2147483647 mod 65535
+quote -2147483647 mod 65536
+-2147483647 mod 65536
+quote -2147483647 mod 4294967295
+-2147483647 mod 4294967295
+quote -2147483647 mod 4294967296
+-2147483647 mod 4294967296
+quote -2147483647 mod 18446744073709551615
+-2147483647 mod 18446744073709551615
+quote -2147483647 mod 18446744073709551616
+-2147483647 mod 18446744073709551616
+quote -2147483647 mod 340282366920938463463374607431768211455
+-2147483647 mod 340282366920938463463374607431768211455
+quote -2147483647 mod 340282366920938463463374607431768211456
+-2147483647 mod 340282366920938463463374607431768211456
+quote -32768 mod -170141183460469231731687303715884105728
+-32768 mod -170141183460469231731687303715884105728
+quote -32768 mod -170141183460469231731687303715884105727
+-32768 mod -170141183460469231731687303715884105727
+quote -32768 mod -9223372036854775808
+-32768 mod -9223372036854775808
+quote -32768 mod -9223372036854775807
+-32768 mod -9223372036854775807
+quote -32768 mod -2147483648
+-32768 mod -2147483648
+quote -32768 mod -2147483647
+-32768 mod -2147483647
+quote -32768 mod -32768
+-32768 mod -32768
+quote -32768 mod -32767
+-32768 mod -32767
+quote -32768 mod -128
+-32768 mod -128
+quote -32768 mod -127
+-32768 mod -127
+quote -32768 mod 255
+-32768 mod 255
+quote -32768 mod 256
+-32768 mod 256
+quote -32768 mod 65535
+-32768 mod 65535
+quote -32768 mod 65536
+-32768 mod 65536
+quote -32768 mod 4294967295
+-32768 mod 4294967295
+quote -32768 mod 4294967296
+-32768 mod 4294967296
+quote -32768 mod 18446744073709551615
+-32768 mod 18446744073709551615
+quote -32768 mod 18446744073709551616
+-32768 mod 18446744073709551616
+quote -32768 mod 340282366920938463463374607431768211455
+-32768 mod 340282366920938463463374607431768211455
+quote -32768 mod 340282366920938463463374607431768211456
+-32768 mod 340282366920938463463374607431768211456
+quote -32767 mod -170141183460469231731687303715884105728
+-32767 mod -170141183460469231731687303715884105728
+quote -32767 mod -170141183460469231731687303715884105727
+-32767 mod -170141183460469231731687303715884105727
+quote -32767 mod -9223372036854775808
+-32767 mod -9223372036854775808
+quote -32767 mod -9223372036854775807
+-32767 mod -9223372036854775807
+quote -32767 mod -2147483648
+-32767 mod -2147483648
+quote -32767 mod -2147483647
+-32767 mod -2147483647
+quote -32767 mod -32768
+-32767 mod -32768
+quote -32767 mod -32767
+-32767 mod -32767
+quote -32767 mod -128
+-32767 mod -128
+quote -32767 mod -127
+-32767 mod -127
+quote -32767 mod 255
+-32767 mod 255
+quote -32767 mod 256
+-32767 mod 256
+quote -32767 mod 65535
+-32767 mod 65535
+quote -32767 mod 65536
+-32767 mod 65536
+quote -32767 mod 4294967295
+-32767 mod 4294967295
+quote -32767 mod 4294967296
+-32767 mod 4294967296
+quote -32767 mod 18446744073709551615
+-32767 mod 18446744073709551615
+quote -32767 mod 18446744073709551616
+-32767 mod 18446744073709551616
+quote -32767 mod 340282366920938463463374607431768211455
+-32767 mod 340282366920938463463374607431768211455
+quote -32767 mod 340282366920938463463374607431768211456
+-32767 mod 340282366920938463463374607431768211456
+quote -128 mod -170141183460469231731687303715884105728
+-128 mod -170141183460469231731687303715884105728
+quote -128 mod -170141183460469231731687303715884105727
+-128 mod -170141183460469231731687303715884105727
+quote -128 mod -9223372036854775808
+-128 mod -9223372036854775808
+quote -128 mod -9223372036854775807
+-128 mod -9223372036854775807
+quote -128 mod -2147483648
+-128 mod -2147483648
+quote -128 mod -2147483647
+-128 mod -2147483647
+quote -128 mod -32768
+-128 mod -32768
+quote -128 mod -32767
+-128 mod -32767
+quote -128 mod -128
+-128 mod -128
+quote -128 mod -127
+-128 mod -127
+quote -128 mod 255
+-128 mod 255
+quote -128 mod 256
+-128 mod 256
+quote -128 mod 65535
+-128 mod 65535
+quote -128 mod 65536
+-128 mod 65536
+quote -128 mod 4294967295
+-128 mod 4294967295
+quote -128 mod 4294967296
+-128 mod 4294967296
+quote -128 mod 18446744073709551615
+-128 mod 18446744073709551615
+quote -128 mod 18446744073709551616
+-128 mod 18446744073709551616
+quote -128 mod 340282366920938463463374607431768211455
+-128 mod 340282366920938463463374607431768211455
+quote -128 mod 340282366920938463463374607431768211456
+-128 mod 340282366920938463463374607431768211456
+quote -127 mod -170141183460469231731687303715884105728
+-127 mod -170141183460469231731687303715884105728
+quote -127 mod -170141183460469231731687303715884105727
+-127 mod -170141183460469231731687303715884105727
+quote -127 mod -9223372036854775808
+-127 mod -9223372036854775808
+quote -127 mod -9223372036854775807
+-127 mod -9223372036854775807
+quote -127 mod -2147483648
+-127 mod -2147483648
+quote -127 mod -2147483647
+-127 mod -2147483647
+quote -127 mod -32768
+-127 mod -32768
+quote -127 mod -32767
+-127 mod -32767
+quote -127 mod -128
+-127 mod -128
+quote -127 mod -127
+-127 mod -127
+quote -127 mod 255
+-127 mod 255
+quote -127 mod 256
+-127 mod 256
+quote -127 mod 65535
+-127 mod 65535
+quote -127 mod 65536
+-127 mod 65536
+quote -127 mod 4294967295
+-127 mod 4294967295
+quote -127 mod 4294967296
+-127 mod 4294967296
+quote -127 mod 18446744073709551615
+-127 mod 18446744073709551615
+quote -127 mod 18446744073709551616
+-127 mod 18446744073709551616
+quote -127 mod 340282366920938463463374607431768211455
+-127 mod 340282366920938463463374607431768211455
+quote -127 mod 340282366920938463463374607431768211456
+-127 mod 340282366920938463463374607431768211456
+quote 255 mod -170141183460469231731687303715884105728
+255 mod -170141183460469231731687303715884105728
+quote 255 mod -170141183460469231731687303715884105727
+255 mod -170141183460469231731687303715884105727
+quote 255 mod -9223372036854775808
+255 mod -9223372036854775808
+quote 255 mod -9223372036854775807
+255 mod -9223372036854775807
+quote 255 mod -2147483648
+255 mod -2147483648
+quote 255 mod -2147483647
+255 mod -2147483647
+quote 255 mod -32768
+255 mod -32768
+quote 255 mod -32767
+255 mod -32767
+quote 255 mod -128
+255 mod -128
+quote 255 mod -127
+255 mod -127
+quote 255 mod 255
+255 mod 255
+quote 255 mod 256
+255 mod 256
+quote 255 mod 65535
+255 mod 65535
+quote 255 mod 65536
+255 mod 65536
+quote 255 mod 4294967295
+255 mod 4294967295
+quote 255 mod 4294967296
+255 mod 4294967296
+quote 255 mod 18446744073709551615
+255 mod 18446744073709551615
+quote 255 mod 18446744073709551616
+255 mod 18446744073709551616
+quote 255 mod 340282366920938463463374607431768211455
+255 mod 340282366920938463463374607431768211455
+quote 255 mod 340282366920938463463374607431768211456
+255 mod 340282366920938463463374607431768211456
+quote 256 mod -170141183460469231731687303715884105728
+256 mod -170141183460469231731687303715884105728
+quote 256 mod -170141183460469231731687303715884105727
+256 mod -170141183460469231731687303715884105727
+quote 256 mod -9223372036854775808
+256 mod -9223372036854775808
+quote 256 mod -9223372036854775807
+256 mod -9223372036854775807
+quote 256 mod -2147483648
+256 mod -2147483648
+quote 256 mod -2147483647
+256 mod -2147483647
+quote 256 mod -32768
+256 mod -32768
+quote 256 mod -32767
+256 mod -32767
+quote 256 mod -128
+256 mod -128
+quote 256 mod -127
+256 mod -127
+quote 256 mod 255
+256 mod 255
+quote 256 mod 256
+256 mod 256
+quote 256 mod 65535
+256 mod 65535
+quote 256 mod 65536
+256 mod 65536
+quote 256 mod 4294967295
+256 mod 4294967295
+quote 256 mod 4294967296
+256 mod 4294967296
+quote 256 mod 18446744073709551615
+256 mod 18446744073709551615
+quote 256 mod 18446744073709551616
+256 mod 18446744073709551616
+quote 256 mod 340282366920938463463374607431768211455
+256 mod 340282366920938463463374607431768211455
+quote 256 mod 340282366920938463463374607431768211456
+256 mod 340282366920938463463374607431768211456
+quote 65535 mod -170141183460469231731687303715884105728
+65535 mod -170141183460469231731687303715884105728
+quote 65535 mod -170141183460469231731687303715884105727
+65535 mod -170141183460469231731687303715884105727
+quote 65535 mod -9223372036854775808
+65535 mod -9223372036854775808
+quote 65535 mod -9223372036854775807
+65535 mod -9223372036854775807
+quote 65535 mod -2147483648
+65535 mod -2147483648
+quote 65535 mod -2147483647
+65535 mod -2147483647
+quote 65535 mod -32768
+65535 mod -32768
+quote 65535 mod -32767
+65535 mod -32767
+quote 65535 mod -128
+65535 mod -128
+quote 65535 mod -127
+65535 mod -127
+quote 65535 mod 255
+65535 mod 255
+quote 65535 mod 256
+65535 mod 256
+quote 65535 mod 65535
+65535 mod 65535
+quote 65535 mod 65536
+65535 mod 65536
+quote 65535 mod 4294967295
+65535 mod 4294967295
+quote 65535 mod 4294967296
+65535 mod 4294967296
+quote 65535 mod 18446744073709551615
+65535 mod 18446744073709551615
+quote 65535 mod 18446744073709551616
+65535 mod 18446744073709551616
+quote 65535 mod 340282366920938463463374607431768211455
+65535 mod 340282366920938463463374607431768211455
+quote 65535 mod 340282366920938463463374607431768211456
+65535 mod 340282366920938463463374607431768211456
+quote 65536 mod -170141183460469231731687303715884105728
+65536 mod -170141183460469231731687303715884105728
+quote 65536 mod -170141183460469231731687303715884105727
+65536 mod -170141183460469231731687303715884105727
+quote 65536 mod -9223372036854775808
+65536 mod -9223372036854775808
+quote 65536 mod -9223372036854775807
+65536 mod -9223372036854775807
+quote 65536 mod -2147483648
+65536 mod -2147483648
+quote 65536 mod -2147483647
+65536 mod -2147483647
+quote 65536 mod -32768
+65536 mod -32768
+quote 65536 mod -32767
+65536 mod -32767
+quote 65536 mod -128
+65536 mod -128
+quote 65536 mod -127
+65536 mod -127
+quote 65536 mod 255
+65536 mod 255
+quote 65536 mod 256
+65536 mod 256
+quote 65536 mod 65535
+65536 mod 65535
+quote 65536 mod 65536
+65536 mod 65536
+quote 65536 mod 4294967295
+65536 mod 4294967295
+quote 65536 mod 4294967296
+65536 mod 4294967296
+quote 65536 mod 18446744073709551615
+65536 mod 18446744073709551615
+quote 65536 mod 18446744073709551616
+65536 mod 18446744073709551616
+quote 65536 mod 340282366920938463463374607431768211455
+65536 mod 340282366920938463463374607431768211455
+quote 65536 mod 340282366920938463463374607431768211456
+65536 mod 340282366920938463463374607431768211456
+quote 4294967295 mod -170141183460469231731687303715884105728
+4294967295 mod -170141183460469231731687303715884105728
+quote 4294967295 mod -170141183460469231731687303715884105727
+4294967295 mod -170141183460469231731687303715884105727
+quote 4294967295 mod -9223372036854775808
+4294967295 mod -9223372036854775808
+quote 4294967295 mod -9223372036854775807
+4294967295 mod -9223372036854775807
+quote 4294967295 mod -2147483648
+4294967295 mod -2147483648
+quote 4294967295 mod -2147483647
+4294967295 mod -2147483647
+quote 4294967295 mod -32768
+4294967295 mod -32768
+quote 4294967295 mod -32767
+4294967295 mod -32767
+quote 4294967295 mod -128
+4294967295 mod -128
+quote 4294967295 mod -127
+4294967295 mod -127
+quote 4294967295 mod 255
+4294967295 mod 255
+quote 4294967295 mod 256
+4294967295 mod 256
+quote 4294967295 mod 65535
+4294967295 mod 65535
+quote 4294967295 mod 65536
+4294967295 mod 65536
+quote 4294967295 mod 4294967295
+4294967295 mod 4294967295
+quote 4294967295 mod 4294967296
+4294967295 mod 4294967296
+quote 4294967295 mod 18446744073709551615
+4294967295 mod 18446744073709551615
+quote 4294967295 mod 18446744073709551616
+4294967295 mod 18446744073709551616
+quote 4294967295 mod 340282366920938463463374607431768211455
+4294967295 mod 340282366920938463463374607431768211455
+quote 4294967295 mod 340282366920938463463374607431768211456
+4294967295 mod 340282366920938463463374607431768211456
+quote 4294967296 mod -170141183460469231731687303715884105728
+4294967296 mod -170141183460469231731687303715884105728
+quote 4294967296 mod -170141183460469231731687303715884105727
+4294967296 mod -170141183460469231731687303715884105727
+quote 4294967296 mod -9223372036854775808
+4294967296 mod -9223372036854775808
+quote 4294967296 mod -9223372036854775807
+4294967296 mod -9223372036854775807
+quote 4294967296 mod -2147483648
+4294967296 mod -2147483648
+quote 4294967296 mod -2147483647
+4294967296 mod -2147483647
+quote 4294967296 mod -32768
+4294967296 mod -32768
+quote 4294967296 mod -32767
+4294967296 mod -32767
+quote 4294967296 mod -128
+4294967296 mod -128
+quote 4294967296 mod -127
+4294967296 mod -127
+quote 4294967296 mod 255
+4294967296 mod 255
+quote 4294967296 mod 256
+4294967296 mod 256
+quote 4294967296 mod 65535
+4294967296 mod 65535
+quote 4294967296 mod 65536
+4294967296 mod 65536
+quote 4294967296 mod 4294967295
+4294967296 mod 4294967295
+quote 4294967296 mod 4294967296
+4294967296 mod 4294967296
+quote 4294967296 mod 18446744073709551615
+4294967296 mod 18446744073709551615
+quote 4294967296 mod 18446744073709551616
+4294967296 mod 18446744073709551616
+quote 4294967296 mod 340282366920938463463374607431768211455
+4294967296 mod 340282366920938463463374607431768211455
+quote 4294967296 mod 340282366920938463463374607431768211456
+4294967296 mod 340282366920938463463374607431768211456
+quote 18446744073709551615 mod -170141183460469231731687303715884105728
+18446744073709551615 mod -170141183460469231731687303715884105728
+quote 18446744073709551615 mod -170141183460469231731687303715884105727
+18446744073709551615 mod -170141183460469231731687303715884105727
+quote 18446744073709551615 mod -9223372036854775808
+18446744073709551615 mod -9223372036854775808
+quote 18446744073709551615 mod -9223372036854775807
+18446744073709551615 mod -9223372036854775807
+quote 18446744073709551615 mod -2147483648
+18446744073709551615 mod -2147483648
+quote 18446744073709551615 mod -2147483647
+18446744073709551615 mod -2147483647
+quote 18446744073709551615 mod -32768
+18446744073709551615 mod -32768
+quote 18446744073709551615 mod -32767
+18446744073709551615 mod -32767
+quote 18446744073709551615 mod -128
+18446744073709551615 mod -128
+quote 18446744073709551615 mod -127
+18446744073709551615 mod -127
+quote 18446744073709551615 mod 255
+18446744073709551615 mod 255
+quote 18446744073709551615 mod 256
+18446744073709551615 mod 256
+quote 18446744073709551615 mod 65535
+18446744073709551615 mod 65535
+quote 18446744073709551615 mod 65536
+18446744073709551615 mod 65536
+quote 18446744073709551615 mod 4294967295
+18446744073709551615 mod 4294967295
+quote 18446744073709551615 mod 4294967296
+18446744073709551615 mod 4294967296
+quote 18446744073709551615 mod 18446744073709551615
+18446744073709551615 mod 18446744073709551615
+quote 18446744073709551615 mod 18446744073709551616
+18446744073709551615 mod 18446744073709551616
+quote 18446744073709551615 mod 340282366920938463463374607431768211455
+18446744073709551615 mod 340282366920938463463374607431768211455
+quote 18446744073709551615 mod 340282366920938463463374607431768211456
+18446744073709551615 mod 340282366920938463463374607431768211456
+quote 18446744073709551616 mod -170141183460469231731687303715884105728
+18446744073709551616 mod -170141183460469231731687303715884105728
+quote 18446744073709551616 mod -170141183460469231731687303715884105727
+18446744073709551616 mod -170141183460469231731687303715884105727
+quote 18446744073709551616 mod -9223372036854775808
+18446744073709551616 mod -9223372036854775808
+quote 18446744073709551616 mod -9223372036854775807
+18446744073709551616 mod -9223372036854775807
+quote 18446744073709551616 mod -2147483648
+18446744073709551616 mod -2147483648
+quote 18446744073709551616 mod -2147483647
+18446744073709551616 mod -2147483647
+quote 18446744073709551616 mod -32768
+18446744073709551616 mod -32768
+quote 18446744073709551616 mod -32767
+18446744073709551616 mod -32767
+quote 18446744073709551616 mod -128
+18446744073709551616 mod -128
+quote 18446744073709551616 mod -127
+18446744073709551616 mod -127
+quote 18446744073709551616 mod 255
+18446744073709551616 mod 255
+quote 18446744073709551616 mod 256
+18446744073709551616 mod 256
+quote 18446744073709551616 mod 65535
+18446744073709551616 mod 65535
+quote 18446744073709551616 mod 65536
+18446744073709551616 mod 65536
+quote 18446744073709551616 mod 4294967295
+18446744073709551616 mod 4294967295
+quote 18446744073709551616 mod 4294967296
+18446744073709551616 mod 4294967296
+quote 18446744073709551616 mod 18446744073709551615
+18446744073709551616 mod 18446744073709551615
+quote 18446744073709551616 mod 18446744073709551616
+18446744073709551616 mod 18446744073709551616
+quote 18446744073709551616 mod 340282366920938463463374607431768211455
+18446744073709551616 mod 340282366920938463463374607431768211455
+quote 18446744073709551616 mod 340282366920938463463374607431768211456
+18446744073709551616 mod 340282366920938463463374607431768211456
+quote 340282366920938463463374607431768211455 mod -170141183460469231731687303715884105728
+340282366920938463463374607431768211455 mod -170141183460469231731687303715884105728
+quote 340282366920938463463374607431768211455 mod -170141183460469231731687303715884105727
+340282366920938463463374607431768211455 mod -170141183460469231731687303715884105727
+quote 340282366920938463463374607431768211455 mod -9223372036854775808
+340282366920938463463374607431768211455 mod -9223372036854775808
+quote 340282366920938463463374607431768211455 mod -9223372036854775807
+340282366920938463463374607431768211455 mod -9223372036854775807
+quote 340282366920938463463374607431768211455 mod -2147483648
+340282366920938463463374607431768211455 mod -2147483648
+quote 340282366920938463463374607431768211455 mod -2147483647
+340282366920938463463374607431768211455 mod -2147483647
+quote 340282366920938463463374607431768211455 mod -32768
+340282366920938463463374607431768211455 mod -32768
+quote 340282366920938463463374607431768211455 mod -32767
+340282366920938463463374607431768211455 mod -32767
+quote 340282366920938463463374607431768211455 mod -128
+340282366920938463463374607431768211455 mod -128
+quote 340282366920938463463374607431768211455 mod -127
+340282366920938463463374607431768211455 mod -127
+quote 340282366920938463463374607431768211455 mod 255
+340282366920938463463374607431768211455 mod 255
+quote 340282366920938463463374607431768211455 mod 256
+340282366920938463463374607431768211455 mod 256
+quote 340282366920938463463374607431768211455 mod 65535
+340282366920938463463374607431768211455 mod 65535
+quote 340282366920938463463374607431768211455 mod 65536
+340282366920938463463374607431768211455 mod 65536
+quote 340282366920938463463374607431768211455 mod 4294967295
+340282366920938463463374607431768211455 mod 4294967295
+quote 340282366920938463463374607431768211455 mod 4294967296
+340282366920938463463374607431768211455 mod 4294967296
+quote 340282366920938463463374607431768211455 mod 18446744073709551615
+340282366920938463463374607431768211455 mod 18446744073709551615
+quote 340282366920938463463374607431768211455 mod 18446744073709551616
+340282366920938463463374607431768211455 mod 18446744073709551616
+quote 340282366920938463463374607431768211455 mod 340282366920938463463374607431768211455
+340282366920938463463374607431768211455 mod 340282366920938463463374607431768211455
+quote 340282366920938463463374607431768211455 mod 340282366920938463463374607431768211456
+340282366920938463463374607431768211455 mod 340282366920938463463374607431768211456
+quote 340282366920938463463374607431768211456 mod -170141183460469231731687303715884105728
+340282366920938463463374607431768211456 mod -170141183460469231731687303715884105728
+quote 340282366920938463463374607431768211456 mod -170141183460469231731687303715884105727
+340282366920938463463374607431768211456 mod -170141183460469231731687303715884105727
+quote 340282366920938463463374607431768211456 mod -9223372036854775808
+340282366920938463463374607431768211456 mod -9223372036854775808
+quote 340282366920938463463374607431768211456 mod -9223372036854775807
+340282366920938463463374607431768211456 mod -9223372036854775807
+quote 340282366920938463463374607431768211456 mod -2147483648
+340282366920938463463374607431768211456 mod -2147483648
+quote 340282366920938463463374607431768211456 mod -2147483647
+340282366920938463463374607431768211456 mod -2147483647
+quote 340282366920938463463374607431768211456 mod -32768
+340282366920938463463374607431768211456 mod -32768
+quote 340282366920938463463374607431768211456 mod -32767
+340282366920938463463374607431768211456 mod -32767
+quote 340282366920938463463374607431768211456 mod -128
+340282366920938463463374607431768211456 mod -128
+quote 340282366920938463463374607431768211456 mod -127
+340282366920938463463374607431768211456 mod -127
+quote 340282366920938463463374607431768211456 mod 255
+340282366920938463463374607431768211456 mod 255
+quote 340282366920938463463374607431768211456 mod 256
+340282366920938463463374607431768211456 mod 256
+quote 340282366920938463463374607431768211456 mod 65535
+340282366920938463463374607431768211456 mod 65535
+quote 340282366920938463463374607431768211456 mod 65536
+340282366920938463463374607431768211456 mod 65536
+quote 340282366920938463463374607431768211456 mod 4294967295
+340282366920938463463374607431768211456 mod 4294967295
+quote 340282366920938463463374607431768211456 mod 4294967296
+340282366920938463463374607431768211456 mod 4294967296
+quote 340282366920938463463374607431768211456 mod 18446744073709551615
+340282366920938463463374607431768211456 mod 18446744073709551615
+quote 340282366920938463463374607431768211456 mod 18446744073709551616
+340282366920938463463374607431768211456 mod 18446744073709551616
+quote 340282366920938463463374607431768211456 mod 340282366920938463463374607431768211455
+340282366920938463463374607431768211456 mod 340282366920938463463374607431768211455
+quote 340282366920938463463374607431768211456 mod 340282366920938463463374607431768211456
+340282366920938463463374607431768211456 mod 340282366920938463463374607431768211456
diff --git a/test/ic3/integer_mod.out.expected b/test/ic3/integer_mod.out.expected
new file mode 100644
index 0000000..e8f4f9e
--- /dev/null
+++ b/test/ic3/integer_mod.out.expected
@@ -0,0 +1,800 @@
+-170141183460469231731687303715884105728 mod -170141183460469231731687303715884105728
+0
+-170141183460469231731687303715884105728 mod -170141183460469231731687303715884105727
+-1
+-170141183460469231731687303715884105728 mod -9223372036854775808
+0
+-170141183460469231731687303715884105728 mod -9223372036854775807
+-2
+-170141183460469231731687303715884105728 mod -2147483648
+0
+-170141183460469231731687303715884105728 mod -2147483647
+-8
+-170141183460469231731687303715884105728 mod -32768
+0
+-170141183460469231731687303715884105728 mod -32767
+-128
+-170141183460469231731687303715884105728 mod -128
+0
+-170141183460469231731687303715884105728 mod -127
+-2
+-170141183460469231731687303715884105728 mod 255
+127
+-170141183460469231731687303715884105728 mod 256
+0
+-170141183460469231731687303715884105728 mod 65535
+32767
+-170141183460469231731687303715884105728 mod 65536
+0
+-170141183460469231731687303715884105728 mod 4294967295
+2147483647
+-170141183460469231731687303715884105728 mod 4294967296
+0
+-170141183460469231731687303715884105728 mod 18446744073709551615
+9223372036854775807
+-170141183460469231731687303715884105728 mod 18446744073709551616
+0
+-170141183460469231731687303715884105728 mod 340282366920938463463374607431768211455
+170141183460469231731687303715884105727
+-170141183460469231731687303715884105728 mod 340282366920938463463374607431768211456
+170141183460469231731687303715884105728
+-170141183460469231731687303715884105727 mod -170141183460469231731687303715884105728
+-170141183460469231731687303715884105727
+-170141183460469231731687303715884105727 mod -170141183460469231731687303715884105727
+0
+-170141183460469231731687303715884105727 mod -9223372036854775808
+-9223372036854775807
+-170141183460469231731687303715884105727 mod -9223372036854775807
+-1
+-170141183460469231731687303715884105727 mod -2147483648
+-2147483647
+-170141183460469231731687303715884105727 mod -2147483647
+-7
+-170141183460469231731687303715884105727 mod -32768
+-32767
+-170141183460469231731687303715884105727 mod -32767
+-127
+-170141183460469231731687303715884105727 mod -128
+-127
+-170141183460469231731687303715884105727 mod -127
+-1
+-170141183460469231731687303715884105727 mod 255
+128
+-170141183460469231731687303715884105727 mod 256
+1
+-170141183460469231731687303715884105727 mod 65535
+32768
+-170141183460469231731687303715884105727 mod 65536
+1
+-170141183460469231731687303715884105727 mod 4294967295
+2147483648
+-170141183460469231731687303715884105727 mod 4294967296
+1
+-170141183460469231731687303715884105727 mod 18446744073709551615
+9223372036854775808
+-170141183460469231731687303715884105727 mod 18446744073709551616
+1
+-170141183460469231731687303715884105727 mod 340282366920938463463374607431768211455
+170141183460469231731687303715884105728
+-170141183460469231731687303715884105727 mod 340282366920938463463374607431768211456
+170141183460469231731687303715884105729
+-9223372036854775808 mod -170141183460469231731687303715884105728
+-9223372036854775808
+-9223372036854775808 mod -170141183460469231731687303715884105727
+-9223372036854775808
+-9223372036854775808 mod -9223372036854775808
+0
+-9223372036854775808 mod -9223372036854775807
+-1
+-9223372036854775808 mod -2147483648
+0
+-9223372036854775808 mod -2147483647
+-2
+-9223372036854775808 mod -32768
+0
+-9223372036854775808 mod -32767
+-8
+-9223372036854775808 mod -128
+0
+-9223372036854775808 mod -127
+-1
+-9223372036854775808 mod 255
+127
+-9223372036854775808 mod 256
+0
+-9223372036854775808 mod 65535
+32767
+-9223372036854775808 mod 65536
+0
+-9223372036854775808 mod 4294967295
+2147483647
+-9223372036854775808 mod 4294967296
+0
+-9223372036854775808 mod 18446744073709551615
+9223372036854775807
+-9223372036854775808 mod 18446744073709551616
+9223372036854775808
+-9223372036854775808 mod 340282366920938463463374607431768211455
+340282366920938463454151235394913435647
+-9223372036854775808 mod 340282366920938463463374607431768211456
+340282366920938463454151235394913435648
+-9223372036854775807 mod -170141183460469231731687303715884105728
+-9223372036854775807
+-9223372036854775807 mod -170141183460469231731687303715884105727
+-9223372036854775807
+-9223372036854775807 mod -9223372036854775808
+-9223372036854775807
+-9223372036854775807 mod -9223372036854775807
+0
+-9223372036854775807 mod -2147483648
+-2147483647
+-9223372036854775807 mod -2147483647
+-1
+-9223372036854775807 mod -32768
+-32767
+-9223372036854775807 mod -32767
+-7
+-9223372036854775807 mod -128
+-127
+-9223372036854775807 mod -127
+0
+-9223372036854775807 mod 255
+128
+-9223372036854775807 mod 256
+1
+-9223372036854775807 mod 65535
+32768
+-9223372036854775807 mod 65536
+1
+-9223372036854775807 mod 4294967295
+2147483648
+-9223372036854775807 mod 4294967296
+1
+-9223372036854775807 mod 18446744073709551615
+9223372036854775808
+-9223372036854775807 mod 18446744073709551616
+9223372036854775809
+-9223372036854775807 mod 340282366920938463463374607431768211455
+340282366920938463454151235394913435648
+-9223372036854775807 mod 340282366920938463463374607431768211456
+340282366920938463454151235394913435649
+-2147483648 mod -170141183460469231731687303715884105728
+-2147483648
+-2147483648 mod -170141183460469231731687303715884105727
+-2147483648
+-2147483648 mod -9223372036854775808
+-2147483648
+-2147483648 mod -9223372036854775807
+-2147483648
+-2147483648 mod -2147483648
+0
+-2147483648 mod -2147483647
+-1
+-2147483648 mod -32768
+0
+-2147483648 mod -32767
+-2
+-2147483648 mod -128
+0
+-2147483648 mod -127
+-8
+-2147483648 mod 255
+127
+-2147483648 mod 256
+0
+-2147483648 mod 65535
+32767
+-2147483648 mod 65536
+0
+-2147483648 mod 4294967295
+2147483647
+-2147483648 mod 4294967296
+2147483648
+-2147483648 mod 18446744073709551615
+18446744071562067967
+-2147483648 mod 18446744073709551616
+18446744071562067968
+-2147483648 mod 340282366920938463463374607431768211455
+340282366920938463463374607429620727807
+-2147483648 mod 340282366920938463463374607431768211456
+340282366920938463463374607429620727808
+-2147483647 mod -170141183460469231731687303715884105728
+-2147483647
+-2147483647 mod -170141183460469231731687303715884105727
+-2147483647
+-2147483647 mod -9223372036854775808
+-2147483647
+-2147483647 mod -9223372036854775807
+-2147483647
+-2147483647 mod -2147483648
+-2147483647
+-2147483647 mod -2147483647
+0
+-2147483647 mod -32768
+-32767
+-2147483647 mod -32767
+-1
+-2147483647 mod -128
+-127
+-2147483647 mod -127
+-7
+-2147483647 mod 255
+128
+-2147483647 mod 256
+1
+-2147483647 mod 65535
+32768
+-2147483647 mod 65536
+1
+-2147483647 mod 4294967295
+2147483648
+-2147483647 mod 4294967296
+2147483649
+-2147483647 mod 18446744073709551615
+18446744071562067968
+-2147483647 mod 18446744073709551616
+18446744071562067969
+-2147483647 mod 340282366920938463463374607431768211455
+340282366920938463463374607429620727808
+-2147483647 mod 340282366920938463463374607431768211456
+340282366920938463463374607429620727809
+-32768 mod -170141183460469231731687303715884105728
+-32768
+-32768 mod -170141183460469231731687303715884105727
+-32768
+-32768 mod -9223372036854775808
+-32768
+-32768 mod -9223372036854775807
+-32768
+-32768 mod -2147483648
+-32768
+-32768 mod -2147483647
+-32768
+-32768 mod -32768
+0
+-32768 mod -32767
+-1
+-32768 mod -128
+0
+-32768 mod -127
+-2
+-32768 mod 255
+127
+-32768 mod 256
+0
+-32768 mod 65535
+32767
+-32768 mod 65536
+32768
+-32768 mod 4294967295
+4294934527
+-32768 mod 4294967296
+4294934528
+-32768 mod 18446744073709551615
+18446744073709518847
+-32768 mod 18446744073709551616
+18446744073709518848
+-32768 mod 340282366920938463463374607431768211455
+340282366920938463463374607431768178687
+-32768 mod 340282366920938463463374607431768211456
+340282366920938463463374607431768178688
+-32767 mod -170141183460469231731687303715884105728
+-32767
+-32767 mod -170141183460469231731687303715884105727
+-32767
+-32767 mod -9223372036854775808
+-32767
+-32767 mod -9223372036854775807
+-32767
+-32767 mod -2147483648
+-32767
+-32767 mod -2147483647
+-32767
+-32767 mod -32768
+-32767
+-32767 mod -32767
+0
+-32767 mod -128
+-127
+-32767 mod -127
+-1
+-32767 mod 255
+128
+-32767 mod 256
+1
+-32767 mod 65535
+32768
+-32767 mod 65536
+32769
+-32767 mod 4294967295
+4294934528
+-32767 mod 4294967296
+4294934529
+-32767 mod 18446744073709551615
+18446744073709518848
+-32767 mod 18446744073709551616
+18446744073709518849
+-32767 mod 340282366920938463463374607431768211455
+340282366920938463463374607431768178688
+-32767 mod 340282366920938463463374607431768211456
+340282366920938463463374607431768178689
+-128 mod -170141183460469231731687303715884105728
+-128
+-128 mod -170141183460469231731687303715884105727
+-128
+-128 mod -9223372036854775808
+-128
+-128 mod -9223372036854775807
+-128
+-128 mod -2147483648
+-128
+-128 mod -2147483647
+-128
+-128 mod -32768
+-128
+-128 mod -32767
+-128
+-128 mod -128
+0
+-128 mod -127
+-1
+-128 mod 255
+127
+-128 mod 256
+128
+-128 mod 65535
+65407
+-128 mod 65536
+65408
+-128 mod 4294967295
+4294967167
+-128 mod 4294967296
+4294967168
+-128 mod 18446744073709551615
+18446744073709551487
+-128 mod 18446744073709551616
+18446744073709551488
+-128 mod 340282366920938463463374607431768211455
+340282366920938463463374607431768211327
+-128 mod 340282366920938463463374607431768211456
+340282366920938463463374607431768211328
+-127 mod -170141183460469231731687303715884105728
+-127
+-127 mod -170141183460469231731687303715884105727
+-127
+-127 mod -9223372036854775808
+-127
+-127 mod -9223372036854775807
+-127
+-127 mod -2147483648
+-127
+-127 mod -2147483647
+-127
+-127 mod -32768
+-127
+-127 mod -32767
+-127
+-127 mod -128
+-127
+-127 mod -127
+0
+-127 mod 255
+128
+-127 mod 256
+129
+-127 mod 65535
+65408
+-127 mod 65536
+65409
+-127 mod 4294967295
+4294967168
+-127 mod 4294967296
+4294967169
+-127 mod 18446744073709551615
+18446744073709551488
+-127 mod 18446744073709551616
+18446744073709551489
+-127 mod 340282366920938463463374607431768211455
+340282366920938463463374607431768211328
+-127 mod 340282366920938463463374607431768211456
+340282366920938463463374607431768211329
+255 mod -170141183460469231731687303715884105728
+-170141183460469231731687303715884105473
+255 mod -170141183460469231731687303715884105727
+-170141183460469231731687303715884105472
+255 mod -9223372036854775808
+-9223372036854775553
+255 mod -9223372036854775807
+-9223372036854775552
+255 mod -2147483648
+-2147483393
+255 mod -2147483647
+-2147483392
+255 mod -32768
+-32513
+255 mod -32767
+-32512
+255 mod -128
+-1
+255 mod -127
+-126
+255 mod 255
+0
+255 mod 256
+255
+255 mod 65535
+255
+255 mod 65536
+255
+255 mod 4294967295
+255
+255 mod 4294967296
+255
+255 mod 18446744073709551615
+255
+255 mod 18446744073709551616
+255
+255 mod 340282366920938463463374607431768211455
+255
+255 mod 340282366920938463463374607431768211456
+255
+256 mod -170141183460469231731687303715884105728
+-170141183460469231731687303715884105472
+256 mod -170141183460469231731687303715884105727
+-170141183460469231731687303715884105471
+256 mod -9223372036854775808
+-9223372036854775552
+256 mod -9223372036854775807
+-9223372036854775551
+256 mod -2147483648
+-2147483392
+256 mod -2147483647
+-2147483391
+256 mod -32768
+-32512
+256 mod -32767
+-32511
+256 mod -128
+0
+256 mod -127
+-125
+256 mod 255
+1
+256 mod 256
+0
+256 mod 65535
+256
+256 mod 65536
+256
+256 mod 4294967295
+256
+256 mod 4294967296
+256
+256 mod 18446744073709551615
+256
+256 mod 18446744073709551616
+256
+256 mod 340282366920938463463374607431768211455
+256
+256 mod 340282366920938463463374607431768211456
+256
+65535 mod -170141183460469231731687303715884105728
+-170141183460469231731687303715884040193
+65535 mod -170141183460469231731687303715884105727
+-170141183460469231731687303715884040192
+65535 mod -9223372036854775808
+-9223372036854710273
+65535 mod -9223372036854775807
+-9223372036854710272
+65535 mod -2147483648
+-2147418113
+65535 mod -2147483647
+-2147418112
+65535 mod -32768
+-1
+65535 mod -32767
+-32766
+65535 mod -128
+-1
+65535 mod -127
+-124
+65535 mod 255
+0
+65535 mod 256
+255
+65535 mod 65535
+0
+65535 mod 65536
+65535
+65535 mod 4294967295
+65535
+65535 mod 4294967296
+65535
+65535 mod 18446744073709551615
+65535
+65535 mod 18446744073709551616
+65535
+65535 mod 340282366920938463463374607431768211455
+65535
+65535 mod 340282366920938463463374607431768211456
+65535
+65536 mod -170141183460469231731687303715884105728
+-170141183460469231731687303715884040192
+65536 mod -170141183460469231731687303715884105727
+-170141183460469231731687303715884040191
+65536 mod -9223372036854775808
+-9223372036854710272
+65536 mod -9223372036854775807
+-9223372036854710271
+65536 mod -2147483648
+-2147418112
+65536 mod -2147483647
+-2147418111
+65536 mod -32768
+0
+65536 mod -32767
+-32765
+65536 mod -128
+0
+65536 mod -127
+-123
+65536 mod 255
+1
+65536 mod 256
+0
+65536 mod 65535
+1
+65536 mod 65536
+0
+65536 mod 4294967295
+65536
+65536 mod 4294967296
+65536
+65536 mod 18446744073709551615
+65536
+65536 mod 18446744073709551616
+65536
+65536 mod 340282366920938463463374607431768211455
+65536
+65536 mod 340282366920938463463374607431768211456
+65536
+4294967295 mod -170141183460469231731687303715884105728
+-170141183460469231731687303711589138433
+4294967295 mod -170141183460469231731687303715884105727
+-170141183460469231731687303711589138432
+4294967295 mod -9223372036854775808
+-9223372032559808513
+4294967295 mod -9223372036854775807
+-9223372032559808512
+4294967295 mod -2147483648
+-1
+4294967295 mod -2147483647
+-2147483646
+4294967295 mod -32768
+-1
+4294967295 mod -32767
+-32764
+4294967295 mod -128
+-1
+4294967295 mod -127
+-112
+4294967295 mod 255
+0
+4294967295 mod 256
+255
+4294967295 mod 65535
+0
+4294967295 mod 65536
+65535
+4294967295 mod 4294967295
+0
+4294967295 mod 4294967296
+4294967295
+4294967295 mod 18446744073709551615
+4294967295
+4294967295 mod 18446744073709551616
+4294967295
+4294967295 mod 340282366920938463463374607431768211455
+4294967295
+4294967295 mod 340282366920938463463374607431768211456
+4294967295
+4294967296 mod -170141183460469231731687303715884105728
+-170141183460469231731687303711589138432
+4294967296 mod -170141183460469231731687303715884105727
+-170141183460469231731687303711589138431
+4294967296 mod -9223372036854775808
+-9223372032559808512
+4294967296 mod -9223372036854775807
+-9223372032559808511
+4294967296 mod -2147483648
+0
+4294967296 mod -2147483647
+-2147483645
+4294967296 mod -32768
+0
+4294967296 mod -32767
+-32763
+4294967296 mod -128
+0
+4294967296 mod -127
+-111
+4294967296 mod 255
+1
+4294967296 mod 256
+0
+4294967296 mod 65535
+1
+4294967296 mod 65536
+0
+4294967296 mod 4294967295
+1
+4294967296 mod 4294967296
+0
+4294967296 mod 18446744073709551615
+4294967296
+4294967296 mod 18446744073709551616
+4294967296
+4294967296 mod 340282366920938463463374607431768211455
+4294967296
+4294967296 mod 340282366920938463463374607431768211456
+4294967296
+18446744073709551615 mod -170141183460469231731687303715884105728
+-170141183460469231713240559642174554113
+18446744073709551615 mod -170141183460469231731687303715884105727
+-170141183460469231713240559642174554112
+18446744073709551615 mod -9223372036854775808
+-1
+18446744073709551615 mod -9223372036854775807
+-9223372036854775806
+18446744073709551615 mod -2147483648
+-1
+18446744073709551615 mod -2147483647
+-2147483644
+18446744073709551615 mod -32768
+-1
+18446744073709551615 mod -32767
+-32752
+18446744073709551615 mod -128
+-1
+18446744073709551615 mod -127
+-126
+18446744073709551615 mod 255
+0
+18446744073709551615 mod 256
+255
+18446744073709551615 mod 65535
+0
+18446744073709551615 mod 65536
+65535
+18446744073709551615 mod 4294967295
+0
+18446744073709551615 mod 4294967296
+4294967295
+18446744073709551615 mod 18446744073709551615
+0
+18446744073709551615 mod 18446744073709551616
+18446744073709551615
+18446744073709551615 mod 340282366920938463463374607431768211455
+18446744073709551615
+18446744073709551615 mod 340282366920938463463374607431768211456
+18446744073709551615
+18446744073709551616 mod -170141183460469231731687303715884105728
+-170141183460469231713240559642174554112
+18446744073709551616 mod -170141183460469231731687303715884105727
+-170141183460469231713240559642174554111
+18446744073709551616 mod -9223372036854775808
+0
+18446744073709551616 mod -9223372036854775807
+-9223372036854775805
+18446744073709551616 mod -2147483648
+0
+18446744073709551616 mod -2147483647
+-2147483643
+18446744073709551616 mod -32768
+0
+18446744073709551616 mod -32767
+-32751
+18446744073709551616 mod -128
+0
+18446744073709551616 mod -127
+-125
+18446744073709551616 mod 255
+1
+18446744073709551616 mod 256
+0
+18446744073709551616 mod 65535
+1
+18446744073709551616 mod 65536
+0
+18446744073709551616 mod 4294967295
+1
+18446744073709551616 mod 4294967296
+0
+18446744073709551616 mod 18446744073709551615
+1
+18446744073709551616 mod 18446744073709551616
+0
+18446744073709551616 mod 340282366920938463463374607431768211455
+18446744073709551616
+18446744073709551616 mod 340282366920938463463374607431768211456
+18446744073709551616
+340282366920938463463374607431768211455 mod -170141183460469231731687303715884105728
+-1
+340282366920938463463374607431768211455 mod -170141183460469231731687303715884105727
+-170141183460469231731687303715884105726
+340282366920938463463374607431768211455 mod -9223372036854775808
+-1
+340282366920938463463374607431768211455 mod -9223372036854775807
+-9223372036854775804
+340282366920938463463374607431768211455 mod -2147483648
+-1
+340282366920938463463374607431768211455 mod -2147483647
+-2147483632
+340282366920938463463374607431768211455 mod -32768
+-1
+340282366920938463463374607431768211455 mod -32767
+-32512
+340282366920938463463374607431768211455 mod -128
+-1
+340282366920938463463374607431768211455 mod -127
+-124
+340282366920938463463374607431768211455 mod 255
+0
+340282366920938463463374607431768211455 mod 256
+255
+340282366920938463463374607431768211455 mod 65535
+0
+340282366920938463463374607431768211455 mod 65536
+65535
+340282366920938463463374607431768211455 mod 4294967295
+0
+340282366920938463463374607431768211455 mod 4294967296
+4294967295
+340282366920938463463374607431768211455 mod 18446744073709551615
+0
+340282366920938463463374607431768211455 mod 18446744073709551616
+18446744073709551615
+340282366920938463463374607431768211455 mod 340282366920938463463374607431768211455
+0
+340282366920938463463374607431768211455 mod 340282366920938463463374607431768211456
+340282366920938463463374607431768211455
+340282366920938463463374607431768211456 mod -170141183460469231731687303715884105728
+0
+340282366920938463463374607431768211456 mod -170141183460469231731687303715884105727
+-170141183460469231731687303715884105725
+340282366920938463463374607431768211456 mod -9223372036854775808
+0
+340282366920938463463374607431768211456 mod -9223372036854775807
+-9223372036854775803
+340282366920938463463374607431768211456 mod -2147483648
+0
+340282366920938463463374607431768211456 mod -2147483647
+-2147483631
+340282366920938463463374607431768211456 mod -32768
+0
+340282366920938463463374607431768211456 mod -32767
+-32511
+340282366920938463463374607431768211456 mod -128
+0
+340282366920938463463374607431768211456 mod -127
+-123
+340282366920938463463374607431768211456 mod 255
+1
+340282366920938463463374607431768211456 mod 256
+0
+340282366920938463463374607431768211456 mod 65535
+1
+340282366920938463463374607431768211456 mod 65536
+0
+340282366920938463463374607431768211456 mod 4294967295
+1
+340282366920938463463374607431768211456 mod 4294967296
+0
+340282366920938463463374607431768211456 mod 18446744073709551615
+1
+340282366920938463463374607431768211456 mod 18446744073709551616
+0
+340282366920938463463374607431768211456 mod 340282366920938463463374607431768211455
+1
+340282366920938463463374607431768211456 mod 340282366920938463463374607431768211456
+0
diff --git a/test/ic3/integer_mod.ret.expected b/test/ic3/integer_mod.ret.expected
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/test/ic3/integer_mod.ret.expected
@@ -0,0 +1 @@
+0
diff --git a/test/ic3/integer_mul.in b/test/ic3/integer_mul.in
new file mode 100644
index 0000000..e58932d
--- /dev/null
+++ b/test/ic3/integer_mul.in
@@ -0,0 +1,800 @@
+quote -170141183460469231731687303715884105728 * -170141183460469231731687303715884105728
+-170141183460469231731687303715884105728 * -170141183460469231731687303715884105728
+quote -170141183460469231731687303715884105728 * -170141183460469231731687303715884105727
+-170141183460469231731687303715884105728 * -170141183460469231731687303715884105727
+quote -170141183460469231731687303715884105728 * -9223372036854775808
+-170141183460469231731687303715884105728 * -9223372036854775808
+quote -170141183460469231731687303715884105728 * -9223372036854775807
+-170141183460469231731687303715884105728 * -9223372036854775807
+quote -170141183460469231731687303715884105728 * -2147483648
+-170141183460469231731687303715884105728 * -2147483648
+quote -170141183460469231731687303715884105728 * -2147483647
+-170141183460469231731687303715884105728 * -2147483647
+quote -170141183460469231731687303715884105728 * -32768
+-170141183460469231731687303715884105728 * -32768
+quote -170141183460469231731687303715884105728 * -32767
+-170141183460469231731687303715884105728 * -32767
+quote -170141183460469231731687303715884105728 * -128
+-170141183460469231731687303715884105728 * -128
+quote -170141183460469231731687303715884105728 * -127
+-170141183460469231731687303715884105728 * -127
+quote -170141183460469231731687303715884105728 * 255
+-170141183460469231731687303715884105728 * 255
+quote -170141183460469231731687303715884105728 * 256
+-170141183460469231731687303715884105728 * 256
+quote -170141183460469231731687303715884105728 * 65535
+-170141183460469231731687303715884105728 * 65535
+quote -170141183460469231731687303715884105728 * 65536
+-170141183460469231731687303715884105728 * 65536
+quote -170141183460469231731687303715884105728 * 4294967295
+-170141183460469231731687303715884105728 * 4294967295
+quote -170141183460469231731687303715884105728 * 4294967296
+-170141183460469231731687303715884105728 * 4294967296
+quote -170141183460469231731687303715884105728 * 18446744073709551615
+-170141183460469231731687303715884105728 * 18446744073709551615
+quote -170141183460469231731687303715884105728 * 18446744073709551616
+-170141183460469231731687303715884105728 * 18446744073709551616
+quote -170141183460469231731687303715884105728 * 340282366920938463463374607431768211455
+-170141183460469231731687303715884105728 * 340282366920938463463374607431768211455
+quote -170141183460469231731687303715884105728 * 340282366920938463463374607431768211456
+-170141183460469231731687303715884105728 * 340282366920938463463374607431768211456
+quote -170141183460469231731687303715884105727 * -170141183460469231731687303715884105728
+-170141183460469231731687303715884105727 * -170141183460469231731687303715884105728
+quote -170141183460469231731687303715884105727 * -170141183460469231731687303715884105727
+-170141183460469231731687303715884105727 * -170141183460469231731687303715884105727
+quote -170141183460469231731687303715884105727 * -9223372036854775808
+-170141183460469231731687303715884105727 * -9223372036854775808
+quote -170141183460469231731687303715884105727 * -9223372036854775807
+-170141183460469231731687303715884105727 * -9223372036854775807
+quote -170141183460469231731687303715884105727 * -2147483648
+-170141183460469231731687303715884105727 * -2147483648
+quote -170141183460469231731687303715884105727 * -2147483647
+-170141183460469231731687303715884105727 * -2147483647
+quote -170141183460469231731687303715884105727 * -32768
+-170141183460469231731687303715884105727 * -32768
+quote -170141183460469231731687303715884105727 * -32767
+-170141183460469231731687303715884105727 * -32767
+quote -170141183460469231731687303715884105727 * -128
+-170141183460469231731687303715884105727 * -128
+quote -170141183460469231731687303715884105727 * -127
+-170141183460469231731687303715884105727 * -127
+quote -170141183460469231731687303715884105727 * 255
+-170141183460469231731687303715884105727 * 255
+quote -170141183460469231731687303715884105727 * 256
+-170141183460469231731687303715884105727 * 256
+quote -170141183460469231731687303715884105727 * 65535
+-170141183460469231731687303715884105727 * 65535
+quote -170141183460469231731687303715884105727 * 65536
+-170141183460469231731687303715884105727 * 65536
+quote -170141183460469231731687303715884105727 * 4294967295
+-170141183460469231731687303715884105727 * 4294967295
+quote -170141183460469231731687303715884105727 * 4294967296
+-170141183460469231731687303715884105727 * 4294967296
+quote -170141183460469231731687303715884105727 * 18446744073709551615
+-170141183460469231731687303715884105727 * 18446744073709551615
+quote -170141183460469231731687303715884105727 * 18446744073709551616
+-170141183460469231731687303715884105727 * 18446744073709551616
+quote -170141183460469231731687303715884105727 * 340282366920938463463374607431768211455
+-170141183460469231731687303715884105727 * 340282366920938463463374607431768211455
+quote -170141183460469231731687303715884105727 * 340282366920938463463374607431768211456
+-170141183460469231731687303715884105727 * 340282366920938463463374607431768211456
+quote -9223372036854775808 * -170141183460469231731687303715884105728
+-9223372036854775808 * -170141183460469231731687303715884105728
+quote -9223372036854775808 * -170141183460469231731687303715884105727
+-9223372036854775808 * -170141183460469231731687303715884105727
+quote -9223372036854775808 * -9223372036854775808
+-9223372036854775808 * -9223372036854775808
+quote -9223372036854775808 * -9223372036854775807
+-9223372036854775808 * -9223372036854775807
+quote -9223372036854775808 * -2147483648
+-9223372036854775808 * -2147483648
+quote -9223372036854775808 * -2147483647
+-9223372036854775808 * -2147483647
+quote -9223372036854775808 * -32768
+-9223372036854775808 * -32768
+quote -9223372036854775808 * -32767
+-9223372036854775808 * -32767
+quote -9223372036854775808 * -128
+-9223372036854775808 * -128
+quote -9223372036854775808 * -127
+-9223372036854775808 * -127
+quote -9223372036854775808 * 255
+-9223372036854775808 * 255
+quote -9223372036854775808 * 256
+-9223372036854775808 * 256
+quote -9223372036854775808 * 65535
+-9223372036854775808 * 65535
+quote -9223372036854775808 * 65536
+-9223372036854775808 * 65536
+quote -9223372036854775808 * 4294967295
+-9223372036854775808 * 4294967295
+quote -9223372036854775808 * 4294967296
+-9223372036854775808 * 4294967296
+quote -9223372036854775808 * 18446744073709551615
+-9223372036854775808 * 18446744073709551615
+quote -9223372036854775808 * 18446744073709551616
+-9223372036854775808 * 18446744073709551616
+quote -9223372036854775808 * 340282366920938463463374607431768211455
+-9223372036854775808 * 340282366920938463463374607431768211455
+quote -9223372036854775808 * 340282366920938463463374607431768211456
+-9223372036854775808 * 340282366920938463463374607431768211456
+quote -9223372036854775807 * -170141183460469231731687303715884105728
+-9223372036854775807 * -170141183460469231731687303715884105728
+quote -9223372036854775807 * -170141183460469231731687303715884105727
+-9223372036854775807 * -170141183460469231731687303715884105727
+quote -9223372036854775807 * -9223372036854775808
+-9223372036854775807 * -9223372036854775808
+quote -9223372036854775807 * -9223372036854775807
+-9223372036854775807 * -9223372036854775807
+quote -9223372036854775807 * -2147483648
+-9223372036854775807 * -2147483648
+quote -9223372036854775807 * -2147483647
+-9223372036854775807 * -2147483647
+quote -9223372036854775807 * -32768
+-9223372036854775807 * -32768
+quote -9223372036854775807 * -32767
+-9223372036854775807 * -32767
+quote -9223372036854775807 * -128
+-9223372036854775807 * -128
+quote -9223372036854775807 * -127
+-9223372036854775807 * -127
+quote -9223372036854775807 * 255
+-9223372036854775807 * 255
+quote -9223372036854775807 * 256
+-9223372036854775807 * 256
+quote -9223372036854775807 * 65535
+-9223372036854775807 * 65535
+quote -9223372036854775807 * 65536
+-9223372036854775807 * 65536
+quote -9223372036854775807 * 4294967295
+-9223372036854775807 * 4294967295
+quote -9223372036854775807 * 4294967296
+-9223372036854775807 * 4294967296
+quote -9223372036854775807 * 18446744073709551615
+-9223372036854775807 * 18446744073709551615
+quote -9223372036854775807 * 18446744073709551616
+-9223372036854775807 * 18446744073709551616
+quote -9223372036854775807 * 340282366920938463463374607431768211455
+-9223372036854775807 * 340282366920938463463374607431768211455
+quote -9223372036854775807 * 340282366920938463463374607431768211456
+-9223372036854775807 * 340282366920938463463374607431768211456
+quote -2147483648 * -170141183460469231731687303715884105728
+-2147483648 * -170141183460469231731687303715884105728
+quote -2147483648 * -170141183460469231731687303715884105727
+-2147483648 * -170141183460469231731687303715884105727
+quote -2147483648 * -9223372036854775808
+-2147483648 * -9223372036854775808
+quote -2147483648 * -9223372036854775807
+-2147483648 * -9223372036854775807
+quote -2147483648 * -2147483648
+-2147483648 * -2147483648
+quote -2147483648 * -2147483647
+-2147483648 * -2147483647
+quote -2147483648 * -32768
+-2147483648 * -32768
+quote -2147483648 * -32767
+-2147483648 * -32767
+quote -2147483648 * -128
+-2147483648 * -128
+quote -2147483648 * -127
+-2147483648 * -127
+quote -2147483648 * 255
+-2147483648 * 255
+quote -2147483648 * 256
+-2147483648 * 256
+quote -2147483648 * 65535
+-2147483648 * 65535
+quote -2147483648 * 65536
+-2147483648 * 65536
+quote -2147483648 * 4294967295
+-2147483648 * 4294967295
+quote -2147483648 * 4294967296
+-2147483648 * 4294967296
+quote -2147483648 * 18446744073709551615
+-2147483648 * 18446744073709551615
+quote -2147483648 * 18446744073709551616
+-2147483648 * 18446744073709551616
+quote -2147483648 * 340282366920938463463374607431768211455
+-2147483648 * 340282366920938463463374607431768211455
+quote -2147483648 * 340282366920938463463374607431768211456
+-2147483648 * 340282366920938463463374607431768211456
+quote -2147483647 * -170141183460469231731687303715884105728
+-2147483647 * -170141183460469231731687303715884105728
+quote -2147483647 * -170141183460469231731687303715884105727
+-2147483647 * -170141183460469231731687303715884105727
+quote -2147483647 * -9223372036854775808
+-2147483647 * -9223372036854775808
+quote -2147483647 * -9223372036854775807
+-2147483647 * -9223372036854775807
+quote -2147483647 * -2147483648
+-2147483647 * -2147483648
+quote -2147483647 * -2147483647
+-2147483647 * -2147483647
+quote -2147483647 * -32768
+-2147483647 * -32768
+quote -2147483647 * -32767
+-2147483647 * -32767
+quote -2147483647 * -128
+-2147483647 * -128
+quote -2147483647 * -127
+-2147483647 * -127
+quote -2147483647 * 255
+-2147483647 * 255
+quote -2147483647 * 256
+-2147483647 * 256
+quote -2147483647 * 65535
+-2147483647 * 65535
+quote -2147483647 * 65536
+-2147483647 * 65536
+quote -2147483647 * 4294967295
+-2147483647 * 4294967295
+quote -2147483647 * 4294967296
+-2147483647 * 4294967296
+quote -2147483647 * 18446744073709551615
+-2147483647 * 18446744073709551615
+quote -2147483647 * 18446744073709551616
+-2147483647 * 18446744073709551616
+quote -2147483647 * 340282366920938463463374607431768211455
+-2147483647 * 340282366920938463463374607431768211455
+quote -2147483647 * 340282366920938463463374607431768211456
+-2147483647 * 340282366920938463463374607431768211456
+quote -32768 * -170141183460469231731687303715884105728
+-32768 * -170141183460469231731687303715884105728
+quote -32768 * -170141183460469231731687303715884105727
+-32768 * -170141183460469231731687303715884105727
+quote -32768 * -9223372036854775808
+-32768 * -9223372036854775808
+quote -32768 * -9223372036854775807
+-32768 * -9223372036854775807
+quote -32768 * -2147483648
+-32768 * -2147483648
+quote -32768 * -2147483647
+-32768 * -2147483647
+quote -32768 * -32768
+-32768 * -32768
+quote -32768 * -32767
+-32768 * -32767
+quote -32768 * -128
+-32768 * -128
+quote -32768 * -127
+-32768 * -127
+quote -32768 * 255
+-32768 * 255
+quote -32768 * 256
+-32768 * 256
+quote -32768 * 65535
+-32768 * 65535
+quote -32768 * 65536
+-32768 * 65536
+quote -32768 * 4294967295
+-32768 * 4294967295
+quote -32768 * 4294967296
+-32768 * 4294967296
+quote -32768 * 18446744073709551615
+-32768 * 18446744073709551615
+quote -32768 * 18446744073709551616
+-32768 * 18446744073709551616
+quote -32768 * 340282366920938463463374607431768211455
+-32768 * 340282366920938463463374607431768211455
+quote -32768 * 340282366920938463463374607431768211456
+-32768 * 340282366920938463463374607431768211456
+quote -32767 * -170141183460469231731687303715884105728
+-32767 * -170141183460469231731687303715884105728
+quote -32767 * -170141183460469231731687303715884105727
+-32767 * -170141183460469231731687303715884105727
+quote -32767 * -9223372036854775808
+-32767 * -9223372036854775808
+quote -32767 * -9223372036854775807
+-32767 * -9223372036854775807
+quote -32767 * -2147483648
+-32767 * -2147483648
+quote -32767 * -2147483647
+-32767 * -2147483647
+quote -32767 * -32768
+-32767 * -32768
+quote -32767 * -32767
+-32767 * -32767
+quote -32767 * -128
+-32767 * -128
+quote -32767 * -127
+-32767 * -127
+quote -32767 * 255
+-32767 * 255
+quote -32767 * 256
+-32767 * 256
+quote -32767 * 65535
+-32767 * 65535
+quote -32767 * 65536
+-32767 * 65536
+quote -32767 * 4294967295
+-32767 * 4294967295
+quote -32767 * 4294967296
+-32767 * 4294967296
+quote -32767 * 18446744073709551615
+-32767 * 18446744073709551615
+quote -32767 * 18446744073709551616
+-32767 * 18446744073709551616
+quote -32767 * 340282366920938463463374607431768211455
+-32767 * 340282366920938463463374607431768211455
+quote -32767 * 340282366920938463463374607431768211456
+-32767 * 340282366920938463463374607431768211456
+quote -128 * -170141183460469231731687303715884105728
+-128 * -170141183460469231731687303715884105728
+quote -128 * -170141183460469231731687303715884105727
+-128 * -170141183460469231731687303715884105727
+quote -128 * -9223372036854775808
+-128 * -9223372036854775808
+quote -128 * -9223372036854775807
+-128 * -9223372036854775807
+quote -128 * -2147483648
+-128 * -2147483648
+quote -128 * -2147483647
+-128 * -2147483647
+quote -128 * -32768
+-128 * -32768
+quote -128 * -32767
+-128 * -32767
+quote -128 * -128
+-128 * -128
+quote -128 * -127
+-128 * -127
+quote -128 * 255
+-128 * 255
+quote -128 * 256
+-128 * 256
+quote -128 * 65535
+-128 * 65535
+quote -128 * 65536
+-128 * 65536
+quote -128 * 4294967295
+-128 * 4294967295
+quote -128 * 4294967296
+-128 * 4294967296
+quote -128 * 18446744073709551615
+-128 * 18446744073709551615
+quote -128 * 18446744073709551616
+-128 * 18446744073709551616
+quote -128 * 340282366920938463463374607431768211455
+-128 * 340282366920938463463374607431768211455
+quote -128 * 340282366920938463463374607431768211456
+-128 * 340282366920938463463374607431768211456
+quote -127 * -170141183460469231731687303715884105728
+-127 * -170141183460469231731687303715884105728
+quote -127 * -170141183460469231731687303715884105727
+-127 * -170141183460469231731687303715884105727
+quote -127 * -9223372036854775808
+-127 * -9223372036854775808
+quote -127 * -9223372036854775807
+-127 * -9223372036854775807
+quote -127 * -2147483648
+-127 * -2147483648
+quote -127 * -2147483647
+-127 * -2147483647
+quote -127 * -32768
+-127 * -32768
+quote -127 * -32767
+-127 * -32767
+quote -127 * -128
+-127 * -128
+quote -127 * -127
+-127 * -127
+quote -127 * 255
+-127 * 255
+quote -127 * 256
+-127 * 256
+quote -127 * 65535
+-127 * 65535
+quote -127 * 65536
+-127 * 65536
+quote -127 * 4294967295
+-127 * 4294967295
+quote -127 * 4294967296
+-127 * 4294967296
+quote -127 * 18446744073709551615
+-127 * 18446744073709551615
+quote -127 * 18446744073709551616
+-127 * 18446744073709551616
+quote -127 * 340282366920938463463374607431768211455
+-127 * 340282366920938463463374607431768211455
+quote -127 * 340282366920938463463374607431768211456
+-127 * 340282366920938463463374607431768211456
+quote 255 * -170141183460469231731687303715884105728
+255 * -170141183460469231731687303715884105728
+quote 255 * -170141183460469231731687303715884105727
+255 * -170141183460469231731687303715884105727
+quote 255 * -9223372036854775808
+255 * -9223372036854775808
+quote 255 * -9223372036854775807
+255 * -9223372036854775807
+quote 255 * -2147483648
+255 * -2147483648
+quote 255 * -2147483647
+255 * -2147483647
+quote 255 * -32768
+255 * -32768
+quote 255 * -32767
+255 * -32767
+quote 255 * -128
+255 * -128
+quote 255 * -127
+255 * -127
+quote 255 * 255
+255 * 255
+quote 255 * 256
+255 * 256
+quote 255 * 65535
+255 * 65535
+quote 255 * 65536
+255 * 65536
+quote 255 * 4294967295
+255 * 4294967295
+quote 255 * 4294967296
+255 * 4294967296
+quote 255 * 18446744073709551615
+255 * 18446744073709551615
+quote 255 * 18446744073709551616
+255 * 18446744073709551616
+quote 255 * 340282366920938463463374607431768211455
+255 * 340282366920938463463374607431768211455
+quote 255 * 340282366920938463463374607431768211456
+255 * 340282366920938463463374607431768211456
+quote 256 * -170141183460469231731687303715884105728
+256 * -170141183460469231731687303715884105728
+quote 256 * -170141183460469231731687303715884105727
+256 * -170141183460469231731687303715884105727
+quote 256 * -9223372036854775808
+256 * -9223372036854775808
+quote 256 * -9223372036854775807
+256 * -9223372036854775807
+quote 256 * -2147483648
+256 * -2147483648
+quote 256 * -2147483647
+256 * -2147483647
+quote 256 * -32768
+256 * -32768
+quote 256 * -32767
+256 * -32767
+quote 256 * -128
+256 * -128
+quote 256 * -127
+256 * -127
+quote 256 * 255
+256 * 255
+quote 256 * 256
+256 * 256
+quote 256 * 65535
+256 * 65535
+quote 256 * 65536
+256 * 65536
+quote 256 * 4294967295
+256 * 4294967295
+quote 256 * 4294967296
+256 * 4294967296
+quote 256 * 18446744073709551615
+256 * 18446744073709551615
+quote 256 * 18446744073709551616
+256 * 18446744073709551616
+quote 256 * 340282366920938463463374607431768211455
+256 * 340282366920938463463374607431768211455
+quote 256 * 340282366920938463463374607431768211456
+256 * 340282366920938463463374607431768211456
+quote 65535 * -170141183460469231731687303715884105728
+65535 * -170141183460469231731687303715884105728
+quote 65535 * -170141183460469231731687303715884105727
+65535 * -170141183460469231731687303715884105727
+quote 65535 * -9223372036854775808
+65535 * -9223372036854775808
+quote 65535 * -9223372036854775807
+65535 * -9223372036854775807
+quote 65535 * -2147483648
+65535 * -2147483648
+quote 65535 * -2147483647
+65535 * -2147483647
+quote 65535 * -32768
+65535 * -32768
+quote 65535 * -32767
+65535 * -32767
+quote 65535 * -128
+65535 * -128
+quote 65535 * -127
+65535 * -127
+quote 65535 * 255
+65535 * 255
+quote 65535 * 256
+65535 * 256
+quote 65535 * 65535
+65535 * 65535
+quote 65535 * 65536
+65535 * 65536
+quote 65535 * 4294967295
+65535 * 4294967295
+quote 65535 * 4294967296
+65535 * 4294967296
+quote 65535 * 18446744073709551615
+65535 * 18446744073709551615
+quote 65535 * 18446744073709551616
+65535 * 18446744073709551616
+quote 65535 * 340282366920938463463374607431768211455
+65535 * 340282366920938463463374607431768211455
+quote 65535 * 340282366920938463463374607431768211456
+65535 * 340282366920938463463374607431768211456
+quote 65536 * -170141183460469231731687303715884105728
+65536 * -170141183460469231731687303715884105728
+quote 65536 * -170141183460469231731687303715884105727
+65536 * -170141183460469231731687303715884105727
+quote 65536 * -9223372036854775808
+65536 * -9223372036854775808
+quote 65536 * -9223372036854775807
+65536 * -9223372036854775807
+quote 65536 * -2147483648
+65536 * -2147483648
+quote 65536 * -2147483647
+65536 * -2147483647
+quote 65536 * -32768
+65536 * -32768
+quote 65536 * -32767
+65536 * -32767
+quote 65536 * -128
+65536 * -128
+quote 65536 * -127
+65536 * -127
+quote 65536 * 255
+65536 * 255
+quote 65536 * 256
+65536 * 256
+quote 65536 * 65535
+65536 * 65535
+quote 65536 * 65536
+65536 * 65536
+quote 65536 * 4294967295
+65536 * 4294967295
+quote 65536 * 4294967296
+65536 * 4294967296
+quote 65536 * 18446744073709551615
+65536 * 18446744073709551615
+quote 65536 * 18446744073709551616
+65536 * 18446744073709551616
+quote 65536 * 340282366920938463463374607431768211455
+65536 * 340282366920938463463374607431768211455
+quote 65536 * 340282366920938463463374607431768211456
+65536 * 340282366920938463463374607431768211456
+quote 4294967295 * -170141183460469231731687303715884105728
+4294967295 * -170141183460469231731687303715884105728
+quote 4294967295 * -170141183460469231731687303715884105727
+4294967295 * -170141183460469231731687303715884105727
+quote 4294967295 * -9223372036854775808
+4294967295 * -9223372036854775808
+quote 4294967295 * -9223372036854775807
+4294967295 * -9223372036854775807
+quote 4294967295 * -2147483648
+4294967295 * -2147483648
+quote 4294967295 * -2147483647
+4294967295 * -2147483647
+quote 4294967295 * -32768
+4294967295 * -32768
+quote 4294967295 * -32767
+4294967295 * -32767
+quote 4294967295 * -128
+4294967295 * -128
+quote 4294967295 * -127
+4294967295 * -127
+quote 4294967295 * 255
+4294967295 * 255
+quote 4294967295 * 256
+4294967295 * 256
+quote 4294967295 * 65535
+4294967295 * 65535
+quote 4294967295 * 65536
+4294967295 * 65536
+quote 4294967295 * 4294967295
+4294967295 * 4294967295
+quote 4294967295 * 4294967296
+4294967295 * 4294967296
+quote 4294967295 * 18446744073709551615
+4294967295 * 18446744073709551615
+quote 4294967295 * 18446744073709551616
+4294967295 * 18446744073709551616
+quote 4294967295 * 340282366920938463463374607431768211455
+4294967295 * 340282366920938463463374607431768211455
+quote 4294967295 * 340282366920938463463374607431768211456
+4294967295 * 340282366920938463463374607431768211456
+quote 4294967296 * -170141183460469231731687303715884105728
+4294967296 * -170141183460469231731687303715884105728
+quote 4294967296 * -170141183460469231731687303715884105727
+4294967296 * -170141183460469231731687303715884105727
+quote 4294967296 * -9223372036854775808
+4294967296 * -9223372036854775808
+quote 4294967296 * -9223372036854775807
+4294967296 * -9223372036854775807
+quote 4294967296 * -2147483648
+4294967296 * -2147483648
+quote 4294967296 * -2147483647
+4294967296 * -2147483647
+quote 4294967296 * -32768
+4294967296 * -32768
+quote 4294967296 * -32767
+4294967296 * -32767
+quote 4294967296 * -128
+4294967296 * -128
+quote 4294967296 * -127
+4294967296 * -127
+quote 4294967296 * 255
+4294967296 * 255
+quote 4294967296 * 256
+4294967296 * 256
+quote 4294967296 * 65535
+4294967296 * 65535
+quote 4294967296 * 65536
+4294967296 * 65536
+quote 4294967296 * 4294967295
+4294967296 * 4294967295
+quote 4294967296 * 4294967296
+4294967296 * 4294967296
+quote 4294967296 * 18446744073709551615
+4294967296 * 18446744073709551615
+quote 4294967296 * 18446744073709551616
+4294967296 * 18446744073709551616
+quote 4294967296 * 340282366920938463463374607431768211455
+4294967296 * 340282366920938463463374607431768211455
+quote 4294967296 * 340282366920938463463374607431768211456
+4294967296 * 340282366920938463463374607431768211456
+quote 18446744073709551615 * -170141183460469231731687303715884105728
+18446744073709551615 * -170141183460469231731687303715884105728
+quote 18446744073709551615 * -170141183460469231731687303715884105727
+18446744073709551615 * -170141183460469231731687303715884105727
+quote 18446744073709551615 * -9223372036854775808
+18446744073709551615 * -9223372036854775808
+quote 18446744073709551615 * -9223372036854775807
+18446744073709551615 * -9223372036854775807
+quote 18446744073709551615 * -2147483648
+18446744073709551615 * -2147483648
+quote 18446744073709551615 * -2147483647
+18446744073709551615 * -2147483647
+quote 18446744073709551615 * -32768
+18446744073709551615 * -32768
+quote 18446744073709551615 * -32767
+18446744073709551615 * -32767
+quote 18446744073709551615 * -128
+18446744073709551615 * -128
+quote 18446744073709551615 * -127
+18446744073709551615 * -127
+quote 18446744073709551615 * 255
+18446744073709551615 * 255
+quote 18446744073709551615 * 256
+18446744073709551615 * 256
+quote 18446744073709551615 * 65535
+18446744073709551615 * 65535
+quote 18446744073709551615 * 65536
+18446744073709551615 * 65536
+quote 18446744073709551615 * 4294967295
+18446744073709551615 * 4294967295
+quote 18446744073709551615 * 4294967296
+18446744073709551615 * 4294967296
+quote 18446744073709551615 * 18446744073709551615
+18446744073709551615 * 18446744073709551615
+quote 18446744073709551615 * 18446744073709551616
+18446744073709551615 * 18446744073709551616
+quote 18446744073709551615 * 340282366920938463463374607431768211455
+18446744073709551615 * 340282366920938463463374607431768211455
+quote 18446744073709551615 * 340282366920938463463374607431768211456
+18446744073709551615 * 340282366920938463463374607431768211456
+quote 18446744073709551616 * -170141183460469231731687303715884105728
+18446744073709551616 * -170141183460469231731687303715884105728
+quote 18446744073709551616 * -170141183460469231731687303715884105727
+18446744073709551616 * -170141183460469231731687303715884105727
+quote 18446744073709551616 * -9223372036854775808
+18446744073709551616 * -9223372036854775808
+quote 18446744073709551616 * -9223372036854775807
+18446744073709551616 * -9223372036854775807
+quote 18446744073709551616 * -2147483648
+18446744073709551616 * -2147483648
+quote 18446744073709551616 * -2147483647
+18446744073709551616 * -2147483647
+quote 18446744073709551616 * -32768
+18446744073709551616 * -32768
+quote 18446744073709551616 * -32767
+18446744073709551616 * -32767
+quote 18446744073709551616 * -128
+18446744073709551616 * -128
+quote 18446744073709551616 * -127
+18446744073709551616 * -127
+quote 18446744073709551616 * 255
+18446744073709551616 * 255
+quote 18446744073709551616 * 256
+18446744073709551616 * 256
+quote 18446744073709551616 * 65535
+18446744073709551616 * 65535
+quote 18446744073709551616 * 65536
+18446744073709551616 * 65536
+quote 18446744073709551616 * 4294967295
+18446744073709551616 * 4294967295
+quote 18446744073709551616 * 4294967296
+18446744073709551616 * 4294967296
+quote 18446744073709551616 * 18446744073709551615
+18446744073709551616 * 18446744073709551615
+quote 18446744073709551616 * 18446744073709551616
+18446744073709551616 * 18446744073709551616
+quote 18446744073709551616 * 340282366920938463463374607431768211455
+18446744073709551616 * 340282366920938463463374607431768211455
+quote 18446744073709551616 * 340282366920938463463374607431768211456
+18446744073709551616 * 340282366920938463463374607431768211456
+quote 340282366920938463463374607431768211455 * -170141183460469231731687303715884105728
+340282366920938463463374607431768211455 * -170141183460469231731687303715884105728
+quote 340282366920938463463374607431768211455 * -170141183460469231731687303715884105727
+340282366920938463463374607431768211455 * -170141183460469231731687303715884105727
+quote 340282366920938463463374607431768211455 * -9223372036854775808
+340282366920938463463374607431768211455 * -9223372036854775808
+quote 340282366920938463463374607431768211455 * -9223372036854775807
+340282366920938463463374607431768211455 * -9223372036854775807
+quote 340282366920938463463374607431768211455 * -2147483648
+340282366920938463463374607431768211455 * -2147483648
+quote 340282366920938463463374607431768211455 * -2147483647
+340282366920938463463374607431768211455 * -2147483647
+quote 340282366920938463463374607431768211455 * -32768
+340282366920938463463374607431768211455 * -32768
+quote 340282366920938463463374607431768211455 * -32767
+340282366920938463463374607431768211455 * -32767
+quote 340282366920938463463374607431768211455 * -128
+340282366920938463463374607431768211455 * -128
+quote 340282366920938463463374607431768211455 * -127
+340282366920938463463374607431768211455 * -127
+quote 340282366920938463463374607431768211455 * 255
+340282366920938463463374607431768211455 * 255
+quote 340282366920938463463374607431768211455 * 256
+340282366920938463463374607431768211455 * 256
+quote 340282366920938463463374607431768211455 * 65535
+340282366920938463463374607431768211455 * 65535
+quote 340282366920938463463374607431768211455 * 65536
+340282366920938463463374607431768211455 * 65536
+quote 340282366920938463463374607431768211455 * 4294967295
+340282366920938463463374607431768211455 * 4294967295
+quote 340282366920938463463374607431768211455 * 4294967296
+340282366920938463463374607431768211455 * 4294967296
+quote 340282366920938463463374607431768211455 * 18446744073709551615
+340282366920938463463374607431768211455 * 18446744073709551615
+quote 340282366920938463463374607431768211455 * 18446744073709551616
+340282366920938463463374607431768211455 * 18446744073709551616
+quote 340282366920938463463374607431768211455 * 340282366920938463463374607431768211455
+340282366920938463463374607431768211455 * 340282366920938463463374607431768211455
+quote 340282366920938463463374607431768211455 * 340282366920938463463374607431768211456
+340282366920938463463374607431768211455 * 340282366920938463463374607431768211456
+quote 340282366920938463463374607431768211456 * -170141183460469231731687303715884105728
+340282366920938463463374607431768211456 * -170141183460469231731687303715884105728
+quote 340282366920938463463374607431768211456 * -170141183460469231731687303715884105727
+340282366920938463463374607431768211456 * -170141183460469231731687303715884105727
+quote 340282366920938463463374607431768211456 * -9223372036854775808
+340282366920938463463374607431768211456 * -9223372036854775808
+quote 340282366920938463463374607431768211456 * -9223372036854775807
+340282366920938463463374607431768211456 * -9223372036854775807
+quote 340282366920938463463374607431768211456 * -2147483648
+340282366920938463463374607431768211456 * -2147483648
+quote 340282366920938463463374607431768211456 * -2147483647
+340282366920938463463374607431768211456 * -2147483647
+quote 340282366920938463463374607431768211456 * -32768
+340282366920938463463374607431768211456 * -32768
+quote 340282366920938463463374607431768211456 * -32767
+340282366920938463463374607431768211456 * -32767
+quote 340282366920938463463374607431768211456 * -128
+340282366920938463463374607431768211456 * -128
+quote 340282366920938463463374607431768211456 * -127
+340282366920938463463374607431768211456 * -127
+quote 340282366920938463463374607431768211456 * 255
+340282366920938463463374607431768211456 * 255
+quote 340282366920938463463374607431768211456 * 256
+340282366920938463463374607431768211456 * 256
+quote 340282366920938463463374607431768211456 * 65535
+340282366920938463463374607431768211456 * 65535
+quote 340282366920938463463374607431768211456 * 65536
+340282366920938463463374607431768211456 * 65536
+quote 340282366920938463463374607431768211456 * 4294967295
+340282366920938463463374607431768211456 * 4294967295
+quote 340282366920938463463374607431768211456 * 4294967296
+340282366920938463463374607431768211456 * 4294967296
+quote 340282366920938463463374607431768211456 * 18446744073709551615
+340282366920938463463374607431768211456 * 18446744073709551615
+quote 340282366920938463463374607431768211456 * 18446744073709551616
+340282366920938463463374607431768211456 * 18446744073709551616
+quote 340282366920938463463374607431768211456 * 340282366920938463463374607431768211455
+340282366920938463463374607431768211456 * 340282366920938463463374607431768211455
+quote 340282366920938463463374607431768211456 * 340282366920938463463374607431768211456
+340282366920938463463374607431768211456 * 340282366920938463463374607431768211456
diff --git a/test/ic3/integer_mul.out.expected b/test/ic3/integer_mul.out.expected
new file mode 100644
index 0000000..f8e913d
--- /dev/null
+++ b/test/ic3/integer_mul.out.expected
@@ -0,0 +1,800 @@
+-170141183460469231731687303715884105728 * -170141183460469231731687303715884105728
+28948022309329048855892746252171976963317496166410141009864396001978282409984
+-170141183460469231731687303715884105728 * -170141183460469231731687303715884105727
+28948022309329048855892746252171976963147354982949671778132708698262398304256
+-170141183460469231731687303715884105728 * -9223372036854775808
+1569275433846670190958947355801916604025588861116008628224
+-170141183460469231731687303715884105728 * -9223372036854775807
+1569275433846670190788806172341447372293901557400124522496
+-170141183460469231731687303715884105728 * -2147483648
+365375409332725729550921208179070754913983135744
+-170141183460469231731687303715884105728 * -2147483647
+365375409162584546090451976447383451198099030016
+-170141183460469231731687303715884105728 * -32768
+5575186299632655785383929568162090376495104
+-170141183460469231731687303715884105728 * -32767
+5575016158449195316152197880858374492389376
+-170141183460469231731687303715884105728 * -128
+21778071482940061661655974875633165533184
+-170141183460469231731687303715884105728 * -127
+21607930299479592429924287571917281427456
+-170141183460469231731687303715884105728 * 255
+-43386001782419654091580262447550446960640
+-170141183460469231731687303715884105728 * 256
+-43556142965880123323311949751266331066368
+-170141183460469231731687303715884105728 * 65535
+-11150202458081851101536127449020464868884480
+-170141183460469231731687303715884105728 * 65536
+-11150372599265311570767859136324180752990208
+-170141183460469231731687303715884105728 * 4294967295
+-730750818495310275641373184626454206112082165760
+-170141183460469231731687303715884105728 * 4294967296
+-730750818665451459101842416358141509827966271488
+-170141183460469231731687303715884105728 * 18446744073709551615
+-3138550867693340381747753528143363976319490418516133150720
+-170141183460469231731687303715884105728 * 18446744073709551616
+-3138550867693340381917894711603833208051177722232017256448
+-170141183460469231731687303715884105728 * 340282366920938463463374607431768211455
+-57896044618658097711785492504343953926464851149359812787997104700240680714240
+-170141183460469231731687303715884105728 * 340282366920938463463374607431768211456
+-57896044618658097711785492504343953926634992332820282019728792003956564819968
+-170141183460469231731687303715884105727 * -170141183460469231731687303715884105728
+28948022309329048855892746252171976963147354982949671778132708698262398304256
+-170141183460469231731687303715884105727 * -170141183460469231731687303715884105727
+28948022309329048855892746252171976962977213799489202546401021394546514198529
+-170141183460469231731687303715884105727 * -9223372036854775808
+1569275433846670190958947355801916604016365489079153852416
+-170141183460469231731687303715884105727 * -9223372036854775807
+1569275433846670190788806172341447372284678185363269746689
+-170141183460469231731687303715884105727 * -2147483648
+365375409332725729550921208179070754911835652096
+-170141183460469231731687303715884105727 * -2147483647
+365375409162584546090451976447383451195951546369
+-170141183460469231731687303715884105727 * -32768
+5575186299632655785383929568162090376462336
+-170141183460469231731687303715884105727 * -32767
+5575016158449195316152197880858374492356609
+-170141183460469231731687303715884105727 * -128
+21778071482940061661655974875633165533056
+-170141183460469231731687303715884105727 * -127
+21607930299479592429924287571917281427329
+-170141183460469231731687303715884105727 * 255
+-43386001782419654091580262447550446960385
+-170141183460469231731687303715884105727 * 256
+-43556142965880123323311949751266331066112
+-170141183460469231731687303715884105727 * 65535
+-11150202458081851101536127449020464868818945
+-170141183460469231731687303715884105727 * 65536
+-11150372599265311570767859136324180752924672
+-170141183460469231731687303715884105727 * 4294967295
+-730750818495310275641373184626454206107787198465
+-170141183460469231731687303715884105727 * 4294967296
+-730750818665451459101842416358141509823671304192
+-170141183460469231731687303715884105727 * 18446744073709551615
+-3138550867693340381747753528143363976301043674442423599105
+-170141183460469231731687303715884105727 * 18446744073709551616
+-3138550867693340381917894711603833208032730978158307704832
+-170141183460469231731687303715884105727 * 340282366920938463463374607431768211455
+-57896044618658097711785492504343953926124568782438874324533730092808912502785
+-170141183460469231731687303715884105727 * 340282366920938463463374607431768211456
+-57896044618658097711785492504343953926294709965899343556265417396524796608512
+-9223372036854775808 * -170141183460469231731687303715884105728
+1569275433846670190958947355801916604025588861116008628224
+-9223372036854775808 * -170141183460469231731687303715884105727
+1569275433846670190958947355801916604016365489079153852416
+-9223372036854775808 * -9223372036854775808
+85070591730234615865843651857942052864
+-9223372036854775808 * -9223372036854775807
+85070591730234615856620279821087277056
+-9223372036854775808 * -2147483648
+19807040628566084398385987584
+-9223372036854775808 * -2147483647
+19807040619342712361531211776
+-9223372036854775808 * -32768
+302231454903657293676544
+-9223372036854775808 * -32767
+302222231531620438900736
+-9223372036854775808 * -128
+1180591620717411303424
+-9223372036854775808 * -127
+1171368248680556527616
+-9223372036854775808 * 255
+-2351959869397967831040
+-9223372036854775808 * 256
+-2361183241434822606848
+-9223372036854775808 * 65535
+-604453686435277732577280
+-9223372036854775808 * 65536
+-604462909807314587353088
+-9223372036854775808 * 4294967295
+-39614081247908796759917199360
+-9223372036854775808 * 4294967296
+-39614081257132168796771975168
+-9223372036854775808 * 18446744073709551615
+-170141183460469231722463931679029329920
+-9223372036854775808 * 18446744073709551616
+-170141183460469231731687303715884105728
+-9223372036854775808 * 340282366920938463463374607431768211455
+-3138550867693340381917894711603833208041954350195162480640
+-9223372036854775808 * 340282366920938463463374607431768211456
+-3138550867693340381917894711603833208051177722232017256448
+-9223372036854775807 * -170141183460469231731687303715884105728
+1569275433846670190788806172341447372293901557400124522496
+-9223372036854775807 * -170141183460469231731687303715884105727
+1569275433846670190788806172341447372284678185363269746689
+-9223372036854775807 * -9223372036854775808
+85070591730234615856620279821087277056
+-9223372036854775807 * -9223372036854775807
+85070591730234615847396907784232501249
+-9223372036854775807 * -2147483648
+19807040628566084396238503936
+-9223372036854775807 * -2147483647
+19807040619342712359383728129
+-9223372036854775807 * -32768
+302231454903657293643776
+-9223372036854775807 * -32767
+302222231531620438867969
+-9223372036854775807 * -128
+1180591620717411303296
+-9223372036854775807 * -127
+1171368248680556527489
+-9223372036854775807 * 255
+-2351959869397967830785
+-9223372036854775807 * 256
+-2361183241434822606592
+-9223372036854775807 * 65535
+-604453686435277732511745
+-9223372036854775807 * 65536
+-604462909807314587287552
+-9223372036854775807 * 4294967295
+-39614081247908796755622232065
+-9223372036854775807 * 4294967296
+-39614081257132168792477007872
+-9223372036854775807 * 18446744073709551615
+-170141183460469231704017187605319778305
+-9223372036854775807 * 18446744073709551616
+-170141183460469231713240559642174554112
+-9223372036854775807 * 340282366920938463463374607431768211455
+-3138550867693340381577612344682894744578579742763394269185
+-9223372036854775807 * 340282366920938463463374607431768211456
+-3138550867693340381577612344682894744587803114800249044992
+-2147483648 * -170141183460469231731687303715884105728
+365375409332725729550921208179070754913983135744
+-2147483648 * -170141183460469231731687303715884105727
+365375409332725729550921208179070754911835652096
+-2147483648 * -9223372036854775808
+19807040628566084398385987584
+-2147483648 * -9223372036854775807
+19807040628566084396238503936
+-2147483648 * -2147483648
+4611686018427387904
+-2147483648 * -2147483647
+4611686016279904256
+-2147483648 * -32768
+70368744177664
+-2147483648 * -32767
+70366596694016
+-2147483648 * -128
+274877906944
+-2147483648 * -127
+272730423296
+-2147483648 * 255
+-547608330240
+-2147483648 * 256
+-549755813888
+-2147483648 * 65535
+-140735340871680
+-2147483648 * 65536
+-140737488355328
+-2147483648 * 4294967295
+-9223372034707292160
+-2147483648 * 4294967296
+-9223372036854775808
+-2147483648 * 18446744073709551615
+-39614081257132168794624491520
+-2147483648 * 18446744073709551616
+-39614081257132168796771975168
+-2147483648 * 340282366920938463463374607431768211455
+-730750818665451459101842416358141509825818787840
+-2147483648 * 340282366920938463463374607431768211456
+-730750818665451459101842416358141509827966271488
+-2147483647 * -170141183460469231731687303715884105728
+365375409162584546090451976447383451198099030016
+-2147483647 * -170141183460469231731687303715884105727
+365375409162584546090451976447383451195951546369
+-2147483647 * -9223372036854775808
+19807040619342712361531211776
+-2147483647 * -9223372036854775807
+19807040619342712359383728129
+-2147483647 * -2147483648
+4611686016279904256
+-2147483647 * -2147483647
+4611686014132420609
+-2147483647 * -32768
+70368744144896
+-2147483647 * -32767
+70366596661249
+-2147483647 * -128
+274877906816
+-2147483647 * -127
+272730423169
+-2147483647 * 255
+-547608329985
+-2147483647 * 256
+-549755813632
+-2147483647 * 65535
+-140735340806145
+-2147483647 * 65536
+-140737488289792
+-2147483647 * 4294967295
+-9223372030412324865
+-2147483647 * 4294967296
+-9223372032559808512
+-2147483647 * 18446744073709551615
+-39614081238685424720914939905
+-2147483647 * 18446744073709551616
+-39614081238685424723062423552
+-2147483647 * 340282366920938463463374607431768211455
+-730750818325169092180903952894766902394050576385
+-2147483647 * 340282366920938463463374607431768211456
+-730750818325169092180903952894766902396198060032
+-32768 * -170141183460469231731687303715884105728
+5575186299632655785383929568162090376495104
+-32768 * -170141183460469231731687303715884105727
+5575186299632655785383929568162090376462336
+-32768 * -9223372036854775808
+302231454903657293676544
+-32768 * -9223372036854775807
+302231454903657293643776
+-32768 * -2147483648
+70368744177664
+-32768 * -2147483647
+70368744144896
+-32768 * -32768
+1073741824
+-32768 * -32767
+1073709056
+-32768 * -128
+4194304
+-32768 * -127
+4161536
+-32768 * 255
+-8355840
+-32768 * 256
+-8388608
+-32768 * 65535
+-2147450880
+-32768 * 65536
+-2147483648
+-32768 * 4294967295
+-140737488322560
+-32768 * 4294967296
+-140737488355328
+-32768 * 18446744073709551615
+-604462909807314587320320
+-32768 * 18446744073709551616
+-604462909807314587353088
+-32768 * 340282366920938463463374607431768211455
+-11150372599265311570767859136324180752957440
+-32768 * 340282366920938463463374607431768211456
+-11150372599265311570767859136324180752990208
+-32767 * -170141183460469231731687303715884105728
+5575016158449195316152197880858374492389376
+-32767 * -170141183460469231731687303715884105727
+5575016158449195316152197880858374492356609
+-32767 * -9223372036854775808
+302222231531620438900736
+-32767 * -9223372036854775807
+302222231531620438867969
+-32767 * -2147483648
+70366596694016
+-32767 * -2147483647
+70366596661249
+-32767 * -32768
+1073709056
+-32767 * -32767
+1073676289
+-32767 * -128
+4194176
+-32767 * -127
+4161409
+-32767 * 255
+-8355585
+-32767 * 256
+-8388352
+-32767 * 65535
+-2147385345
+-32767 * 65536
+-2147418112
+-32767 * 4294967295
+-140733193355265
+-32767 * 4294967296
+-140733193388032
+-32767 * 18446744073709551615
+-604444463063240877768705
+-32767 * 18446744073709551616
+-604444463063240877801472
+-32767 * 340282366920938463463374607431768211455
+-11150032316898390632304395761716748984745985
+-32767 * 340282366920938463463374607431768211456
+-11150032316898390632304395761716748984778752
+-128 * -170141183460469231731687303715884105728
+21778071482940061661655974875633165533184
+-128 * -170141183460469231731687303715884105727
+21778071482940061661655974875633165533056
+-128 * -9223372036854775808
+1180591620717411303424
+-128 * -9223372036854775807
+1180591620717411303296
+-128 * -2147483648
+274877906944
+-128 * -2147483647
+274877906816
+-128 * -32768
+4194304
+-128 * -32767
+4194176
+-128 * -128
+16384
+-128 * -127
+16256
+-128 * 255
+-32640
+-128 * 256
+-32768
+-128 * 65535
+-8388480
+-128 * 65536
+-8388608
+-128 * 4294967295
+-549755813760
+-128 * 4294967296
+-549755813888
+-128 * 18446744073709551615
+-2361183241434822606720
+-128 * 18446744073709551616
+-2361183241434822606848
+-128 * 340282366920938463463374607431768211455
+-43556142965880123323311949751266331066240
+-128 * 340282366920938463463374607431768211456
+-43556142965880123323311949751266331066368
+-127 * -170141183460469231731687303715884105728
+21607930299479592429924287571917281427456
+-127 * -170141183460469231731687303715884105727
+21607930299479592429924287571917281427329
+-127 * -9223372036854775808
+1171368248680556527616
+-127 * -9223372036854775807
+1171368248680556527489
+-127 * -2147483648
+272730423296
+-127 * -2147483647
+272730423169
+-127 * -32768
+4161536
+-127 * -32767
+4161409
+-127 * -128
+16256
+-127 * -127
+16129
+-127 * 255
+-32385
+-127 * 256
+-32512
+-127 * 65535
+-8322945
+-127 * 65536
+-8323072
+-127 * 4294967295
+-545460846465
+-127 * 4294967296
+-545460846592
+-127 * 18446744073709551615
+-2342736497361113055105
+-127 * 18446744073709551616
+-2342736497361113055232
+-127 * 340282366920938463463374607431768211455
+-43215860598959184859848575143834562854785
+-127 * 340282366920938463463374607431768211456
+-43215860598959184859848575143834562854912
+255 * -170141183460469231731687303715884105728
+-43386001782419654091580262447550446960640
+255 * -170141183460469231731687303715884105727
+-43386001782419654091580262447550446960385
+255 * -9223372036854775808
+-2351959869397967831040
+255 * -9223372036854775807
+-2351959869397967830785
+255 * -2147483648
+-547608330240
+255 * -2147483647
+-547608329985
+255 * -32768
+-8355840
+255 * -32767
+-8355585
+255 * -128
+-32640
+255 * -127
+-32385
+255 * 255
+65025
+255 * 256
+65280
+255 * 65535
+16711425
+255 * 65536
+16711680
+255 * 4294967295
+1095216660225
+255 * 4294967296
+1095216660480
+255 * 18446744073709551615
+4703919738795935661825
+255 * 18446744073709551616
+4703919738795935662080
+255 * 340282366920938463463374607431768211455
+86772003564839308183160524895100893921025
+255 * 340282366920938463463374607431768211456
+86772003564839308183160524895100893921280
+256 * -170141183460469231731687303715884105728
+-43556142965880123323311949751266331066368
+256 * -170141183460469231731687303715884105727
+-43556142965880123323311949751266331066112
+256 * -9223372036854775808
+-2361183241434822606848
+256 * -9223372036854775807
+-2361183241434822606592
+256 * -2147483648
+-549755813888
+256 * -2147483647
+-549755813632
+256 * -32768
+-8388608
+256 * -32767
+-8388352
+256 * -128
+-32768
+256 * -127
+-32512
+256 * 255
+65280
+256 * 256
+65536
+256 * 65535
+16776960
+256 * 65536
+16777216
+256 * 4294967295
+1099511627520
+256 * 4294967296
+1099511627776
+256 * 18446744073709551615
+4722366482869645213440
+256 * 18446744073709551616
+4722366482869645213696
+256 * 340282366920938463463374607431768211455
+87112285931760246646623899502532662132480
+256 * 340282366920938463463374607431768211456
+87112285931760246646623899502532662132736
+65535 * -170141183460469231731687303715884105728
+-11150202458081851101536127449020464868884480
+65535 * -170141183460469231731687303715884105727
+-11150202458081851101536127449020464868818945
+65535 * -9223372036854775808
+-604453686435277732577280
+65535 * -9223372036854775807
+-604453686435277732511745
+65535 * -2147483648
+-140735340871680
+65535 * -2147483647
+-140735340806145
+65535 * -32768
+-2147450880
+65535 * -32767
+-2147385345
+65535 * -128
+-8388480
+65535 * -127
+-8322945
+65535 * 255
+16711425
+65535 * 256
+16776960
+65535 * 65535
+4294836225
+65535 * 65536
+4294901760
+65535 * 4294967295
+281470681677825
+65535 * 4294967296
+281470681743360
+65535 * 18446744073709551615
+1208907372870555465089025
+65535 * 18446744073709551616
+1208907372870555465154560
+65535 * 340282366920938463463374607431768211455
+22300404916163702203072254898040929737703425
+65535 * 340282366920938463463374607431768211456
+22300404916163702203072254898040929737768960
+65536 * -170141183460469231731687303715884105728
+-11150372599265311570767859136324180752990208
+65536 * -170141183460469231731687303715884105727
+-11150372599265311570767859136324180752924672
+65536 * -9223372036854775808
+-604462909807314587353088
+65536 * -9223372036854775807
+-604462909807314587287552
+65536 * -2147483648
+-140737488355328
+65536 * -2147483647
+-140737488289792
+65536 * -32768
+-2147483648
+65536 * -32767
+-2147418112
+65536 * -128
+-8388608
+65536 * -127
+-8323072
+65536 * 255
+16711680
+65536 * 256
+16777216
+65536 * 65535
+4294901760
+65536 * 65536
+4294967296
+65536 * 4294967295
+281474976645120
+65536 * 4294967296
+281474976710656
+65536 * 18446744073709551615
+1208925819614629174640640
+65536 * 18446744073709551616
+1208925819614629174706176
+65536 * 340282366920938463463374607431768211455
+22300745198530623141535718272648361505914880
+65536 * 340282366920938463463374607431768211456
+22300745198530623141535718272648361505980416
+4294967295 * -170141183460469231731687303715884105728
+-730750818495310275641373184626454206112082165760
+4294967295 * -170141183460469231731687303715884105727
+-730750818495310275641373184626454206107787198465
+4294967295 * -9223372036854775808
+-39614081247908796759917199360
+4294967295 * -9223372036854775807
+-39614081247908796755622232065
+4294967295 * -2147483648
+-9223372034707292160
+4294967295 * -2147483647
+-9223372030412324865
+4294967295 * -32768
+-140737488322560
+4294967295 * -32767
+-140733193355265
+4294967295 * -128
+-549755813760
+4294967295 * -127
+-545460846465
+4294967295 * 255
+1095216660225
+4294967295 * 256
+1099511627520
+4294967295 * 65535
+281470681677825
+4294967295 * 65536
+281474976645120
+4294967295 * 4294967295
+18446744065119617025
+4294967295 * 4294967296
+18446744069414584320
+4294967295 * 18446744073709551615
+79228162495817593515539431425
+4294967295 * 18446744073709551616
+79228162495817593519834398720
+4294967295 * 340282366920938463463374607431768211455
+1461501636990620551282746369252908412219869364225
+4294967295 * 340282366920938463463374607431768211456
+1461501636990620551282746369252908412224164331520
+4294967296 * -170141183460469231731687303715884105728
+-730750818665451459101842416358141509827966271488
+4294967296 * -170141183460469231731687303715884105727
+-730750818665451459101842416358141509823671304192
+4294967296 * -9223372036854775808
+-39614081257132168796771975168
+4294967296 * -9223372036854775807
+-39614081257132168792477007872
+4294967296 * -2147483648
+-9223372036854775808
+4294967296 * -2147483647
+-9223372032559808512
+4294967296 * -32768
+-140737488355328
+4294967296 * -32767
+-140733193388032
+4294967296 * -128
+-549755813888
+4294967296 * -127
+-545460846592
+4294967296 * 255
+1095216660480
+4294967296 * 256
+1099511627776
+4294967296 * 65535
+281470681743360
+4294967296 * 65536
+281474976710656
+4294967296 * 4294967295
+18446744069414584320
+4294967296 * 4294967296
+18446744073709551616
+4294967296 * 18446744073709551615
+79228162514264337589248983040
+4294967296 * 18446744073709551616
+79228162514264337593543950336
+4294967296 * 340282366920938463463374607431768211455
+1461501637330902918203684832716283019651637575680
+4294967296 * 340282366920938463463374607431768211456
+1461501637330902918203684832716283019655932542976
+18446744073709551615 * -170141183460469231731687303715884105728
+-3138550867693340381747753528143363976319490418516133150720
+18446744073709551615 * -170141183460469231731687303715884105727
+-3138550867693340381747753528143363976301043674442423599105
+18446744073709551615 * -9223372036854775808
+-170141183460469231722463931679029329920
+18446744073709551615 * -9223372036854775807
+-170141183460469231704017187605319778305
+18446744073709551615 * -2147483648
+-39614081257132168794624491520
+18446744073709551615 * -2147483647
+-39614081238685424720914939905
+18446744073709551615 * -32768
+-604462909807314587320320
+18446744073709551615 * -32767
+-604444463063240877768705
+18446744073709551615 * -128
+-2361183241434822606720
+18446744073709551615 * -127
+-2342736497361113055105
+18446744073709551615 * 255
+4703919738795935661825
+18446744073709551615 * 256
+4722366482869645213440
+18446744073709551615 * 65535
+1208907372870555465089025
+18446744073709551615 * 65536
+1208925819614629174640640
+18446744073709551615 * 4294967295
+79228162495817593515539431425
+18446744073709551615 * 4294967296
+79228162514264337589248983040
+18446744073709551615 * 18446744073709551615
+340282366920938463426481119284349108225
+18446744073709551615 * 18446744073709551616
+340282366920938463444927863358058659840
+18446744073709551615 * 340282366920938463463374607431768211455
+6277101735386680763495507056286727952620534092958556749825
+18446744073709551615 * 340282366920938463463374607431768211456
+6277101735386680763495507056286727952638980837032266301440
+18446744073709551616 * -170141183460469231731687303715884105728
+-3138550867693340381917894711603833208051177722232017256448
+18446744073709551616 * -170141183460469231731687303715884105727
+-3138550867693340381917894711603833208032730978158307704832
+18446744073709551616 * -9223372036854775808
+-170141183460469231731687303715884105728
+18446744073709551616 * -9223372036854775807
+-170141183460469231713240559642174554112
+18446744073709551616 * -2147483648
+-39614081257132168796771975168
+18446744073709551616 * -2147483647
+-39614081238685424723062423552
+18446744073709551616 * -32768
+-604462909807314587353088
+18446744073709551616 * -32767
+-604444463063240877801472
+18446744073709551616 * -128
+-2361183241434822606848
+18446744073709551616 * -127
+-2342736497361113055232
+18446744073709551616 * 255
+4703919738795935662080
+18446744073709551616 * 256
+4722366482869645213696
+18446744073709551616 * 65535
+1208907372870555465154560
+18446744073709551616 * 65536
+1208925819614629174706176
+18446744073709551616 * 4294967295
+79228162495817593519834398720
+18446744073709551616 * 4294967296
+79228162514264337593543950336
+18446744073709551616 * 18446744073709551615
+340282366920938463444927863358058659840
+18446744073709551616 * 18446744073709551616
+340282366920938463463374607431768211456
+18446744073709551616 * 340282366920938463463374607431768211455
+6277101735386680763835789423207666416083908700390324961280
+18446744073709551616 * 340282366920938463463374607431768211456
+6277101735386680763835789423207666416102355444464034512896
+340282366920938463463374607431768211455 * -170141183460469231731687303715884105728
+-57896044618658097711785492504343953926464851149359812787997104700240680714240
+340282366920938463463374607431768211455 * -170141183460469231731687303715884105727
+-57896044618658097711785492504343953926124568782438874324533730092808912502785
+340282366920938463463374607431768211455 * -9223372036854775808
+-3138550867693340381917894711603833208041954350195162480640
+340282366920938463463374607431768211455 * -9223372036854775807
+-3138550867693340381577612344682894744578579742763394269185
+340282366920938463463374607431768211455 * -2147483648
+-730750818665451459101842416358141509825818787840
+340282366920938463463374607431768211455 * -2147483647
+-730750818325169092180903952894766902394050576385
+340282366920938463463374607431768211455 * -32768
+-11150372599265311570767859136324180752957440
+340282366920938463463374607431768211455 * -32767
+-11150032316898390632304395761716748984745985
+340282366920938463463374607431768211455 * -128
+-43556142965880123323311949751266331066240
+340282366920938463463374607431768211455 * -127
+-43215860598959184859848575143834562854785
+340282366920938463463374607431768211455 * 255
+86772003564839308183160524895100893921025
+340282366920938463463374607431768211455 * 256
+87112285931760246646623899502532662132480
+340282366920938463463374607431768211455 * 65535
+22300404916163702203072254898040929737703425
+340282366920938463463374607431768211455 * 65536
+22300745198530623141535718272648361505914880
+340282366920938463463374607431768211455 * 4294967295
+1461501636990620551282746369252908412219869364225
+340282366920938463463374607431768211455 * 4294967296
+1461501637330902918203684832716283019651637575680
+340282366920938463463374607431768211455 * 18446744073709551615
+6277101735386680763495507056286727952620534092958556749825
+340282366920938463463374607431768211455 * 18446744073709551616
+6277101735386680763835789423207666416083908700390324961280
+340282366920938463463374607431768211455 * 340282366920938463463374607431768211455
+115792089237316195423570985008687907852589419931798687112530834793049593217025
+340282366920938463463374607431768211455 * 340282366920938463463374607431768211456
+115792089237316195423570985008687907852929702298719625575994209400481361428480
+340282366920938463463374607431768211456 * -170141183460469231731687303715884105728
+-57896044618658097711785492504343953926634992332820282019728792003956564819968
+340282366920938463463374607431768211456 * -170141183460469231731687303715884105727
+-57896044618658097711785492504343953926294709965899343556265417396524796608512
+340282366920938463463374607431768211456 * -9223372036854775808
+-3138550867693340381917894711603833208051177722232017256448
+340282366920938463463374607431768211456 * -9223372036854775807
+-3138550867693340381577612344682894744587803114800249044992
+340282366920938463463374607431768211456 * -2147483648
+-730750818665451459101842416358141509827966271488
+340282366920938463463374607431768211456 * -2147483647
+-730750818325169092180903952894766902396198060032
+340282366920938463463374607431768211456 * -32768
+-11150372599265311570767859136324180752990208
+340282366920938463463374607431768211456 * -32767
+-11150032316898390632304395761716748984778752
+340282366920938463463374607431768211456 * -128
+-43556142965880123323311949751266331066368
+340282366920938463463374607431768211456 * -127
+-43215860598959184859848575143834562854912
+340282366920938463463374607431768211456 * 255
+86772003564839308183160524895100893921280
+340282366920938463463374607431768211456 * 256
+87112285931760246646623899502532662132736
+340282366920938463463374607431768211456 * 65535
+22300404916163702203072254898040929737768960
+340282366920938463463374607431768211456 * 65536
+22300745198530623141535718272648361505980416
+340282366920938463463374607431768211456 * 4294967295
+1461501636990620551282746369252908412224164331520
+340282366920938463463374607431768211456 * 4294967296
+1461501637330902918203684832716283019655932542976
+340282366920938463463374607431768211456 * 18446744073709551615
+6277101735386680763495507056286727952638980837032266301440
+340282366920938463463374607431768211456 * 18446744073709551616
+6277101735386680763835789423207666416102355444464034512896
+340282366920938463463374607431768211456 * 340282366920938463463374607431768211455
+115792089237316195423570985008687907852929702298719625575994209400481361428480
+340282366920938463463374607431768211456 * 340282366920938463463374607431768211456
+115792089237316195423570985008687907853269984665640564039457584007913129639936
diff --git a/test/ic3/integer_mul.ret.expected b/test/ic3/integer_mul.ret.expected
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/test/ic3/integer_mul.ret.expected
@@ -0,0 +1 @@
+0
diff --git a/test/ic3/integer_sub.in b/test/ic3/integer_sub.in
new file mode 100644
index 0000000..a54e659
--- /dev/null
+++ b/test/ic3/integer_sub.in
@@ -0,0 +1,800 @@
+quote -170141183460469231731687303715884105728 - -170141183460469231731687303715884105728
+-170141183460469231731687303715884105728 - -170141183460469231731687303715884105728
+quote -170141183460469231731687303715884105728 - -170141183460469231731687303715884105727
+-170141183460469231731687303715884105728 - -170141183460469231731687303715884105727
+quote -170141183460469231731687303715884105728 - -9223372036854775808
+-170141183460469231731687303715884105728 - -9223372036854775808
+quote -170141183460469231731687303715884105728 - -9223372036854775807
+-170141183460469231731687303715884105728 - -9223372036854775807
+quote -170141183460469231731687303715884105728 - -2147483648
+-170141183460469231731687303715884105728 - -2147483648
+quote -170141183460469231731687303715884105728 - -2147483647
+-170141183460469231731687303715884105728 - -2147483647
+quote -170141183460469231731687303715884105728 - -32768
+-170141183460469231731687303715884105728 - -32768
+quote -170141183460469231731687303715884105728 - -32767
+-170141183460469231731687303715884105728 - -32767
+quote -170141183460469231731687303715884105728 - -128
+-170141183460469231731687303715884105728 - -128
+quote -170141183460469231731687303715884105728 - -127
+-170141183460469231731687303715884105728 - -127
+quote -170141183460469231731687303715884105728 - 255
+-170141183460469231731687303715884105728 - 255
+quote -170141183460469231731687303715884105728 - 256
+-170141183460469231731687303715884105728 - 256
+quote -170141183460469231731687303715884105728 - 65535
+-170141183460469231731687303715884105728 - 65535
+quote -170141183460469231731687303715884105728 - 65536
+-170141183460469231731687303715884105728 - 65536
+quote -170141183460469231731687303715884105728 - 4294967295
+-170141183460469231731687303715884105728 - 4294967295
+quote -170141183460469231731687303715884105728 - 4294967296
+-170141183460469231731687303715884105728 - 4294967296
+quote -170141183460469231731687303715884105728 - 18446744073709551615
+-170141183460469231731687303715884105728 - 18446744073709551615
+quote -170141183460469231731687303715884105728 - 18446744073709551616
+-170141183460469231731687303715884105728 - 18446744073709551616
+quote -170141183460469231731687303715884105728 - 340282366920938463463374607431768211455
+-170141183460469231731687303715884105728 - 340282366920938463463374607431768211455
+quote -170141183460469231731687303715884105728 - 340282366920938463463374607431768211456
+-170141183460469231731687303715884105728 - 340282366920938463463374607431768211456
+quote -170141183460469231731687303715884105727 - -170141183460469231731687303715884105728
+-170141183460469231731687303715884105727 - -170141183460469231731687303715884105728
+quote -170141183460469231731687303715884105727 - -170141183460469231731687303715884105727
+-170141183460469231731687303715884105727 - -170141183460469231731687303715884105727
+quote -170141183460469231731687303715884105727 - -9223372036854775808
+-170141183460469231731687303715884105727 - -9223372036854775808
+quote -170141183460469231731687303715884105727 - -9223372036854775807
+-170141183460469231731687303715884105727 - -9223372036854775807
+quote -170141183460469231731687303715884105727 - -2147483648
+-170141183460469231731687303715884105727 - -2147483648
+quote -170141183460469231731687303715884105727 - -2147483647
+-170141183460469231731687303715884105727 - -2147483647
+quote -170141183460469231731687303715884105727 - -32768
+-170141183460469231731687303715884105727 - -32768
+quote -170141183460469231731687303715884105727 - -32767
+-170141183460469231731687303715884105727 - -32767
+quote -170141183460469231731687303715884105727 - -128
+-170141183460469231731687303715884105727 - -128
+quote -170141183460469231731687303715884105727 - -127
+-170141183460469231731687303715884105727 - -127
+quote -170141183460469231731687303715884105727 - 255
+-170141183460469231731687303715884105727 - 255
+quote -170141183460469231731687303715884105727 - 256
+-170141183460469231731687303715884105727 - 256
+quote -170141183460469231731687303715884105727 - 65535
+-170141183460469231731687303715884105727 - 65535
+quote -170141183460469231731687303715884105727 - 65536
+-170141183460469231731687303715884105727 - 65536
+quote -170141183460469231731687303715884105727 - 4294967295
+-170141183460469231731687303715884105727 - 4294967295
+quote -170141183460469231731687303715884105727 - 4294967296
+-170141183460469231731687303715884105727 - 4294967296
+quote -170141183460469231731687303715884105727 - 18446744073709551615
+-170141183460469231731687303715884105727 - 18446744073709551615
+quote -170141183460469231731687303715884105727 - 18446744073709551616
+-170141183460469231731687303715884105727 - 18446744073709551616
+quote -170141183460469231731687303715884105727 - 340282366920938463463374607431768211455
+-170141183460469231731687303715884105727 - 340282366920938463463374607431768211455
+quote -170141183460469231731687303715884105727 - 340282366920938463463374607431768211456
+-170141183460469231731687303715884105727 - 340282366920938463463374607431768211456
+quote -9223372036854775808 - -170141183460469231731687303715884105728
+-9223372036854775808 - -170141183460469231731687303715884105728
+quote -9223372036854775808 - -170141183460469231731687303715884105727
+-9223372036854775808 - -170141183460469231731687303715884105727
+quote -9223372036854775808 - -9223372036854775808
+-9223372036854775808 - -9223372036854775808
+quote -9223372036854775808 - -9223372036854775807
+-9223372036854775808 - -9223372036854775807
+quote -9223372036854775808 - -2147483648
+-9223372036854775808 - -2147483648
+quote -9223372036854775808 - -2147483647
+-9223372036854775808 - -2147483647
+quote -9223372036854775808 - -32768
+-9223372036854775808 - -32768
+quote -9223372036854775808 - -32767
+-9223372036854775808 - -32767
+quote -9223372036854775808 - -128
+-9223372036854775808 - -128
+quote -9223372036854775808 - -127
+-9223372036854775808 - -127
+quote -9223372036854775808 - 255
+-9223372036854775808 - 255
+quote -9223372036854775808 - 256
+-9223372036854775808 - 256
+quote -9223372036854775808 - 65535
+-9223372036854775808 - 65535
+quote -9223372036854775808 - 65536
+-9223372036854775808 - 65536
+quote -9223372036854775808 - 4294967295
+-9223372036854775808 - 4294967295
+quote -9223372036854775808 - 4294967296
+-9223372036854775808 - 4294967296
+quote -9223372036854775808 - 18446744073709551615
+-9223372036854775808 - 18446744073709551615
+quote -9223372036854775808 - 18446744073709551616
+-9223372036854775808 - 18446744073709551616
+quote -9223372036854775808 - 340282366920938463463374607431768211455
+-9223372036854775808 - 340282366920938463463374607431768211455
+quote -9223372036854775808 - 340282366920938463463374607431768211456
+-9223372036854775808 - 340282366920938463463374607431768211456
+quote -9223372036854775807 - -170141183460469231731687303715884105728
+-9223372036854775807 - -170141183460469231731687303715884105728
+quote -9223372036854775807 - -170141183460469231731687303715884105727
+-9223372036854775807 - -170141183460469231731687303715884105727
+quote -9223372036854775807 - -9223372036854775808
+-9223372036854775807 - -9223372036854775808
+quote -9223372036854775807 - -9223372036854775807
+-9223372036854775807 - -9223372036854775807
+quote -9223372036854775807 - -2147483648
+-9223372036854775807 - -2147483648
+quote -9223372036854775807 - -2147483647
+-9223372036854775807 - -2147483647
+quote -9223372036854775807 - -32768
+-9223372036854775807 - -32768
+quote -9223372036854775807 - -32767
+-9223372036854775807 - -32767
+quote -9223372036854775807 - -128
+-9223372036854775807 - -128
+quote -9223372036854775807 - -127
+-9223372036854775807 - -127
+quote -9223372036854775807 - 255
+-9223372036854775807 - 255
+quote -9223372036854775807 - 256
+-9223372036854775807 - 256
+quote -9223372036854775807 - 65535
+-9223372036854775807 - 65535
+quote -9223372036854775807 - 65536
+-9223372036854775807 - 65536
+quote -9223372036854775807 - 4294967295
+-9223372036854775807 - 4294967295
+quote -9223372036854775807 - 4294967296
+-9223372036854775807 - 4294967296
+quote -9223372036854775807 - 18446744073709551615
+-9223372036854775807 - 18446744073709551615
+quote -9223372036854775807 - 18446744073709551616
+-9223372036854775807 - 18446744073709551616
+quote -9223372036854775807 - 340282366920938463463374607431768211455
+-9223372036854775807 - 340282366920938463463374607431768211455
+quote -9223372036854775807 - 340282366920938463463374607431768211456
+-9223372036854775807 - 340282366920938463463374607431768211456
+quote -2147483648 - -170141183460469231731687303715884105728
+-2147483648 - -170141183460469231731687303715884105728
+quote -2147483648 - -170141183460469231731687303715884105727
+-2147483648 - -170141183460469231731687303715884105727
+quote -2147483648 - -9223372036854775808
+-2147483648 - -9223372036854775808
+quote -2147483648 - -9223372036854775807
+-2147483648 - -9223372036854775807
+quote -2147483648 - -2147483648
+-2147483648 - -2147483648
+quote -2147483648 - -2147483647
+-2147483648 - -2147483647
+quote -2147483648 - -32768
+-2147483648 - -32768
+quote -2147483648 - -32767
+-2147483648 - -32767
+quote -2147483648 - -128
+-2147483648 - -128
+quote -2147483648 - -127
+-2147483648 - -127
+quote -2147483648 - 255
+-2147483648 - 255
+quote -2147483648 - 256
+-2147483648 - 256
+quote -2147483648 - 65535
+-2147483648 - 65535
+quote -2147483648 - 65536
+-2147483648 - 65536
+quote -2147483648 - 4294967295
+-2147483648 - 4294967295
+quote -2147483648 - 4294967296
+-2147483648 - 4294967296
+quote -2147483648 - 18446744073709551615
+-2147483648 - 18446744073709551615
+quote -2147483648 - 18446744073709551616
+-2147483648 - 18446744073709551616
+quote -2147483648 - 340282366920938463463374607431768211455
+-2147483648 - 340282366920938463463374607431768211455
+quote -2147483648 - 340282366920938463463374607431768211456
+-2147483648 - 340282366920938463463374607431768211456
+quote -2147483647 - -170141183460469231731687303715884105728
+-2147483647 - -170141183460469231731687303715884105728
+quote -2147483647 - -170141183460469231731687303715884105727
+-2147483647 - -170141183460469231731687303715884105727
+quote -2147483647 - -9223372036854775808
+-2147483647 - -9223372036854775808
+quote -2147483647 - -9223372036854775807
+-2147483647 - -9223372036854775807
+quote -2147483647 - -2147483648
+-2147483647 - -2147483648
+quote -2147483647 - -2147483647
+-2147483647 - -2147483647
+quote -2147483647 - -32768
+-2147483647 - -32768
+quote -2147483647 - -32767
+-2147483647 - -32767
+quote -2147483647 - -128
+-2147483647 - -128
+quote -2147483647 - -127
+-2147483647 - -127
+quote -2147483647 - 255
+-2147483647 - 255
+quote -2147483647 - 256
+-2147483647 - 256
+quote -2147483647 - 65535
+-2147483647 - 65535
+quote -2147483647 - 65536
+-2147483647 - 65536
+quote -2147483647 - 4294967295
+-2147483647 - 4294967295
+quote -2147483647 - 4294967296
+-2147483647 - 4294967296
+quote -2147483647 - 18446744073709551615
+-2147483647 - 18446744073709551615
+quote -2147483647 - 18446744073709551616
+-2147483647 - 18446744073709551616
+quote -2147483647 - 340282366920938463463374607431768211455
+-2147483647 - 340282366920938463463374607431768211455
+quote -2147483647 - 340282366920938463463374607431768211456
+-2147483647 - 340282366920938463463374607431768211456
+quote -32768 - -170141183460469231731687303715884105728
+-32768 - -170141183460469231731687303715884105728
+quote -32768 - -170141183460469231731687303715884105727
+-32768 - -170141183460469231731687303715884105727
+quote -32768 - -9223372036854775808
+-32768 - -9223372036854775808
+quote -32768 - -9223372036854775807
+-32768 - -9223372036854775807
+quote -32768 - -2147483648
+-32768 - -2147483648
+quote -32768 - -2147483647
+-32768 - -2147483647
+quote -32768 - -32768
+-32768 - -32768
+quote -32768 - -32767
+-32768 - -32767
+quote -32768 - -128
+-32768 - -128
+quote -32768 - -127
+-32768 - -127
+quote -32768 - 255
+-32768 - 255
+quote -32768 - 256
+-32768 - 256
+quote -32768 - 65535
+-32768 - 65535
+quote -32768 - 65536
+-32768 - 65536
+quote -32768 - 4294967295
+-32768 - 4294967295
+quote -32768 - 4294967296
+-32768 - 4294967296
+quote -32768 - 18446744073709551615
+-32768 - 18446744073709551615
+quote -32768 - 18446744073709551616
+-32768 - 18446744073709551616
+quote -32768 - 340282366920938463463374607431768211455
+-32768 - 340282366920938463463374607431768211455
+quote -32768 - 340282366920938463463374607431768211456
+-32768 - 340282366920938463463374607431768211456
+quote -32767 - -170141183460469231731687303715884105728
+-32767 - -170141183460469231731687303715884105728
+quote -32767 - -170141183460469231731687303715884105727
+-32767 - -170141183460469231731687303715884105727
+quote -32767 - -9223372036854775808
+-32767 - -9223372036854775808
+quote -32767 - -9223372036854775807
+-32767 - -9223372036854775807
+quote -32767 - -2147483648
+-32767 - -2147483648
+quote -32767 - -2147483647
+-32767 - -2147483647
+quote -32767 - -32768
+-32767 - -32768
+quote -32767 - -32767
+-32767 - -32767
+quote -32767 - -128
+-32767 - -128
+quote -32767 - -127
+-32767 - -127
+quote -32767 - 255
+-32767 - 255
+quote -32767 - 256
+-32767 - 256
+quote -32767 - 65535
+-32767 - 65535
+quote -32767 - 65536
+-32767 - 65536
+quote -32767 - 4294967295
+-32767 - 4294967295
+quote -32767 - 4294967296
+-32767 - 4294967296
+quote -32767 - 18446744073709551615
+-32767 - 18446744073709551615
+quote -32767 - 18446744073709551616
+-32767 - 18446744073709551616
+quote -32767 - 340282366920938463463374607431768211455
+-32767 - 340282366920938463463374607431768211455
+quote -32767 - 340282366920938463463374607431768211456
+-32767 - 340282366920938463463374607431768211456
+quote -128 - -170141183460469231731687303715884105728
+-128 - -170141183460469231731687303715884105728
+quote -128 - -170141183460469231731687303715884105727
+-128 - -170141183460469231731687303715884105727
+quote -128 - -9223372036854775808
+-128 - -9223372036854775808
+quote -128 - -9223372036854775807
+-128 - -9223372036854775807
+quote -128 - -2147483648
+-128 - -2147483648
+quote -128 - -2147483647
+-128 - -2147483647
+quote -128 - -32768
+-128 - -32768
+quote -128 - -32767
+-128 - -32767
+quote -128 - -128
+-128 - -128
+quote -128 - -127
+-128 - -127
+quote -128 - 255
+-128 - 255
+quote -128 - 256
+-128 - 256
+quote -128 - 65535
+-128 - 65535
+quote -128 - 65536
+-128 - 65536
+quote -128 - 4294967295
+-128 - 4294967295
+quote -128 - 4294967296
+-128 - 4294967296
+quote -128 - 18446744073709551615
+-128 - 18446744073709551615
+quote -128 - 18446744073709551616
+-128 - 18446744073709551616
+quote -128 - 340282366920938463463374607431768211455
+-128 - 340282366920938463463374607431768211455
+quote -128 - 340282366920938463463374607431768211456
+-128 - 340282366920938463463374607431768211456
+quote -127 - -170141183460469231731687303715884105728
+-127 - -170141183460469231731687303715884105728
+quote -127 - -170141183460469231731687303715884105727
+-127 - -170141183460469231731687303715884105727
+quote -127 - -9223372036854775808
+-127 - -9223372036854775808
+quote -127 - -9223372036854775807
+-127 - -9223372036854775807
+quote -127 - -2147483648
+-127 - -2147483648
+quote -127 - -2147483647
+-127 - -2147483647
+quote -127 - -32768
+-127 - -32768
+quote -127 - -32767
+-127 - -32767
+quote -127 - -128
+-127 - -128
+quote -127 - -127
+-127 - -127
+quote -127 - 255
+-127 - 255
+quote -127 - 256
+-127 - 256
+quote -127 - 65535
+-127 - 65535
+quote -127 - 65536
+-127 - 65536
+quote -127 - 4294967295
+-127 - 4294967295
+quote -127 - 4294967296
+-127 - 4294967296
+quote -127 - 18446744073709551615
+-127 - 18446744073709551615
+quote -127 - 18446744073709551616
+-127 - 18446744073709551616
+quote -127 - 340282366920938463463374607431768211455
+-127 - 340282366920938463463374607431768211455
+quote -127 - 340282366920938463463374607431768211456
+-127 - 340282366920938463463374607431768211456
+quote 255 - -170141183460469231731687303715884105728
+255 - -170141183460469231731687303715884105728
+quote 255 - -170141183460469231731687303715884105727
+255 - -170141183460469231731687303715884105727
+quote 255 - -9223372036854775808
+255 - -9223372036854775808
+quote 255 - -9223372036854775807
+255 - -9223372036854775807
+quote 255 - -2147483648
+255 - -2147483648
+quote 255 - -2147483647
+255 - -2147483647
+quote 255 - -32768
+255 - -32768
+quote 255 - -32767
+255 - -32767
+quote 255 - -128
+255 - -128
+quote 255 - -127
+255 - -127
+quote 255 - 255
+255 - 255
+quote 255 - 256
+255 - 256
+quote 255 - 65535
+255 - 65535
+quote 255 - 65536
+255 - 65536
+quote 255 - 4294967295
+255 - 4294967295
+quote 255 - 4294967296
+255 - 4294967296
+quote 255 - 18446744073709551615
+255 - 18446744073709551615
+quote 255 - 18446744073709551616
+255 - 18446744073709551616
+quote 255 - 340282366920938463463374607431768211455
+255 - 340282366920938463463374607431768211455
+quote 255 - 340282366920938463463374607431768211456
+255 - 340282366920938463463374607431768211456
+quote 256 - -170141183460469231731687303715884105728
+256 - -170141183460469231731687303715884105728
+quote 256 - -170141183460469231731687303715884105727
+256 - -170141183460469231731687303715884105727
+quote 256 - -9223372036854775808
+256 - -9223372036854775808
+quote 256 - -9223372036854775807
+256 - -9223372036854775807
+quote 256 - -2147483648
+256 - -2147483648
+quote 256 - -2147483647
+256 - -2147483647
+quote 256 - -32768
+256 - -32768
+quote 256 - -32767
+256 - -32767
+quote 256 - -128
+256 - -128
+quote 256 - -127
+256 - -127
+quote 256 - 255
+256 - 255
+quote 256 - 256
+256 - 256
+quote 256 - 65535
+256 - 65535
+quote 256 - 65536
+256 - 65536
+quote 256 - 4294967295
+256 - 4294967295
+quote 256 - 4294967296
+256 - 4294967296
+quote 256 - 18446744073709551615
+256 - 18446744073709551615
+quote 256 - 18446744073709551616
+256 - 18446744073709551616
+quote 256 - 340282366920938463463374607431768211455
+256 - 340282366920938463463374607431768211455
+quote 256 - 340282366920938463463374607431768211456
+256 - 340282366920938463463374607431768211456
+quote 65535 - -170141183460469231731687303715884105728
+65535 - -170141183460469231731687303715884105728
+quote 65535 - -170141183460469231731687303715884105727
+65535 - -170141183460469231731687303715884105727
+quote 65535 - -9223372036854775808
+65535 - -9223372036854775808
+quote 65535 - -9223372036854775807
+65535 - -9223372036854775807
+quote 65535 - -2147483648
+65535 - -2147483648
+quote 65535 - -2147483647
+65535 - -2147483647
+quote 65535 - -32768
+65535 - -32768
+quote 65535 - -32767
+65535 - -32767
+quote 65535 - -128
+65535 - -128
+quote 65535 - -127
+65535 - -127
+quote 65535 - 255
+65535 - 255
+quote 65535 - 256
+65535 - 256
+quote 65535 - 65535
+65535 - 65535
+quote 65535 - 65536
+65535 - 65536
+quote 65535 - 4294967295
+65535 - 4294967295
+quote 65535 - 4294967296
+65535 - 4294967296
+quote 65535 - 18446744073709551615
+65535 - 18446744073709551615
+quote 65535 - 18446744073709551616
+65535 - 18446744073709551616
+quote 65535 - 340282366920938463463374607431768211455
+65535 - 340282366920938463463374607431768211455
+quote 65535 - 340282366920938463463374607431768211456
+65535 - 340282366920938463463374607431768211456
+quote 65536 - -170141183460469231731687303715884105728
+65536 - -170141183460469231731687303715884105728
+quote 65536 - -170141183460469231731687303715884105727
+65536 - -170141183460469231731687303715884105727
+quote 65536 - -9223372036854775808
+65536 - -9223372036854775808
+quote 65536 - -9223372036854775807
+65536 - -9223372036854775807
+quote 65536 - -2147483648
+65536 - -2147483648
+quote 65536 - -2147483647
+65536 - -2147483647
+quote 65536 - -32768
+65536 - -32768
+quote 65536 - -32767
+65536 - -32767
+quote 65536 - -128
+65536 - -128
+quote 65536 - -127
+65536 - -127
+quote 65536 - 255
+65536 - 255
+quote 65536 - 256
+65536 - 256
+quote 65536 - 65535
+65536 - 65535
+quote 65536 - 65536
+65536 - 65536
+quote 65536 - 4294967295
+65536 - 4294967295
+quote 65536 - 4294967296
+65536 - 4294967296
+quote 65536 - 18446744073709551615
+65536 - 18446744073709551615
+quote 65536 - 18446744073709551616
+65536 - 18446744073709551616
+quote 65536 - 340282366920938463463374607431768211455
+65536 - 340282366920938463463374607431768211455
+quote 65536 - 340282366920938463463374607431768211456
+65536 - 340282366920938463463374607431768211456
+quote 4294967295 - -170141183460469231731687303715884105728
+4294967295 - -170141183460469231731687303715884105728
+quote 4294967295 - -170141183460469231731687303715884105727
+4294967295 - -170141183460469231731687303715884105727
+quote 4294967295 - -9223372036854775808
+4294967295 - -9223372036854775808
+quote 4294967295 - -9223372036854775807
+4294967295 - -9223372036854775807
+quote 4294967295 - -2147483648
+4294967295 - -2147483648
+quote 4294967295 - -2147483647
+4294967295 - -2147483647
+quote 4294967295 - -32768
+4294967295 - -32768
+quote 4294967295 - -32767
+4294967295 - -32767
+quote 4294967295 - -128
+4294967295 - -128
+quote 4294967295 - -127
+4294967295 - -127
+quote 4294967295 - 255
+4294967295 - 255
+quote 4294967295 - 256
+4294967295 - 256
+quote 4294967295 - 65535
+4294967295 - 65535
+quote 4294967295 - 65536
+4294967295 - 65536
+quote 4294967295 - 4294967295
+4294967295 - 4294967295
+quote 4294967295 - 4294967296
+4294967295 - 4294967296
+quote 4294967295 - 18446744073709551615
+4294967295 - 18446744073709551615
+quote 4294967295 - 18446744073709551616
+4294967295 - 18446744073709551616
+quote 4294967295 - 340282366920938463463374607431768211455
+4294967295 - 340282366920938463463374607431768211455
+quote 4294967295 - 340282366920938463463374607431768211456
+4294967295 - 340282366920938463463374607431768211456
+quote 4294967296 - -170141183460469231731687303715884105728
+4294967296 - -170141183460469231731687303715884105728
+quote 4294967296 - -170141183460469231731687303715884105727
+4294967296 - -170141183460469231731687303715884105727
+quote 4294967296 - -9223372036854775808
+4294967296 - -9223372036854775808
+quote 4294967296 - -9223372036854775807
+4294967296 - -9223372036854775807
+quote 4294967296 - -2147483648
+4294967296 - -2147483648
+quote 4294967296 - -2147483647
+4294967296 - -2147483647
+quote 4294967296 - -32768
+4294967296 - -32768
+quote 4294967296 - -32767
+4294967296 - -32767
+quote 4294967296 - -128
+4294967296 - -128
+quote 4294967296 - -127
+4294967296 - -127
+quote 4294967296 - 255
+4294967296 - 255
+quote 4294967296 - 256
+4294967296 - 256
+quote 4294967296 - 65535
+4294967296 - 65535
+quote 4294967296 - 65536
+4294967296 - 65536
+quote 4294967296 - 4294967295
+4294967296 - 4294967295
+quote 4294967296 - 4294967296
+4294967296 - 4294967296
+quote 4294967296 - 18446744073709551615
+4294967296 - 18446744073709551615
+quote 4294967296 - 18446744073709551616
+4294967296 - 18446744073709551616
+quote 4294967296 - 340282366920938463463374607431768211455
+4294967296 - 340282366920938463463374607431768211455
+quote 4294967296 - 340282366920938463463374607431768211456
+4294967296 - 340282366920938463463374607431768211456
+quote 18446744073709551615 - -170141183460469231731687303715884105728
+18446744073709551615 - -170141183460469231731687303715884105728
+quote 18446744073709551615 - -170141183460469231731687303715884105727
+18446744073709551615 - -170141183460469231731687303715884105727
+quote 18446744073709551615 - -9223372036854775808
+18446744073709551615 - -9223372036854775808
+quote 18446744073709551615 - -9223372036854775807
+18446744073709551615 - -9223372036854775807
+quote 18446744073709551615 - -2147483648
+18446744073709551615 - -2147483648
+quote 18446744073709551615 - -2147483647
+18446744073709551615 - -2147483647
+quote 18446744073709551615 - -32768
+18446744073709551615 - -32768
+quote 18446744073709551615 - -32767
+18446744073709551615 - -32767
+quote 18446744073709551615 - -128
+18446744073709551615 - -128
+quote 18446744073709551615 - -127
+18446744073709551615 - -127
+quote 18446744073709551615 - 255
+18446744073709551615 - 255
+quote 18446744073709551615 - 256
+18446744073709551615 - 256
+quote 18446744073709551615 - 65535
+18446744073709551615 - 65535
+quote 18446744073709551615 - 65536
+18446744073709551615 - 65536
+quote 18446744073709551615 - 4294967295
+18446744073709551615 - 4294967295
+quote 18446744073709551615 - 4294967296
+18446744073709551615 - 4294967296
+quote 18446744073709551615 - 18446744073709551615
+18446744073709551615 - 18446744073709551615
+quote 18446744073709551615 - 18446744073709551616
+18446744073709551615 - 18446744073709551616
+quote 18446744073709551615 - 340282366920938463463374607431768211455
+18446744073709551615 - 340282366920938463463374607431768211455
+quote 18446744073709551615 - 340282366920938463463374607431768211456
+18446744073709551615 - 340282366920938463463374607431768211456
+quote 18446744073709551616 - -170141183460469231731687303715884105728
+18446744073709551616 - -170141183460469231731687303715884105728
+quote 18446744073709551616 - -170141183460469231731687303715884105727
+18446744073709551616 - -170141183460469231731687303715884105727
+quote 18446744073709551616 - -9223372036854775808
+18446744073709551616 - -9223372036854775808
+quote 18446744073709551616 - -9223372036854775807
+18446744073709551616 - -9223372036854775807
+quote 18446744073709551616 - -2147483648
+18446744073709551616 - -2147483648
+quote 18446744073709551616 - -2147483647
+18446744073709551616 - -2147483647
+quote 18446744073709551616 - -32768
+18446744073709551616 - -32768
+quote 18446744073709551616 - -32767
+18446744073709551616 - -32767
+quote 18446744073709551616 - -128
+18446744073709551616 - -128
+quote 18446744073709551616 - -127
+18446744073709551616 - -127
+quote 18446744073709551616 - 255
+18446744073709551616 - 255
+quote 18446744073709551616 - 256
+18446744073709551616 - 256
+quote 18446744073709551616 - 65535
+18446744073709551616 - 65535
+quote 18446744073709551616 - 65536
+18446744073709551616 - 65536
+quote 18446744073709551616 - 4294967295
+18446744073709551616 - 4294967295
+quote 18446744073709551616 - 4294967296
+18446744073709551616 - 4294967296
+quote 18446744073709551616 - 18446744073709551615
+18446744073709551616 - 18446744073709551615
+quote 18446744073709551616 - 18446744073709551616
+18446744073709551616 - 18446744073709551616
+quote 18446744073709551616 - 340282366920938463463374607431768211455
+18446744073709551616 - 340282366920938463463374607431768211455
+quote 18446744073709551616 - 340282366920938463463374607431768211456
+18446744073709551616 - 340282366920938463463374607431768211456
+quote 340282366920938463463374607431768211455 - -170141183460469231731687303715884105728
+340282366920938463463374607431768211455 - -170141183460469231731687303715884105728
+quote 340282366920938463463374607431768211455 - -170141183460469231731687303715884105727
+340282366920938463463374607431768211455 - -170141183460469231731687303715884105727
+quote 340282366920938463463374607431768211455 - -9223372036854775808
+340282366920938463463374607431768211455 - -9223372036854775808
+quote 340282366920938463463374607431768211455 - -9223372036854775807
+340282366920938463463374607431768211455 - -9223372036854775807
+quote 340282366920938463463374607431768211455 - -2147483648
+340282366920938463463374607431768211455 - -2147483648
+quote 340282366920938463463374607431768211455 - -2147483647
+340282366920938463463374607431768211455 - -2147483647
+quote 340282366920938463463374607431768211455 - -32768
+340282366920938463463374607431768211455 - -32768
+quote 340282366920938463463374607431768211455 - -32767
+340282366920938463463374607431768211455 - -32767
+quote 340282366920938463463374607431768211455 - -128
+340282366920938463463374607431768211455 - -128
+quote 340282366920938463463374607431768211455 - -127
+340282366920938463463374607431768211455 - -127
+quote 340282366920938463463374607431768211455 - 255
+340282366920938463463374607431768211455 - 255
+quote 340282366920938463463374607431768211455 - 256
+340282366920938463463374607431768211455 - 256
+quote 340282366920938463463374607431768211455 - 65535
+340282366920938463463374607431768211455 - 65535
+quote 340282366920938463463374607431768211455 - 65536
+340282366920938463463374607431768211455 - 65536
+quote 340282366920938463463374607431768211455 - 4294967295
+340282366920938463463374607431768211455 - 4294967295
+quote 340282366920938463463374607431768211455 - 4294967296
+340282366920938463463374607431768211455 - 4294967296
+quote 340282366920938463463374607431768211455 - 18446744073709551615
+340282366920938463463374607431768211455 - 18446744073709551615
+quote 340282366920938463463374607431768211455 - 18446744073709551616
+340282366920938463463374607431768211455 - 18446744073709551616
+quote 340282366920938463463374607431768211455 - 340282366920938463463374607431768211455
+340282366920938463463374607431768211455 - 340282366920938463463374607431768211455
+quote 340282366920938463463374607431768211455 - 340282366920938463463374607431768211456
+340282366920938463463374607431768211455 - 340282366920938463463374607431768211456
+quote 340282366920938463463374607431768211456 - -170141183460469231731687303715884105728
+340282366920938463463374607431768211456 - -170141183460469231731687303715884105728
+quote 340282366920938463463374607431768211456 - -170141183460469231731687303715884105727
+340282366920938463463374607431768211456 - -170141183460469231731687303715884105727
+quote 340282366920938463463374607431768211456 - -9223372036854775808
+340282366920938463463374607431768211456 - -9223372036854775808
+quote 340282366920938463463374607431768211456 - -9223372036854775807
+340282366920938463463374607431768211456 - -9223372036854775807
+quote 340282366920938463463374607431768211456 - -2147483648
+340282366920938463463374607431768211456 - -2147483648
+quote 340282366920938463463374607431768211456 - -2147483647
+340282366920938463463374607431768211456 - -2147483647
+quote 340282366920938463463374607431768211456 - -32768
+340282366920938463463374607431768211456 - -32768
+quote 340282366920938463463374607431768211456 - -32767
+340282366920938463463374607431768211456 - -32767
+quote 340282366920938463463374607431768211456 - -128
+340282366920938463463374607431768211456 - -128
+quote 340282366920938463463374607431768211456 - -127
+340282366920938463463374607431768211456 - -127
+quote 340282366920938463463374607431768211456 - 255
+340282366920938463463374607431768211456 - 255
+quote 340282366920938463463374607431768211456 - 256
+340282366920938463463374607431768211456 - 256
+quote 340282366920938463463374607431768211456 - 65535
+340282366920938463463374607431768211456 - 65535
+quote 340282366920938463463374607431768211456 - 65536
+340282366920938463463374607431768211456 - 65536
+quote 340282366920938463463374607431768211456 - 4294967295
+340282366920938463463374607431768211456 - 4294967295
+quote 340282366920938463463374607431768211456 - 4294967296
+340282366920938463463374607431768211456 - 4294967296
+quote 340282366920938463463374607431768211456 - 18446744073709551615
+340282366920938463463374607431768211456 - 18446744073709551615
+quote 340282366920938463463374607431768211456 - 18446744073709551616
+340282366920938463463374607431768211456 - 18446744073709551616
+quote 340282366920938463463374607431768211456 - 340282366920938463463374607431768211455
+340282366920938463463374607431768211456 - 340282366920938463463374607431768211455
+quote 340282366920938463463374607431768211456 - 340282366920938463463374607431768211456
+340282366920938463463374607431768211456 - 340282366920938463463374607431768211456
diff --git a/test/ic3/integer_sub.out.expected b/test/ic3/integer_sub.out.expected
new file mode 100644
index 0000000..c6a58ea
--- /dev/null
+++ b/test/ic3/integer_sub.out.expected
@@ -0,0 +1,800 @@
+-170141183460469231731687303715884105728 - -170141183460469231731687303715884105728
+0
+-170141183460469231731687303715884105728 - -170141183460469231731687303715884105727
+-1
+-170141183460469231731687303715884105728 - -9223372036854775808
+-170141183460469231722463931679029329920
+-170141183460469231731687303715884105728 - -9223372036854775807
+-170141183460469231722463931679029329921
+-170141183460469231731687303715884105728 - -2147483648
+-170141183460469231731687303713736622080
+-170141183460469231731687303715884105728 - -2147483647
+-170141183460469231731687303713736622081
+-170141183460469231731687303715884105728 - -32768
+-170141183460469231731687303715884072960
+-170141183460469231731687303715884105728 - -32767
+-170141183460469231731687303715884072961
+-170141183460469231731687303715884105728 - -128
+-170141183460469231731687303715884105600
+-170141183460469231731687303715884105728 - -127
+-170141183460469231731687303715884105601
+-170141183460469231731687303715884105728 - 255
+-170141183460469231731687303715884105983
+-170141183460469231731687303715884105728 - 256
+-170141183460469231731687303715884105984
+-170141183460469231731687303715884105728 - 65535
+-170141183460469231731687303715884171263
+-170141183460469231731687303715884105728 - 65536
+-170141183460469231731687303715884171264
+-170141183460469231731687303715884105728 - 4294967295
+-170141183460469231731687303720179073023
+-170141183460469231731687303715884105728 - 4294967296
+-170141183460469231731687303720179073024
+-170141183460469231731687303715884105728 - 18446744073709551615
+-170141183460469231750134047789593657343
+-170141183460469231731687303715884105728 - 18446744073709551616
+-170141183460469231750134047789593657344
+-170141183460469231731687303715884105728 - 340282366920938463463374607431768211455
+-510423550381407695195061911147652317183
+-170141183460469231731687303715884105728 - 340282366920938463463374607431768211456
+-510423550381407695195061911147652317184
+-170141183460469231731687303715884105727 - -170141183460469231731687303715884105728
+1
+-170141183460469231731687303715884105727 - -170141183460469231731687303715884105727
+0
+-170141183460469231731687303715884105727 - -9223372036854775808
+-170141183460469231722463931679029329919
+-170141183460469231731687303715884105727 - -9223372036854775807
+-170141183460469231722463931679029329920
+-170141183460469231731687303715884105727 - -2147483648
+-170141183460469231731687303713736622079
+-170141183460469231731687303715884105727 - -2147483647
+-170141183460469231731687303713736622080
+-170141183460469231731687303715884105727 - -32768
+-170141183460469231731687303715884072959
+-170141183460469231731687303715884105727 - -32767
+-170141183460469231731687303715884072960
+-170141183460469231731687303715884105727 - -128
+-170141183460469231731687303715884105599
+-170141183460469231731687303715884105727 - -127
+-170141183460469231731687303715884105600
+-170141183460469231731687303715884105727 - 255
+-170141183460469231731687303715884105982
+-170141183460469231731687303715884105727 - 256
+-170141183460469231731687303715884105983
+-170141183460469231731687303715884105727 - 65535
+-170141183460469231731687303715884171262
+-170141183460469231731687303715884105727 - 65536
+-170141183460469231731687303715884171263
+-170141183460469231731687303715884105727 - 4294967295
+-170141183460469231731687303720179073022
+-170141183460469231731687303715884105727 - 4294967296
+-170141183460469231731687303720179073023
+-170141183460469231731687303715884105727 - 18446744073709551615
+-170141183460469231750134047789593657342
+-170141183460469231731687303715884105727 - 18446744073709551616
+-170141183460469231750134047789593657343
+-170141183460469231731687303715884105727 - 340282366920938463463374607431768211455
+-510423550381407695195061911147652317182
+-170141183460469231731687303715884105727 - 340282366920938463463374607431768211456
+-510423550381407695195061911147652317183
+-9223372036854775808 - -170141183460469231731687303715884105728
+170141183460469231722463931679029329920
+-9223372036854775808 - -170141183460469231731687303715884105727
+170141183460469231722463931679029329919
+-9223372036854775808 - -9223372036854775808
+0
+-9223372036854775808 - -9223372036854775807
+-1
+-9223372036854775808 - -2147483648
+-9223372034707292160
+-9223372036854775808 - -2147483647
+-9223372034707292161
+-9223372036854775808 - -32768
+-9223372036854743040
+-9223372036854775808 - -32767
+-9223372036854743041
+-9223372036854775808 - -128
+-9223372036854775680
+-9223372036854775808 - -127
+-9223372036854775681
+-9223372036854775808 - 255
+-9223372036854776063
+-9223372036854775808 - 256
+-9223372036854776064
+-9223372036854775808 - 65535
+-9223372036854841343
+-9223372036854775808 - 65536
+-9223372036854841344
+-9223372036854775808 - 4294967295
+-9223372041149743103
+-9223372036854775808 - 4294967296
+-9223372041149743104
+-9223372036854775808 - 18446744073709551615
+-27670116110564327423
+-9223372036854775808 - 18446744073709551616
+-27670116110564327424
+-9223372036854775808 - 340282366920938463463374607431768211455
+-340282366920938463472597979468622987263
+-9223372036854775808 - 340282366920938463463374607431768211456
+-340282366920938463472597979468622987264
+-9223372036854775807 - -170141183460469231731687303715884105728
+170141183460469231722463931679029329921
+-9223372036854775807 - -170141183460469231731687303715884105727
+170141183460469231722463931679029329920
+-9223372036854775807 - -9223372036854775808
+1
+-9223372036854775807 - -9223372036854775807
+0
+-9223372036854775807 - -2147483648
+-9223372034707292159
+-9223372036854775807 - -2147483647
+-9223372034707292160
+-9223372036854775807 - -32768
+-9223372036854743039
+-9223372036854775807 - -32767
+-9223372036854743040
+-9223372036854775807 - -128
+-9223372036854775679
+-9223372036854775807 - -127
+-9223372036854775680
+-9223372036854775807 - 255
+-9223372036854776062
+-9223372036854775807 - 256
+-9223372036854776063
+-9223372036854775807 - 65535
+-9223372036854841342
+-9223372036854775807 - 65536
+-9223372036854841343
+-9223372036854775807 - 4294967295
+-9223372041149743102
+-9223372036854775807 - 4294967296
+-9223372041149743103
+-9223372036854775807 - 18446744073709551615
+-27670116110564327422
+-9223372036854775807 - 18446744073709551616
+-27670116110564327423
+-9223372036854775807 - 340282366920938463463374607431768211455
+-340282366920938463472597979468622987262
+-9223372036854775807 - 340282366920938463463374607431768211456
+-340282366920938463472597979468622987263
+-2147483648 - -170141183460469231731687303715884105728
+170141183460469231731687303713736622080
+-2147483648 - -170141183460469231731687303715884105727
+170141183460469231731687303713736622079
+-2147483648 - -9223372036854775808
+9223372034707292160
+-2147483648 - -9223372036854775807
+9223372034707292159
+-2147483648 - -2147483648
+0
+-2147483648 - -2147483647
+-1
+-2147483648 - -32768
+-2147450880
+-2147483648 - -32767
+-2147450881
+-2147483648 - -128
+-2147483520
+-2147483648 - -127
+-2147483521
+-2147483648 - 255
+-2147483903
+-2147483648 - 256
+-2147483904
+-2147483648 - 65535
+-2147549183
+-2147483648 - 65536
+-2147549184
+-2147483648 - 4294967295
+-6442450943
+-2147483648 - 4294967296
+-6442450944
+-2147483648 - 18446744073709551615
+-18446744075857035263
+-2147483648 - 18446744073709551616
+-18446744075857035264
+-2147483648 - 340282366920938463463374607431768211455
+-340282366920938463463374607433915695103
+-2147483648 - 340282366920938463463374607431768211456
+-340282366920938463463374607433915695104
+-2147483647 - -170141183460469231731687303715884105728
+170141183460469231731687303713736622081
+-2147483647 - -170141183460469231731687303715884105727
+170141183460469231731687303713736622080
+-2147483647 - -9223372036854775808
+9223372034707292161
+-2147483647 - -9223372036854775807
+9223372034707292160
+-2147483647 - -2147483648
+1
+-2147483647 - -2147483647
+0
+-2147483647 - -32768
+-2147450879
+-2147483647 - -32767
+-2147450880
+-2147483647 - -128
+-2147483519
+-2147483647 - -127
+-2147483520
+-2147483647 - 255
+-2147483902
+-2147483647 - 256
+-2147483903
+-2147483647 - 65535
+-2147549182
+-2147483647 - 65536
+-2147549183
+-2147483647 - 4294967295
+-6442450942
+-2147483647 - 4294967296
+-6442450943
+-2147483647 - 18446744073709551615
+-18446744075857035262
+-2147483647 - 18446744073709551616
+-18446744075857035263
+-2147483647 - 340282366920938463463374607431768211455
+-340282366920938463463374607433915695102
+-2147483647 - 340282366920938463463374607431768211456
+-340282366920938463463374607433915695103
+-32768 - -170141183460469231731687303715884105728
+170141183460469231731687303715884072960
+-32768 - -170141183460469231731687303715884105727
+170141183460469231731687303715884072959
+-32768 - -9223372036854775808
+9223372036854743040
+-32768 - -9223372036854775807
+9223372036854743039
+-32768 - -2147483648
+2147450880
+-32768 - -2147483647
+2147450879
+-32768 - -32768
+0
+-32768 - -32767
+-1
+-32768 - -128
+-32640
+-32768 - -127
+-32641
+-32768 - 255
+-33023
+-32768 - 256
+-33024
+-32768 - 65535
+-98303
+-32768 - 65536
+-98304
+-32768 - 4294967295
+-4295000063
+-32768 - 4294967296
+-4295000064
+-32768 - 18446744073709551615
+-18446744073709584383
+-32768 - 18446744073709551616
+-18446744073709584384
+-32768 - 340282366920938463463374607431768211455
+-340282366920938463463374607431768244223
+-32768 - 340282366920938463463374607431768211456
+-340282366920938463463374607431768244224
+-32767 - -170141183460469231731687303715884105728
+170141183460469231731687303715884072961
+-32767 - -170141183460469231731687303715884105727
+170141183460469231731687303715884072960
+-32767 - -9223372036854775808
+9223372036854743041
+-32767 - -9223372036854775807
+9223372036854743040
+-32767 - -2147483648
+2147450881
+-32767 - -2147483647
+2147450880
+-32767 - -32768
+1
+-32767 - -32767
+0
+-32767 - -128
+-32639
+-32767 - -127
+-32640
+-32767 - 255
+-33022
+-32767 - 256
+-33023
+-32767 - 65535
+-98302
+-32767 - 65536
+-98303
+-32767 - 4294967295
+-4295000062
+-32767 - 4294967296
+-4295000063
+-32767 - 18446744073709551615
+-18446744073709584382
+-32767 - 18446744073709551616
+-18446744073709584383
+-32767 - 340282366920938463463374607431768211455
+-340282366920938463463374607431768244222
+-32767 - 340282366920938463463374607431768211456
+-340282366920938463463374607431768244223
+-128 - -170141183460469231731687303715884105728
+170141183460469231731687303715884105600
+-128 - -170141183460469231731687303715884105727
+170141183460469231731687303715884105599
+-128 - -9223372036854775808
+9223372036854775680
+-128 - -9223372036854775807
+9223372036854775679
+-128 - -2147483648
+2147483520
+-128 - -2147483647
+2147483519
+-128 - -32768
+32640
+-128 - -32767
+32639
+-128 - -128
+0
+-128 - -127
+-1
+-128 - 255
+-383
+-128 - 256
+-384
+-128 - 65535
+-65663
+-128 - 65536
+-65664
+-128 - 4294967295
+-4294967423
+-128 - 4294967296
+-4294967424
+-128 - 18446744073709551615
+-18446744073709551743
+-128 - 18446744073709551616
+-18446744073709551744
+-128 - 340282366920938463463374607431768211455
+-340282366920938463463374607431768211583
+-128 - 340282366920938463463374607431768211456
+-340282366920938463463374607431768211584
+-127 - -170141183460469231731687303715884105728
+170141183460469231731687303715884105601
+-127 - -170141183460469231731687303715884105727
+170141183460469231731687303715884105600
+-127 - -9223372036854775808
+9223372036854775681
+-127 - -9223372036854775807
+9223372036854775680
+-127 - -2147483648
+2147483521
+-127 - -2147483647
+2147483520
+-127 - -32768
+32641
+-127 - -32767
+32640
+-127 - -128
+1
+-127 - -127
+0
+-127 - 255
+-382
+-127 - 256
+-383
+-127 - 65535
+-65662
+-127 - 65536
+-65663
+-127 - 4294967295
+-4294967422
+-127 - 4294967296
+-4294967423
+-127 - 18446744073709551615
+-18446744073709551742
+-127 - 18446744073709551616
+-18446744073709551743
+-127 - 340282366920938463463374607431768211455
+-340282366920938463463374607431768211582
+-127 - 340282366920938463463374607431768211456
+-340282366920938463463374607431768211583
+255 - -170141183460469231731687303715884105728
+170141183460469231731687303715884105983
+255 - -170141183460469231731687303715884105727
+170141183460469231731687303715884105982
+255 - -9223372036854775808
+9223372036854776063
+255 - -9223372036854775807
+9223372036854776062
+255 - -2147483648
+2147483903
+255 - -2147483647
+2147483902
+255 - -32768
+33023
+255 - -32767
+33022
+255 - -128
+383
+255 - -127
+382
+255 - 255
+0
+255 - 256
+-1
+255 - 65535
+-65280
+255 - 65536
+-65281
+255 - 4294967295
+-4294967040
+255 - 4294967296
+-4294967041
+255 - 18446744073709551615
+-18446744073709551360
+255 - 18446744073709551616
+-18446744073709551361
+255 - 340282366920938463463374607431768211455
+-340282366920938463463374607431768211200
+255 - 340282366920938463463374607431768211456
+-340282366920938463463374607431768211201
+256 - -170141183460469231731687303715884105728
+170141183460469231731687303715884105984
+256 - -170141183460469231731687303715884105727
+170141183460469231731687303715884105983
+256 - -9223372036854775808
+9223372036854776064
+256 - -9223372036854775807
+9223372036854776063
+256 - -2147483648
+2147483904
+256 - -2147483647
+2147483903
+256 - -32768
+33024
+256 - -32767
+33023
+256 - -128
+384
+256 - -127
+383
+256 - 255
+1
+256 - 256
+0
+256 - 65535
+-65279
+256 - 65536
+-65280
+256 - 4294967295
+-4294967039
+256 - 4294967296
+-4294967040
+256 - 18446744073709551615
+-18446744073709551359
+256 - 18446744073709551616
+-18446744073709551360
+256 - 340282366920938463463374607431768211455
+-340282366920938463463374607431768211199
+256 - 340282366920938463463374607431768211456
+-340282366920938463463374607431768211200
+65535 - -170141183460469231731687303715884105728
+170141183460469231731687303715884171263
+65535 - -170141183460469231731687303715884105727
+170141183460469231731687303715884171262
+65535 - -9223372036854775808
+9223372036854841343
+65535 - -9223372036854775807
+9223372036854841342
+65535 - -2147483648
+2147549183
+65535 - -2147483647
+2147549182
+65535 - -32768
+98303
+65535 - -32767
+98302
+65535 - -128
+65663
+65535 - -127
+65662
+65535 - 255
+65280
+65535 - 256
+65279
+65535 - 65535
+0
+65535 - 65536
+-1
+65535 - 4294967295
+-4294901760
+65535 - 4294967296
+-4294901761
+65535 - 18446744073709551615
+-18446744073709486080
+65535 - 18446744073709551616
+-18446744073709486081
+65535 - 340282366920938463463374607431768211455
+-340282366920938463463374607431768145920
+65535 - 340282366920938463463374607431768211456
+-340282366920938463463374607431768145921
+65536 - -170141183460469231731687303715884105728
+170141183460469231731687303715884171264
+65536 - -170141183460469231731687303715884105727
+170141183460469231731687303715884171263
+65536 - -9223372036854775808
+9223372036854841344
+65536 - -9223372036854775807
+9223372036854841343
+65536 - -2147483648
+2147549184
+65536 - -2147483647
+2147549183
+65536 - -32768
+98304
+65536 - -32767
+98303
+65536 - -128
+65664
+65536 - -127
+65663
+65536 - 255
+65281
+65536 - 256
+65280
+65536 - 65535
+1
+65536 - 65536
+0
+65536 - 4294967295
+-4294901759
+65536 - 4294967296
+-4294901760
+65536 - 18446744073709551615
+-18446744073709486079
+65536 - 18446744073709551616
+-18446744073709486080
+65536 - 340282366920938463463374607431768211455
+-340282366920938463463374607431768145919
+65536 - 340282366920938463463374607431768211456
+-340282366920938463463374607431768145920
+4294967295 - -170141183460469231731687303715884105728
+170141183460469231731687303720179073023
+4294967295 - -170141183460469231731687303715884105727
+170141183460469231731687303720179073022
+4294967295 - -9223372036854775808
+9223372041149743103
+4294967295 - -9223372036854775807
+9223372041149743102
+4294967295 - -2147483648
+6442450943
+4294967295 - -2147483647
+6442450942
+4294967295 - -32768
+4295000063
+4294967295 - -32767
+4295000062
+4294967295 - -128
+4294967423
+4294967295 - -127
+4294967422
+4294967295 - 255
+4294967040
+4294967295 - 256
+4294967039
+4294967295 - 65535
+4294901760
+4294967295 - 65536
+4294901759
+4294967295 - 4294967295
+0
+4294967295 - 4294967296
+-1
+4294967295 - 18446744073709551615
+-18446744069414584320
+4294967295 - 18446744073709551616
+-18446744069414584321
+4294967295 - 340282366920938463463374607431768211455
+-340282366920938463463374607427473244160
+4294967295 - 340282366920938463463374607431768211456
+-340282366920938463463374607427473244161
+4294967296 - -170141183460469231731687303715884105728
+170141183460469231731687303720179073024
+4294967296 - -170141183460469231731687303715884105727
+170141183460469231731687303720179073023
+4294967296 - -9223372036854775808
+9223372041149743104
+4294967296 - -9223372036854775807
+9223372041149743103
+4294967296 - -2147483648
+6442450944
+4294967296 - -2147483647
+6442450943
+4294967296 - -32768
+4295000064
+4294967296 - -32767
+4295000063
+4294967296 - -128
+4294967424
+4294967296 - -127
+4294967423
+4294967296 - 255
+4294967041
+4294967296 - 256
+4294967040
+4294967296 - 65535
+4294901761
+4294967296 - 65536
+4294901760
+4294967296 - 4294967295
+1
+4294967296 - 4294967296
+0
+4294967296 - 18446744073709551615
+-18446744069414584319
+4294967296 - 18446744073709551616
+-18446744069414584320
+4294967296 - 340282366920938463463374607431768211455
+-340282366920938463463374607427473244159
+4294967296 - 340282366920938463463374607431768211456
+-340282366920938463463374607427473244160
+18446744073709551615 - -170141183460469231731687303715884105728
+170141183460469231750134047789593657343
+18446744073709551615 - -170141183460469231731687303715884105727
+170141183460469231750134047789593657342
+18446744073709551615 - -9223372036854775808
+27670116110564327423
+18446744073709551615 - -9223372036854775807
+27670116110564327422
+18446744073709551615 - -2147483648
+18446744075857035263
+18446744073709551615 - -2147483647
+18446744075857035262
+18446744073709551615 - -32768
+18446744073709584383
+18446744073709551615 - -32767
+18446744073709584382
+18446744073709551615 - -128
+18446744073709551743
+18446744073709551615 - -127
+18446744073709551742
+18446744073709551615 - 255
+18446744073709551360
+18446744073709551615 - 256
+18446744073709551359
+18446744073709551615 - 65535
+18446744073709486080
+18446744073709551615 - 65536
+18446744073709486079
+18446744073709551615 - 4294967295
+18446744069414584320
+18446744073709551615 - 4294967296
+18446744069414584319
+18446744073709551615 - 18446744073709551615
+0
+18446744073709551615 - 18446744073709551616
+-1
+18446744073709551615 - 340282366920938463463374607431768211455
+-340282366920938463444927863358058659840
+18446744073709551615 - 340282366920938463463374607431768211456
+-340282366920938463444927863358058659841
+18446744073709551616 - -170141183460469231731687303715884105728
+170141183460469231750134047789593657344
+18446744073709551616 - -170141183460469231731687303715884105727
+170141183460469231750134047789593657343
+18446744073709551616 - -9223372036854775808
+27670116110564327424
+18446744073709551616 - -9223372036854775807
+27670116110564327423
+18446744073709551616 - -2147483648
+18446744075857035264
+18446744073709551616 - -2147483647
+18446744075857035263
+18446744073709551616 - -32768
+18446744073709584384
+18446744073709551616 - -32767
+18446744073709584383
+18446744073709551616 - -128
+18446744073709551744
+18446744073709551616 - -127
+18446744073709551743
+18446744073709551616 - 255
+18446744073709551361
+18446744073709551616 - 256
+18446744073709551360
+18446744073709551616 - 65535
+18446744073709486081
+18446744073709551616 - 65536
+18446744073709486080
+18446744073709551616 - 4294967295
+18446744069414584321
+18446744073709551616 - 4294967296
+18446744069414584320
+18446744073709551616 - 18446744073709551615
+1
+18446744073709551616 - 18446744073709551616
+0
+18446744073709551616 - 340282366920938463463374607431768211455
+-340282366920938463444927863358058659839
+18446744073709551616 - 340282366920938463463374607431768211456
+-340282366920938463444927863358058659840
+340282366920938463463374607431768211455 - -170141183460469231731687303715884105728
+510423550381407695195061911147652317183
+340282366920938463463374607431768211455 - -170141183460469231731687303715884105727
+510423550381407695195061911147652317182
+340282366920938463463374607431768211455 - -9223372036854775808
+340282366920938463472597979468622987263
+340282366920938463463374607431768211455 - -9223372036854775807
+340282366920938463472597979468622987262
+340282366920938463463374607431768211455 - -2147483648
+340282366920938463463374607433915695103
+340282366920938463463374607431768211455 - -2147483647
+340282366920938463463374607433915695102
+340282366920938463463374607431768211455 - -32768
+340282366920938463463374607431768244223
+340282366920938463463374607431768211455 - -32767
+340282366920938463463374607431768244222
+340282366920938463463374607431768211455 - -128
+340282366920938463463374607431768211583
+340282366920938463463374607431768211455 - -127
+340282366920938463463374607431768211582
+340282366920938463463374607431768211455 - 255
+340282366920938463463374607431768211200
+340282366920938463463374607431768211455 - 256
+340282366920938463463374607431768211199
+340282366920938463463374607431768211455 - 65535
+340282366920938463463374607431768145920
+340282366920938463463374607431768211455 - 65536
+340282366920938463463374607431768145919
+340282366920938463463374607431768211455 - 4294967295
+340282366920938463463374607427473244160
+340282366920938463463374607431768211455 - 4294967296
+340282366920938463463374607427473244159
+340282366920938463463374607431768211455 - 18446744073709551615
+340282366920938463444927863358058659840
+340282366920938463463374607431768211455 - 18446744073709551616
+340282366920938463444927863358058659839
+340282366920938463463374607431768211455 - 340282366920938463463374607431768211455
+0
+340282366920938463463374607431768211455 - 340282366920938463463374607431768211456
+-1
+340282366920938463463374607431768211456 - -170141183460469231731687303715884105728
+510423550381407695195061911147652317184
+340282366920938463463374607431768211456 - -170141183460469231731687303715884105727
+510423550381407695195061911147652317183
+340282366920938463463374607431768211456 - -9223372036854775808
+340282366920938463472597979468622987264
+340282366920938463463374607431768211456 - -9223372036854775807
+340282366920938463472597979468622987263
+340282366920938463463374607431768211456 - -2147483648
+340282366920938463463374607433915695104
+340282366920938463463374607431768211456 - -2147483647
+340282366920938463463374607433915695103
+340282366920938463463374607431768211456 - -32768
+340282366920938463463374607431768244224
+340282366920938463463374607431768211456 - -32767
+340282366920938463463374607431768244223
+340282366920938463463374607431768211456 - -128
+340282366920938463463374607431768211584
+340282366920938463463374607431768211456 - -127
+340282366920938463463374607431768211583
+340282366920938463463374607431768211456 - 255
+340282366920938463463374607431768211201
+340282366920938463463374607431768211456 - 256
+340282366920938463463374607431768211200
+340282366920938463463374607431768211456 - 65535
+340282366920938463463374607431768145921
+340282366920938463463374607431768211456 - 65536
+340282366920938463463374607431768145920
+340282366920938463463374607431768211456 - 4294967295
+340282366920938463463374607427473244161
+340282366920938463463374607431768211456 - 4294967296
+340282366920938463463374607427473244160
+340282366920938463463374607431768211456 - 18446744073709551615
+340282366920938463444927863358058659841
+340282366920938463463374607431768211456 - 18446744073709551616
+340282366920938463444927863358058659840
+340282366920938463463374607431768211456 - 340282366920938463463374607431768211455
+1
+340282366920938463463374607431768211456 - 340282366920938463463374607431768211456
+0
diff --git a/test/ic3/integer_sub.ret.expected b/test/ic3/integer_sub.ret.expected
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/test/ic3/integer_sub.ret.expected
@@ -0,0 +1 @@
+0
diff --git a/test/ic3_test b/test/ic3_test
index 280d9e7..92c184f 100755
--- a/test/ic3_test
+++ b/test/ic3_test
@@ -58,11 +58,12 @@ for TARGET in $TARGETS; do
fi
done
echo
-for TARGET in $TARGETS; do
+DIFFS="$(for TARGET in $TARGETS; do
if [ -f "${TARGET}.diff" ]; then
- cat "${TARGET}.diff"
+ echo -n "${TARGET}.diff "
fi
-done
+done)"
+less $DIFFS
echo
echo -n "Total $TEST_COUNT tests. "
echo -n "${TEST_COLOR_OK}OK $TEST_OK ($(($TEST_OK * 100 / $TEST_COUNT))%)${TEST_COLOR_RESET}. "