summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/builtins/divmod.sail92
-rw-r--r--test/c/cheri_capreg.sail23
-rw-r--r--test/c/exception.expect2
-rw-r--r--test/c/exception.sail15
-rw-r--r--test/c/execute.isail1
-rwxr-xr-xtest/c/run_tests.py26
-rw-r--r--test/typecheck/pass/Replicate/v2.expect2
-rw-r--r--test/typecheck/pass/constant_nexp/v2.expect2
-rw-r--r--test/typecheck/pass/existential_ast/v3.expect2
-rw-r--r--test/typecheck/pass/existential_ast3/v1.expect8
-rw-r--r--test/typecheck/pass/existential_ast3/v2.expect8
-rw-r--r--test/typecheck/pass/existential_ast3/v3.expect2
-rw-r--r--test/typecheck/pass/if_infer/v1.expect2
-rw-r--r--test/typecheck/pass/if_infer/v2.expect2
-rw-r--r--test/typecheck/pass/reg_32_64/v1.expect4
15 files changed, 118 insertions, 73 deletions
diff --git a/test/builtins/divmod.sail b/test/builtins/divmod.sail
index f9d7e7c5..458d8dfd 100644
--- a/test/builtins/divmod.sail
+++ b/test/builtins/divmod.sail
@@ -5,39 +5,67 @@ $include <arith.sail>
$include <smt.sail>
function main (() : unit) -> unit = {
- assert(ediv_int( 7 , 5) == 1);
- assert(ediv_int( 7 , -5) == -1);
- assert(ediv_int(-7 , 5) == -2);
- assert(ediv_int(-7 , -5) == 2);
- assert(ediv_int( 12 , 3) == 4);
- assert(ediv_int( 12 , -3) == -4);
- assert(ediv_int(-12 , 3) == -4);
- assert(ediv_int(-12 , -3) == 4);
+ assert(ediv_int(7, 5) == 1);
+ assert(ediv_int(7, -5) == -1);
+ assert(ediv_int(-7, 5) == -2);
+ assert(ediv_int(-7, -5) == 2);
+ assert(ediv_int(12, 3) == 4);
+ assert(ediv_int(12, -3) == -4);
+ assert(ediv_int(-12, 3) == -4);
+ assert(ediv_int(-12, -3) == 4);
- assert(emod_int( 7 , 5) == 2);
- assert(emod_int( 7 , -5) == 2);
- assert(emod_int(-7 , 5) == 3);
- assert(emod_int(-7 , -5) == 3);
- assert(emod_int( 12 , 3) == 0);
- assert(emod_int( 12 , -3) == 0);
- assert(emod_int(-12 , 3) == 0);
- assert(emod_int(-12 , -3) == 0);
+ assert(emod_int(7, 5) == 2);
+ assert(emod_int(7, -5) == 2);
+ assert(emod_int(-7, 5) == 3);
+ assert(emod_int(-7, -5) == 3);
+ assert(emod_int(12, 3) == 0);
+ assert(emod_int(12, -3) == 0);
+ assert(emod_int(-12, 3) == 0);
+ assert(emod_int(-12, -3) == 0);
- assert(tdiv_int( 7 , 5) == 1);
- assert(tdiv_int( 7 , -5) == -1);
- assert(tdiv_int(-7 , 5) == -1);
- assert(tdiv_int(-7 , -5) == 1);
- assert(tdiv_int( 12 , 3) == 4);
- assert(tdiv_int( 12 , -3) == -4);
- assert(tdiv_int(-12 , 3) == -4);
- assert(tdiv_int(-12 , -3) == 4);
+ assert(tdiv_int(7, 5) == 1);
+ assert(tdiv_int(7, -5) == -1);
+ assert(tdiv_int(-7, 5) == -1);
+ assert(tdiv_int(-7, -5) == 1);
+ assert(tdiv_int(12, 3) == 4);
+ assert(tdiv_int(12, -3) == -4);
+ assert(tdiv_int(-12, 3) == -4);
+ assert(tdiv_int(-12, -3) == 4);
- assert(tmod_int( 7 , 5) == 2);
- assert(tmod_int( 7 , -5) == 2);
- assert(tmod_int(-7 , 5) == -2);
- assert(tmod_int(-7 , -5) == -2);
- assert(tmod_int( 12 , 3) == 0);
- assert(tmod_int( 12 , -3) == 0);
- assert(tmod_int(-12 , 3) == 0);
- assert(tmod_int(-12 , -3) == 0);
+ assert(tmod_int(7, 5) == 2);
+ assert(tmod_int(7, -5) == 2);
+ assert(tmod_int(-7, 5) == -2);
+ assert(tmod_int(-7, -5) == -2);
+ assert(tmod_int(12, 3) == 0);
+ assert(tmod_int(12, -3) == 0);
+ assert(tmod_int(-12, 3) == 0);
+ assert(tmod_int(-12, -3) == 0);
+
+ assert(fdiv_int(7, 5) == 1);
+ assert(fdiv_int(7, -5) == -2);
+ assert(fdiv_int(-7, 5) == -2);
+ assert(fdiv_int(-7, -5) == 1);
+ assert(fdiv_int(12, 3) == 4);
+ assert(fdiv_int(12, -3) == -4);
+ assert(fdiv_int(-12, 3) == -4);
+ assert(fdiv_int(-12, -3) == 4);
+
+ assert(fmod_int(7, 5) == 2);
+ assert(fmod_int(7, -5) == -3);
+ assert(fmod_int(-7, 5) == 3);
+ assert(fmod_int(-7, -5) == -2);
+ assert(fmod_int(12, 3) == 0);
+ assert(fmod_int(12, -3) == 0);
+ assert(fmod_int(-12, 3) == 0);
+ assert(fmod_int(-12, -3) == 0);
+
+ assert(fdiv_int(5, 2) == 2);
+ assert(fdiv_int(-5, -2) == 2);
+ assert(fdiv_int(5, -2) == -3);
+ assert(fdiv_int(-5, 2) == -3);
+
+ assert(tdiv_int(5, 2) == 2);
+ assert(tdiv_int(-5, -2) == 2);
+ assert(tdiv_int(5, -2) == -2);
+ assert(tdiv_int(-5, 2) == -2);
} \ No newline at end of file
diff --git a/test/c/cheri_capreg.sail b/test/c/cheri_capreg.sail
index a9480ab6..51001ec3 100644
--- a/test/c/cheri_capreg.sail
+++ b/test/c/cheri_capreg.sail
@@ -63,29 +63,6 @@ struct CapStruct = {
length : bits(64),
}
-let null_cap : CapStruct = struct {
- tag = false,
- padding = zeros(),
- otype = zeros(),
- uperms = zeros(),
- perm_reserved11_14 = zeros(),
- access_system_regs = false,
- permit_unseal = false,
- permit_ccall = false,
- permit_seal = false,
- permit_store_local_cap = false,
- permit_store_cap = false,
- permit_load_cap = false,
- permit_store = false,
- permit_load = false,
- permit_execute = false,
- global = false,
- sealed = false,
- address = zeros(),
- base = zeros(),
- length = 0xffffffffffffffff
-}
-
let default_cap : CapStruct = struct {
tag = true,
padding = zeros(),
diff --git a/test/c/exception.expect b/test/c/exception.expect
index 79d97c6a..faab808f 100644
--- a/test/c/exception.expect
+++ b/test/c/exception.expect
@@ -4,3 +4,5 @@ Caught Estring
test
2nd try Caught Epair
x = 33
+in g()
+Fall through OK
diff --git a/test/c/exception.sail b/test/c/exception.sail
index 4e74fcae..251852c9 100644
--- a/test/c/exception.sail
+++ b/test/c/exception.sail
@@ -47,6 +47,19 @@ function main () = {
},
_ => ()
};
+ try throw(Eunknown()) catch {
+ _ => try let _ = g() in () catch {
+ _ => print("caught old exception")
+ }
+ };
+ try
+ try throw Eunknown() catch {
+ Estring(_) => ()
+ }
+ catch {
+ Eunknown() => print("Fall through OK"),
+ _ => ()
+ };
f();
()
-} \ No newline at end of file
+}
diff --git a/test/c/execute.isail b/test/c/execute.isail
index 018dd92c..f4b5ea0f 100644
--- a/test/c/execute.isail
+++ b/test/c/execute.isail
@@ -1,4 +1,3 @@
-:rewrites interpreter
initialize_registers()
:run
main()
diff --git a/test/c/run_tests.py b/test/c/run_tests.py
index c9474614..28a4d28d 100755
--- a/test/c/run_tests.py
+++ b/test/c/run_tests.py
@@ -26,6 +26,28 @@ def test_c(name, c_opts, sail_opts, valgrind):
step('diff {}.result {}.expect'.format(basename, basename))
if valgrind:
step("valgrind --leak-check=full --track-origins=yes --errors-for-leak-kinds=all --error-exitcode=2 ./{}.bin".format(basename), expected_status = 1 if basename == "exception" else 0)
+ step('rm {}.c {}.bin {}.result'.format(basename, basename, basename))
+ print '{} {}{}{}'.format(filename, color.PASS, 'ok', color.END)
+ sys.exit()
+ results.collect(tests)
+ return results.finish()
+
+def test_c2(name, c_opts, sail_opts, valgrind):
+ banner('Testing {} with C (-c2) options: {} Sail options: {} valgrind: {}'.format(name, c_opts, sail_opts, valgrind))
+ results = Results(name)
+ for filenames in chunks(os.listdir('.'), parallel()):
+ tests = {}
+ for filename in filenames:
+ basename = os.path.splitext(os.path.basename(filename))[0]
+ tests[filename] = os.fork()
+ if tests[filename] == 0:
+ step('sail -no_warn -c2 {} {} -o {}'.format(sail_opts, filename, basename))
+ step('gcc {} {}.c {}_emu.c {}/lib/*.c -lgmp -lz -I {}/lib -o {}'.format(c_opts, basename, basename, sail_dir, sail_dir, basename))
+ step('./{} 1> {}.result'.format(basename, basename), expected_status = 1 if basename == "exception" else 0)
+ step('diff {}.result {}.expect'.format(basename, basename))
+ if valgrind:
+ step("valgrind --leak-check=full --track-origins=yes --errors-for-leak-kinds=all --error-exitcode=2 ./{}".format(basename), expected_status = 1 if basename == "exception" else 0)
+ step('rm {}.c {} {}.result'.format(basename, basename, basename))
print '{} {}{}{}'.format(filename, color.PASS, 'ok', color.END)
sys.exit()
results.collect(tests)
@@ -42,6 +64,7 @@ def test_interpreter(name):
if tests[filename] == 0:
step('sail -undefined_gen -is execute.isail -iout {}.iresult {}'.format(basename, filename))
step('diff {}.iresult {}.expect'.format(basename, basename))
+ step('rm {}.iresult'.format(basename))
print '{} {}{}{}'.format(filename, color.PASS, 'ok', color.END)
sys.exit()
results.collect(tests)
@@ -59,6 +82,8 @@ def test_ocaml(name):
step('sail -ocaml -ocaml_build_dir _sbuild_{} -o {}_ocaml {}'.format(basename, basename, filename))
step('./{}_ocaml 1> {}.oresult'.format(basename, basename), expected_status = 1 if basename == "exception" else 0)
step('diff {}.oresult {}.expect'.format(basename, basename))
+ step('rm -r _sbuild_{}'.format(basename))
+ step('rm {}.oresult {}_ocaml'.format(basename, basename))
print '{} {}{}{}'.format(filename, color.PASS, 'ok', color.END)
sys.exit()
results.collect(tests)
@@ -90,6 +115,7 @@ def test_lem(name):
xml = '<testsuites>\n'
+xml += test_c2('unoptimized C', '', '', True)
xml += test_c('unoptimized C', '', '', True)
xml += test_c('optimized C', '-O2', '-O', True)
xml += test_c('constant folding', '', '-Oconstant_fold', True)
diff --git a/test/typecheck/pass/Replicate/v2.expect b/test/typecheck/pass/Replicate/v2.expect
index 8045141f..6605aba4 100644
--- a/test/typecheck/pass/Replicate/v2.expect
+++ b/test/typecheck/pass/Replicate/v2.expect
@@ -2,7 +2,7 @@ Type error:
[Replicate/v2.sail]:13:4-30
13 | replicate_bits(x, 'N / 'M)
 | ^------------------------^
-  | Tried performing type coercion from {('ex194# : Int), true. bitvector(('M * 'ex194#), dec)} to bitvector('N, dec) on replicate_bits(x, tdiv_int(__id(N), bitvector_length(x)))
+  | Tried performing type coercion from {('ex215# : Int), true. bitvector(('M * 'ex215#), dec)} to bitvector('N, dec) on replicate_bits(x, tdiv_int(__id(N), bitvector_length(x)))
 | Coercion failed because:
 | Mismatched argument types in subtype check
 |
diff --git a/test/typecheck/pass/constant_nexp/v2.expect b/test/typecheck/pass/constant_nexp/v2.expect
index 7c0e8093..75a7f380 100644
--- a/test/typecheck/pass/constant_nexp/v2.expect
+++ b/test/typecheck/pass/constant_nexp/v2.expect
@@ -3,6 +3,6 @@ Type error:
12 | let _ = czeros(sizeof('n - 10) + 20);
 | ^--------------------------^
 | Could not resolve quantifiers for czeros
-  | * is_constant(('fv50#n : Int))
+  | * is_constant(('fv130#n : Int))
 | * (('n - 10) + 20) >= 0
 |
diff --git a/test/typecheck/pass/existential_ast/v3.expect b/test/typecheck/pass/existential_ast/v3.expect
index 8d061933..80ebe927 100644
--- a/test/typecheck/pass/existential_ast/v3.expect
+++ b/test/typecheck/pass/existential_ast/v3.expect
@@ -3,5 +3,5 @@ Type error:
26 | Some(Ctor1(a, x, c))
 | ^------------^
 | Could not resolve quantifiers for Ctor1
-  | * datasize('ex276#)
+  | * datasize('ex297#)
 |
diff --git a/test/typecheck/pass/existential_ast3/v1.expect b/test/typecheck/pass/existential_ast3/v1.expect
index b8427446..4e65ab38 100644
--- a/test/typecheck/pass/existential_ast3/v1.expect
+++ b/test/typecheck/pass/existential_ast3/v1.expect
@@ -4,17 +4,17 @@ Type error:
 | ^---------------^
 | Tried performing type coercion from (int(33), range(0, (2 ^ 5 - 1))) to {('d : Int) ('n : Int), (datasize('d) & (0 <= 'n & 'n < 'd)). (int('d), int('n))} on (33, unsigned(a))
 | Coercion failed because:
-  | (int(33), int('ex232#)) is not a subtype of (int('ex227#), int('ex228#))
+  | (int(33), int('ex253#)) is not a subtype of (int('ex248#), int('ex249#))
 | [existential_ast3/v1.sail]:17:48-65
 | 17 | if b == 0b0 then (64, unsigned(b @ a)) else (33, unsigned(a));
 |  | ^---------------^
-  |  | 'ex227# bound here
+  |  | 'ex248# bound here
 | [existential_ast3/v1.sail]:17:48-65
 | 17 | if b == 0b0 then (64, unsigned(b @ a)) else (33, unsigned(a));
 |  | ^---------------^
-  |  | 'ex228# bound here
+  |  | 'ex249# bound here
 | [existential_ast3/v1.sail]:17:48-65
 | 17 | if b == 0b0 then (64, unsigned(b @ a)) else (33, unsigned(a));
 |  | ^---------------^
-  |  | 'ex232# bound here
+  |  | 'ex253# bound here
 |
diff --git a/test/typecheck/pass/existential_ast3/v2.expect b/test/typecheck/pass/existential_ast3/v2.expect
index 4df0b3aa..04d53f11 100644
--- a/test/typecheck/pass/existential_ast3/v2.expect
+++ b/test/typecheck/pass/existential_ast3/v2.expect
@@ -4,17 +4,17 @@ Type error:
 | ^---------------^
 | Tried performing type coercion from (int(31), range(0, (2 ^ 5 - 1))) to {('d : Int) ('n : Int), (datasize('d) & (0 <= 'n & 'n < 'd)). (int('d), int('n))} on (31, unsigned(a))
 | Coercion failed because:
-  | (int(31), int('ex232#)) is not a subtype of (int('ex227#), int('ex228#))
+  | (int(31), int('ex253#)) is not a subtype of (int('ex248#), int('ex249#))
 | [existential_ast3/v2.sail]:17:48-65
 | 17 | if b == 0b0 then (64, unsigned(b @ a)) else (31, unsigned(a));
 |  | ^---------------^
-  |  | 'ex227# bound here
+  |  | 'ex248# bound here
 | [existential_ast3/v2.sail]:17:48-65
 | 17 | if b == 0b0 then (64, unsigned(b @ a)) else (31, unsigned(a));
 |  | ^---------------^
-  |  | 'ex228# bound here
+  |  | 'ex249# bound here
 | [existential_ast3/v2.sail]:17:48-65
 | 17 | if b == 0b0 then (64, unsigned(b @ a)) else (31, unsigned(a));
 |  | ^---------------^
-  |  | 'ex232# bound here
+  |  | 'ex253# bound here
 |
diff --git a/test/typecheck/pass/existential_ast3/v3.expect b/test/typecheck/pass/existential_ast3/v3.expect
index 61a664c5..cae93129 100644
--- a/test/typecheck/pass/existential_ast3/v3.expect
+++ b/test/typecheck/pass/existential_ast3/v3.expect
@@ -3,5 +3,5 @@ Type error:
25 | Some(Ctor(64, unsigned(0b0 @ b @ a)))
 | ^-----------------------------^
 | Could not resolve quantifiers for Ctor
-  | * (datasize(64) & (0 <= 'ex271# & 'ex271# < 64))
+  | * (datasize(64) & (0 <= 'ex292# & 'ex292# < 64))
 |
diff --git a/test/typecheck/pass/if_infer/v1.expect b/test/typecheck/pass/if_infer/v1.expect
index e6ce41c6..9810cfd4 100644
--- a/test/typecheck/pass/if_infer/v1.expect
+++ b/test/typecheck/pass/if_infer/v1.expect
@@ -5,7 +5,7 @@ Type error:
 | No overloading for vector_access, tried:
 | * bitvector_access
 | Could not resolve quantifiers for bitvector_access
-  | * (0 <= 'ex188# & 'ex188# < 3)
+  | * (0 <= 'ex209# & 'ex209# < 3)
 | * plain_vector_access
 | No valid casts resulted in unification
 |
diff --git a/test/typecheck/pass/if_infer/v2.expect b/test/typecheck/pass/if_infer/v2.expect
index 7d796f18..707d2217 100644
--- a/test/typecheck/pass/if_infer/v2.expect
+++ b/test/typecheck/pass/if_infer/v2.expect
@@ -5,7 +5,7 @@ Type error:
 | No overloading for vector_access, tried:
 | * bitvector_access
 | Could not resolve quantifiers for bitvector_access
-  | * (0 <= 'ex188# & 'ex188# < 4)
+  | * (0 <= 'ex209# & 'ex209# < 4)
 | * plain_vector_access
 | No valid casts resulted in unification
 |
diff --git a/test/typecheck/pass/reg_32_64/v1.expect b/test/typecheck/pass/reg_32_64/v1.expect
index eb398991..4c80e83d 100644
--- a/test/typecheck/pass/reg_32_64/v1.expect
+++ b/test/typecheck/pass/reg_32_64/v1.expect
@@ -1,7 +1,7 @@
Type error:
-[reg_32_64/v1.sail]:35:9-28
+[reg_32_64/v1.sail]:35:2-6
35 | R(0) = 0xCAFE_CAFE_0000_00;
-  | ^-----------------^
+  | ^--^
 | No overloading for R, tried:
 | * set_R
 | Could not resolve quantifiers for set_R