diff options
| author | Andrew G Cohen | 2022-03-18 21:21:29 +0800 |
|---|---|---|
| committer | Andrew G Cohen | 2022-03-18 21:21:29 +0800 |
| commit | 186ec2f8d828559da3d53db9122a0be0848c03c3 (patch) | |
| tree | e4daf805fdbaa55df3a8b90d7e2cc877398ff76a | |
| parent | 43a339fe10df3952a5f1749403d7b8148554008a (diff) | |
| download | emacs-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.el | 28 |
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 |