(import
  lmdb test)

(test-assert "environment creation"
  (database-environment?
   (open-database-environment
    "test-env" #:max-databases 4)))

(define blurbs
  (with-transaction
   (cut open-database "blurbs" #:create)))

(test-assert (database? blurbs))

(with-transaction
 (lambda ()
   (database-set! blurbs "foo" "bar")
   (database-set! blurbs "baz" "kawumm")))

(with-transaction
 (lambda ()
   (test "bar" (database-ref blurbs "foo"))
   (test "kawumm" (database-ref blurbs "baz"))

   (test-assert (database-exists? blurbs "foo"))
   (test-assert (not (database-exists? blurbs "garbage")))

   (test #f (database-ref blurbs "no key" #f))
   (test
     'exn-db
     (condition-case (database-ref blurbs "still no key")
      ((exn db) 'exn-db)))

   (test
     '(("baz" . "kawumm") ("foo" . "bar"))
     (database->alist blurbs)))
 #:read-only)

(define quirks
  (with-transaction
   (cut alist->database
        '(("alpha" . "bravo")
          ("bar" . "foo")
          ("baz" "badumm" "kawumm")
          ("ignored")
          ("xyzzy" . "abracadabra"))
        "quirks" #:create #:duplicate-sort #:append/duplicate)))

(test-assert (database? quirks))

(with-transaction
 (lambda ()
   (test
     '()
     (database->alist quirks #:limit 0))
   (test
     '(("bar" . "foo") ("baz" . "badumm") ("baz" . "kawumm"))
     (database->alist quirks #:from "b" #:to< "x"))
   (test
     '(("bar" . "foo"))
     (database->alist quirks #:from "b" #:to< "x" #:limit 1))
   (test
     '(("bar" "foo") ("baz" "badumm" "kawumm"))
     (database->alist quirks #:from "b" #:to< "x" #:duplicate-list))
   (test
     '(("bar" "foo") ("baz" "badumm"))
     (database->alist quirks #:from "b" #:to< "x" #:limit 2 #:duplicate-list))

   (database-delete! quirks "baz" "badumm")

   (test
     '(("baz" . "kawumm"))
     (database->alist quirks #:from "baz" #:to<= "baz"))

   (drop-database quirks)

   (test
     '()
     (database->alist quirks))))

(close-database-environment)

(test-exit)

;; vim: set ai et ts=4 sts=2 sw=2 ft=scheme: ;;