43 lines
1.2 KiB
Scheme
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)))
|
|
|
|
|