summaryrefslogblamecommitdiffstats
path: root/tests/signness
blob: 8c29fe4df048846fd7e0844331fbc1b24a89015f (plain) (tree)







































































































































































































































































































                                                                                             
# -*- 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