(with-test (:name :bug-529014 :skipped-on '(not :gencgc))
(loop for i from 0 to sb-vm:+pseudo-static-generation+
do (assert (= (sb-ext:generation-bytes-consed-between-gcs i)
- (sb-ext:bytes-consed-between-gcs)))
+ (truncate (sb-ext:bytes-consed-between-gcs)
+ sb-vm:+highest-normal-generation+)))
;; FIXME: These parameters are a) tunable in the source and b)
;; duplicated multiple times there and now here. It would be good to
;; OAOO-ify them (probably to src/compiler/generic/params.lisp).
(assert (= (sb-ext:generation-number-of-gcs-before-promotion i) 1))))
(defun stress-gc ()
- (let* ((x (make-array (truncate (* 0.2 (dynamic-space-size))
+ ;; Kludge or not? I don't know whether the smaller allocation size
+ ;; for sb-safepoint is a legitimate correction to the test case, or
+ ;; rather hides the actual bug this test is checking for... It's also
+ ;; not clear to me whether the issue is actually safepoint-specific.
+ ;; But the main problem safepoint-related bugs tend to introduce is a
+ ;; delay in the GC triggering -- and if bug-936304 fails, it also
+ ;; causes bug-981106 to fail, even though there is a full GC in
+ ;; between, which makes it seem unlikely to me that the problem is
+ ;; delay- (and hence safepoint-) related. --DFL
+ (let* ((x (make-array (truncate #-sb-safepoint (* 0.2 (dynamic-space-size))
+ #+sb-safepoint (* 0.1 (dynamic-space-size))
sb-vm:n-word-bytes))))
(elt x 0)))
(assert (eq :ok
(handler-case
(dotimes (runs 100 :ok)
- (let ((len (length
- (with-output-to-string (string)
- (dotimes (i 1000000)
- (write-sequence "hi there!" string))))))
- (assert (eql len (* 1000000 (length "hi there!"))))))
+ (let* ((n (truncate (dynamic-space-size) 1200))
+ (len (length
+ (with-output-to-string (string)
+ (dotimes (i n)
+ (write-sequence "hi there!" string))))))
+ (assert (eql len (* n (length "hi there!"))))))
(storage-condition ()
:oom))))))
+
+(with-test (:name :gc-logfile)
+ (assert (not (gc-logfile)))
+ (let ((p #p"gc.log"))
+ (assert (not (probe-file p)))
+ (assert (equal p (setf (gc-logfile) p)))
+ (gc)
+ (let ((p2 (gc-logfile)))
+ (assert (equal (truename p2) (truename p))))
+ (assert (not (setf (gc-logfile) nil)))
+ (assert (not (gc-logfile)))
+ (delete-file p)))