summaryrefslogtreecommitdiffstats
path: root/tests/signness
diff options
context:
space:
mode:
authorMattias Andrée <maandree@kth.se>2023-12-16 12:40:10 +0100
committerMattias Andrée <maandree@kth.se>2023-12-16 12:40:10 +0100
commit683f205402a99cfc8cea46c83ce9b46a42616d42 (patch)
treef6ee1619454a6ec8b9e31770bbbc2abf36aae2fd /tests/signness
parentImprove portability (diff)
downloadlibsyscalls-683f205402a99cfc8cea46c83ce9b46a42616d42.tar.gz
libsyscalls-683f205402a99cfc8cea46c83ce9b46a42616d42.tar.bz2
libsyscalls-683f205402a99cfc8cea46c83ce9b46a42616d42.tar.xz
All kinds of stuff
Signed-off-by: Mattias Andrée <maandree@kth.se>
Diffstat (limited to 'tests/signness')
-rw-r--r--tests/signness296
1 files changed, 296 insertions, 0 deletions
diff --git a/tests/signness b/tests/signness
new file mode 100644
index 0000000..8c29fe4
--- /dev/null
+++ b/tests/signness
@@ -0,0 +1,296 @@
+# -*- sh -*-
+# See LICENSE file for copyright and license details.
+
+test $(parse-signed.tu 32767 32 0) = inval
+test $(make-signed.tu 32767 32 0) = inval
+
+check_signed () {
+ test $(parse-signed.tu $1 $2 $3) = $4
+ test $(make-signed.tu $1 $2 $4) = $3
+}
+
+ucheck_signed () {
+ check_signed "$@"
+ test $(make-signed.tu $1 $2 -$4) = $3
+}
+
+for sign in $(getnamelist SIGN); do
+ signn=$(getnum SIGN $sign)
+ if test $sign = UNDETERMINED; then
+ ucheck_signed $signn 1 0 0
+ ucheck_signed $signn 1 1 1
+ ucheck_signed $signn 2 0 0
+ ucheck_signed $signn 2 1 1
+ ucheck_signed $signn 2 2 2
+ ucheck_signed $signn 2 3 3
+ ucheck_signed $signn 4 4 4
+ ucheck_signed $signn 4 9 9
+ ucheck_signed $signn 4 A A
+ ucheck_signed $signn 4 C C
+ ucheck_signed $signn 4 F F
+ ucheck_signed $signn 7 00 00
+ ucheck_signed $signn 7 08 08
+ ucheck_signed $signn 7 70 70
+ ucheck_signed $signn 7 7F 7F
+ ucheck_signed $signn 8 00 00
+ ucheck_signed $signn 8 08 08
+ ucheck_signed $signn 8 80 80
+ ucheck_signed $signn 8 FF FF
+ ucheck_signed $signn 16 0001 0001
+ ucheck_signed $signn 16 0020 0020
+ ucheck_signed $signn 16 0300 0300
+ ucheck_signed $signn 16 4000 4000
+ ucheck_signed $signn 16 0008 0008
+ ucheck_signed $signn 16 0090 0090
+ ucheck_signed $signn 16 0A00 0A00
+ ucheck_signed $signn 16 B000 B000
+ ucheck_signed $signn 17 08100 08100
+ ucheck_signed $signn 17 00820 00820
+ ucheck_signed $signn 17 00083 00083
+ ucheck_signed $signn 17 04008 04008
+ ucheck_signed $signn 17 11008 11008
+ ucheck_signed $signn 17 10280 10280
+ ucheck_signed $signn 17 10830 10830
+ ucheck_signed $signn 17 18004 18004
+ ucheck_signed $signn 32 12345678 12345678
+ ucheck_signed $signn 32 9ABCDEF0 9ABCDEF0
+ ucheck_signed $signn 32 87654321 87654321
+ ucheck_signed $signn 32 0FEDCBA9 0FEDCBA9
+ ucheck_signed $signn 64 0123456789ABCDEF 0123456789ABCDEF
+ ucheck_signed $signn 64 123456789ABCDEF0 123456789ABCDEF0
+ ucheck_signed $signn 64 23456789ABCDEF01 23456789ABCDEF01
+ ucheck_signed $signn 64 3456789ABCDEF012 3456789ABCDEF012
+ ucheck_signed $signn 64 89ABCDEF01234567 89ABCDEF01234567
+ ucheck_signed $signn 64 9ABCDEF012345678 9ABCDEF012345678
+ ucheck_signed $signn 64 ABCDEF0123456789 ABCDEF0123456789
+ ucheck_signed $signn 64 BCDEF0123456789A BCDEF0123456789A
+ ucheck_signed $signn 64 0000000000000000 0000000000000000
+ ucheck_signed $signn 64 7FFFFFFFFFFFFFFF 7FFFFFFFFFFFFFFF
+ ucheck_signed $signn 64 8000000000000000 8000000000000000
+ ucheck_signed $signn 64 FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF
+
+ elif test $sign = SIGN_MAGNITUDE; then
+ check_signed $signn 1 0 0
+ check_signed $signn 1 1 -0
+ check_signed $signn 2 0 0
+ check_signed $signn 2 1 1
+ check_signed $signn 2 2 -0
+ check_signed $signn 2 3 -1
+ check_signed $signn 4 4 4
+ check_signed $signn 4 9 -1
+ check_signed $signn 4 A -2
+ check_signed $signn 4 C -4
+ check_signed $signn 4 F -7
+ check_signed $signn 7 00 00
+ check_signed $signn 7 08 08
+ check_signed $signn 7 70 -30
+ check_signed $signn 7 7F -3F
+ check_signed $signn 8 00 00
+ check_signed $signn 8 08 08
+ check_signed $signn 8 80 -00
+ check_signed $signn 8 FF -7F
+ check_signed $signn 16 0001 0001
+ check_signed $signn 16 0020 0020
+ check_signed $signn 16 0300 0300
+ check_signed $signn 16 4000 4000
+ check_signed $signn 16 0008 0008
+ check_signed $signn 16 0090 0090
+ check_signed $signn 16 0A00 0A00
+ check_signed $signn 16 B000 -3000
+ check_signed $signn 17 08100 08100
+ check_signed $signn 17 00820 00820
+ check_signed $signn 17 00083 00083
+ check_signed $signn 17 04008 04008
+ check_signed $signn 17 11008 -01008
+ check_signed $signn 17 10280 -00280
+ check_signed $signn 17 10830 -00830
+ check_signed $signn 17 18004 -08004
+ check_signed $signn 32 12345678 12345678
+ check_signed $signn 32 9ABCDEF0 -1ABCDEF0
+ check_signed $signn 32 87654321 -07654321
+ check_signed $signn 32 0FEDCBA9 0FEDCBA9
+ check_signed $signn 64 0123456789ABCDEF 0123456789ABCDEF
+ check_signed $signn 64 123456789ABCDEF0 123456789ABCDEF0
+ check_signed $signn 64 23456789ABCDEF01 23456789ABCDEF01
+ check_signed $signn 64 3456789ABCDEF012 3456789ABCDEF012
+ check_signed $signn 64 89ABCDEF01234567 -09ABCDEF01234567
+ check_signed $signn 64 9ABCDEF012345678 -1ABCDEF012345678
+ check_signed $signn 64 ABCDEF0123456789 -2BCDEF0123456789
+ check_signed $signn 64 BCDEF0123456789A -3CDEF0123456789A
+ check_signed $signn 64 0000000000000000 0000000000000000
+ check_signed $signn 64 7FFFFFFFFFFFFFFF 7FFFFFFFFFFFFFFF
+ check_signed $signn 64 8000000000000000 -0000000000000000
+ check_signed $signn 64 FFFFFFFFFFFFFFFF -7FFFFFFFFFFFFFFF
+
+ elif test $sign = ONES_COMPLEMENT; then
+ check_signed $signn 1 0 0
+ check_signed $signn 1 1 -0
+ check_signed $signn 2 0 0
+ check_signed $signn 2 1 1
+ check_signed $signn 2 2 -1
+ check_signed $signn 2 3 -0
+ check_signed $signn 4 4 4
+ check_signed $signn 4 9 -6
+ check_signed $signn 4 A -5
+ check_signed $signn 4 C -3
+ check_signed $signn 4 F -0
+ check_signed $signn 7 00 00
+ check_signed $signn 7 08 08
+ check_signed $signn 7 70 -0F
+ check_signed $signn 7 7F -00
+ check_signed $signn 8 00 00
+ check_signed $signn 8 08 08
+ check_signed $signn 8 80 -7F
+ check_signed $signn 8 FF -00
+ check_signed $signn 16 0001 0001
+ check_signed $signn 16 0020 0020
+ check_signed $signn 16 0300 0300
+ check_signed $signn 16 4000 4000
+ check_signed $signn 16 0008 0008
+ check_signed $signn 16 0090 0090
+ check_signed $signn 16 0A00 0A00
+ check_signed $signn 16 B000 -4FFF
+ check_signed $signn 17 08100 08100
+ check_signed $signn 17 00820 00820
+ check_signed $signn 17 00083 00083
+ check_signed $signn 17 04008 04008
+ check_signed $signn 17 11008 -0EFF7
+ check_signed $signn 17 10280 -0FD7F
+ check_signed $signn 17 10830 -0F7CF
+ check_signed $signn 17 18004 -07FFB
+ check_signed $signn 32 12345678 12345678
+ check_signed $signn 32 9ABCDEF0 -6543210F
+ check_signed $signn 32 87654321 -789ABCDE
+ check_signed $signn 32 0FEDCBA9 0FEDCBA9
+ check_signed $signn 64 0123456789ABCDEF 0123456789ABCDEF
+ check_signed $signn 64 123456789ABCDEF0 123456789ABCDEF0
+ check_signed $signn 64 23456789ABCDEF01 23456789ABCDEF01
+ check_signed $signn 64 3456789ABCDEF012 3456789ABCDEF012
+ check_signed $signn 64 89ABCDEF01234567 -76543210FEDCBA98
+ check_signed $signn 64 9ABCDEF012345678 -6543210FEDCBA987
+ check_signed $signn 64 ABCDEF0123456789 -543210FEDCBA9876
+ check_signed $signn 64 BCDEF0123456789A -43210FEDCBA98765
+ check_signed $signn 64 0000000000000000 0000000000000000
+ check_signed $signn 64 7FFFFFFFFFFFFFFF 7FFFFFFFFFFFFFFF
+ check_signed $signn 64 8000000000000000 -7FFFFFFFFFFFFFFF
+ check_signed $signn 64 FFFFFFFFFFFFFFFF -0000000000000000
+
+ elif test $sign = TWOS_COMPLEMENT; then
+ check_signed $signn 1 0 0
+ check_signed $signn 1 1 -1
+ check_signed $signn 2 0 0
+ check_signed $signn 2 1 1
+ check_signed $signn 2 2 -2
+ check_signed $signn 2 3 -1
+ check_signed $signn 4 4 4
+ check_signed $signn 4 9 -7
+ check_signed $signn 4 A -6
+ check_signed $signn 4 C -4
+ check_signed $signn 4 F -1
+ check_signed $signn 7 00 00
+ check_signed $signn 7 08 08
+ check_signed $signn 7 70 -10
+ check_signed $signn 7 7F -01
+ check_signed $signn 8 00 00
+ check_signed $signn 8 08 08
+ check_signed $signn 8 80 -80
+ check_signed $signn 8 FF -01
+ check_signed $signn 16 0001 0001
+ check_signed $signn 16 0020 0020
+ check_signed $signn 16 0300 0300
+ check_signed $signn 16 4000 4000
+ check_signed $signn 16 0008 0008
+ check_signed $signn 16 0090 0090
+ check_signed $signn 16 0A00 0A00
+ check_signed $signn 16 B000 -5000
+ check_signed $signn 17 08100 08100
+ check_signed $signn 17 00820 00820
+ check_signed $signn 17 00083 00083
+ check_signed $signn 17 04008 04008
+ check_signed $signn 17 11008 -0EFF8
+ check_signed $signn 17 10280 -0FD80
+ check_signed $signn 17 10830 -0F7D0
+ check_signed $signn 17 18004 -07FFC
+ check_signed $signn 32 12345678 12345678
+ check_signed $signn 32 9ABCDEF0 -65432110
+ check_signed $signn 32 87654321 -789ABCDF
+ check_signed $signn 32 0FEDCBA9 0FEDCBA9
+ check_signed $signn 64 0123456789ABCDEF 0123456789ABCDEF
+ check_signed $signn 64 123456789ABCDEF0 123456789ABCDEF0
+ check_signed $signn 64 23456789ABCDEF01 23456789ABCDEF01
+ check_signed $signn 64 3456789ABCDEF012 3456789ABCDEF012
+ check_signed $signn 64 89ABCDEF01234567 -76543210FEDCBA99
+ check_signed $signn 64 9ABCDEF012345678 -6543210FEDCBA988
+ check_signed $signn 64 ABCDEF0123456789 -543210FEDCBA9877
+ check_signed $signn 64 BCDEF0123456789A -43210FEDCBA98766
+ check_signed $signn 64 0000000000000000 0000000000000000
+ check_signed $signn 64 7FFFFFFFFFFFFFFF 7FFFFFFFFFFFFFFF
+ check_signed $signn 64 8000000000000000 -8000000000000000
+ check_signed $signn 64 FFFFFFFFFFFFFFFF -0000000000000001
+ test $(make-signed.tu $signn 1 -0) = 0
+ test $(make-signed.tu $signn 4 -0) = 0
+
+ elif test $sign = EXCESS_HALF; then
+ check_signed $signn 1 0 -1
+ check_signed $signn 1 1 0
+ check_signed $signn 2 0 -2
+ check_signed $signn 2 1 -1
+ check_signed $signn 2 2 0
+ check_signed $signn 2 3 1
+ check_signed $signn 4 4 -4
+ check_signed $signn 4 9 1
+ check_signed $signn 4 A 2
+ check_signed $signn 4 C 4
+ check_signed $signn 4 F 7
+ check_signed $signn 7 00 -40
+ check_signed $signn 7 08 -38
+ check_signed $signn 7 70 30
+ check_signed $signn 7 7F 3F
+ check_signed $signn 8 00 -80
+ check_signed $signn 8 08 -78
+ check_signed $signn 8 80 00
+ check_signed $signn 8 FF 7F
+ check_signed $signn 16 0001 -7FFF
+ check_signed $signn 16 0020 -7FE0
+ check_signed $signn 16 0300 -7D00
+ check_signed $signn 16 4000 -4000
+ check_signed $signn 16 0008 -7FF8
+ check_signed $signn 16 0090 -7F70
+ check_signed $signn 16 0A00 -7600
+ check_signed $signn 16 B000 3000
+ check_signed $signn 17 08100 -07F00
+ check_signed $signn 17 00820 -0F7E0
+ check_signed $signn 17 00083 -0FF7D
+ check_signed $signn 17 04008 -0BFF8
+ check_signed $signn 17 11008 01008
+ check_signed $signn 17 10280 00280
+ check_signed $signn 17 10830 00830
+ check_signed $signn 17 18004 08004
+ check_signed $signn 32 12345678 -6DCBA988
+ check_signed $signn 32 9ABCDEF0 1ABCDEF0
+ check_signed $signn 32 87654321 07654321
+ check_signed $signn 32 0FEDCBA9 -70123457
+ check_signed $signn 64 0123456789ABCDEF -7EDCBA9876543211
+ check_signed $signn 64 123456789ABCDEF0 -6DCBA98765432110
+ check_signed $signn 64 23456789ABCDEF01 -5CBA9876543210FF
+ check_signed $signn 64 3456789ABCDEF012 -4BA9876543210FEE
+ check_signed $signn 64 89ABCDEF01234567 09ABCDEF01234567
+ check_signed $signn 64 9ABCDEF012345678 1ABCDEF012345678
+ check_signed $signn 64 ABCDEF0123456789 2BCDEF0123456789
+ check_signed $signn 64 BCDEF0123456789A 3CDEF0123456789A
+ check_signed $signn 64 0000000000000000 -8000000000000000
+ check_signed $signn 64 7FFFFFFFFFFFFFFF -0000000000000001
+ check_signed $signn 64 8000000000000000 0000000000000000
+ check_signed $signn 64 FFFFFFFFFFFFFFFF 7FFFFFFFFFFFFFFF
+ test $(make-signed.tu $signn 1 -0) = 1
+ test $(make-signed.tu $signn 4 -0) = 8
+
+ else
+ printf 'Missing test for LIBSYSCALLS_SIGN_%s in tests/signness\n' "$sign" >&2
+ false
+ fi
+ test $(parse-signed.tu $signn 0 0) = inval
+ test $(parse-signed.tu $signn 32767 0) = inval
+ test $(make-signed.tu $signn 0 0) = inval
+ test $(make-signed.tu $signn 32767 0) = inval
+done