From 9419778b1ecb9665c0ad30df81d15894e875c4cb Mon Sep 17 00:00:00 2001 From: Stephen Chang Date: Wed, 27 Jan 2016 14:51:14 -0500 Subject: [PATCH] add some tests for impersonated hash tables --- pkgs/racket-test-core/tests/racket/hash.rktl | 57 +++++++++++++++++++- 1 file changed, 56 insertions(+), 1 deletion(-) diff --git a/pkgs/racket-test-core/tests/racket/hash.rktl b/pkgs/racket-test-core/tests/racket/hash.rktl index 0753b1bf69..420df4b83a 100644 --- a/pkgs/racket-test-core/tests/racket/hash.rktl +++ b/pkgs/racket-test-core/tests/racket/hash.rktl @@ -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)))