add some tests for impersonated hash tables

This commit is contained in:
Stephen Chang 2016-01-27 14:51:14 -05:00
parent c34d37d265
commit 9419778b1e

View File

@ -38,9 +38,33 @@
(let ()
(define lst1 (build-list 10 values))
(define lst2 (build-list 10 add1))
(define ht/immut (make-immutable-hash (map cons lst1 lst2)))
(define ht/mut (make-hash (map cons lst1 lst2)))
(define ht/weak (make-weak-hash (map cons lst1 lst2)))
(define fake-ht/immut
(chaperone-hash
ht/immut
(lambda (h k) (values k (lambda (h k v) v))) ; ref-proc
(lambda (h k v) values k v) ; set-proc
(lambda (h k) k) ; remove-proc
(lambda (h k) k))) ; key-proc
(define fake-ht/mut
(impersonate-hash
ht/mut
(lambda (h k) (values k (lambda (h k v) v))) ; ref-proc
(lambda (h k v) values k v) ; set-proc
(lambda (h k) k) ; remove-proc
(lambda (h k) k))) ; key-proc
(define fake-ht/weak
(impersonate-hash
ht/weak
(lambda (h k) (values k (lambda (h k v) v))) ; ref-proc
(lambda (h k v) values k v) ; set-proc
(lambda (h k) k) ; remove-proc
(lambda (h k) k))) ; key-proc
(define ht/immut/seq (in-hash ht/immut))
(define ht/mut/seq (in-hash ht/mut))
(define ht/weak/seq (in-hash ht/weak))
@ -53,18 +77,25 @@
(define ht/immut-vals/seq (in-hash-values ht/immut))
(define ht/mut-vals/seq (in-hash-values ht/mut))
(define ht/weak-vals/seq (in-hash-values ht/weak))
(test #t
=
(for/sum ([(k v) (in-hash ht/immut)]) (+ k v))
(for/sum ([(k v) (in-hash ht/mut)]) (+ k v))
(for/sum ([(k v) (in-hash ht/weak)]) (+ k v))
(for/sum ([(k v) (in-hash fake-ht/immut)]) (+ k v))
(for/sum ([(k v) (in-hash fake-ht/mut)]) (+ k v))
(for/sum ([(k v) (in-hash fake-ht/weak)]) (+ k v))
(for/sum ([(k v) ht/immut/seq]) (+ k v))
(for/sum ([(k v) ht/mut/seq]) (+ k v))
(for/sum ([(k v) ht/weak/seq]) (+ k v))
(for/sum ([k+v (in-hash-pairs ht/immut)]) (+ (car k+v) (cdr k+v)))
(for/sum ([k+v (in-hash-pairs ht/mut)]) (+ (car k+v) (cdr k+v)))
(for/sum ([k+v (in-hash-pairs ht/weak)]) (+ (car k+v) (cdr k+v)))
(for/sum ([k+v (in-hash-pairs fake-ht/immut)]) (+ (car k+v) (cdr k+v)))
(for/sum ([k+v (in-hash-pairs fake-ht/mut)]) (+ (car k+v) (cdr k+v)))
(for/sum ([k+v (in-hash-pairs fake-ht/weak)]) (+ (car k+v) (cdr k+v)))
(for/sum ([k+v ht/immut-pair/seq]) (+ (car k+v) (cdr k+v)))
(for/sum ([k+v ht/mut-pair/seq]) (+ (car k+v) (cdr k+v)))
(for/sum ([k+v ht/weak-pair/seq]) (+ (car k+v) (cdr k+v)))
@ -74,6 +105,12 @@
(for/sum ([v (in-hash-values ht/mut)]) v))
(+ (for/sum ([k (in-hash-keys ht/weak)]) k)
(for/sum ([v (in-hash-values ht/weak)]) v))
(+ (for/sum ([k (in-hash-keys fake-ht/immut)]) k)
(for/sum ([v (in-hash-values fake-ht/immut)]) v))
(+ (for/sum ([k (in-hash-keys fake-ht/mut)]) k)
(for/sum ([v (in-hash-values fake-ht/mut)]) v))
(+ (for/sum ([k (in-hash-keys fake-ht/weak)]) k)
(for/sum ([v (in-hash-values fake-ht/weak)]) v))
(+ (for/sum ([k ht/immut-keys/seq]) k)
(for/sum ([v ht/immut-vals/seq]) v))
(+ (for/sum ([k ht/mut-keys/seq]) k)
@ -86,18 +123,27 @@
(for/sum ([(k v) (in-hash ht/immut)]) k)
(for/sum ([(k v) (in-hash ht/mut)]) k)
(for/sum ([(k v) (in-hash ht/weak)]) k)
(for/sum ([(k v) (in-hash fake-ht/immut)]) k)
(for/sum ([(k v) (in-hash fake-ht/mut)]) k)
(for/sum ([(k v) (in-hash fake-ht/weak)]) k)
(for/sum ([(k v) ht/immut/seq]) k)
(for/sum ([(k v) ht/mut/seq]) k)
(for/sum ([(k v) ht/weak/seq]) k)
(for/sum ([k+v (in-hash-pairs ht/immut)]) (car k+v))
(for/sum ([k+v (in-hash-pairs ht/mut)]) (car k+v))
(for/sum ([k+v (in-hash-pairs ht/weak)]) (car k+v))
(for/sum ([k+v (in-hash-pairs fake-ht/immut)]) (car k+v))
(for/sum ([k+v (in-hash-pairs fake-ht/mut)]) (car k+v))
(for/sum ([k+v (in-hash-pairs fake-ht/weak)]) (car k+v))
(for/sum ([k+v ht/immut-pair/seq]) (car k+v))
(for/sum ([k+v ht/mut-pair/seq]) (car k+v))
(for/sum ([k+v ht/weak-pair/seq]) (car k+v))
(for/sum ([k (in-hash-keys ht/immut)]) k)
(for/sum ([k (in-hash-keys ht/mut)]) k)
(for/sum ([k (in-hash-keys ht/weak)]) k)
(for/sum ([k (in-hash-keys fake-ht/immut)]) k)
(for/sum ([k (in-hash-keys fake-ht/mut)]) k)
(for/sum ([k (in-hash-keys fake-ht/weak)]) k)
(for/sum ([k ht/immut-keys/seq]) k)
(for/sum ([k ht/mut-keys/seq]) k)
(for/sum ([k ht/weak-keys/seq]) k))
@ -107,18 +153,27 @@
(for/sum ([(k v) (in-hash ht/immut)]) v)
(for/sum ([(k v) (in-hash ht/mut)]) v)
(for/sum ([(k v) (in-hash ht/weak)]) v)
(for/sum ([(k v) (in-hash fake-ht/immut)]) v)
(for/sum ([(k v) (in-hash fake-ht/mut)]) v)
(for/sum ([(k v) (in-hash fake-ht/weak)]) v)
(for/sum ([(k v) ht/immut/seq]) v)
(for/sum ([(k v) ht/mut/seq]) v)
(for/sum ([(k v) ht/weak/seq]) v)
(for/sum ([k+v (in-hash-pairs ht/immut)]) (cdr k+v))
(for/sum ([k+v (in-hash-pairs ht/mut)]) (cdr k+v))
(for/sum ([k+v (in-hash-pairs ht/weak)]) (cdr k+v))
(for/sum ([k+v (in-hash-pairs fake-ht/immut)]) (cdr k+v))
(for/sum ([k+v (in-hash-pairs fake-ht/mut)]) (cdr k+v))
(for/sum ([k+v (in-hash-pairs fake-ht/weak)]) (cdr k+v))
(for/sum ([k+v ht/immut-pair/seq]) (cdr k+v))
(for/sum ([k+v ht/mut-pair/seq]) (cdr k+v))
(for/sum ([k+v ht/weak-pair/seq]) (cdr k+v))
(for/sum ([v (in-hash-values ht/immut)]) v)
(for/sum ([v (in-hash-values ht/mut)]) v)
(for/sum ([v (in-hash-values ht/weak)]) v)
(for/sum ([v (in-hash-values fake-ht/immut)]) v)
(for/sum ([v (in-hash-values fake-ht/mut)]) v)
(for/sum ([v (in-hash-values fake-ht/weak)]) v)
(for/sum ([v ht/immut-vals/seq]) v)
(for/sum ([v ht/mut-vals/seq]) v)
(for/sum ([v ht/weak-vals/seq]) v)))