planetdev/unlib/hash-table-test.ss
#lang mzscheme

(require (only mzlib/list sort)
         "hash-table.ss"
         "test-base.ss")

; test-suite
(define/provide-test-suite hash-table-tests
  
  (test-case "make-hash-table/pairs"
    (let ([hash (make-hash-table/pairs '(a . 1) '(b . (1 2 3)) '(c . ()))])
      (check-equal? (hash-table-get hash 'a #f) 1)
      (check-equal? (hash-table-get hash 'b #f) '(1 2 3))
      (check-equal? (hash-table-get hash 'c #f) null)
      (check-equal? (hash-table-get hash 'd #f) #f)))
  
  (test-case "hash-table-mapped?"
    (let ([hash (make-hash-table/pairs '(a . 1) '(b . (1 2 3)))])
      (check equal? (hash-table-mapped? hash 'a) #t)
      (check equal? (hash-table-mapped? hash 'b) #t)
      (check equal? (hash-table-mapped? hash 'c) #f)))
  
  (test-case "hash-table-keys and hash-table-values"
    (let ([hash (make-hash-table/pairs '(1 . "3") '(2 . "2") '(3 . "1"))])
      (check-equal? (sort (hash-table-keys hash)   <)        (list 1 2 3)       "keys")
      (check-equal? (sort (hash-table-values hash) string<?) (list "1" "2" "3") "values"))))