#lang racket/base (require rackunit racket/contract racket/dict data/skip-list data/splay-tree data/order) ;; Tests for ordered dictionaries ;; - skip-list ;; - splay-tree (both kinds) (define-syntax-rule (rand-test dicts ordered? idk? (-ref -set! -remove! -count -has-key? -iterate-key -iterate-least/>? -iterate-least/>=? -iterate-greatest/i (-iterate-least/>? d k0)] [l>=i (-iterate-least/>=? d k0)] [g (and l>i (-iterate-key d l>i))] [l>= (and l>=i (-iterate-key d l>=i))] [g< (and g= g<= "has, should be same")) (unless has? (check-equal? l> l>= "not has, should be same") (check-equal? g< g<= "not has, should be same")) (when l> (check > l> k0)) (when l>= (check >= l>= k0)) (when g< (check < g< k0)) (when g<= (check <= g<= k0)) (when idk? (for ([k (in-dict-keys d)]) (when (and l> (and (> k k0) (< k l>))) (error "l>")) (when (and l>= (and (>= k k0) (< k l>=))) (error "l>=")) (when (and g< (and (< k k0) (> k g<))) (error "g<")) (when (and g<= (and (<= k k0) (> k g<=))) (error "g<="))))))))))) ;; Test dict interface (define (dict-test dicts ordered? [idk? #f]) (rand-test dicts ordered? idk? (dict-ref dict-set! dict-remove! dict-count dict-has-key? dict-iterate-key dict-iterate-least/>? dict-iterate-least/>=? dict-iterate-greatest/? splay-tree-iterate-least/>=? splay-tree-iterate-greatest/? skip-list-iterate-least/>=? skip-list-iterate-greatest/? '-iterate-least/>=? '-iterate-greatest/