~ 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