1(define-library (chibi weak-test) 2 (export run-tests) 3 (import (chibi) (chibi weak) (chibi ast) (chibi test)) 4 (begin 5 (define (run-tests) 6 (test-begin "weak pointers") 7 8 (test "preserved key and value" '("key1" "value1" #f) 9 (let ((key (string-append "key" "1")) 10 (value (string-append "value" "1"))) 11 (let ((eph (make-ephemeron key value))) 12 (gc) 13 (list key (ephemeron-value eph) (ephemeron-broken? eph))))) 14 15 (test "unpreserved key and value" '(#f #f #t) 16 (let ((eph (make-ephemeron (string-append "key" "2") 17 (string-append "value" "2")))) 18 (gc) 19 (list (ephemeron-key eph) 20 (ephemeron-value eph) 21 (ephemeron-broken? eph)))) 22 23 (test "unpreserved key and preserved value" '(#f "value3" #t) 24 (let ((value (string-append "value" "3"))) 25 (let ((eph (make-ephemeron (string-append "key" "3") value))) 26 (gc) 27 (list (ephemeron-key eph) value (ephemeron-broken? eph))))) 28 29 (test "unpreserved value references unpreserved key" '(#f #f #t) 30 (let ((key (string-append "key"))) 31 (let ((eph (make-ephemeron key (cons (string-append "value") key)))) 32 (gc) 33 (list (ephemeron-key eph) 34 (ephemeron-value eph) 35 (ephemeron-broken? eph))))) 36 37 ;; disabled - we support weak keys, but not proper ephemerons 38 39 '(test "preserved key and unpreserved value" '("key" "value" #f) 40 (let ((key (string-append "key"))) 41 (let ((eph (make-ephemeron key (string-append "value")))) 42 (gc) 43 (list key (ephemeron-value eph) (ephemeron-broken? eph))))) 44 45 '(test "preserved value references unpreserved key" '(#f #f #t) 46 (let* ((key (string-append "key")) 47 (value (cons (string-append "value") key))) 48 (let ((eph (make-ephemeron key value))) 49 (gc) 50 (list (ephemeron-key eph) value (ephemeron-broken? eph))))) 51 52 (test-end)))) 53