summaryrefslogtreecommitdiff
path: root/src/test/lib/tests/test_add_signed.sail
diff options
context:
space:
mode:
authorAlasdair Armstrong2017-07-26 14:12:09 +0100
committerAlasdair Armstrong2017-07-26 14:12:09 +0100
commit678ab0e23ba4a8d95010df2bd2467dae7d544e29 (patch)
tree0b2e02773327b9483f24b2e1ad46b7235ec9633e /src/test/lib/tests/test_add_signed.sail
parent26e59493cde0ffbf1868426fe3bec158f2dbaad0 (diff)
parent18cf235fad35a0e06e26ea91ee0e1c673febddb8 (diff)
Merge remote-tracking branch 'origin/master' into sail_new_tc
Diffstat (limited to 'src/test/lib/tests/test_add_signed.sail')
-rw-r--r--src/test/lib/tests/test_add_signed.sail27
1 files changed, 27 insertions, 0 deletions
diff --git a/src/test/lib/tests/test_add_signed.sail b/src/test/lib/tests/test_add_signed.sail
new file mode 100644
index 00000000..a723389e
--- /dev/null
+++ b/src/test/lib/tests/test_add_signed.sail
@@ -0,0 +1,27 @@
+function unit test() = {
+ test_assert ("adds", 1 +_s 1 == 2); (* same as unsigned *)
+ test_assert ("adds_vec", ((bit[4])(0x1 +_s 0x1)) == 0x2); (* same as unsigned *)
+ test_assert ("adds_vec_ov", ((bit[4])(0xf +_s 0x1)) == 0x0); (* same as unsigned *)
+
+ (* XXX would be good to restrict range type *)
+ test_assert ("adds_vec_vec_range_pp", ((int)(0x1 +_s 0x1)) == 2);
+ test_assert ("adds_vec_vec_range_np", ((int)(0xa +_s 0x1)) == (-5));
+ test_assert ("adds_vec_vec_range_pn", ((int)(0x3 +_s 0xe)) == 1);
+ test_assert ("adds_vec_vec_range_nn", ((int)(0x8 +_s 0x8)) == (-16));
+
+ test_assert ("adds_vec_range", ((bit[4])(0xe +_s 1)) == 0xf);
+ test_assert ("adds_vec_range_range", ((int)(0xe +_s 1)) == (-1));
+ (* returns (result, signed overflow, carry out)*)
+ test_assert ("adds_overflow_vec0", (((bit[4], bit, bit))(0x1 +_s 0x1)) == (0x2, false, false));
+ test_assert ("adds_overflow_vec1", (((bit[4], bit, bit))(0xf +_s 0x1)) == (0x0, false, true));
+ test_assert ("adds_overflow_vec2", (((bit[4], bit, bit))(0x7 +_s 0x1)) == (0x8, true, false));
+ test_assert ("adds_overflow_vec3", (((bit[4], bit, bit))(0x8 +_s 0x8)) == (0x0, true, true));
+
+ test_assert ("adds_vec_range_range", ((int)(0xe +_s 1)) == (-1));
+ test_assert ("adds_range_vec", ((bit[4])(1 +_s 0xe)) == 0xf);
+ test_assert ("adds_range_vec_range", ((int)(1 +_s 0xe)) == -1);
+ test_assert ("adds_vec_bit", ((bit[4])(0xe +_s bitone)) == 0xf);
+ (* not defined on either model...
+ test_assert ("adds_bit_vec", ((bit[4])(bitone +_s 0xe)) == 0xf);*)
+}
+