add tests for non-generic in-hash- sequences
This commit is contained in:
parent
91d85a1fb5
commit
06c15dbf89
|
@ -36,154 +36,181 @@
|
|||
h))
|
||||
|
||||
(let ()
|
||||
(define (test-hash-iterations lst1 lst2)
|
||||
(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-syntax (define-hash-iterations-tester stx)
|
||||
(syntax-case stx ()
|
||||
[(_ tag -in-hash -in-pairs -in-keys -in-values)
|
||||
#'(define-hash-iterations-tester tag
|
||||
-in-hash -in-hash -in-hash
|
||||
-in-pairs -in-pairs -in-pairs
|
||||
-in-keys -in-keys -in-keys
|
||||
-in-values -in-values -in-values)]
|
||||
[(_ tag
|
||||
-in-immut-hash -in-mut-hash -in-weak-hash
|
||||
-in-immut-hash-pairs -in-mut-hash-pairs -in-weak-hash-pairs
|
||||
-in-immut-hash-keys -in-mut-hash-keys -in-weak-hash-keys
|
||||
-in-immut-hash-values -in-mut-hash-values -in-weak-hash-values)
|
||||
(with-syntax
|
||||
([name
|
||||
(datum->syntax #'tag
|
||||
(string->symbol
|
||||
(format "test-hash-iters-~a" (syntax->datum #'tag))))])
|
||||
#'(define (name lst1 lst2)
|
||||
(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-immut-hash ht/immut))
|
||||
(define ht/mut/seq (-in-mut-hash ht/mut))
|
||||
(define ht/weak/seq (-in-weak-hash ht/weak))
|
||||
(define ht/immut-pair/seq (-in-immut-hash-pairs ht/immut))
|
||||
(define ht/mut-pair/seq (-in-mut-hash-pairs ht/mut))
|
||||
(define ht/weak-pair/seq (-in-weak-hash-pairs ht/weak))
|
||||
(define ht/immut-keys/seq (-in-immut-hash-keys ht/immut))
|
||||
(define ht/mut-keys/seq (-in-mut-hash-keys ht/mut))
|
||||
(define ht/weak-keys/seq (-in-weak-hash-keys ht/weak))
|
||||
(define ht/immut-vals/seq (-in-immut-hash-values ht/immut))
|
||||
(define ht/mut-vals/seq (-in-mut-hash-values ht/mut))
|
||||
(define ht/weak-vals/seq (-in-weak-hash-values ht/weak))
|
||||
|
||||
(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
|
||||
(test #t =
|
||||
(for/sum ([(k v) (-in-immut-hash ht/immut)]) (+ k v))
|
||||
(for/sum ([(k v) (-in-mut-hash ht/mut)]) (+ k v))
|
||||
(for/sum ([(k v) (-in-weak-hash ht/weak)]) (+ k v))
|
||||
(for/sum ([(k v) (-in-immut-hash fake-ht/immut)]) (+ k v))
|
||||
(for/sum ([(k v) (-in-mut-hash fake-ht/mut)]) (+ k v))
|
||||
(for/sum ([(k v) (-in-weak-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-immut-hash-pairs ht/immut)])
|
||||
(+ (car k+v) (cdr k+v)))
|
||||
(for/sum ([k+v (-in-mut-hash-pairs ht/mut)])
|
||||
(+ (car k+v) (cdr k+v)))
|
||||
(for/sum ([k+v (-in-weak-hash-pairs ht/weak)])
|
||||
(+ (car k+v) (cdr k+v)))
|
||||
(for/sum ([k+v (-in-immut-hash-pairs fake-ht/immut)])
|
||||
(+ (car k+v) (cdr k+v)))
|
||||
(for/sum ([k+v (-in-mut-hash-pairs fake-ht/mut)])
|
||||
(+ (car k+v) (cdr k+v)))
|
||||
(for/sum ([k+v (-in-weak-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)))
|
||||
(+ (for/sum ([k (-in-immut-hash-keys ht/immut)]) k)
|
||||
(for/sum ([v (-in-immut-hash-values ht/immut)]) v))
|
||||
(+ (for/sum ([k (-in-mut-hash-keys ht/mut)]) k)
|
||||
(for/sum ([v (-in-mut-hash-values ht/mut)]) v))
|
||||
(+ (for/sum ([k (-in-weak-hash-keys ht/weak)]) k)
|
||||
(for/sum ([v (-in-weak-hash-values ht/weak)]) v))
|
||||
(+ (for/sum ([k (-in-immut-hash-keys fake-ht/immut)]) k)
|
||||
(for/sum ([v (-in-immut-hash-values fake-ht/immut)]) v))
|
||||
(+ (for/sum ([k (-in-mut-hash-keys fake-ht/mut)]) k)
|
||||
(for/sum ([v (-in-mut-hash-values fake-ht/mut)]) v))
|
||||
(+ (for/sum ([k (-in-weak-hash-keys fake-ht/weak)]) k)
|
||||
(for/sum ([v (-in-weak-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)
|
||||
(for/sum ([v ht/mut-vals/seq]) v))
|
||||
(+ (for/sum ([k ht/weak-keys/seq]) k)
|
||||
(for/sum ([v ht/weak-vals/seq]) v)))
|
||||
|
||||
(test #t =
|
||||
(for/sum ([(k v) (-in-immut-hash ht/immut)]) k)
|
||||
(for/sum ([(k v) (-in-mut-hash ht/mut)]) k)
|
||||
(for/sum ([(k v) (-in-weak-hash ht/weak)]) k)
|
||||
(for/sum ([(k v) (-in-immut-hash fake-ht/immut)]) k)
|
||||
(for/sum ([(k v) (-in-mut-hash fake-ht/mut)]) k)
|
||||
(for/sum ([(k v) (-in-weak-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-immut-hash-pairs ht/immut)]) (car k+v))
|
||||
(for/sum ([k+v (-in-mut-hash-pairs ht/mut)]) (car k+v))
|
||||
(for/sum ([k+v (-in-weak-hash-pairs ht/weak)]) (car k+v))
|
||||
(for/sum ([k+v (-in-immut-hash-pairs fake-ht/immut)]) (car k+v))
|
||||
(for/sum ([k+v (-in-mut-hash-pairs fake-ht/mut)]) (car k+v))
|
||||
(for/sum ([k+v (-in-weak-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-immut-hash-keys ht/immut)]) k)
|
||||
(for/sum ([k (-in-mut-hash-keys ht/mut)]) k)
|
||||
(for/sum ([k (-in-weak-hash-keys ht/weak)]) k)
|
||||
(for/sum ([k (-in-immut-hash-keys fake-ht/immut)]) k)
|
||||
(for/sum ([k (-in-mut-hash-keys fake-ht/mut)]) k)
|
||||
(for/sum ([k (-in-weak-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))
|
||||
|
||||
(define ht/immut/seq (in-hash ht/immut))
|
||||
(define ht/mut/seq (in-hash ht/mut))
|
||||
(define ht/weak/seq (in-hash ht/weak))
|
||||
(define ht/immut-pair/seq (in-hash-pairs ht/immut))
|
||||
(define ht/mut-pair/seq (in-hash-pairs ht/mut))
|
||||
(define ht/weak-pair/seq (in-hash-pairs ht/weak))
|
||||
(define ht/immut-keys/seq (in-hash-keys ht/immut))
|
||||
(define ht/mut-keys/seq (in-hash-keys ht/mut))
|
||||
(define ht/weak-keys/seq (in-hash-keys ht/weak))
|
||||
(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)))
|
||||
(+ (for/sum ([k (in-hash-keys ht/immut)]) k)
|
||||
(for/sum ([v (in-hash-values ht/immut)]) v))
|
||||
(+ (for/sum ([k (in-hash-keys ht/mut)]) k)
|
||||
(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)
|
||||
(for/sum ([v ht/mut-vals/seq]) v))
|
||||
(+ (for/sum ([k ht/weak-keys/seq]) k)
|
||||
(for/sum ([v ht/weak-vals/seq]) v)))
|
||||
|
||||
(test #t
|
||||
=
|
||||
(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))
|
||||
|
||||
(test #t
|
||||
=
|
||||
(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)))
|
||||
(test #t =
|
||||
(for/sum ([(k v) (-in-immut-hash ht/immut)]) v)
|
||||
(for/sum ([(k v) (-in-mut-hash ht/mut)]) v)
|
||||
(for/sum ([(k v) (-in-weak-hash ht/weak)]) v)
|
||||
(for/sum ([(k v) (-in-immut-hash fake-ht/immut)]) v)
|
||||
(for/sum ([(k v) (-in-mut-hash fake-ht/mut)]) v)
|
||||
(for/sum ([(k v) (-in-weak-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-immut-hash-pairs ht/immut)]) (cdr k+v))
|
||||
(for/sum ([k+v (-in-mut-hash-pairs ht/mut)]) (cdr k+v))
|
||||
(for/sum ([k+v (-in-weak-hash-pairs ht/weak)]) (cdr k+v))
|
||||
(for/sum ([k+v (-in-immut-hash-pairs fake-ht/immut)]) (cdr k+v))
|
||||
(for/sum ([k+v (-in-mut-hash-pairs fake-ht/mut)]) (cdr k+v))
|
||||
(for/sum ([k+v (-in-weak-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-immut-hash-values ht/immut)]) v)
|
||||
(for/sum ([v (-in-mut-hash-values ht/mut)]) v)
|
||||
(for/sum ([v (-in-weak-hash-values ht/weak)]) v)
|
||||
(for/sum ([v (-in-immut-hash-values fake-ht/immut)]) v)
|
||||
(for/sum ([v (-in-mut-hash-values fake-ht/mut)]) v)
|
||||
(for/sum ([v (-in-weak-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))))]))
|
||||
(define-hash-iterations-tester generic
|
||||
in-hash in-hash-pairs in-hash-keys in-hash-values)
|
||||
(define-hash-iterations-tester specific
|
||||
in-immutable-hash in-mutable-hash in-weak-hash
|
||||
in-immutable-hash-pairs in-mutable-hash-pairs in-weak-hash-pairs
|
||||
in-immutable-hash-keys in-mutable-hash-keys in-weak-hash-keys
|
||||
in-immutable-hash-values in-mutable-hash-values in-weak-hash-values)
|
||||
|
||||
(define lst1 (build-list 10 values))
|
||||
(define lst2 (build-list 10 add1))
|
||||
(test-hash-iterations lst1 lst2)
|
||||
(test-hash-iters-generic lst1 lst2)
|
||||
(test-hash-iters-specific lst1 lst2)
|
||||
(define lst3 (build-list 100000 values))
|
||||
(define lst4 (build-list 100000 add1))
|
||||
(test-hash-iterations lst3 lst4))
|
||||
(test-hash-iters-generic lst3 lst4)
|
||||
(test-hash-iters-specific lst3 lst4))
|
||||
|
||||
;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user