1.0.6.39: COMPUTE-DISCRIMINATING-FUNCTION micro-optimization
[sbcl.git] / tests / array.pure.lisp
index a44193b..fe9c4f0 100644 (file)
                                  collect (logand 1 (funcall lf (aref v1 i) (aref v2 i))))
                            'bit-vector)
           do (assert (bit-vector-equal r1 r2)))))
+
+;;; CLHS, ADJUST-ARRAY: An error of type error is signaled if
+;;; fill-pointer is supplied and non-nil but array has no fill pointer.
+(assert (eq :good
+            (handler-case
+                (let ((array (make-array 12)))
+                  (assert (not (array-has-fill-pointer-p array)))
+                  (adjust-array array 12 :fill-pointer t)
+                  array)
+              (type-error ()
+                :good))))
+
+;;; SIMPLE-VECTOR-COMPARE-AND-SWAP
+
+(let ((v (vector 1)))
+  ;; basics
+  (assert (eql 1 (sb-kernel:simple-vector-compare-and-swap v 0 1 2)))
+  (assert (eql 2 (sb-kernel:simple-vector-compare-and-swap v 0 1 3)))
+  (assert (eql 2 (svref v 0)))
+  ;; bounds
+  (multiple-value-bind (res err)
+      (ignore-errors (sb-kernel:simple-vector-compare-and-swap v -1 1 2))
+    (assert (not res))
+    (assert (typep err 'type-error)))
+  (multiple-value-bind (res err)
+      (ignore-errors (sb-kernel:simple-vector-compare-and-swap v 1 1 2))
+    (assert (not res))
+    (assert (typep err 'type-error))))
+
+;; type of the first argument
+(multiple-value-bind (res err)
+    (ignore-errors (sb-kernel:simple-vector-compare-and-swap "foo" 1 1 2))
+    (assert (not res))
+    (assert (typep err 'type-error)))