From 5bee0e73056a0a5bb7128aaa20819a2be5f8a4e5 Mon Sep 17 00:00:00 2001
From: pfdietz <pfdietz@localhost>
Date: Thu, 4 Sep 2003 03:02:22 +0000
Subject: [PATCH] Check that SORT 'works' even when the comparison function is
 not a total order.

---
 ansi-tests/sort.lsp | 32 ++++++++++++++++++++++++++++++++
 1 file changed, 32 insertions(+)

diff --git a/ansi-tests/sort.lsp b/ansi-tests/sort.lsp
index 1eabcac7..4e67a228 100644
--- a/ansi-tests/sort.lsp
+++ b/ansi-tests/sort.lsp
@@ -21,6 +21,24 @@
     (sort a #'<))
   (1 2 3 4 5))
 
+;;;
+;;; Confirm that sort only permutes the sequence, even when given
+;;; a comparison function that does not define a total order.
+;;;
+(deftest sort-list.4
+  (loop
+   repeat 100
+   always
+   (let ((a (list 1 2 3 4 5 6 7 8 9 0))
+	 (cmp (make-array '(10 10))))
+     (loop for i from 0 to 9 do
+	   (loop for j from 0 to 9 do
+		 (setf (aref cmp i j) (zerop (logand (random 1024) 512)))))
+     (setq a (sort a #'(lambda (i j) (aref cmp i j))))
+     (and (eqlt (length a) 10)
+	  (equalt (sort a #'<) '(0 1 2 3 4 5 6 7 8 9)))))
+  t)	
+
 (deftest sort-vector.1
   (let ((a (copy-seq #(1 4 2 5 3))))
     (sort a #'<))
@@ -43,6 +61,20 @@
     (sort a #'<))
   #(10 20 30 40 50))
 
+(deftest sort-vector.5
+  (loop
+   repeat 100
+   always
+   (let ((a (vector 1 2 3 4 5 6 7 8 9 0))
+	 (cmp (make-array '(10 10))))
+     (loop for i from 0 to 9 do
+	   (loop for j from 0 to 9 do
+		 (setf (aref cmp i j) (zerop (logand (random 1024) 512)))))
+     (setq a (sort a #'(lambda (i j) (aref cmp i j))))
+     (and (eqlt (length a) 10)
+	  (equalpt (sort a #'<) #(0 1 2 3 4 5 6 7 8 9)))))
+  t)	
+
 (deftest sort-bit-vector.1
   (let ((a (copy-seq #*10011101)))
     (sort a #'<))
-- 
GitLab