(use test) (use sqdb) ;;(load "sqdb.scm")(import sqdb) (define dbname "fooooooo.db") ;; fixme use a temp name (when (file-exists? dbname) (error "database exists" dbname)) (handle-exceptions e (begin (delete-file dbname) (abort e)) (define (cwdb proc) (call-with-database dbname proc)) (test '("1" "100" #f) (cwdb (lambda (db) (add db 'ctr 0) (add db 'ctr2 100) (incr db 'ctr) (list (fetch db 'ctr) (fetch db 'ctr2) (fetch db 'ctr3) ;; test for missing key )))) (test-error (cwdb (lambda (db) (add db 'ctr 0) (incr db 'ctr) (fetch db 'ctr)))) (test "2" (cwdb (lambda (db) (add* db 'ctr 0) (incr db 'ctr) (fetch db 'ctr)))) (test "8" (cwdb (lambda (db) (store db 'ctr 7) (incr db 'ctr) (fetch db 'ctr)))) (test '("10" . "105") (cwdb (lambda (db) (incr db 'ctr 2) (incr db 'ctr2 5) (cons (fetch db 'ctr) (fetch db 'ctr2))))) (test "barbaz" (cwdb (lambda (db) (store db 'foo "bar") (update db 'foo (lambda (v) (string-append v "baz"))) (fetch db 'foo)))) (test '(#t . #f) (cwdb (lambda (db) (cons (exists? db 'foo) (exists? db 'foo2))))) (test "test update with non-existent and existing key" "barfoofoofoo" (cwdb (lambda (db) (let ((u (lambda (x) (string-append (or x "bar") "foo")))) (delete db 'upd0) ;; just in case (update db 'upd0 u) (update db 'upd0 u) (update db 'upd0 u) (fetch db 'upd0))))) (cwdb (lambda (db) (delete db 'inc) (assert (not (exists? db 'inc))) (test "inc non-existent returns #f" #f (incr db 'inc)) (store db 'inc 0) (assert (equal? "0" (fetch db 'inc))) (test "inc existing returns #t" #t (incr db 'inc)) (test "inc result correct" "1" (fetch db 'inc)) (test "dec existing returns #t" #t (decr db 'inc)) (test "dec result correct" "0" (fetch db 'inc)) (delete db 'inc) (assert (not (exists? db 'inc))) (test "dec non-existing returns #f" #f (decr db 'inc)))) ) ;; handle-exceptions (delete-file dbname) (test-exit)