/usr/lib/sbcl/sb-rotate-byte/rotate-byte-tests.lisp is in sbcl 2:1.0.55.0-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 | (in-package "SB-ROTATE-BYTE")
;;; Ensure we don't bug out with an identity rotation.
(assert (= (rotate-byte 0 (byte 32 0) 3) 3))
(assert (= (rotate-byte 3 (byte 32 0) 3) 24))
(assert (= (rotate-byte 3 (byte 16 0) 3) 24))
(assert (= (rotate-byte 3 (byte 2 0) 3) 3))
(assert (= (rotate-byte 3 (byte 5 5) 3) 3))
(assert (= (rotate-byte 6 (byte 8 0) -3) -129))
(flet ((opaque-identity (x) x))
(declare (notinline opaque-identity))
(assert (= (rotate-byte 3 (opaque-identity (byte 32 0)) 3) 24))
(assert (= (rotate-byte 3 (opaque-identity (byte 16 0)) 3) 24))
(assert (= (rotate-byte 3 (opaque-identity (byte 2 0)) 3) 3))
(assert (= (rotate-byte 3 (opaque-identity (byte 5 5)) 3) 3))
(assert (= (rotate-byte 6 (opaque-identity (byte 8 0)) -3) -129)))
(defun pfixnum/c (integer)
(declare (type (unsigned-byte 29) integer))
(rotate-byte 5 (byte 32 0) integer))
(assert (= (pfixnum/c 5) 160))
(assert (= (pfixnum/c 1) 32))
(assert (= (pfixnum/c (ash 1 26)) (ash 1 31)))
(assert (= (pfixnum/c (ash 1 27)) 1))
(defun pfixnum (count integer)
(declare (type (unsigned-byte 29) integer)
(type (integer -31 31) count))
(rotate-byte count (byte 32 0) integer))
(assert (= (pfixnum 5 5) 160))
(assert (= (pfixnum 5 1) 32))
(assert (= (pfixnum 5 (ash 1 26)) (ash 1 31)))
(assert (= (pfixnum 5 (ash 1 27)) 1))
(defun ub32/c (integer)
(declare (type (unsigned-byte 32) integer))
(rotate-byte 5 (byte 32 0) integer))
(assert (= (ub32/c 5) 160))
(assert (= (ub32/c 1) 32))
(assert (= (ub32/c (ash 1 26)) (ash 1 31)))
(assert (= (ub32/c (ash 1 27)) 1))
(defun ub32 (count integer)
(declare (type (unsigned-byte 32) integer)
(type (integer -31 31) count))
(rotate-byte count (byte 32 0) integer))
(assert (= (ub32 5 5) 160))
(assert (= (ub32 5 1) 32))
(assert (= (ub32 5 (ash 1 26)) (ash 1 31)))
(assert (= (ub32 5 (ash 1 27)) 1))
;;; test with (contrived) register pressure on the x86 to ensure that the
;;; rotatee doesn't get clobbered by the count.
(defun ub32-reg-pressure (count integer)
(declare (type (unsigned-byte 32) integer)
(type (integer -31 31) count))
(rotate-byte count (byte 32 0) (ldb (byte 32 0) (+ (* 67 count)
integer))))
(assert (= (ub32-reg-pressure 1 5) 144))
(assert (= (ub32-reg-pressure 5 5) 10880))
(assert (= (ub32-reg-pressure 5 (ash 1 26)) 2147494368))
(assert (= (ub32-reg-pressure 5 (ash 1 27)) 10721))
(defun ub64/c (integer)
(declare (type (unsigned-byte 64) integer))
(rotate-byte 6 (byte 64 0) integer))
(defun ub64/-c (integer)
(declare (type (unsigned-byte 64) integer))
(rotate-byte -6 (byte 64 0) integer))
(assert (= (ub64/-c 320) 5))
(assert (= (ub64/-c 64) 1))
(assert (= (ub64/-c (ash 1 63)) (ash 1 57)))
(assert (= (ub64/-c 1) (ash 1 58)))
(defun ub64 (count integer)
(declare (type (unsigned-byte 64) integer)
(type (integer -63 63) count))
(rotate-byte count (byte 64 0) integer))
(assert (= (ub64 6 5) 320))
(assert (= (ub64 6 1) 64))
(assert (= (ub64 6 (ash 1 57)) (ash 1 63)))
(assert (= (ub64 6 (ash 1 58)) 1))
|