~ 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