ikarus/scheme/tests/symbol-table.ss

43 lines
1.2 KiB
Scheme

(library (tests symbol-table)
(export run-tests)
(import
(ikarus)
(only (ikarus system $symbols) $symbol-table-size))
(define (test-gcable-symbols n)
(let ([st1 ($symbol-table-size)])
(do ((i 0 (+ i 1)))
((= i n))
(string->symbol (number->string i)))
(collect)
(let ([st2 ($symbol-table-size)])
(assert (< (- st2 st1) n)))))
(define (test-reference-after-gc)
(define random-string
(lambda (n)
(list->string
(map (lambda (n)
(integer->char (+ (char->integer #\a) (random 26))))
(make-list n)))))
(newline)
(let ([str1 (random-string 70)]
[str2 (random-string 70)])
(printf "sym1=~s\n" (string->symbol str1))
(do ((i 0 (+ i 1))) ((= i 1024)) (collect))
(let ([sym1 (string->symbol str1)])
(printf "sym1=~s\n" (string->symbol str1))
(printf "sym2=~s\n" (string->symbol str2))
(let ([sym3 (string->symbol str1)])
(printf "sym3=~s\n" (string->symbol str1))
(assert (eq? sym1 sym3))))))
(define (run-tests)
(test-gcable-symbols 1000000)
(test-reference-after-gc)))