0.7.12.36:
[sbcl.git] / contrib / sb-rotate-byte / rotate-byte-tests.lisp
1 (in-package "SB-ROTATE-BYTE")
2
3 (assert (= (rotate-byte 3 (byte 32 0) 3) 24))
4 (assert (= (rotate-byte 3 (byte 16 0) 3) 24))
5 (assert (= (rotate-byte 3 (byte 2 0) 3) 3))
6 (assert (= (rotate-byte 3 (byte 5 5) 3) 3))
7 (assert (= (rotate-byte 6 (byte 8 0) -3) -129))
8
9 (flet ((opaque-identity (x) x))
10   (declare (notinline opaque-identity))
11   (assert (= (rotate-byte 3 (opaque-identity (byte 32 0)) 3) 24))
12   (assert (= (rotate-byte 3 (opaque-identity (byte 16 0)) 3) 24))
13   (assert (= (rotate-byte 3 (opaque-identity (byte 2 0)) 3) 3))
14   (assert (= (rotate-byte 3 (opaque-identity (byte 5 5)) 3) 3))
15   (assert (= (rotate-byte 6 (opaque-identity (byte 8 0)) -3) -129)))
16
17 (defun pfixnum/c (integer)
18   (declare (type (unsigned-byte 29) integer))
19   (rotate-byte 5 (byte 32 0) integer))
20
21 (assert (= (pfixnum/c 5) 160))
22 (assert (= (pfixnum/c 1) 32))
23 (assert (= (pfixnum/c (ash 1 26)) (ash 1 31)))
24 (assert (= (pfixnum/c (ash 1 27)) 1))
25
26 (defun pfixnum (count integer)
27   (declare (type (unsigned-byte 29) integer)
28            (type (integer -31 31) count))
29   (rotate-byte count (byte 32 0) integer))
30
31 (assert (= (pfixnum 5 5) 160))
32 (assert (= (pfixnum 5 1) 32))
33 (assert (= (pfixnum 5 (ash 1 26)) (ash 1 31)))
34 (assert (= (pfixnum 5 (ash 1 27)) 1))
35
36 (defun ub32/c (integer)
37   (declare (type (unsigned-byte 32) integer))
38   (rotate-byte 5 (byte 32 0) integer))
39
40 (assert (= (ub32/c 5) 160))
41 (assert (= (ub32/c 1) 32))
42 (assert (= (ub32/c (ash 1 26)) (ash 1 31)))
43 (assert (= (ub32/c (ash 1 27)) 1))
44
45 (defun ub32 (count integer)
46   (declare (type (unsigned-byte 32) integer)
47            (type (integer -31 31) count))
48   (rotate-byte count (byte 32 0) integer))
49
50 (assert (= (ub32 5 5) 160))
51 (assert (= (ub32 5 1) 32))
52 (assert (= (ub32 5 (ash 1 26)) (ash 1 31)))
53 (assert (= (ub32 5 (ash 1 27)) 1))