1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-04-30 11:50:28 +02:00
guile/test-suite/standalone/test-stack-overflow
Daniel Llorens 9687334ff5 On Darwin, skip tests that depend on setrlimit
On Darwin, setrlimit is ignored, and these tests do not terminate. There
doesn't seem to be another way to limit the memory allocated by a
process.

* test-suite/standalone/test-stack-overflow: Skip this test on Darwin.
* test-suite/standalone/test-out-of-memory: Skip this test on Darwin.
2016-06-24 17:17:13 +02:00

46 lines
1.1 KiB
Scheme
Executable file

#!/bin/sh
guild compile "$0"
exec guile -q -s "$0" "$@"
!#
(unless (defined? 'setrlimit)
;; Without an rlimit, this test can take down your system, as it
;; consumes all of your memory in stack space. That doesn't seem like
;; something we should run as part of an automated test suite.
(exit 0))
(when (string-ci= "darwin" (vector-ref (uname) 0))
;; setrlimits are ignored in OS X (tested on 10.9 and 10.10). Proceeding
;; with the test would fill all available memory and probably end in a crash.
;; See also test-stack-overflow.
(exit 77)) ; uresolved
;; 100 MB.
(define *limit* (* 100 1024 1024))
(call-with-values (lambda () (getrlimit 'as))
(lambda (soft hard)
(unless (and soft (< soft *limit*))
(setrlimit 'as (if hard (min *limit* hard) *limit*) hard))))
(define (test)
(catch 'stack-overflow
(lambda ()
(let lp ()
(lp)
(error "should not be reached")))
(lambda _
#t)))
;; Run the test a few times. The stack will only be enlarged and
;; relocated on the first one.
(test)
(test)
(test)
(test)
(test)
;; Local Variables:
;; mode: scheme
;; End: