~ chicken-core (chicken-5) 5881a38919d186dcb19ab66ce1e28c65780d938d
commit 5881a38919d186dcb19ab66ce1e28c65780d938d Author: felix <felix@call-with-current-continuation.org> AuthorDate: Tue Jul 25 14:42:10 2017 +0200 Commit: felix <felix@call-with-current-continuation.org> CommitDate: Tue Jul 25 14:42:10 2017 +0200 Added keyword generation + reclamation to symbol-GC test diff --git a/tests/symbolgc-tests.scm b/tests/symbolgc-tests.scm index 923ee71b..0c1e0f3d 100644 --- a/tests/symbolgc-tests.scm +++ b/tests/symbolgc-tests.scm @@ -1,6 +1,6 @@ ;;;; symbolgc-tests.scm -(use gc (chicken format)) +(import (chicken gc) (chicken format) (chicken keyword)) ;; Ensure counts are defined before creating the disposable symbols. ;; This way, this program can also be run in interpreted mode. @@ -31,8 +31,21 @@ ;; Don't use LET, which would introduce a fresh identifier, which is a ;; new symbol (at least, in interpreted mode) (set! *count-after* (vector-ref (##sys#symbol-table-info) 2)) -(print* (- *count-after* *count-before*) " newly interned symbols left") +(print (- *count-after* *count-before*) " newly interned symbols left") (unless (= *count-after* *count-before*) (error "unable to reclaim all symbols")) +(print "interning 10000 keywords ...") + +(do ((i 10000 (sub1 i))) + ((zero? i)) + (string->keyword (sprintf "kw-%%%~a%%%" i))) + +(print "recovering ...") +(gc #t) +(set! *count-after* (vector-ref (##sys#symbol-table-info) 2)) +(print* (- *count-after* *count-before*) " newly interned leywords left") +(unless (= *count-after* *count-before*) + (error "unable to reclaim all keywords")) + (print "\ndone.")Trap