(define collect void) (define test (lambda (name x1 x2) (unless (equal? x1 x2) (error 'test "test ~s failed: expected ~s, got ~s" name x1 x2)) (printf "~a ok\n" name))) (test 1 '(12 17 yes) (let ([h (make-hash-table)]) (put-hash-table! h 'foo 12) (put-hash-table! h 'bar 17) (collect) (list (get-hash-table h 'foo 'no) (get-hash-table h 'bar 'no) (get-hash-table h 'baz 'yes)))) (define iota (lambda (i n) (cond [(fx= i n) '()] [else (cons i (iota (fx+ 1 i) n))]))) (test 2 (iota 1 10001) (let ([h (make-hash-table)]) (for-each (lambda (i) (put-hash-table! h i (fx+ 1 i))) (iota 0 10000)) (collect) (map (lambda (i) (get-hash-table h i #f)) (iota 0 10000)))) (test 3 (iota 2 10002) (let ([h (make-hash-table)]) (for-each (lambda (i) (put-hash-table! h i (fx+ 1 i))) (iota 0 10000)) (for-each (lambda (i) (put-hash-table! h i (fx+ 1 (get-hash-table h i -1000)))) (iota 0 10000)) (collect) (map (lambda (i) (get-hash-table h i #f)) (iota 0 10000))))