summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--test/builtins/get_slice_int.sail34
-rwxr-xr-xtest/builtins/run_tests.py38
-rw-r--r--test/builtins/signed.sail118
-rw-r--r--test/builtins/unsigned2.sail2
-rw-r--r--test/builtins/unsigned4.sail2
-rw-r--r--test/builtins/unsigned5.sail2
-rw-r--r--test/builtins/unsigned6.sail392
-rw-r--r--test/builtins/zeros.sail2
-rwxr-xr-xtest/c/run_tests.py42
-rw-r--r--test/sailtest.py51
10 files changed, 404 insertions, 279 deletions
diff --git a/test/builtins/get_slice_int.sail b/test/builtins/get_slice_int.sail
index 73c495fa..b64526d2 100644
--- a/test/builtins/get_slice_int.sail
+++ b/test/builtins/get_slice_int.sail
@@ -4,12 +4,6 @@ $include <exception_basic.sail>
$include <flow.sail>
$include <vector_dec.sail>
-val int_of_string = {
- ocaml: "Nat_big_num.of_string",
- lem: "integerOfString",
- c: "reinit_mpz_t_of_sail_string"
-} : string -> int
-
function main (() : unit) -> unit = {
assert(get_slice_int(1, -10, 6) == 1^0x1, "get_slice_int(1, -10, 6) == 1^0x1");
assert(get_slice_int(1, -1, 6) == 1^0x1, "get_slice_int(1, -1, 6) == 1^0x1");
@@ -257,20 +251,20 @@ function main (() : unit) -> unit = {
assert(get_slice_int(64, 173015152, 0) == 64^0xa500070, "get_slice_int(64, 173015152, 0) == 64^0xa500070");
assert(get_slice_int(64, 173015156, 0) == 64^0xa500074, "get_slice_int(64, 173015156, 0) == 64^0xa500074");
assert(get_slice_int(64, 180224, 0) == 64^0x2c000, "get_slice_int(64, 180224, 0) == 64^0x2c000");
- assert(get_slice_int(64, int_of_string("18446708893632421888"), 0) == 64^0xffffe000ffffe000, "get_slice_int(64, 18446708893632421888, 0) == 64^0xffffe000ffffe000");
- assert(get_slice_int(64, int_of_string("18446744073658712064"), 0) == 64^0xfffffffffcf84000, "get_slice_int(64, 18446744073658712064, 0) == 64^0xfffffffffcf84000");
- assert(get_slice_int(64, int_of_string("18446744073658777600"), 0) == 64^0xfffffffffcf94000, "get_slice_int(64, 18446744073658777600, 0) == 64^0xfffffffffcf94000");
- assert(get_slice_int(64, int_of_string("18446744073658843136"), 0) == 64^0xfffffffffcfa4000, "get_slice_int(64, 18446744073658843136, 0) == 64^0xfffffffffcfa4000");
- assert(get_slice_int(64, int_of_string("18446744073660252160"), 0) == 64^0xfffffffffd0fc000, "get_slice_int(64, 18446744073660252160, 0) == 64^0xfffffffffd0fc000");
- assert(get_slice_int(64, int_of_string("18446744073660317696"), 0) == 64^0xfffffffffd10c000, "get_slice_int(64, 18446744073660317696, 0) == 64^0xfffffffffd10c000");
- assert(get_slice_int(64, int_of_string("18446744073660465152"), 0) == 64^0xfffffffffd130000, "get_slice_int(64, 18446744073660465152, 0) == 64^0xfffffffffd130000");
- assert(get_slice_int(64, int_of_string("18446744073660530688"), 0) == 64^0xfffffffffd140000, "get_slice_int(64, 18446744073660530688, 0) == 64^0xfffffffffd140000");
- assert(get_slice_int(64, int_of_string("18446744073660727296"), 0) == 64^0xfffffffffd170000, "get_slice_int(64, 18446744073660727296, 0) == 64^0xfffffffffd170000");
- assert(get_slice_int(64, int_of_string("18446744073660841984"), 0) == 64^0xfffffffffd18c000, "get_slice_int(64, 18446744073660841984, 0) == 64^0xfffffffffd18c000");
- assert(get_slice_int(64, int_of_string("18446744073708961792"), 0) == 64^0xfffffffffff70000, "get_slice_int(64, 18446744073708961792, 0) == 64^0xfffffffffff70000");
- assert(get_slice_int(64, int_of_string("18446744073709027328"), 0) == 64^0xfffffffffff80000, "get_slice_int(64, 18446744073709027328, 0) == 64^0xfffffffffff80000");
- assert(get_slice_int(64, int_of_string("18446744073709289472"), 0) == 64^0xfffffffffffc0000, "get_slice_int(64, 18446744073709289472, 0) == 64^0xfffffffffffc0000");
- assert(get_slice_int(64, int_of_string("18446744073709355008"), 0) == 64^0xfffffffffffd0000, "get_slice_int(64, 18446744073709355008, 0) == 64^0xfffffffffffd0000");
+ assert(get_slice_int(64, 18446708893632421888, 0) == 64^0xffffe000ffffe000, "get_slice_int(64, 18446708893632421888, 0) == 64^0xffffe000ffffe000");
+ assert(get_slice_int(64, 18446744073658712064, 0) == 64^0xfffffffffcf84000, "get_slice_int(64, 18446744073658712064, 0) == 64^0xfffffffffcf84000");
+ assert(get_slice_int(64, 18446744073658777600, 0) == 64^0xfffffffffcf94000, "get_slice_int(64, 18446744073658777600, 0) == 64^0xfffffffffcf94000");
+ assert(get_slice_int(64, 18446744073658843136, 0) == 64^0xfffffffffcfa4000, "get_slice_int(64, 18446744073658843136, 0) == 64^0xfffffffffcfa4000");
+ assert(get_slice_int(64, 18446744073660252160, 0) == 64^0xfffffffffd0fc000, "get_slice_int(64, 18446744073660252160, 0) == 64^0xfffffffffd0fc000");
+ assert(get_slice_int(64, 18446744073660317696, 0) == 64^0xfffffffffd10c000, "get_slice_int(64, 18446744073660317696, 0) == 64^0xfffffffffd10c000");
+ assert(get_slice_int(64, 18446744073660465152, 0) == 64^0xfffffffffd130000, "get_slice_int(64, 18446744073660465152, 0) == 64^0xfffffffffd130000");
+ assert(get_slice_int(64, 18446744073660530688, 0) == 64^0xfffffffffd140000, "get_slice_int(64, 18446744073660530688, 0) == 64^0xfffffffffd140000");
+ assert(get_slice_int(64, 18446744073660727296, 0) == 64^0xfffffffffd170000, "get_slice_int(64, 18446744073660727296, 0) == 64^0xfffffffffd170000");
+ assert(get_slice_int(64, 18446744073660841984, 0) == 64^0xfffffffffd18c000, "get_slice_int(64, 18446744073660841984, 0) == 64^0xfffffffffd18c000");
+ assert(get_slice_int(64, 18446744073708961792, 0) == 64^0xfffffffffff70000, "get_slice_int(64, 18446744073708961792, 0) == 64^0xfffffffffff70000");
+ assert(get_slice_int(64, 18446744073709027328, 0) == 64^0xfffffffffff80000, "get_slice_int(64, 18446744073709027328, 0) == 64^0xfffffffffff80000");
+ assert(get_slice_int(64, 18446744073709289472, 0) == 64^0xfffffffffffc0000, "get_slice_int(64, 18446744073709289472, 0) == 64^0xfffffffffffc0000");
+ assert(get_slice_int(64, 18446744073709355008, 0) == 64^0xfffffffffffd0000, "get_slice_int(64, 18446744073709355008, 0) == 64^0xfffffffffffd0000");
assert(get_slice_int(64, 75248, 0) == 64^0x125f0, "get_slice_int(64, 75248, 0) == 64^0x125f0");
assert(get_slice_int(64, 75252, 0) == 64^0x125f4, "get_slice_int(64, 75252, 0) == 64^0x125f4");
assert(get_slice_int(64, 75256, 0) == 64^0x125f8, "get_slice_int(64, 75256, 0) == 64^0x125f8");
diff --git a/test/builtins/run_tests.py b/test/builtins/run_tests.py
new file mode 100755
index 00000000..1561712c
--- /dev/null
+++ b/test/builtins/run_tests.py
@@ -0,0 +1,38 @@
+#!/usr/bin/env python
+
+import os
+import re
+import sys
+import hashlib
+
+sail_dir = os.environ['SAIL_DIR']
+os.chdir(os.path.dirname(__file__))
+sys.path.insert(0, os.path.join(sail_dir, 'test'))
+
+from sailtest import *
+
+def test_builtins(name, sail_opts):
+ banner('Testing builtins: {} Sail options: {}'.format(name, sail_opts))
+ tests = {}
+ for filename in os.listdir('.'):
+ if re.match('.+\.sail', filename):
+ basename = os.path.splitext(os.path.basename(filename))[0]
+ tests[filename] = os.fork()
+ if tests[filename] == 0:
+ step('sail -no_warn -c {} {} 1> {}.c'.format(sail_opts, filename, basename))
+ step('gcc {}.c {}/lib/*.c -lgmp -lz -I {}/lib -o {}'.format(basename, sail_dir, sail_dir, basename))
+ step('./{}'.format(basename))
+ print '{} {}{}{}'.format(filename, color.PASS, 'ok', color.END)
+ sys.exit()
+ return collect_results(name, tests)
+
+xml = '<testsuites>\n'
+
+test_builtins('No optimisations', '')
+test_builtins('Optimisations', '-O')
+
+xml += '</testsuites>\n'
+
+output = open('tests.xml', 'w')
+output.write(xml)
+output.close()
diff --git a/test/builtins/signed.sail b/test/builtins/signed.sail
index 21524e2f..73bf9e25 100644
--- a/test/builtins/signed.sail
+++ b/test/builtins/signed.sail
@@ -3,11 +3,7 @@ default Order dec
$include <exception_basic.sail>
$include <vector_dec.sail>
-val int_of_string = {
- ocaml: "Nat_big_num.of_string",
- lem: "integerOfString",
- c: "reinit_mpz_t_of_sail_string"
-} : string -> int
+overload zero_extend = {sail_zero_extend}
function main (() : unit) -> unit = {
assert(signed(zero_extend(0x0, 32)) == 0);
@@ -1358,8 +1354,8 @@ function main (() : unit) -> unit = {
assert(signed(zero_extend(0x5a5a, 64)) == 23130);
assert(signed(zero_extend(0x5a5a5a59, 64)) == 1515870809);
assert(signed(zero_extend(0x5a5a5a5a, 64)) == 1515870810);
- assert(signed(zero_extend(0x5a5a5a5a5a5a5a59, 64)) == int_of_string("6510615555426900569"));
- assert(signed(zero_extend(0x5a5a5a5a5a5a5a5a, 64)) == int_of_string("6510615555426900570"));
+ assert(signed(zero_extend(0x5a5a5a5a5a5a5a59, 64)) == 6510615555426900569);
+ assert(signed(zero_extend(0x5a5a5a5a5a5a5a5a, 64)) == 6510615555426900570);
assert(signed(zero_extend(0x5b, 64)) == 91);
assert(signed(zero_extend(0x5c, 64)) == 92);
assert(signed(zero_extend(0x5c000, 64)) == 376832);
@@ -1404,10 +1400,10 @@ function main (() : unit) -> unit = {
assert(signed(zero_extend(0x6c, 64)) == 108);
assert(signed(zero_extend(0x6d, 64)) == 109);
assert(signed(zero_extend(0x6e, 64)) == 110);
- assert(signed(zero_extend(0x6ede4cbc6ede4cbb, 64)) == int_of_string("7988907161199463611"));
+ assert(signed(zero_extend(0x6ede4cbc6ede4cbb, 64)) == 7988907161199463611);
assert(signed(zero_extend(0x6f, 64)) == 111);
- assert(signed(zero_extend(0x6ffffffffffffffe, 64)) == int_of_string("8070450532247928830"));
- assert(signed(zero_extend(0x6fffffffffffffff, 64)) == int_of_string("8070450532247928831"));
+ assert(signed(zero_extend(0x6ffffffffffffffe, 64)) == 8070450532247928830);
+ assert(signed(zero_extend(0x6fffffffffffffff, 64)) == 8070450532247928831);
assert(signed(zero_extend(0x7, 64)) == 7);
assert(signed(zero_extend(0x70, 64)) == 112);
assert(signed(zero_extend(0x71, 64)) == 113);
@@ -1418,10 +1414,10 @@ function main (() : unit) -> unit = {
assert(signed(zero_extend(0x76, 64)) == 118);
assert(signed(zero_extend(0x764c321, 64)) == 124044065);
assert(signed(zero_extend(0x77, 64)) == 119);
- assert(signed(zero_extend(0x7765554377655542, 64)) == int_of_string("8603376411415500098"));
- assert(signed(zero_extend(0x7766554477665542, 64)) == int_of_string("8603657890687243586"));
+ assert(signed(zero_extend(0x7765554377655542, 64)) == 8603376411415500098);
+ assert(signed(zero_extend(0x7766554477665542, 64)) == 8603657890687243586);
assert(signed(zero_extend(0x78, 64)) == 120);
- assert(signed(zero_extend(0x789abcdef0123456, 64)) == int_of_string("8690466096661279830"));
+ assert(signed(zero_extend(0x789abcdef0123456, 64)) == 8690466096661279830);
assert(signed(zero_extend(0x79, 64)) == 121);
assert(signed(zero_extend(0x7a, 64)) == 122);
assert(signed(zero_extend(0x7b, 64)) == 123);
@@ -1434,54 +1430,54 @@ function main (() : unit) -> unit = {
assert(signed(zero_extend(0x7ffe, 64)) == 32766);
assert(signed(zero_extend(0x7fff, 64)) == 32767);
assert(signed(zero_extend(0x7fff7fff, 64)) == 2147450879);
- assert(signed(zero_extend(0x7fff7fff7fff7ffd, 64)) == int_of_string("9223231297218904061"));
- assert(signed(zero_extend(0x7fff7fff7fff7fff, 64)) == int_of_string("9223231297218904063"));
+ assert(signed(zero_extend(0x7fff7fff7fff7ffd, 64)) == 9223231297218904061);
+ assert(signed(zero_extend(0x7fff7fff7fff7fff, 64)) == 9223231297218904063);
assert(signed(zero_extend(0x7fffffc, 64)) == 134217724);
assert(signed(zero_extend(0x7ffffffe, 64)) == 2147483646);
assert(signed(zero_extend(0x7fffffff, 64)) == 2147483647);
- assert(signed(zero_extend(0x7fffffff00000000, 64)) == int_of_string("9223372032559808512"));
- assert(signed(zero_extend(0x7fffffff00000001, 64)) == int_of_string("9223372032559808513"));
- assert(signed(zero_extend(0x7fffffff7ffffffe, 64)) == int_of_string("9223372034707292158"));
- assert(signed(zero_extend(0x7fffffff7fffffff, 64)) == int_of_string("9223372034707292159"));
- assert(signed(zero_extend(0x7fffffff80000000, 64)) == int_of_string("9223372034707292160"));
- assert(signed(zero_extend(0x7fffffff80000001, 64)) == int_of_string("9223372034707292161"));
- assert(signed(zero_extend(0x7fffffffffff0000, 64)) == int_of_string("9223372036854710272"));
- assert(signed(zero_extend(0x7fffffffffff0001, 64)) == int_of_string("9223372036854710273"));
- assert(signed(zero_extend(0x7fffffffffff7ffe, 64)) == int_of_string("9223372036854743038"));
- assert(signed(zero_extend(0x7fffffffffff7fff, 64)) == int_of_string("9223372036854743039"));
- assert(signed(zero_extend(0x7fffffffffff8000, 64)) == int_of_string("9223372036854743040"));
- assert(signed(zero_extend(0x7fffffffffff8001, 64)) == int_of_string("9223372036854743041"));
- assert(signed(zero_extend(0x7ffffffffffffffc, 64)) == int_of_string("9223372036854775804"));
- assert(signed(zero_extend(0x7ffffffffffffffd, 64)) == int_of_string("9223372036854775805"));
- assert(signed(zero_extend(0x7ffffffffffffffe, 64)) == int_of_string("9223372036854775806"));
- assert(signed(zero_extend(0x7fffffffffffffff, 64)) == int_of_string("9223372036854775807"));
+ assert(signed(zero_extend(0x7fffffff00000000, 64)) == 9223372032559808512);
+ assert(signed(zero_extend(0x7fffffff00000001, 64)) == 9223372032559808513);
+ assert(signed(zero_extend(0x7fffffff7ffffffe, 64)) == 9223372034707292158);
+ assert(signed(zero_extend(0x7fffffff7fffffff, 64)) == 9223372034707292159);
+ assert(signed(zero_extend(0x7fffffff80000000, 64)) == 9223372034707292160);
+ assert(signed(zero_extend(0x7fffffff80000001, 64)) == 9223372034707292161);
+ assert(signed(zero_extend(0x7fffffffffff0000, 64)) == 9223372036854710272);
+ assert(signed(zero_extend(0x7fffffffffff0001, 64)) == 9223372036854710273);
+ assert(signed(zero_extend(0x7fffffffffff7ffe, 64)) == 9223372036854743038);
+ assert(signed(zero_extend(0x7fffffffffff7fff, 64)) == 9223372036854743039);
+ assert(signed(zero_extend(0x7fffffffffff8000, 64)) == 9223372036854743040);
+ assert(signed(zero_extend(0x7fffffffffff8001, 64)) == 9223372036854743041);
+ assert(signed(zero_extend(0x7ffffffffffffffc, 64)) == 9223372036854775804);
+ assert(signed(zero_extend(0x7ffffffffffffffd, 64)) == 9223372036854775805);
+ assert(signed(zero_extend(0x7ffffffffffffffe, 64)) == 9223372036854775806);
+ assert(signed(zero_extend(0x7fffffffffffffff, 64)) == 9223372036854775807);
assert(signed(zero_extend(0x8, 64)) == 8);
assert(signed(zero_extend(0x80, 64)) == 128);
assert(signed(zero_extend(0x800, 64)) == 2048);
assert(signed(zero_extend(0x8000, 64)) == 32768);
assert(signed(zero_extend(0x80000000, 64)) == 2147483648);
- assert(signed(zero_extend(0x8000000000000000, 64)) == int_of_string("-9223372036854775808"));
- assert(signed(zero_extend(0x8000000000000001, 64)) == int_of_string("-9223372036854775807"));
- assert(signed(zero_extend(0x8000000000000002, 64)) == int_of_string("-9223372036854775806"));
- assert(signed(zero_extend(0x8000000000000003, 64)) == int_of_string("-9223372036854775805"));
- assert(signed(zero_extend(0x8000000000007ffe, 64)) == int_of_string("-9223372036854743042"));
- assert(signed(zero_extend(0x8000000000007fff, 64)) == int_of_string("-9223372036854743041"));
- assert(signed(zero_extend(0x8000000000008000, 64)) == int_of_string("-9223372036854743040"));
- assert(signed(zero_extend(0x8000000000008001, 64)) == int_of_string("-9223372036854743039"));
- assert(signed(zero_extend(0x800000000000fffe, 64)) == int_of_string("-9223372036854710274"));
- assert(signed(zero_extend(0x800000000000ffff, 64)) == int_of_string("-9223372036854710273"));
- assert(signed(zero_extend(0x800000007ffffffe, 64)) == int_of_string("-9223372034707292162"));
- assert(signed(zero_extend(0x800000007fffffff, 64)) == int_of_string("-9223372034707292161"));
- assert(signed(zero_extend(0x8000000080000000, 64)) == int_of_string("-9223372034707292160"));
- assert(signed(zero_extend(0x8000000080000001, 64)) == int_of_string("-9223372034707292159"));
- assert(signed(zero_extend(0x80000000fffffffe, 64)) == int_of_string("-9223372032559808514"));
- assert(signed(zero_extend(0x80000000ffffffff, 64)) == int_of_string("-9223372032559808513"));
+ assert(signed(zero_extend(0x8000000000000000, 64)) == -9223372036854775808);
+ assert(signed(zero_extend(0x8000000000000001, 64)) == -9223372036854775807);
+ assert(signed(zero_extend(0x8000000000000002, 64)) == -9223372036854775806);
+ assert(signed(zero_extend(0x8000000000000003, 64)) == -9223372036854775805);
+ assert(signed(zero_extend(0x8000000000007ffe, 64)) == -9223372036854743042);
+ assert(signed(zero_extend(0x8000000000007fff, 64)) == -9223372036854743041);
+ assert(signed(zero_extend(0x8000000000008000, 64)) == -9223372036854743040);
+ assert(signed(zero_extend(0x8000000000008001, 64)) == -9223372036854743039);
+ assert(signed(zero_extend(0x800000000000fffe, 64)) == -9223372036854710274);
+ assert(signed(zero_extend(0x800000000000ffff, 64)) == -9223372036854710273);
+ assert(signed(zero_extend(0x800000007ffffffe, 64)) == -9223372034707292162);
+ assert(signed(zero_extend(0x800000007fffffff, 64)) == -9223372034707292161);
+ assert(signed(zero_extend(0x8000000080000000, 64)) == -9223372034707292160);
+ assert(signed(zero_extend(0x8000000080000001, 64)) == -9223372034707292159);
+ assert(signed(zero_extend(0x80000000fffffffe, 64)) == -9223372032559808514);
+ assert(signed(zero_extend(0x80000000ffffffff, 64)) == -9223372032559808513);
assert(signed(zero_extend(0x80000001, 64)) == 2147483649);
assert(signed(zero_extend(0x80000002, 64)) == 2147483650);
assert(signed(zero_extend(0x80000003, 64)) == 2147483651);
assert(signed(zero_extend(0x80008000, 64)) == 2147516416);
- assert(signed(zero_extend(0x8000800080008000, 64)) == int_of_string("-9223231297218904064"));
- assert(signed(zero_extend(0x8000800080008002, 64)) == int_of_string("-9223231297218904062"));
+ assert(signed(zero_extend(0x8000800080008000, 64)) == -9223231297218904064);
+ assert(signed(zero_extend(0x8000800080008002, 64)) == -9223231297218904062);
assert(signed(zero_extend(0x8001, 64)) == 32769);
assert(signed(zero_extend(0x80010003, 64)) == 2147549187);
assert(signed(zero_extend(0x8002, 64)) == 32770);
@@ -1509,26 +1505,26 @@ function main (() : unit) -> unit = {
assert(signed(zero_extend(0x86, 64)) == 134);
assert(signed(zero_extend(0x87, 64)) == 135);
assert(signed(zero_extend(0x87654321, 64)) == 2271560481);
- assert(signed(zero_extend(0x876543210fedcba9, 64)) == int_of_string("-8690466096661279831"));
+ assert(signed(zero_extend(0x876543210fedcba9, 64)) == -8690466096661279831);
assert(signed(zero_extend(0x88, 64)) == 136);
assert(signed(zero_extend(0x8899aabb, 64)) == 2291772091);
- assert(signed(zero_extend(0x8899aabb8899aabb, 64)) == int_of_string("-8603657890687243589"));
- assert(signed(zero_extend(0x8899aabb8899aabd, 64)) == int_of_string("-8603657890687243587"));
- assert(signed(zero_extend(0x889aaabc889aaabd, 64)) == int_of_string("-8603376411415500099"));
+ assert(signed(zero_extend(0x8899aabb8899aabb, 64)) == -8603657890687243589);
+ assert(signed(zero_extend(0x8899aabb8899aabd, 64)) == -8603657890687243587);
+ assert(signed(zero_extend(0x889aaabc889aaabd, 64)) == -8603376411415500099);
assert(signed(zero_extend(0x89, 64)) == 137);
assert(signed(zero_extend(0x89ab, 64)) == 35243);
assert(signed(zero_extend(0x8a, 64)) == 138);
assert(signed(zero_extend(0x8b, 64)) == 139);
assert(signed(zero_extend(0x8c, 64)) == 140);
assert(signed(zero_extend(0x8d, 64)) == 141);
- assert(signed(zero_extend(0x8fffffffffffffff, 64)) == int_of_string("-8070450532247928833"));
+ assert(signed(zero_extend(0x8fffffffffffffff, 64)) == -8070450532247928833);
assert(signed(zero_extend(0x9, 64)) == 9);
assert(signed(zero_extend(0x90, 64)) == 144);
assert(signed(zero_extend(0x90000000, 64)) == 2415919104);
- assert(signed(zero_extend(0x9000000000000000, 64)) == int_of_string("-8070450532247928832"));
- assert(signed(zero_extend(0x9000000000000001, 64)) == int_of_string("-8070450532247928831"));
+ assert(signed(zero_extend(0x9000000000000000, 64)) == -8070450532247928832);
+ assert(signed(zero_extend(0x9000000000000001, 64)) == -8070450532247928831);
assert(signed(zero_extend(0x90000001, 64)) == 2415919105);
- assert(signed(zero_extend(0x9121b3439121b344, 64)) == int_of_string("-7988907161199463612"));
+ assert(signed(zero_extend(0x9121b3439121b344, 64)) == -7988907161199463612);
assert(signed(zero_extend(0x9200040, 64)) == 153092160);
assert(signed(zero_extend(0x920005c, 64)) == 153092188);
assert(signed(zero_extend(0x9200060, 64)) == 153092192);
@@ -1546,7 +1542,7 @@ function main (() : unit) -> unit = {
assert(signed(zero_extend(0xa500074, 64)) == 173015156);
assert(signed(zero_extend(0xa5a5, 64)) == 42405);
assert(signed(zero_extend(0xa5a5a5a5, 64)) == 2779096485);
- assert(signed(zero_extend(0xa5a5a5a5a5a5a5a5, 64)) == int_of_string("-6510615555426900571"));
+ assert(signed(zero_extend(0xa5a5a5a5a5a5a5a5, 64)) == -6510615555426900571);
assert(signed(zero_extend(0xa8, 64)) == 168);
assert(signed(zero_extend(0xb, 64)) == 11);
assert(signed(zero_extend(0xb0, 64)) == 176);
@@ -1556,13 +1552,13 @@ function main (() : unit) -> unit = {
assert(signed(zero_extend(0xc00fefff, 64)) == 3222269951);
assert(signed(zero_extend(0xd, 64)) == 13);
assert(signed(zero_extend(0xd0, 64)) == 208);
- assert(signed(zero_extend(0xdddddddddddddddc, 64)) == int_of_string("-2459565876494606884"));
+ assert(signed(zero_extend(0xdddddddddddddddc, 64)) == -2459565876494606884);
assert(signed(zero_extend(0xe, 64)) == 14);
assert(signed(zero_extend(0xe0, 64)) == 224);
- assert(signed(zero_extend(0xedcba9876543210e, 64)) == int_of_string("-1311768467463790322"));
+ assert(signed(zero_extend(0xedcba9876543210e, 64)) == -1311768467463790322);
assert(signed(zero_extend(0xf, 64)) == 15);
assert(signed(zero_extend(0xf00, 64)) == 3840);
- assert(signed(zero_extend(0xf000000000000000, 64)) == int_of_string("-1152921504606846976"));
+ assert(signed(zero_extend(0xf000000000000000, 64)) == -1152921504606846976);
assert(signed(zero_extend(0xff, 64)) == 255);
assert(signed(zero_extend(0xfffe, 64)) == 65534);
assert(signed(zero_extend(0xffff, 64)) == 65535);
diff --git a/test/builtins/unsigned2.sail b/test/builtins/unsigned2.sail
index dea6d9c5..9d0482b3 100644
--- a/test/builtins/unsigned2.sail
+++ b/test/builtins/unsigned2.sail
@@ -3,6 +3,8 @@ default Order dec
$include <exception_basic.sail>
$include <vector_dec.sail>
+overload zero_extend = {sail_zero_extend}
+
function main (() : unit) -> unit = {
assert(unsigned(zero_extend(0x21ad18, 52)) == 2207000);
assert(unsigned(zero_extend(0x21ad1c, 52)) == 2207004);
diff --git a/test/builtins/unsigned4.sail b/test/builtins/unsigned4.sail
index c92e568f..5736d671 100644
--- a/test/builtins/unsigned4.sail
+++ b/test/builtins/unsigned4.sail
@@ -3,6 +3,8 @@ default Order dec
$include <exception_basic.sail>
$include <vector_dec.sail>
+overload zero_extend = {sail_zero_extend}
+
function main (() : unit) -> unit = {
assert(unsigned(zero_extend(0x104ef4, 64)) == 1068788);
assert(unsigned(zero_extend(0x104ef8, 64)) == 1068792);
diff --git a/test/builtins/unsigned5.sail b/test/builtins/unsigned5.sail
index 5c6a181a..6e1be59c 100644
--- a/test/builtins/unsigned5.sail
+++ b/test/builtins/unsigned5.sail
@@ -3,6 +3,8 @@ default Order dec
$include <exception_basic.sail>
$include <vector_dec.sail>
+overload zero_extend = {sail_zero_extend}
+
function main (() : unit) -> unit = {
assert(unsigned(zero_extend(0x1cdf8, 64)) == 118264);
assert(unsigned(zero_extend(0x1cdfc, 64)) == 118268);
diff --git a/test/builtins/unsigned6.sail b/test/builtins/unsigned6.sail
index ec2635d6..0f0d884a 100644
--- a/test/builtins/unsigned6.sail
+++ b/test/builtins/unsigned6.sail
@@ -3,11 +3,7 @@ default Order dec
$include <exception_basic.sail>
$include <vector_dec.sail>
-val int_of_string = {
- ocaml: "Nat_big_num.of_string",
- lem: "integerOfString",
- c: "reinit_mpz_t_of_sail_string"
-} : string -> int
+overload zero_extend = {sail_zero_extend}
function main (() : unit) -> unit = {
assert(unsigned(zero_extend(0x2e015f0, 64)) == 48240112);
@@ -2063,8 +2059,8 @@ function main (() : unit) -> unit = {
assert(unsigned(zero_extend(0x5a5a, 64)) == 23130);
assert(unsigned(zero_extend(0x5a5a5a59, 64)) == 1515870809);
assert(unsigned(zero_extend(0x5a5a5a5a, 64)) == 1515870810);
- assert(unsigned(zero_extend(0x5a5a5a5a5a5a5a59, 64)) == int_of_string("6510615555426900569"));
- assert(unsigned(zero_extend(0x5a5a5a5a5a5a5a5a, 64)) == int_of_string("6510615555426900570"));
+ assert(unsigned(zero_extend(0x5a5a5a5a5a5a5a59, 64)) == 6510615555426900569);
+ assert(unsigned(zero_extend(0x5a5a5a5a5a5a5a5a, 64)) == 6510615555426900570);
assert(unsigned(zero_extend(0x5b, 64)) == 91);
assert(unsigned(zero_extend(0x5c, 64)) == 92);
assert(unsigned(zero_extend(0x5c000, 64)) == 376832);
@@ -2153,10 +2149,10 @@ function main (() : unit) -> unit = {
assert(unsigned(zero_extend(0x6c, 64)) == 108);
assert(unsigned(zero_extend(0x6d, 64)) == 109);
assert(unsigned(zero_extend(0x6e, 64)) == 110);
- assert(unsigned(zero_extend(0x6ede4cbc6ede4cbb, 64)) == int_of_string("7988907161199463611"));
+ assert(unsigned(zero_extend(0x6ede4cbc6ede4cbb, 64)) == 7988907161199463611);
assert(unsigned(zero_extend(0x6f, 64)) == 111);
- assert(unsigned(zero_extend(0x6ffffffffffffffe, 64)) == int_of_string("8070450532247928830"));
- assert(unsigned(zero_extend(0x6fffffffffffffff, 64)) == int_of_string("8070450532247928831"));
+ assert(unsigned(zero_extend(0x6ffffffffffffffe, 64)) == 8070450532247928830);
+ assert(unsigned(zero_extend(0x6fffffffffffffff, 64)) == 8070450532247928831);
assert(unsigned(zero_extend(0x7, 64)) == 7);
assert(unsigned(zero_extend(0x70, 64)) == 112);
assert(unsigned(zero_extend(0x71, 64)) == 113);
@@ -2167,10 +2163,10 @@ function main (() : unit) -> unit = {
assert(unsigned(zero_extend(0x76, 64)) == 118);
assert(unsigned(zero_extend(0x764c321, 64)) == 124044065);
assert(unsigned(zero_extend(0x77, 64)) == 119);
- assert(unsigned(zero_extend(0x7765554377655542, 64)) == int_of_string("8603376411415500098"));
- assert(unsigned(zero_extend(0x7766554477665542, 64)) == int_of_string("8603657890687243586"));
+ assert(unsigned(zero_extend(0x7765554377655542, 64)) == 8603376411415500098);
+ assert(unsigned(zero_extend(0x7766554477665542, 64)) == 8603657890687243586);
assert(unsigned(zero_extend(0x78, 64)) == 120);
- assert(unsigned(zero_extend(0x789abcdef0123456, 64)) == int_of_string("8690466096661279830"));
+ assert(unsigned(zero_extend(0x789abcdef0123456, 64)) == 8690466096661279830);
assert(unsigned(zero_extend(0x79, 64)) == 121);
assert(unsigned(zero_extend(0x7a, 64)) == 122);
assert(unsigned(zero_extend(0x7b, 64)) == 123);
@@ -2183,54 +2179,54 @@ function main (() : unit) -> unit = {
assert(unsigned(zero_extend(0x7ffe, 64)) == 32766);
assert(unsigned(zero_extend(0x7fff, 64)) == 32767);
assert(unsigned(zero_extend(0x7fff7fff, 64)) == 2147450879);
- assert(unsigned(zero_extend(0x7fff7fff7fff7ffd, 64)) == int_of_string("9223231297218904061"));
- assert(unsigned(zero_extend(0x7fff7fff7fff7fff, 64)) == int_of_string("9223231297218904063"));
+ assert(unsigned(zero_extend(0x7fff7fff7fff7ffd, 64)) == 9223231297218904061);
+ assert(unsigned(zero_extend(0x7fff7fff7fff7fff, 64)) == 9223231297218904063);
assert(unsigned(zero_extend(0x7fffffc, 64)) == 134217724);
assert(unsigned(zero_extend(0x7ffffffe, 64)) == 2147483646);
assert(unsigned(zero_extend(0x7fffffff, 64)) == 2147483647);
- assert(unsigned(zero_extend(0x7fffffff00000000, 64)) == int_of_string("9223372032559808512"));
- assert(unsigned(zero_extend(0x7fffffff00000001, 64)) == int_of_string("9223372032559808513"));
- assert(unsigned(zero_extend(0x7fffffff7ffffffe, 64)) == int_of_string("9223372034707292158"));
- assert(unsigned(zero_extend(0x7fffffff7fffffff, 64)) == int_of_string("9223372034707292159"));
- assert(unsigned(zero_extend(0x7fffffff80000000, 64)) == int_of_string("9223372034707292160"));
- assert(unsigned(zero_extend(0x7fffffff80000001, 64)) == int_of_string("9223372034707292161"));
- assert(unsigned(zero_extend(0x7fffffffffff0000, 64)) == int_of_string("9223372036854710272"));
- assert(unsigned(zero_extend(0x7fffffffffff0001, 64)) == int_of_string("9223372036854710273"));
- assert(unsigned(zero_extend(0x7fffffffffff7ffe, 64)) == int_of_string("9223372036854743038"));
- assert(unsigned(zero_extend(0x7fffffffffff7fff, 64)) == int_of_string("9223372036854743039"));
- assert(unsigned(zero_extend(0x7fffffffffff8000, 64)) == int_of_string("9223372036854743040"));
- assert(unsigned(zero_extend(0x7fffffffffff8001, 64)) == int_of_string("9223372036854743041"));
- assert(unsigned(zero_extend(0x7ffffffffffffffc, 64)) == int_of_string("9223372036854775804"));
- assert(unsigned(zero_extend(0x7ffffffffffffffd, 64)) == int_of_string("9223372036854775805"));
- assert(unsigned(zero_extend(0x7ffffffffffffffe, 64)) == int_of_string("9223372036854775806"));
- assert(unsigned(zero_extend(0x7fffffffffffffff, 64)) == int_of_string("9223372036854775807"));
+ assert(unsigned(zero_extend(0x7fffffff00000000, 64)) == 9223372032559808512);
+ assert(unsigned(zero_extend(0x7fffffff00000001, 64)) == 9223372032559808513);
+ assert(unsigned(zero_extend(0x7fffffff7ffffffe, 64)) == 9223372034707292158);
+ assert(unsigned(zero_extend(0x7fffffff7fffffff, 64)) == 9223372034707292159);
+ assert(unsigned(zero_extend(0x7fffffff80000000, 64)) == 9223372034707292160);
+ assert(unsigned(zero_extend(0x7fffffff80000001, 64)) == 9223372034707292161);
+ assert(unsigned(zero_extend(0x7fffffffffff0000, 64)) == 9223372036854710272);
+ assert(unsigned(zero_extend(0x7fffffffffff0001, 64)) == 9223372036854710273);
+ assert(unsigned(zero_extend(0x7fffffffffff7ffe, 64)) == 9223372036854743038);
+ assert(unsigned(zero_extend(0x7fffffffffff7fff, 64)) == 9223372036854743039);
+ assert(unsigned(zero_extend(0x7fffffffffff8000, 64)) == 9223372036854743040);
+ assert(unsigned(zero_extend(0x7fffffffffff8001, 64)) == 9223372036854743041);
+ assert(unsigned(zero_extend(0x7ffffffffffffffc, 64)) == 9223372036854775804);
+ assert(unsigned(zero_extend(0x7ffffffffffffffd, 64)) == 9223372036854775805);
+ assert(unsigned(zero_extend(0x7ffffffffffffffe, 64)) == 9223372036854775806);
+ assert(unsigned(zero_extend(0x7fffffffffffffff, 64)) == 9223372036854775807);
assert(unsigned(zero_extend(0x8, 64)) == 8);
assert(unsigned(zero_extend(0x80, 64)) == 128);
assert(unsigned(zero_extend(0x800, 64)) == 2048);
assert(unsigned(zero_extend(0x8000, 64)) == 32768);
assert(unsigned(zero_extend(0x80000000, 64)) == 2147483648);
- assert(unsigned(zero_extend(0x8000000000000000, 64)) == int_of_string("9223372036854775808"));
- assert(unsigned(zero_extend(0x8000000000000001, 64)) == int_of_string("9223372036854775809"));
- assert(unsigned(zero_extend(0x8000000000000002, 64)) == int_of_string("9223372036854775810"));
- assert(unsigned(zero_extend(0x8000000000000003, 64)) == int_of_string("9223372036854775811"));
- assert(unsigned(zero_extend(0x8000000000007ffe, 64)) == int_of_string("9223372036854808574"));
- assert(unsigned(zero_extend(0x8000000000007fff, 64)) == int_of_string("9223372036854808575"));
- assert(unsigned(zero_extend(0x8000000000008000, 64)) == int_of_string("9223372036854808576"));
- assert(unsigned(zero_extend(0x8000000000008001, 64)) == int_of_string("9223372036854808577"));
- assert(unsigned(zero_extend(0x800000000000fffe, 64)) == int_of_string("9223372036854841342"));
- assert(unsigned(zero_extend(0x800000000000ffff, 64)) == int_of_string("9223372036854841343"));
- assert(unsigned(zero_extend(0x800000007ffffffe, 64)) == int_of_string("9223372039002259454"));
- assert(unsigned(zero_extend(0x800000007fffffff, 64)) == int_of_string("9223372039002259455"));
- assert(unsigned(zero_extend(0x8000000080000000, 64)) == int_of_string("9223372039002259456"));
- assert(unsigned(zero_extend(0x8000000080000001, 64)) == int_of_string("9223372039002259457"));
- assert(unsigned(zero_extend(0x80000000fffffffe, 64)) == int_of_string("9223372041149743102"));
- assert(unsigned(zero_extend(0x80000000ffffffff, 64)) == int_of_string("9223372041149743103"));
+ assert(unsigned(zero_extend(0x8000000000000000, 64)) == 9223372036854775808);
+ assert(unsigned(zero_extend(0x8000000000000001, 64)) == 9223372036854775809);
+ assert(unsigned(zero_extend(0x8000000000000002, 64)) == 9223372036854775810);
+ assert(unsigned(zero_extend(0x8000000000000003, 64)) == 9223372036854775811);
+ assert(unsigned(zero_extend(0x8000000000007ffe, 64)) == 9223372036854808574);
+ assert(unsigned(zero_extend(0x8000000000007fff, 64)) == 9223372036854808575);
+ assert(unsigned(zero_extend(0x8000000000008000, 64)) == 9223372036854808576);
+ assert(unsigned(zero_extend(0x8000000000008001, 64)) == 9223372036854808577);
+ assert(unsigned(zero_extend(0x800000000000fffe, 64)) == 9223372036854841342);
+ assert(unsigned(zero_extend(0x800000000000ffff, 64)) == 9223372036854841343);
+ assert(unsigned(zero_extend(0x800000007ffffffe, 64)) == 9223372039002259454);
+ assert(unsigned(zero_extend(0x800000007fffffff, 64)) == 9223372039002259455);
+ assert(unsigned(zero_extend(0x8000000080000000, 64)) == 9223372039002259456);
+ assert(unsigned(zero_extend(0x8000000080000001, 64)) == 9223372039002259457);
+ assert(unsigned(zero_extend(0x80000000fffffffe, 64)) == 9223372041149743102);
+ assert(unsigned(zero_extend(0x80000000ffffffff, 64)) == 9223372041149743103);
assert(unsigned(zero_extend(0x80000001, 64)) == 2147483649);
assert(unsigned(zero_extend(0x80000002, 64)) == 2147483650);
assert(unsigned(zero_extend(0x80000003, 64)) == 2147483651);
assert(unsigned(zero_extend(0x80008000, 64)) == 2147516416);
- assert(unsigned(zero_extend(0x8000800080008000, 64)) == int_of_string("9223512776490647552"));
- assert(unsigned(zero_extend(0x8000800080008002, 64)) == int_of_string("9223512776490647554"));
+ assert(unsigned(zero_extend(0x8000800080008000, 64)) == 9223512776490647552);
+ assert(unsigned(zero_extend(0x8000800080008002, 64)) == 9223512776490647554);
assert(unsigned(zero_extend(0x8001, 64)) == 32769);
assert(unsigned(zero_extend(0x80010003, 64)) == 2147549187);
assert(unsigned(zero_extend(0x8002, 64)) == 32770);
@@ -2258,26 +2254,26 @@ function main (() : unit) -> unit = {
assert(unsigned(zero_extend(0x86, 64)) == 134);
assert(unsigned(zero_extend(0x87, 64)) == 135);
assert(unsigned(zero_extend(0x87654321, 64)) == 2271560481);
- assert(unsigned(zero_extend(0x876543210fedcba9, 64)) == int_of_string("9756277977048271785"));
+ assert(unsigned(zero_extend(0x876543210fedcba9, 64)) == 9756277977048271785);
assert(unsigned(zero_extend(0x88, 64)) == 136);
assert(unsigned(zero_extend(0x8899aabb, 64)) == 2291772091);
- assert(unsigned(zero_extend(0x8899aabb8899aabb, 64)) == int_of_string("9843086183022308027"));
- assert(unsigned(zero_extend(0x8899aabb8899aabd, 64)) == int_of_string("9843086183022308029"));
- assert(unsigned(zero_extend(0x889aaabc889aaabd, 64)) == int_of_string("9843367662294051517"));
+ assert(unsigned(zero_extend(0x8899aabb8899aabb, 64)) == 9843086183022308027);
+ assert(unsigned(zero_extend(0x8899aabb8899aabd, 64)) == 9843086183022308029);
+ assert(unsigned(zero_extend(0x889aaabc889aaabd, 64)) == 9843367662294051517);
assert(unsigned(zero_extend(0x89, 64)) == 137);
assert(unsigned(zero_extend(0x89ab, 64)) == 35243);
assert(unsigned(zero_extend(0x8a, 64)) == 138);
assert(unsigned(zero_extend(0x8b, 64)) == 139);
assert(unsigned(zero_extend(0x8c, 64)) == 140);
assert(unsigned(zero_extend(0x8d, 64)) == 141);
- assert(unsigned(zero_extend(0x8fffffffffffffff, 64)) == int_of_string("10376293541461622783"));
+ assert(unsigned(zero_extend(0x8fffffffffffffff, 64)) == 10376293541461622783);
assert(unsigned(zero_extend(0x9, 64)) == 9);
assert(unsigned(zero_extend(0x90, 64)) == 144);
assert(unsigned(zero_extend(0x90000000, 64)) == 2415919104);
- assert(unsigned(zero_extend(0x9000000000000000, 64)) == int_of_string("10376293541461622784"));
- assert(unsigned(zero_extend(0x9000000000000001, 64)) == int_of_string("10376293541461622785"));
+ assert(unsigned(zero_extend(0x9000000000000000, 64)) == 10376293541461622784);
+ assert(unsigned(zero_extend(0x9000000000000001, 64)) == 10376293541461622785);
assert(unsigned(zero_extend(0x90000001, 64)) == 2415919105);
- assert(unsigned(zero_extend(0x9121b3439121b344, 64)) == int_of_string("10457836912510088004"));
+ assert(unsigned(zero_extend(0x9121b3439121b344, 64)) == 10457836912510088004);
assert(unsigned(zero_extend(0x9200000, 64)) == 153092096);
assert(unsigned(zero_extend(0x9200004, 64)) == 153092100);
assert(unsigned(zero_extend(0x9200008, 64)) == 153092104);
@@ -2361,7 +2357,7 @@ function main (() : unit) -> unit = {
assert(unsigned(zero_extend(0xa500074, 64)) == 173015156);
assert(unsigned(zero_extend(0xa5a5, 64)) == 42405);
assert(unsigned(zero_extend(0xa5a5a5a5, 64)) == 2779096485);
- assert(unsigned(zero_extend(0xa5a5a5a5a5a5a5a5, 64)) == int_of_string("11936128518282651045"));
+ assert(unsigned(zero_extend(0xa5a5a5a5a5a5a5a5, 64)) == 11936128518282651045);
assert(unsigned(zero_extend(0xa8, 64)) == 168);
assert(unsigned(zero_extend(0xb, 64)) == 11);
assert(unsigned(zero_extend(0xb0, 64)) == 176);
@@ -2371,160 +2367,160 @@ function main (() : unit) -> unit = {
assert(unsigned(zero_extend(0xc00fefff, 64)) == 3222269951);
assert(unsigned(zero_extend(0xd, 64)) == 13);
assert(unsigned(zero_extend(0xd0, 64)) == 208);
- assert(unsigned(zero_extend(0xdddddddddddddddc, 64)) == int_of_string("15987178197214944732"));
+ assert(unsigned(zero_extend(0xdddddddddddddddc, 64)) == 15987178197214944732);
assert(unsigned(zero_extend(0xe, 64)) == 14);
assert(unsigned(zero_extend(0xe0, 64)) == 224);
- assert(unsigned(zero_extend(0xedcba9876543210e, 64)) == int_of_string("17134975606245761294"));
+ assert(unsigned(zero_extend(0xedcba9876543210e, 64)) == 17134975606245761294);
assert(unsigned(zero_extend(0xf, 64)) == 15);
assert(unsigned(zero_extend(0xf00, 64)) == 3840);
- assert(unsigned(zero_extend(0xf000000000000000, 64)) == int_of_string("17293822569102704640"));
+ assert(unsigned(zero_extend(0xf000000000000000, 64)) == 17293822569102704640);
assert(unsigned(zero_extend(0xff, 64)) == 255);
assert(unsigned(zero_extend(0xfffe, 64)) == 65534);
assert(unsigned(zero_extend(0xffff, 64)) == 65535);
assert(unsigned(zero_extend(0xffff8000, 64)) == 4294934528);
assert(unsigned(zero_extend(0xffffc, 64)) == 1048572);
- assert(unsigned(zero_extend(0xffffe000ffffe000, 64)) == int_of_string("18446708893632421888"));
+ assert(unsigned(zero_extend(0xffffe000ffffe000, 64)) == 18446708893632421888);
assert(unsigned(zero_extend(0xfffffff, 64)) == 268435455);
assert(unsigned(zero_extend(0xfffffffe, 64)) == 4294967294);
- assert(unsigned(zero_extend(0xfffffffe77665544, 64)) == int_of_string("18446744067122812228"));
- assert(unsigned(zero_extend(0xfffffffe7fffffff, 64)) == int_of_string("18446744067267100671"));
- assert(unsigned(zero_extend(0xfffffffe80000000, 64)) == int_of_string("18446744067267100672"));
- assert(unsigned(zero_extend(0xfffffffef89b3cde, 64)) == int_of_string("18446744069290540254"));
- assert(unsigned(zero_extend(0xfffffffefffffffe, 64)) == int_of_string("18446744069414584318"));
- assert(unsigned(zero_extend(0xfffffffeffffffff, 64)) == int_of_string("18446744069414584319"));
+ assert(unsigned(zero_extend(0xfffffffe77665544, 64)) == 18446744067122812228);
+ assert(unsigned(zero_extend(0xfffffffe7fffffff, 64)) == 18446744067267100671);
+ assert(unsigned(zero_extend(0xfffffffe80000000, 64)) == 18446744067267100672);
+ assert(unsigned(zero_extend(0xfffffffef89b3cde, 64)) == 18446744069290540254);
+ assert(unsigned(zero_extend(0xfffffffefffffffe, 64)) == 18446744069414584318);
+ assert(unsigned(zero_extend(0xfffffffeffffffff, 64)) == 18446744069414584319);
assert(unsigned(zero_extend(0xffffffff, 64)) == 4294967295);
- assert(unsigned(zero_extend(0xffffffff00000000, 64)) == int_of_string("18446744069414584320"));
- assert(unsigned(zero_extend(0xffffffff00000001, 64)) == int_of_string("18446744069414584321"));
- assert(unsigned(zero_extend(0xffffffff00007fff, 64)) == int_of_string("18446744069414617087"));
- assert(unsigned(zero_extend(0xffffffff3ff01000, 64)) == int_of_string("18446744070487281664"));
- assert(unsigned(zero_extend(0xffffffff5fffffff, 64)) == int_of_string("18446744071025197055"));
- assert(unsigned(zero_extend(0xffffffff6dcba985, 64)) == int_of_string("18446744071256648069"));
- assert(unsigned(zero_extend(0xffffffff6ffffffe, 64)) == int_of_string("18446744071293632510"));
- assert(unsigned(zero_extend(0xffffffff6fffffff, 64)) == int_of_string("18446744071293632511"));
- assert(unsigned(zero_extend(0xffffffff77665544, 64)) == int_of_string("18446744071417779524"));
- assert(unsigned(zero_extend(0xffffffff7ffefffc, 64)) == int_of_string("18446744071562002428"));
- assert(unsigned(zero_extend(0xffffffff7ffffffc, 64)) == int_of_string("18446744071562067964"));
- assert(unsigned(zero_extend(0xffffffff7ffffffd, 64)) == int_of_string("18446744071562067965"));
- assert(unsigned(zero_extend(0xffffffff7ffffffe, 64)) == int_of_string("18446744071562067966"));
- assert(unsigned(zero_extend(0xffffffff7fffffff, 64)) == int_of_string("18446744071562067967"));
- assert(unsigned(zero_extend(0xffffffff80000000, 64)) == int_of_string("18446744071562067968"));
- assert(unsigned(zero_extend(0xffffffff80000001, 64)) == int_of_string("18446744071562067969"));
- assert(unsigned(zero_extend(0xffffffff94837260, 64)) == int_of_string("18446744071906226784"));
- assert(unsigned(zero_extend(0xffffffffdfffffff, 64)) == int_of_string("18446744073172680703"));
- assert(unsigned(zero_extend(0xffffffffed9fff7f, 64)) == int_of_string("18446744073401270143"));
- assert(unsigned(zero_extend(0xffffffffedafff8f, 64)) == int_of_string("18446744073402318735"));
- assert(unsigned(zero_extend(0xfffffffff0000000, 64)) == int_of_string("18446744073441116160"));
- assert(unsigned(zero_extend(0xfffffffff7ffffff, 64)) == int_of_string("18446744073575333887"));
- assert(unsigned(zero_extend(0xfffffffff89b3cde, 64)) == int_of_string("18446744073585507550"));
- assert(unsigned(zero_extend(0xfffffffffcefffff, 64)) == int_of_string("18446744073658171391"));
- assert(unsigned(zero_extend(0xfffffffffcf0ffff, 64)) == int_of_string("18446744073658236927"));
- assert(unsigned(zero_extend(0xfffffffffcf1ffff, 64)) == int_of_string("18446744073658302463"));
- assert(unsigned(zero_extend(0xfffffffffcf84000, 64)) == int_of_string("18446744073658712064"));
- assert(unsigned(zero_extend(0xfffffffffcf94000, 64)) == int_of_string("18446744073658777600"));
- assert(unsigned(zero_extend(0xfffffffffcfa4000, 64)) == int_of_string("18446744073658843136"));
- assert(unsigned(zero_extend(0xfffffffffd0affff, 64)) == int_of_string("18446744073659940863"));
- assert(unsigned(zero_extend(0xfffffffffd0bffff, 64)) == int_of_string("18446744073660006399"));
- assert(unsigned(zero_extend(0xfffffffffd0fc000, 64)) == int_of_string("18446744073660252160"));
- assert(unsigned(zero_extend(0xfffffffffd10c000, 64)) == int_of_string("18446744073660317696"));
- assert(unsigned(zero_extend(0xfffffffffd10ffff, 64)) == int_of_string("18446744073660334079"));
- assert(unsigned(zero_extend(0xfffffffffd11ffff, 64)) == int_of_string("18446744073660399615"));
- assert(unsigned(zero_extend(0xfffffffffd130000, 64)) == int_of_string("18446744073660465152"));
- assert(unsigned(zero_extend(0xfffffffffd13ffff, 64)) == int_of_string("18446744073660530687"));
- assert(unsigned(zero_extend(0xfffffffffd140000, 64)) == int_of_string("18446744073660530688"));
- assert(unsigned(zero_extend(0xfffffffffd14ffff, 64)) == int_of_string("18446744073660596223"));
- assert(unsigned(zero_extend(0xfffffffffd170000, 64)) == int_of_string("18446744073660727296"));
- assert(unsigned(zero_extend(0xfffffffffd18c000, 64)) == int_of_string("18446744073660841984"));
- assert(unsigned(zero_extend(0xfffffffffebffe6b, 64)) == int_of_string("18446744073688579691"));
- assert(unsigned(zero_extend(0xfffffffffebffefb, 64)) == int_of_string("18446744073688579835"));
- assert(unsigned(zero_extend(0xfffffffffebfff3b, 64)) == int_of_string("18446744073688579899"));
- assert(unsigned(zero_extend(0xffffffffffefffff, 64)) == int_of_string("18446744073708503039"));
+ assert(unsigned(zero_extend(0xffffffff00000000, 64)) == 18446744069414584320);
+ assert(unsigned(zero_extend(0xffffffff00000001, 64)) == 18446744069414584321);
+ assert(unsigned(zero_extend(0xffffffff00007fff, 64)) == 18446744069414617087);
+ assert(unsigned(zero_extend(0xffffffff3ff01000, 64)) == 18446744070487281664);
+ assert(unsigned(zero_extend(0xffffffff5fffffff, 64)) == 18446744071025197055);
+ assert(unsigned(zero_extend(0xffffffff6dcba985, 64)) == 18446744071256648069);
+ assert(unsigned(zero_extend(0xffffffff6ffffffe, 64)) == 18446744071293632510);
+ assert(unsigned(zero_extend(0xffffffff6fffffff, 64)) == 18446744071293632511);
+ assert(unsigned(zero_extend(0xffffffff77665544, 64)) == 18446744071417779524);
+ assert(unsigned(zero_extend(0xffffffff7ffefffc, 64)) == 18446744071562002428);
+ assert(unsigned(zero_extend(0xffffffff7ffffffc, 64)) == 18446744071562067964);
+ assert(unsigned(zero_extend(0xffffffff7ffffffd, 64)) == 18446744071562067965);
+ assert(unsigned(zero_extend(0xffffffff7ffffffe, 64)) == 18446744071562067966);
+ assert(unsigned(zero_extend(0xffffffff7fffffff, 64)) == 18446744071562067967);
+ assert(unsigned(zero_extend(0xffffffff80000000, 64)) == 18446744071562067968);
+ assert(unsigned(zero_extend(0xffffffff80000001, 64)) == 18446744071562067969);
+ assert(unsigned(zero_extend(0xffffffff94837260, 64)) == 18446744071906226784);
+ assert(unsigned(zero_extend(0xffffffffdfffffff, 64)) == 18446744073172680703);
+ assert(unsigned(zero_extend(0xffffffffed9fff7f, 64)) == 18446744073401270143);
+ assert(unsigned(zero_extend(0xffffffffedafff8f, 64)) == 18446744073402318735);
+ assert(unsigned(zero_extend(0xfffffffff0000000, 64)) == 18446744073441116160);
+ assert(unsigned(zero_extend(0xfffffffff7ffffff, 64)) == 18446744073575333887);
+ assert(unsigned(zero_extend(0xfffffffff89b3cde, 64)) == 18446744073585507550);
+ assert(unsigned(zero_extend(0xfffffffffcefffff, 64)) == 18446744073658171391);
+ assert(unsigned(zero_extend(0xfffffffffcf0ffff, 64)) == 18446744073658236927);
+ assert(unsigned(zero_extend(0xfffffffffcf1ffff, 64)) == 18446744073658302463);
+ assert(unsigned(zero_extend(0xfffffffffcf84000, 64)) == 18446744073658712064);
+ assert(unsigned(zero_extend(0xfffffffffcf94000, 64)) == 18446744073658777600);
+ assert(unsigned(zero_extend(0xfffffffffcfa4000, 64)) == 18446744073658843136);
+ assert(unsigned(zero_extend(0xfffffffffd0affff, 64)) == 18446744073659940863);
+ assert(unsigned(zero_extend(0xfffffffffd0bffff, 64)) == 18446744073660006399);
+ assert(unsigned(zero_extend(0xfffffffffd0fc000, 64)) == 18446744073660252160);
+ assert(unsigned(zero_extend(0xfffffffffd10c000, 64)) == 18446744073660317696);
+ assert(unsigned(zero_extend(0xfffffffffd10ffff, 64)) == 18446744073660334079);
+ assert(unsigned(zero_extend(0xfffffffffd11ffff, 64)) == 18446744073660399615);
+ assert(unsigned(zero_extend(0xfffffffffd130000, 64)) == 18446744073660465152);
+ assert(unsigned(zero_extend(0xfffffffffd13ffff, 64)) == 18446744073660530687);
+ assert(unsigned(zero_extend(0xfffffffffd140000, 64)) == 18446744073660530688);
+ assert(unsigned(zero_extend(0xfffffffffd14ffff, 64)) == 18446744073660596223);
+ assert(unsigned(zero_extend(0xfffffffffd170000, 64)) == 18446744073660727296);
+ assert(unsigned(zero_extend(0xfffffffffd18c000, 64)) == 18446744073660841984);
+ assert(unsigned(zero_extend(0xfffffffffebffe6b, 64)) == 18446744073688579691);
+ assert(unsigned(zero_extend(0xfffffffffebffefb, 64)) == 18446744073688579835);
+ assert(unsigned(zero_extend(0xfffffffffebfff3b, 64)) == 18446744073688579899);
+ assert(unsigned(zero_extend(0xffffffffffefffff, 64)) == 18446744073708503039);
assert(unsigned(zero_extend(0xfffffffffff, 64)) == 17592186044415);
- assert(unsigned(zero_extend(0xfffffffffff70000, 64)) == int_of_string("18446744073708961792"));
- assert(unsigned(zero_extend(0xfffffffffff80000, 64)) == int_of_string("18446744073709027328"));
- assert(unsigned(zero_extend(0xfffffffffffc0000, 64)) == int_of_string("18446744073709289472"));
- assert(unsigned(zero_extend(0xfffffffffffd0000, 64)) == int_of_string("18446744073709355008"));
- assert(unsigned(zero_extend(0xfffffffffffdffff, 64)) == int_of_string("18446744073709420543"));
- assert(unsigned(zero_extend(0xfffffffffffe0000, 64)) == int_of_string("18446744073709420544"));
- assert(unsigned(zero_extend(0xfffffffffffe7ffe, 64)) == int_of_string("18446744073709453310"));
- assert(unsigned(zero_extend(0xfffffffffffe7fff, 64)) == int_of_string("18446744073709453311"));
- assert(unsigned(zero_extend(0xfffffffffffe8000, 64)) == int_of_string("18446744073709453312"));
- assert(unsigned(zero_extend(0xfffffffffffe8001, 64)) == int_of_string("18446744073709453313"));
- assert(unsigned(zero_extend(0xfffffffffffefffe, 64)) == int_of_string("18446744073709486078"));
- assert(unsigned(zero_extend(0xfffffffffffeffff, 64)) == int_of_string("18446744073709486079"));
- assert(unsigned(zero_extend(0xffffffffffff0000, 64)) == int_of_string("18446744073709486080"));
- assert(unsigned(zero_extend(0xffffffffffff0001, 64)) == int_of_string("18446744073709486081"));
- assert(unsigned(zero_extend(0xffffffffffff641f, 64)) == int_of_string("18446744073709511711"));
- assert(unsigned(zero_extend(0xffffffffffff7ffc, 64)) == int_of_string("18446744073709518844"));
- assert(unsigned(zero_extend(0xffffffffffff7ffd, 64)) == int_of_string("18446744073709518845"));
- assert(unsigned(zero_extend(0xffffffffffff7ffe, 64)) == int_of_string("18446744073709518846"));
- assert(unsigned(zero_extend(0xffffffffffff7fff, 64)) == int_of_string("18446744073709518847"));
- assert(unsigned(zero_extend(0xffffffffffff8000, 64)) == int_of_string("18446744073709518848"));
- assert(unsigned(zero_extend(0xffffffffffff8001, 64)) == int_of_string("18446744073709518849"));
- assert(unsigned(zero_extend(0xffffffffffffbeff, 64)) == int_of_string("18446744073709534975"));
- assert(unsigned(zero_extend(0xffffffffffffbf40, 64)) == int_of_string("18446744073709535040"));
- assert(unsigned(zero_extend(0xffffffffffffbf41, 64)) == int_of_string("18446744073709535041"));
- assert(unsigned(zero_extend(0xffffffffffffbfff, 64)) == int_of_string("18446744073709535231"));
- assert(unsigned(zero_extend(0xffffffffffffc22c, 64)) == int_of_string("18446744073709535788"));
- assert(unsigned(zero_extend(0xffffffffffffc24c, 64)) == int_of_string("18446744073709535820"));
- assert(unsigned(zero_extend(0xffffffffffffd220, 64)) == int_of_string("18446744073709539872"));
- assert(unsigned(zero_extend(0xffffffffffffd23c, 64)) == int_of_string("18446744073709539900"));
- assert(unsigned(zero_extend(0xffffffffffffe220, 64)) == int_of_string("18446744073709543968"));
- assert(unsigned(zero_extend(0xffffffffffffe23c, 64)) == int_of_string("18446744073709543996"));
- assert(unsigned(zero_extend(0xffffffffffffefff, 64)) == int_of_string("18446744073709547519"));
- assert(unsigned(zero_extend(0xfffffffffffffeef, 64)) == int_of_string("18446744073709551343"));
- assert(unsigned(zero_extend(0xfffffffffffffeff, 64)) == int_of_string("18446744073709551359"));
- assert(unsigned(zero_extend(0xffffffffffffff1f, 64)) == int_of_string("18446744073709551391"));
- assert(unsigned(zero_extend(0xffffffffffffff2f, 64)) == int_of_string("18446744073709551407"));
- assert(unsigned(zero_extend(0xffffffffffffff4f, 64)) == int_of_string("18446744073709551439"));
- assert(unsigned(zero_extend(0xffffffffffffff6f, 64)) == int_of_string("18446744073709551471"));
- assert(unsigned(zero_extend(0xffffffffffffff80, 64)) == int_of_string("18446744073709551488"));
- assert(unsigned(zero_extend(0xffffffffffffff8f, 64)) == int_of_string("18446744073709551503"));
- assert(unsigned(zero_extend(0xffffffffffffff9f, 64)) == int_of_string("18446744073709551519"));
- assert(unsigned(zero_extend(0xffffffffffffffa0, 64)) == int_of_string("18446744073709551520"));
- assert(unsigned(zero_extend(0xffffffffffffffaf, 64)) == int_of_string("18446744073709551535"));
- assert(unsigned(zero_extend(0xffffffffffffffbf, 64)) == int_of_string("18446744073709551551"));
- assert(unsigned(zero_extend(0xffffffffffffffc2, 64)) == int_of_string("18446744073709551554"));
- assert(unsigned(zero_extend(0xffffffffffffffc4, 64)) == int_of_string("18446744073709551556"));
- assert(unsigned(zero_extend(0xffffffffffffffc6, 64)) == int_of_string("18446744073709551558"));
- assert(unsigned(zero_extend(0xffffffffffffffc8, 64)) == int_of_string("18446744073709551560"));
- assert(unsigned(zero_extend(0xffffffffffffffca, 64)) == int_of_string("18446744073709551562"));
- assert(unsigned(zero_extend(0xffffffffffffffcc, 64)) == int_of_string("18446744073709551564"));
- assert(unsigned(zero_extend(0xffffffffffffffce, 64)) == int_of_string("18446744073709551566"));
- assert(unsigned(zero_extend(0xffffffffffffffcf, 64)) == int_of_string("18446744073709551567"));
- assert(unsigned(zero_extend(0xffffffffffffffd0, 64)) == int_of_string("18446744073709551568"));
- assert(unsigned(zero_extend(0xffffffffffffffd2, 64)) == int_of_string("18446744073709551570"));
- assert(unsigned(zero_extend(0xffffffffffffffd4, 64)) == int_of_string("18446744073709551572"));
- assert(unsigned(zero_extend(0xffffffffffffffd6, 64)) == int_of_string("18446744073709551574"));
- assert(unsigned(zero_extend(0xffffffffffffffd8, 64)) == int_of_string("18446744073709551576"));
- assert(unsigned(zero_extend(0xffffffffffffffda, 64)) == int_of_string("18446744073709551578"));
- assert(unsigned(zero_extend(0xffffffffffffffdb, 64)) == int_of_string("18446744073709551579"));
- assert(unsigned(zero_extend(0xffffffffffffffdc, 64)) == int_of_string("18446744073709551580"));
- assert(unsigned(zero_extend(0xffffffffffffffde, 64)) == int_of_string("18446744073709551582"));
- assert(unsigned(zero_extend(0xffffffffffffffdf, 64)) == int_of_string("18446744073709551583"));
- assert(unsigned(zero_extend(0xffffffffffffffe0, 64)) == int_of_string("18446744073709551584"));
- assert(unsigned(zero_extend(0xffffffffffffffe2, 64)) == int_of_string("18446744073709551586"));
- assert(unsigned(zero_extend(0xffffffffffffffe4, 64)) == int_of_string("18446744073709551588"));
- assert(unsigned(zero_extend(0xffffffffffffffe6, 64)) == int_of_string("18446744073709551590"));
- assert(unsigned(zero_extend(0xffffffffffffffe7, 64)) == int_of_string("18446744073709551591"));
- assert(unsigned(zero_extend(0xffffffffffffffe8, 64)) == int_of_string("18446744073709551592"));
- assert(unsigned(zero_extend(0xffffffffffffffea, 64)) == int_of_string("18446744073709551594"));
- assert(unsigned(zero_extend(0xffffffffffffffec, 64)) == int_of_string("18446744073709551596"));
- assert(unsigned(zero_extend(0xffffffffffffffee, 64)) == int_of_string("18446744073709551598"));
- assert(unsigned(zero_extend(0xffffffffffffffef, 64)) == int_of_string("18446744073709551599"));
+ assert(unsigned(zero_extend(0xfffffffffff70000, 64)) == 18446744073708961792);
+ assert(unsigned(zero_extend(0xfffffffffff80000, 64)) == 18446744073709027328);
+ assert(unsigned(zero_extend(0xfffffffffffc0000, 64)) == 18446744073709289472);
+ assert(unsigned(zero_extend(0xfffffffffffd0000, 64)) == 18446744073709355008);
+ assert(unsigned(zero_extend(0xfffffffffffdffff, 64)) == 18446744073709420543);
+ assert(unsigned(zero_extend(0xfffffffffffe0000, 64)) == 18446744073709420544);
+ assert(unsigned(zero_extend(0xfffffffffffe7ffe, 64)) == 18446744073709453310);
+ assert(unsigned(zero_extend(0xfffffffffffe7fff, 64)) == 18446744073709453311);
+ assert(unsigned(zero_extend(0xfffffffffffe8000, 64)) == 18446744073709453312);
+ assert(unsigned(zero_extend(0xfffffffffffe8001, 64)) == 18446744073709453313);
+ assert(unsigned(zero_extend(0xfffffffffffefffe, 64)) == 18446744073709486078);
+ assert(unsigned(zero_extend(0xfffffffffffeffff, 64)) == 18446744073709486079);
+ assert(unsigned(zero_extend(0xffffffffffff0000, 64)) == 18446744073709486080);
+ assert(unsigned(zero_extend(0xffffffffffff0001, 64)) == 18446744073709486081);
+ assert(unsigned(zero_extend(0xffffffffffff641f, 64)) == 18446744073709511711);
+ assert(unsigned(zero_extend(0xffffffffffff7ffc, 64)) == 18446744073709518844);
+ assert(unsigned(zero_extend(0xffffffffffff7ffd, 64)) == 18446744073709518845);
+ assert(unsigned(zero_extend(0xffffffffffff7ffe, 64)) == 18446744073709518846);
+ assert(unsigned(zero_extend(0xffffffffffff7fff, 64)) == 18446744073709518847);
+ assert(unsigned(zero_extend(0xffffffffffff8000, 64)) == 18446744073709518848);
+ assert(unsigned(zero_extend(0xffffffffffff8001, 64)) == 18446744073709518849);
+ assert(unsigned(zero_extend(0xffffffffffffbeff, 64)) == 18446744073709534975);
+ assert(unsigned(zero_extend(0xffffffffffffbf40, 64)) == 18446744073709535040);
+ assert(unsigned(zero_extend(0xffffffffffffbf41, 64)) == 18446744073709535041);
+ assert(unsigned(zero_extend(0xffffffffffffbfff, 64)) == 18446744073709535231);
+ assert(unsigned(zero_extend(0xffffffffffffc22c, 64)) == 18446744073709535788);
+ assert(unsigned(zero_extend(0xffffffffffffc24c, 64)) == 18446744073709535820);
+ assert(unsigned(zero_extend(0xffffffffffffd220, 64)) == 18446744073709539872);
+ assert(unsigned(zero_extend(0xffffffffffffd23c, 64)) == 18446744073709539900);
+ assert(unsigned(zero_extend(0xffffffffffffe220, 64)) == 18446744073709543968);
+ assert(unsigned(zero_extend(0xffffffffffffe23c, 64)) == 18446744073709543996);
+ assert(unsigned(zero_extend(0xffffffffffffefff, 64)) == 18446744073709547519);
+ assert(unsigned(zero_extend(0xfffffffffffffeef, 64)) == 18446744073709551343);
+ assert(unsigned(zero_extend(0xfffffffffffffeff, 64)) == 18446744073709551359);
+ assert(unsigned(zero_extend(0xffffffffffffff1f, 64)) == 18446744073709551391);
+ assert(unsigned(zero_extend(0xffffffffffffff2f, 64)) == 18446744073709551407);
+ assert(unsigned(zero_extend(0xffffffffffffff4f, 64)) == 18446744073709551439);
+ assert(unsigned(zero_extend(0xffffffffffffff6f, 64)) == 18446744073709551471);
+ assert(unsigned(zero_extend(0xffffffffffffff80, 64)) == 18446744073709551488);
+ assert(unsigned(zero_extend(0xffffffffffffff8f, 64)) == 18446744073709551503);
+ assert(unsigned(zero_extend(0xffffffffffffff9f, 64)) == 18446744073709551519);
+ assert(unsigned(zero_extend(0xffffffffffffffa0, 64)) == 18446744073709551520);
+ assert(unsigned(zero_extend(0xffffffffffffffaf, 64)) == 18446744073709551535);
+ assert(unsigned(zero_extend(0xffffffffffffffbf, 64)) == 18446744073709551551);
+ assert(unsigned(zero_extend(0xffffffffffffffc2, 64)) == 18446744073709551554);
+ assert(unsigned(zero_extend(0xffffffffffffffc4, 64)) == 18446744073709551556);
+ assert(unsigned(zero_extend(0xffffffffffffffc6, 64)) == 18446744073709551558);
+ assert(unsigned(zero_extend(0xffffffffffffffc8, 64)) == 18446744073709551560);
+ assert(unsigned(zero_extend(0xffffffffffffffca, 64)) == 18446744073709551562);
+ assert(unsigned(zero_extend(0xffffffffffffffcc, 64)) == 18446744073709551564);
+ assert(unsigned(zero_extend(0xffffffffffffffce, 64)) == 18446744073709551566);
+ assert(unsigned(zero_extend(0xffffffffffffffcf, 64)) == 18446744073709551567);
+ assert(unsigned(zero_extend(0xffffffffffffffd0, 64)) == 18446744073709551568);
+ assert(unsigned(zero_extend(0xffffffffffffffd2, 64)) == 18446744073709551570);
+ assert(unsigned(zero_extend(0xffffffffffffffd4, 64)) == 18446744073709551572);
+ assert(unsigned(zero_extend(0xffffffffffffffd6, 64)) == 18446744073709551574);
+ assert(unsigned(zero_extend(0xffffffffffffffd8, 64)) == 18446744073709551576);
+ assert(unsigned(zero_extend(0xffffffffffffffda, 64)) == 18446744073709551578);
+ assert(unsigned(zero_extend(0xffffffffffffffdb, 64)) == 18446744073709551579);
+ assert(unsigned(zero_extend(0xffffffffffffffdc, 64)) == 18446744073709551580);
+ assert(unsigned(zero_extend(0xffffffffffffffde, 64)) == 18446744073709551582);
+ assert(unsigned(zero_extend(0xffffffffffffffdf, 64)) == 18446744073709551583);
+ assert(unsigned(zero_extend(0xffffffffffffffe0, 64)) == 18446744073709551584);
+ assert(unsigned(zero_extend(0xffffffffffffffe2, 64)) == 18446744073709551586);
+ assert(unsigned(zero_extend(0xffffffffffffffe4, 64)) == 18446744073709551588);
+ assert(unsigned(zero_extend(0xffffffffffffffe6, 64)) == 18446744073709551590);
+ assert(unsigned(zero_extend(0xffffffffffffffe7, 64)) == 18446744073709551591);
+ assert(unsigned(zero_extend(0xffffffffffffffe8, 64)) == 18446744073709551592);
+ assert(unsigned(zero_extend(0xffffffffffffffea, 64)) == 18446744073709551594);
+ assert(unsigned(zero_extend(0xffffffffffffffec, 64)) == 18446744073709551596);
+ assert(unsigned(zero_extend(0xffffffffffffffee, 64)) == 18446744073709551598);
+ assert(unsigned(zero_extend(0xffffffffffffffef, 64)) == 18446744073709551599);
assert(unsigned(zero_extend(0xfffffffffffffff, 64)) == 1152921504606846975);
- assert(unsigned(zero_extend(0xfffffffffffffff0, 64)) == int_of_string("18446744073709551600"));
- assert(unsigned(zero_extend(0xfffffffffffffff1, 64)) == int_of_string("18446744073709551601"));
- assert(unsigned(zero_extend(0xfffffffffffffff2, 64)) == int_of_string("18446744073709551602"));
- assert(unsigned(zero_extend(0xfffffffffffffff4, 64)) == int_of_string("18446744073709551604"));
- assert(unsigned(zero_extend(0xfffffffffffffff6, 64)) == int_of_string("18446744073709551606"));
- assert(unsigned(zero_extend(0xfffffffffffffff7, 64)) == int_of_string("18446744073709551607"));
- assert(unsigned(zero_extend(0xfffffffffffffff8, 64)) == int_of_string("18446744073709551608"));
- assert(unsigned(zero_extend(0xfffffffffffffffa, 64)) == int_of_string("18446744073709551610"));
- assert(unsigned(zero_extend(0xfffffffffffffffb, 64)) == int_of_string("18446744073709551611"));
- assert(unsigned(zero_extend(0xfffffffffffffffc, 64)) == int_of_string("18446744073709551612"));
- assert(unsigned(zero_extend(0xfffffffffffffffd, 64)) == int_of_string("18446744073709551613"));
- assert(unsigned(zero_extend(0xfffffffffffffffe, 64)) == int_of_string("18446744073709551614"));
- assert(unsigned(zero_extend(0xffffffffffffffff, 64)) == int_of_string("18446744073709551615"));
+ assert(unsigned(zero_extend(0xfffffffffffffff0, 64)) == 18446744073709551600);
+ assert(unsigned(zero_extend(0xfffffffffffffff1, 64)) == 18446744073709551601);
+ assert(unsigned(zero_extend(0xfffffffffffffff2, 64)) == 18446744073709551602);
+ assert(unsigned(zero_extend(0xfffffffffffffff4, 64)) == 18446744073709551604);
+ assert(unsigned(zero_extend(0xfffffffffffffff6, 64)) == 18446744073709551606);
+ assert(unsigned(zero_extend(0xfffffffffffffff7, 64)) == 18446744073709551607);
+ assert(unsigned(zero_extend(0xfffffffffffffff8, 64)) == 18446744073709551608);
+ assert(unsigned(zero_extend(0xfffffffffffffffa, 64)) == 18446744073709551610);
+ assert(unsigned(zero_extend(0xfffffffffffffffb, 64)) == 18446744073709551611);
+ assert(unsigned(zero_extend(0xfffffffffffffffc, 64)) == 18446744073709551612);
+ assert(unsigned(zero_extend(0xfffffffffffffffd, 64)) == 18446744073709551613);
+ assert(unsigned(zero_extend(0xfffffffffffffffe, 64)) == 18446744073709551614);
+ assert(unsigned(zero_extend(0xffffffffffffffff, 64)) == 18446744073709551615);
assert(unsigned(zero_extend(0x0, 8)) == 0);
assert(unsigned(zero_extend(0x20, 8)) == 32);
assert(unsigned(zero_extend(0x28, 8)) == 40);
diff --git a/test/builtins/zeros.sail b/test/builtins/zeros.sail
index 79500469..c2fb75c4 100644
--- a/test/builtins/zeros.sail
+++ b/test/builtins/zeros.sail
@@ -4,6 +4,8 @@ $include <exception_basic.sail>
$include <flow.sail>
$include <vector_dec.sail>
+overload zeros = {sail_zeros}
+
function main (() : unit) -> unit = {
assert(zeros(1) == 1^0b0);
assert(zeros(10) == 10^0x0);
diff --git a/test/c/run_tests.py b/test/c/run_tests.py
new file mode 100755
index 00000000..9c5c486c
--- /dev/null
+++ b/test/c/run_tests.py
@@ -0,0 +1,42 @@
+#!/usr/bin/env python
+
+import os
+import re
+import sys
+import hashlib
+
+sail_dir = os.environ['SAIL_DIR']
+os.chdir(os.path.dirname(__file__))
+sys.path.insert(0, os.path.join(sail_dir, 'test'))
+
+from sailtest import *
+
+def test_c(name, c_opts, sail_opts, valgrind):
+ banner('Testing {} with C options: {} Sail options: {} valgrind: {}'.format(name, c_opts, sail_opts, valgrind))
+ tests = {}
+ for filename in os.listdir('.'):
+ if re.match('.+\.sail', filename):
+ basename = os.path.splitext(os.path.basename(filename))[0]
+ tests[filename] = os.fork()
+ if tests[filename] == 0:
+ step('sail -no_warn -c {} {} 1> {}.c'.format(sail_opts, filename, basename))
+ step('gcc {} {}.c {}/lib/*.c -lgmp -lz -I {}/lib -o {}'.format(c_opts, basename, sail_dir, sail_dir, basename))
+ step('./{} 1> {}.result'.format(basename, basename))
+ step('diff {}.result {}.expect'.format(basename, basename))
+ if valgrind:
+ step("valgrind --leak-check=full --errors-for-leak-kinds=all --error-exitcode=1 ./{}".format(basename))
+ print '{} {}{}{}'.format(filename, color.PASS, 'ok', color.END)
+ sys.exit()
+ return collect_results(name, tests)
+
+xml = '<testsuites>\n'
+
+xml += test_c('unoptimized C', '', '', True)
+xml += test_c('optimized C', '-O2', '-O', True)
+xml += test_c('address sanitised', '-O2 -fsanitize=undefined', '-O', False)
+
+xml += '</testsuites>\n'
+
+output = open('tests.xml', 'w')
+output.write(xml)
+output.close()
diff --git a/test/sailtest.py b/test/sailtest.py
new file mode 100644
index 00000000..f0036236
--- /dev/null
+++ b/test/sailtest.py
@@ -0,0 +1,51 @@
+import os
+import re
+import sys
+import subprocess
+import datetime
+
+class color:
+ NOTICE = '\033[94m'
+ PASS = '\033[92m'
+ WARNING = '\033[93m'
+ FAIL = '\033[91m'
+ END = '\033[0m'
+
+
+def step(string):
+ p = subprocess.Popen(string, shell=True, stderr=subprocess.PIPE, stdout=subprocess.PIPE)
+ out, err = p.communicate()
+ status = p.wait()
+ if status != 0:
+ print("{}Failed{}: {}".format(color.FAIL, color.END, string))
+ print('{}stdout{}:'.format(color.NOTICE, color.END))
+ print(out)
+ print('{}stderr{}:'.format(color.NOTICE, color.END))
+ print(err)
+ sys.exit(1)
+
+def banner(string):
+ print '=' * len(string)
+ print string
+ print '=' * len(string)
+
+def collect_results(name, tests):
+ passes = 0
+ failures = 0
+ xml = ""
+
+ for test in tests:
+ _, status = os.waitpid(tests[test], 0)
+ if status != 0:
+ failures += 1
+ xml += ' <testcase name="{}">\n <error message="fail">fail</error>\n </testcase>\n'.format(test)
+ else:
+ passes += 1
+ xml += ' <testcase name="{}"/>\n'.format(test)
+
+ print '{}{} passes and {} failures{}'.format(color.NOTICE, passes, failures, color.END)
+
+ time = datetime.datetime.utcnow()
+ suite = ' <testsuite name="{}" tests="{}" failures="{}" timestamp="{}">\n{} </testsuite>\n'
+ xml = suite.format(name, passes + failures, failures, time, xml)
+ return xml