aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew G Cohen2022-03-18 21:21:29 +0800
committerAndrew G Cohen2022-03-18 21:21:29 +0800
commit186ec2f8d828559da3d53db9122a0be0848c03c3 (patch)
treee4daf805fdbaa55df3a8b90d7e2cc877398ff76a
parent43a339fe10df3952a5f1749403d7b8148554008a (diff)
downloademacs-186ec2f8d828559da3d53db9122a0be0848c03c3.tar.gz
emacs-186ec2f8d828559da3d53db9122a0be0848c03c3.zip
Add another sorting unit test
* test/src/fns-tests.el (fns-tests-sort): Check for corruption should garbage-collection occur during sorting.
-rw-r--r--test/src/fns-tests.el28
1 files changed, 26 insertions, 2 deletions
diff --git a/test/src/fns-tests.el b/test/src/fns-tests.el
index 2623b4c1b93..6e8f1a1da9b 100644
--- a/test/src/fns-tests.el
+++ b/test/src/fns-tests.el
@@ -219,7 +219,7 @@
219 (should (equal 219 (should (equal
220 (sort (append (make-vector 100 1) nil) (lambda (x y) (> x y))) 220 (sort (append (make-vector 100 1) nil) (lambda (x y) (> x y)))
221 (append (make-vector 100 1) nil))) 221 (append (make-vector 100 1) nil)))
222 ;; sort a long list and vector with every pair reversed. 222 ;; Sort a long list and vector with every pair reversed.
223 (let ((vec (make-vector 100000 nil)) 223 (let ((vec (make-vector 100000 nil))
224 (logxor-vec (make-vector 100000 nil))) 224 (logxor-vec (make-vector 100000 nil)))
225 (dotimes (i 100000) 225 (dotimes (i 100000)
@@ -231,7 +231,7 @@
231 (should (equal 231 (should (equal
232 (sort (append logxor-vec nil) (lambda (x y) (< x y))) 232 (sort (append logxor-vec nil) (lambda (x y) (< x y)))
233 (append vec nil)))) 233 (append vec nil))))
234 ;; sort a list and vector with seven swaps 234 ;; Sort a list and vector with seven swaps.
235 (let ((vec (make-vector 100 nil)) 235 (let ((vec (make-vector 100 nil))
236 (swap-vec (make-vector 100 nil))) 236 (swap-vec (make-vector 100 nil)))
237 (dotimes (i 100) 237 (dotimes (i 100)
@@ -249,6 +249,30 @@
249 (should (equal 249 (should (equal
250 (sort (append swap-vec nil) (lambda (x y) (< x y))) 250 (sort (append swap-vec nil) (lambda (x y) (< x y)))
251 (append vec nil)))) 251 (append vec nil))))
252 ;; Check for possible corruption after GC.
253 (let* ((size 3000)
254 (complex-vec (make-vector size nil))
255 (vec (make-vector size nil))
256 (counter 0)
257 (my-counter (lambda ()
258 (if (< counter 500)
259 (cl-incf counter)
260 (setq counter 0)
261 (garbage-collect))))
262 (rand 1)
263 (generate-random
264 (lambda () (setq rand
265 (logand (+ (* rand 1103515245) 12345) 2147483647)))))
266 ;; Make a complex vector and its sorted version.
267 (dotimes (i size)
268 (let ((r (funcall generate-random)))
269 (aset complex-vec i (cons r "a"))
270 (aset vec i (cons r "a"))))
271 ;; Sort it.
272 (should (equal
273 (sort complex-vec
274 (lambda (x y) (funcall my-counter) (< (car x) (car y))))
275 (sort complex-vec 'car-less-than-car))))
252 ;; Check for sorting stability. 276 ;; Check for sorting stability.
253 (should (equal 277 (should (equal
254 (sort 278 (sort