[elephant-cvs] CVS update: elephant/tests/testmigration.lisp elephant/tests/elephant-tests.lisp elephant/tests/mop-tests.lisp elephant/tests/testcollections.lisp elephant/tests/testserializer.lisp

Robert L. Read rread at common-lisp.net
Wed Nov 23 17:52:06 UTC 2005


Update of /project/elephant/cvsroot/elephant/tests
In directory common-lisp.net:/tmp/cvs-serv30677/tests

Modified Files:
	elephant-tests.lisp mop-tests.lisp testcollections.lisp 
	testserializer.lisp 
Added Files:
	testmigration.lisp 
Log Message:
This is the big merger from the SQL-BACK-END branch.

Date: Wed Nov 23 18:52:00 2005
Author: rread

Index: elephant/tests/testmigration.lisp
diff -u /dev/null elephant/tests/testmigration.lisp:1.2
--- /dev/null	Wed Nov 23 18:52:01 2005
+++ elephant/tests/testmigration.lisp	Wed Nov 23 18:51:59 2005
@@ -0,0 +1,170 @@
+;; This file can really only be used if you
+;; have preformed both:
+;; (asdf:operate 'asdf:load-op :ele-bdb)
+;; and 
+;; (asdf:operate 'asdf:load-op :ele-clsql)
+
+(in-package :ele-tests)
+
+(deftest remove-element
+    (let ((a (vector 'a 'b 'c))
+	  (ans (vector 'a 'c)))
+      (setf a (ele::remove-indexed-element-and-adjust 1 a))
+      (and (equal (aref a 0) (aref ans 0))
+	   (equal (aref a 1) (aref ans 1))
+	   (equal (length a) (length ans))))
+  t)
+
+
+(deftest migrate1
+    (let ((old-store *store-controller*)
+	  (*prev-commit* *auto-commit*)
+	  (*auto-commit* t)
+	  (rv nil))
+	  (unwind-protect 
+	       (let (
+		     (sc1 (open-store *test-path-primary*))
+		     (sc2 (open-store *test-path-secondary*)))
+		 (add-to-root "x" "y" :store-controller sc1)
+		 (copy-from-key "x" sc1 sc2)
+		 (setf rv (equal (get-from-root "x" :store-controller sc1)
+				 (get-from-root "x" :store-controller sc2))))
+	    (progn
+	    (setq *store-controller* old-store)
+	    (setq *auto-commit* *prev-commit*)))
+      rv)
+  t)
+
+
+(deftest migrate2
+    (let ((old-store *store-controller*)
+	  (*prev-commit* *auto-commit*)
+	  (*auto-commit* t)
+	  (rv nil))
+      (unwind-protect 
+	   (let
+	       ((sc1 (open-store *test-path-primary*))
+		(sc2 (open-store *test-path-secondary*)))
+	     (let ((ibt (build-btree sc1)))
+	       (loop for i from 0 to 10
+		  do
+		    (setf (get-value i ibt) (* i i)))
+	       (let ((mig (migrate sc2 ibt)))
+		 (btree-differ ibt mig))))
+	    (progn
+	      (setq *store-controller* old-store)
+	      (setq *auto-commit* *prev-commit*))))
+  nil)
+
+
+(deftest migrate3
+    (let ((old-store *store-controller*)
+	  (*prev-commit* *auto-commit*)
+	  (*auto-commit* t)
+	  (rv nil))
+      (unwind-protect 
+	   (let ((sc1 (open-store *test-path-primary*))
+		 (sc2 (open-store *test-path-secondary*))
+		 )
+	     (let* ((ibt (build-indexed-btree sc1)))
+	       (let (
+		     (index
+		      (add-index ibt :index-name 'crunch :key-form 'crunch
+				 :populate t))
+		     )
+		 (loop for i from 0 to 10
+		    do
+		    (setf (get-value i ibt) (* i i)))
+		 (let* ((mig (migrate sc2 ibt))
+			(nindex (gethash 'crunch (indices ibt))))
+		   (loop for i from 0 to 10
+		      do
+		      (if (not 
+			   (equal
+			    (get-value i index)
+			    (get-value i nindex)			
+			    ))
+			  (progn
+			    (format t "YIKES ~A ~%" i)
+			    )))
+		   (setf rv (not (btree-differ ibt mig)))
+		   ))))
+	(progn
+	  (setq *store-controller* old-store)
+	  (setq *auto-commit* *prev-commit*)))
+      rv)
+  t)
+
+
+(deftest migrate4
+    (finishes
+      (let ((old-store *store-controller*)
+	    (*prev-commit* *auto-commit*)
+	    (*auto-commit* t)
+	    (rv nil))
+	(unwind-protect 
+	     (let* (
+		   (sc1 (open-store *test-path-primary*))
+		   (sc2 (open-store *test-path-secondary*))
+		   )
+	       (let* ((ibt (build-indexed-btree sc1)))
+		 (let (
+		       (index
+			(add-index ibt :index-name 'crunch :key-form 'crunch
+				   :populate t))
+		       (x 0)
+		       )
+		   (loop for i from 0 to 10
+		      do
+		      (setf (get-value i ibt) (* i i)))
+		   )))
+	(progn
+	  (setq *store-controller* old-store)
+	  (setq *auto-commit* *prev-commit*)))
+      ))
+  t)
+
+(deftest migrate5
+    (finishes
+      (let ((old-store *store-controller*)
+	    (*prev-commit* *auto-commit*)
+	    (*auto-commit* t))
+	(unwind-protect 
+	     (let ((osc (if (subtypep (type-of *store-controller*) 'sql-store-controller)
+			   (open-store *test-path-primary*)
+			   (open-store *test-path-secondary*)
+			   )))
+;; really need to test the an error is thrown when attempting to migrate
+;; non-persistent object!
+	     (let* ((f1 (make-instance 'pfoo  :sc *store-controller*))
+		    (f2 (make-instance 'pfoo :slot1 "this is a string"  :sc *store-controller*))
+		    (b1 (make-instance 'pbar :slot2 "another string"  :sc *store-controller*))
+		    )		 
+	       (let ((fm1 
+		      (ele::migraten-pobj 
+		       osc f1
+		       #'(lambda (dst src)
+			   (if (slot-boundp src 'slot1)
+			   (setf (slot1 dst) (slot1 src))))))
+		     (fm2 
+		      (ele::migraten-pobj 
+		       osc f2
+		       #'(lambda (dst src)
+			   (if (slot-boundp src 'slot1)
+			   (setf (slot1 dst) (slot1 src))))))
+		     (bm1 (ele::migraten-pobj 
+			   osc b1
+			   #'(lambda (dst src)
+			   (if (slot-boundp src 'slot2)
+			       (setf (slot2 dst) (slot2 src))))))
+			  )
+		     (and 
+		      (and (not (slot-boundp fm1 'slot1))
+			   (not (slot-boundp f1 'slot1)))
+		      (equal (slot1 fm2) (slot1 f2))
+		      (equal (slot2 bm1) (slot2 b1))))))
+	(progn
+	  (setq *store-controller* old-store)
+	  (setq *auto-commit* *prev-commit*))))
+      )
+  t)


Index: elephant/tests/elephant-tests.lisp
diff -u elephant/tests/elephant-tests.lisp:1.5 elephant/tests/elephant-tests.lisp:1.6
--- elephant/tests/elephant-tests.lisp:1.5	Thu Feb 24 02:07:51 2005
+++ elephant/tests/elephant-tests.lisp	Wed Nov 23 18:51:59 2005
@@ -81,6 +81,9 @@
 
 (in-package :ele-tests)
 
+;; Putting this in to make the test work; I have no idea what it means...
+(deftype array-or-pointer-char () '(or array t))
+
 
 (defvar *testdb-path* 
   ;;"/usr/local/share/common-lisp/elephant-0.2/tests/testdb"
@@ -93,11 +96,50 @@
   ;;"/usr/local/share/common-lisp/elephant-0.2/tests/testdb"
   (namestring
    (merge-pathnames 
-    #p"tests/sleepycatdb/" 
+    #p"tests/testsleepycat/" 
     (asdf:component-pathname (asdf:find-system 'elephant-tests)))))
 
+(defvar *testpg-path*
+'(:postgresql "localhost.localdomain" "test" "postgres" ""))
+
+(defvar *testsqlite3-path*
+;; This is of the form '(filename &optional init-function),
+;; and using :memory: as a file name will get you an completely in-memory system...
+;; '(":memory:")
+ '(:sqlite3 "sqlite3-test.db")
+)
+
+(defvar *test-path-primary*
+  *testpg-path*
+)
+(defvar *test-path-secondary*
+  *testdb-path*  
+)
+
+
 (defun do-all-tests()
-  (with-open-store (*testdb-path*)
+  (progn
+    (do-all-tests-spec *testdb-path*)
+    (do-all-tests-spec *testpg-path*)
+    ))
+
+(defun do-crazy-pg-tests()
+  (open-store *testpg-path*)
+  (do-test 'indexed-btree-make)
+  (do-test 'add-indices)
+  (do-test 'test-indices)
+  (do-test 'indexed-put)
+  (do-test 'indexed-get)
+  (close-store)
+  )
+
+(defun do-migrate-test-spec(spud)
+  (with-open-store(spud)
+    (let ((*auto-commit* nil))
+      (do-test 'migrate1))))
+
+(defun do-all-tests-spec(spec)
+  (with-open-store (spec)
     (let ((*auto-commit* nil))
       (do-tests))))
 
@@ -132,4 +174,4 @@
 (defmacro are-not-null (&rest forms)
   `(values
     ,@(loop for form in forms
-	    collect `(is-not-null ,form))))
\ No newline at end of file
+	    collect `(is-not-null ,form))))


Index: elephant/tests/mop-tests.lisp
diff -u elephant/tests/mop-tests.lisp:1.7 elephant/tests/mop-tests.lisp:1.8
--- elephant/tests/mop-tests.lisp:1.7	Thu Feb 24 02:07:51 2005
+++ elephant/tests/mop-tests.lisp	Wed Nov 23 18:51:59 2005
@@ -139,14 +139,14 @@
       
 (deftest initform-test
     (let ((*auto-commit* t))
-      (slot-value (make-instance 'p-initform-test) 'slot1))
+      (slot-value (make-instance 'p-initform-test :sc *store-controller*) 'slot1))
   10)
 
 (deftest initarg-test
     (let ((*auto-commit* t))
       (values
-       (slot-value (make-instance 'p-initform-test-2) 'slot1)
-       (slot-value (make-instance 'p-initform-test-2 :slot1 20) 'slot1)))
+       (slot-value (make-instance 'p-initform-test-2 :sc *store-controller*) 'slot1)
+       (slot-value (make-instance 'p-initform-test-2 :slot1 20 :sc *store-controller*) 'slot1)))
   10 20)
 
 (deftest no-eval-initform
@@ -155,7 +155,7 @@
 	((slot1 :initarg :slot1 :initform (error "Shouldn't be called")))
 	(:metaclass persistent-metaclass))
       (let ((*auto-commit* t))
-	(make-instance 'no-eval-initform :slot1 "something"))
+	(make-instance 'no-eval-initform :slot1 "something" :sc *store-controller* ))
       t)
   t)
 
@@ -168,8 +168,8 @@
 
 ;; i wish i could use slot-makunbound but allegro sux
 (deftest makunbound
-    (let ((p (make-instance 'p-class)))
-      (with-transaction ()
+    (let ((p (make-instance 'p-class :sc *store-controller*)))
+      (with-transaction (:store-controller *store-controller*)
 	(setf (slot1 p) t)
 	#-allegro
 	(slot-makunbound p 'slot1)
@@ -186,7 +186,7 @@
 	((slot1 :initform 1 :accessor slot1))
 	(:metaclass persistent-metaclass))
       (let* ((*auto-commit* t)
-	     (foo (make-instance 'update-class)))
+	     (foo (make-instance 'update-class :sc *store-controller*)))
 	(defclass update-class ()
 	  ((slot2 :initform 2 :accessor slot2))
 	  (:metaclass persistent-metaclass))
@@ -207,7 +207,7 @@
 	(:metaclass persistent-metaclass))
 
 	(let* ((*auto-commit* t)
-	       (foo (make-instance 'class-one)))
+	       (foo (make-instance 'class-one :sc *store-controller*)))
 	  (change-class foo (find-class 'class-two))
 	  (values
 	   (slot1 foo)
@@ -215,9 +215,13 @@
   1 2)
 
 (deftest change-class2
-    (with-transaction ()
-      (let ((foo (make-instance 'btree)))
-	(change-class foo (find-class 'indexed-btree))
+    (with-transaction (:store-controller *store-controller*)
+      (let ((foo (build-btree *store-controller*)))
+	(change-class foo (find-class 
+			   (if (typep *store-controller* 'bdb-store-controller)
+			       'bdb-indexed-btree
+			       'sql-indexed-btree)
+			   ))
 	(is-not-null (indices foo))))
   t)
 
@@ -233,7 +237,7 @@
 	(:metaclass persistent-metaclass))
 
       	(let* ((*auto-commit* t)
-	       (foo (make-instance 'class-one)))
+	       (foo (make-instance 'class-one :sc *store-controller*)))
 	  (change-class foo (find-class 'class-two))
 	  (values
 	   (slot1 foo)


Index: elephant/tests/testcollections.lisp
diff -u elephant/tests/testcollections.lisp:1.3 elephant/tests/testcollections.lisp:1.4
--- elephant/tests/testcollections.lisp:1.3	Thu Feb 24 02:06:05 2005
+++ elephant/tests/testcollections.lisp	Wed Nov 23 18:51:59 2005
@@ -1,12 +1,29 @@
 
 (in-package :ele-tests)
 
+(deftest basicpersistence 
+    (let ((old-store *store-controller*)
+	  (*prev-commit* *auto-commit*)
+	  (*auto-commit* t)
+	  (rv nil))
+	  (unwind-protect 
+	       (let ((x (gensym)))
+		 (add-to-root "x" x)
+		 (let ((sc1 (open-store *test-path-primary*)))
+		   (setf rv (equal (format nil "~A" x)
+				   (format nil "~A" (get-from-root "x"))))))
+	    (progn
+	    (setq *store-controller* old-store)
+	    (setq *auto-commit* *prev-commit*)))
+      rv)
+  t
+)
+
 (deftest testoid
     (progn
       (ele::next-oid *store-controller*)
       (let ((oid (ele::next-oid *store-controller*)))
-	(with-open-store (*testdb-path*)
-	  (< oid (ele::next-oid *store-controller*)))))
+	  (< oid (ele::next-oid *store-controller*))))
   t)
 
 (defclass blob ()
@@ -24,17 +41,23 @@
 (defvar bt)
 
 (deftest btree-make
-    (finishes (setq bt (make-instance 'btree)))
+    (finishes (setq bt (build-btree *store-controller*)))
   t)
 
-(setq *auto-commit* nil)
+;; This is a very dangerous and naughty statement.
+;; It was probably placed in this file for a good reason,
+;; but nothing seems to reset it.  The result is that after loading
+;; theses tests, nothing works as you expect it later.
+;; It may be that the proper fix is not just to take it out,
+;; but that is the best that I can do right now.
+;; (setq *auto-commit* nil)
 
 (deftest btree-put
     (finishes
-      (with-transaction ()
-	(loop for obj in objs
-	      for key in keys
-	      do (setf (get-value key bt) obj))))
+       (with-transaction (:store-controller *store-controller*)
+         (loop for obj in objs
+               for key in keys
+               do (setf (get-value key bt) obj))))
   t)
 
 (deftest btree-get
@@ -48,8 +71,13 @@
 
 (defvar first-key (first keys))
 
+
+;; For some unkown reason, this fails on my server unless
+;; I put the variable "first-key" here rather than use the string
+;; "key-1".  I need to understand this, but don't at present....
 (deftest remove-kv
-    (finishes (with-transaction () (remove-kv first-key bt)))
+     (finishes 
+       (with-transaction (:store-controller *store-controller*) (remove-kv "key-1" bt)))
   t)
 
 (deftest removed
@@ -66,13 +94,14 @@
 	    (subsetp (cdr keys) ks :test #'equalp))))
   t)
 
+;; I hate global variables!  Yuck!
 (defvar indexed)
 (defvar index1)
 (defvar index2)
 
 (deftest indexed-btree-make
-    (finishes (with-transaction ()
-		(setq indexed (make-instance 'indexed-btree))))
+    (finishes (with-transaction (:store-controller *store-controller*)
+		(setq indexed (build-indexed-btree *store-controller*))))
   t)
 
 (defun key-maker (s key value)
@@ -81,7 +110,7 @@
 
 (deftest add-indices
     (finishes
-     (with-transaction ()
+     (with-transaction (:store-controller *store-controller*)
        (setf index1
 	     (add-index indexed :index-name 'slot1 :key-form 'key-maker))
        (setf index2
@@ -116,10 +145,10 @@
    
 (deftest indexed-put
     (finishes
-      (with-transaction ()
+      (with-transaction (:store-controller *store-controller*)
 	(loop for obj in objs
-	      for key in keys
-	      do (setf (get-value key indexed) obj))))
+	   for key in keys
+	   do (setf (get-value key indexed) obj))))
   t)
 
 (deftest indexed-get
@@ -131,6 +160,16 @@
 	       (= (slot2 obj) (* i 100))))
   t)
 
+
+(deftest simple-slot-get
+    (progn
+    (setf (get-value (nth 0 keys) indexed) (nth 0 objs))
+    (let ((obj
+	   (get-value 1 index1)))
+      	  (and (= (slot1 obj) 1)
+	       (= (slot2 obj) (* 1 100)))))
+t)
+
 (deftest indexed-get-from-slot1
     (loop with index = (get-index indexed 'slot1)
 	  for i from 1 to 1000
@@ -158,10 +197,10 @@
      (get-primary-key 100 index2))
   nil nil nil)
 
+
 (deftest remove-kv-from-slot1
     (finishes (remove-kv 2 index1))
   t)
-
 (deftest no-key-nor-indices-slot1
     (values
      (get-value (second keys) indexed)
@@ -172,7 +211,6 @@
 (deftest remove-kv-from-slot2
     (finishes (remove-kv 300 index2))
   t)
-
 (deftest no-key-nor-indices-slot2
     (values
      (get-value (third keys) indexed)
@@ -190,8 +228,11 @@
 	    (subsetp (cdddr keys) ks :test #'equalp))))
   t)
 
+;; This is "4" below because they have removed the
+;; first three keys, and are testing that the index reflect this,
+;; and my code doesn't.
 (deftest get-first
-    (with-transaction ()
+    (with-transaction (:store-controller *store-controller*)
       (with-btree-cursor (c index1)
 	(multiple-value-bind (has k v)
 	    (cursor-first c)
@@ -200,7 +241,7 @@
   t)
 
 (deftest get-first2
-    (with-transaction ()
+    (with-transaction (:store-controller *store-controller*)
       (with-btree-cursor (c index2)
 	(multiple-value-bind (has k v)
 	    (cursor-first c)
@@ -209,7 +250,7 @@
   t)
 
 (deftest get-last
-    (with-transaction ()
+    (with-transaction (:store-controller *store-controller*)
       (with-btree-cursor (c index1)
 	(multiple-value-bind (has k v)
 	    (cursor-last c)
@@ -218,7 +259,7 @@
   t)
 
 (deftest get-last2
-    (with-transaction ()
+    (with-transaction (:store-controller *store-controller*)
       (with-btree-cursor (c index2)
 	(multiple-value-bind (has k v)
 	    (cursor-last c)
@@ -227,7 +268,7 @@
   t)
 
 (deftest set
-    (with-transaction ()
+    (with-transaction (:store-controller *store-controller*)
       (with-btree-cursor (c index1)
 	(multiple-value-bind (has k v)
 	    (cursor-set c 200)
@@ -236,7 +277,7 @@
   t)
 
 (deftest set2
-    (with-transaction ()
+    (with-transaction (:store-controller *store-controller*)
       (with-btree-cursor (c index2)
 	(multiple-value-bind (has k v)
 	    (cursor-set c 500)
@@ -245,7 +286,7 @@
   t)
 
 (deftest set-range
-    (with-transaction ()
+    (with-transaction (:store-controller *store-controller*)
       (with-btree-cursor (c index1)
 	(multiple-value-bind (has k v)
 	    (cursor-set-range c 199.5)
@@ -254,7 +295,7 @@
   t)
 
 (deftest set-range2
-    (with-transaction ()
+    (with-transaction (:store-controller *store-controller*)
       (with-btree-cursor (c index2)
 	(multiple-value-bind (has k v)
 	    (cursor-set-range c 501)
@@ -262,12 +303,75 @@
 	  (= (slot2 v) 600))))
   t)
 
+(deftest rem-kv
+    (with-transaction (:store-controller *store-controller*)
+      (let ((ibt (build-indexed-btree *store-controller*)))
+	(loop for i from 0 to 10
+	      do
+	      (setf (get-value i ibt) (* i i)))
+	(remove-kv 0 ibt)
+	(remove-kv 1 ibt)
+	(remove-kv 10 ibt)
+	(equal (list 
+	 (get-value 0 ibt)
+	 (get-value 1 ibt)
+	 (get-value 10 ibt)
+	 (get-value 5 ibt)
+	)
+	       '(nil nil nil 25))
+	       ))
+t
+    )
+
+(defun odd (s k v)
+  (declare (ignore s k))
+	   (values t (mod v 2)
+))
+
+(deftest rem-idexkv
+    (with-transaction (:store-controller *store-controller*)
+    (let* ((ibt (build-indexed-btree *store-controller*))
+	   (id1 (add-index ibt :index-name 'idx1 :key-form 'odd)))
+      (loop for i from 0 to 10
+	 do
+	 (setf (get-value i ibt) (* i i)))
+
+      (with-btree-cursor (c id1)
+	(cursor-first c)
+	(dotimes (i 10)
+	  (multiple-value-bind (has key value)
+	      (cursor-next c)
+	    ))
+	)
+      (remove-kv 4 ibt)
+      (remove-kv 5 ibt)
+
+      (equal (list
+       (get-value 4 ibt)
+       (get-value 5 ibt)
+       (get-value 6 ibt)
+       (with-btree-cursor (c ibt)
+	 (cursor-first c)
+	 (dotimes (i 4)
+	   (multiple-value-bind (has key value)
+	     (cursor-next c)
+	   value))
+       (multiple-value-bind (has key value)
+	   (cursor-next c)
+	 value
+	 )
+	 ))
+	     '(nil nil 36 49)
+      )))
+    t
+  )
+
 (defvar indexed2)
 (defvar index3)
 
 (deftest make-indexed2
-    (finishes (with-transaction ()
-		(setq indexed2 (make-instance 'indexed-btree))))
+    (finishes (with-transaction (:store-controller *store-controller*)
+		(setq indexed2 (build-indexed-btree *store-controller*))))
   t)
 
 (defun crunch (s k v)
@@ -276,14 +380,14 @@
 
 (deftest add-indices2
     (finishes
-      (with-transaction () 
+      (with-transaction (:store-controller *store-controller*) 
 	(setq index3
 	      (add-index indexed2 :index-name 'crunch :key-form 'crunch))))
   t)
 
 (deftest put-indexed2
     (finishes
-      (with-transaction () 
+      (with-transaction (:store-controller *store-controller*) 
 	(loop for i from 0 to 10000
 	      do
 	      (setf (get-value i indexed2) (- i)))))
@@ -295,13 +399,12 @@
   t)
 
 (deftest get-from-index3
-    (loop for i from 0 to 1000
-	  always (= (* i -10) (get-value i index3)))
-  t)
-	  
+     (loop for i from 0 to 1000
+        always (= (* i -10) (get-value i index3)))
+   t)
 
 (deftest dup-test
-    (with-transaction ()
+    (with-transaction (:store-controller *store-controller*)
       (with-btree-cursor (curs index3)
 	(loop for (more k v) = (multiple-value-list
 				(cursor-first curs))
@@ -311,8 +414,9 @@
   (0 -1 -2 -3 -4 -5 -6 -7 -8 -9))
 	      
 
+
 (deftest nodup-test
-    (with-transaction ()
+    (with-transaction (:store-controller *store-controller*)
       (with-btree-cursor (curs index3)
 	(loop for (m k v) = (multiple-value-list (cursor-next-nodup curs))
 	      for i from 0 downto -9990 by 10
@@ -321,7 +425,7 @@
   t)
 
 (deftest prev-nodup-test
-    (with-transaction ()
+    (with-transaction (:store-controller *store-controller*)
       (with-btree-cursor (curs index3)
 	(cursor-last curs)
 	(loop for (m k v) = (multiple-value-list (cursor-prev-nodup curs))
@@ -331,7 +435,7 @@
   t)
 
 (deftest pnodup-test
-    (with-transaction ()
+    (with-transaction (:store-controller *store-controller*)
       (with-btree-cursor (curs index3)
 	(loop for (m k v p) = (multiple-value-list (cursor-pnext-nodup curs))
 	      for i from 0 to 9990 by 10
@@ -340,7 +444,7 @@
   t)
 
 (deftest pprev-nodup-test
-    (with-transaction ()
+    (with-transaction (:store-controller *store-controller*)
       (with-btree-cursor (curs index3)
 	(cursor-last curs)
 	(loop for (m k v p) = (multiple-value-list (cursor-pprev-nodup curs))
@@ -349,9 +453,36 @@
 	      always (= p i))))
   t)
 
+(deftest cur-del1 
+    ;; Note:  If this is not done inside a transaction,
+    ;; it HANGS BDB!
+    (with-transaction (:store-controller *store-controller*)
+      (let* ((ibt (build-indexed-btree *store-controller*))
+	     (id1 (add-index ibt :index-name 'idx1 :key-form 'odd)))
+	(loop for i from 0 to 10
+	   do
+	   (setf (get-value i ibt) (* i i)))
+;; This appears to delete the SINGLE value pointed two by 
+;; the cursor at that time. (the way it is written now, the second-to-last element 9 = 81;
+;; If you want to delete more, you have to iterate through the cursor, I suppose.
+	(with-btree-cursor (c id1)
+	  (cursor-last c)
+	  (cursor-delete c)
+	  )
+	(equal
+	(list
+	 (get-value 4 ibt)
+	 (get-value 5 ibt)
+	 (get-value 9 ibt)
+	 (get-value 10 ibt)
+	 )
+	'(16 25 nil 100))
+	))
+  t)
+
 (deftest indexed-delete 
     (finishes
-      (with-transaction ()
+      (with-transaction (:store-controller *store-controller*)
 	(with-btree-cursor (curs index3)
 	  (cursor-last curs)
 	  (cursor-delete curs))))
@@ -365,7 +496,7 @@
 		      
 (deftest indexed-delete2
     (finishes
-      (with-transaction ()
+      (with-transaction (:store-controller *store-controller*)
 	(with-btree-cursor (curs index3)
 	  (cursor-first curs)
 	  (cursor-next-dup curs)
@@ -383,6 +514,29 @@
 	 v)))
   0 0 nil -2)
 
+
+(deftest cur-del2 
+    (with-transaction (:store-controller *store-controller*)
+      (let* ((ibt (build-indexed-btree *store-controller*))
+	     (id1 (add-index ibt :index-name 'idx1 :key-form 'odd)))
+	(loop for i from 0 to 10
+	   do
+	   (setf (get-value i ibt) (* i i)))
+	(with-btree-cursor (c id1)
+	  (cursor-first c)
+	  (cursor-next-dup c)
+	  (cursor-delete c)
+	  )
+	(equal (list
+	 (get-value 1 id1) ;; 
+	 (get-value 0 id1) ;; This should be 0, but is returning nil!
+	 )
+	'(1 0))
+	))
+  t)
+
+
+
 (deftest get-both 
     (with-btree-cursor (c indexed2)
       (cursor-get-both c 200 -200))
@@ -414,12 +568,15 @@
        (pcursor-pkey (cursor-pfirst c))
        (pcursor-pkey (cursor-pnext c))
        (pcursor-pkey (cursor-pnext-nodup c))
+
        (pcursor-pkey (cursor-pnext-dup c))
        (pcursor-pkey (cursor-pprev c))
        (pcursor-pkey (cursor-pprev-nodup c))
+
        (pcursor-pkey (cursor-plast c))
        (pcursor-pkey (cursor-pset c 300))
        (pcursor-pkey (cursor-pset-range c 199.5))
+
        (pcursor-pkey (cursor-pget-both c 10 101))
        (pcursor-pkey (cursor-pget-both-range c 11 111.4))))
       
@@ -429,7 +586,7 @@
 
 (deftest newindex
     (finishes
-     (with-transaction () 
+     (with-transaction (:store-controller *store-controller*) 
        (setq index4
 	     (add-index indexed2 :index-name 'crunch :key-form 'crunch
 			:populate t))))
@@ -451,3 +608,105 @@
        (pcursor-pkey (cursor-pget-both-range c 11 111.4))))
       
   0 2 10 11 10 9 9999 3000 2000 101 112)
+
+
+(deftest add-get-remove
+    (let ((r1 '())
+	  (r2 '())
+	  (*prev-commit* *auto-commit*))
+      (unwind-protect 
+	   (progn
+	     (setq *auto-commit* t)
+	     (add-to-root "x1" "y1")
+	     (add-to-root "x2" "y2")
+	     (setf r1 (get-from-root "x1"))
+	     (setf r2 (get-from-root "x2"))
+	     (remove-from-root "x1")
+	     (remove-from-root "x2")
+	     (and 
+	      (equal "y1" r1)
+	      (equal "y2" r2)
+	      (equal nil (get-from-root "x1"))
+	      (equal nil (get-from-root "x2"))
+	      )
+	     )
+	(setq *auto-commit* *prev-commit*)
+	))
+  t)
+
+(deftest add-get-remove-symbol
+    (let ((foo (cons nil nil))
+	  (bar (cons 'a 'b))
+	  (f1 '())
+	  (f2 '())
+	  (b1 '())
+	  (b2 '())
+	  (*prev-commit* *auto-commit*))
+      (unwind-protect 
+	   (progn
+	     (setq *auto-commit* t)
+	     (add-to-root "my key" foo)
+	     (add-to-root "my other key" foo)
+	     (setf f1 (get-from-root "my key"))
+	     (setf f2 (get-from-root "my other key"))
+	     (add-to-root "my key" bar)
+	     (add-to-root "my other key" bar)
+	     (setf b1 (get-from-root "my key"))
+	     (setf b2 (get-from-root "my other key"))	
+	     (and 
+	      (equal f1 f2)
+	      (equal b1 b2)
+              (equal f1 foo)
+              (equal b1 bar)
+	      ))
+	(setq *auto-commit* *prev-commit*)
+	))
+  t)
+
+(deftest existsp
+    (let ((exists1 '())
+	  (exists2 '())
+	  (exists3 '())
+	  (key "my key")
+	  (*prev-commit* *auto-commit*)
+	  )
+      (unwind-protect 
+	   (progn
+	     (setq *auto-commit* t)
+	     (remove-from-root key)
+	     (setf exists1 
+		   (from-root-existsp key)
+		   )
+	     (add-to-root key 'a)
+	     (setf exists2 (from-root-existsp key))
+	     (remove-from-root key)
+	     (setf exists3 (from-root-existsp key))
+	     )
+	(setq *auto-commit* *prev-commit*)
+	)
+      (values exists1 exists2 exists3)
+      )
+  nil t nil
+  )
+
+
+;; This test not only does not work, it appears to 
+;; hang sleepycat forcing a recovery!?!?!?!
+;; (deftest cursor-put
+;;     (let* ((ibt (build-indexed-btree *store-controller*)))
+;;       (let (
+;; 	    (index
+;; 	     (add-index ibt :index-name 'crunch :key-form 'crunch
+;; 			:populate t))
+;; 	    )
+;; 	(loop for i from 0 to 10
+;; 	   do
+;; 	   (setf (get-value i ibt) (* i i)))
+;; 	;; Now create a cursor, advance and put...
+;; 	(let ((c (make-cursor ibt)))
+;; 	  (cursor-next c)
+;; 	  (cursor-next c)
+;; 	  (cursor-put c 4 :key 10)
+;; 	  (equal (get-value 10 ibt) 4)))
+;;       )
+;;   t)


Index: elephant/tests/testserializer.lisp
diff -u elephant/tests/testserializer.lisp:1.6 elephant/tests/testserializer.lisp:1.7
--- elephant/tests/testserializer.lisp:1.6	Thu Feb 24 02:06:05 2005
+++ elephant/tests/testserializer.lisp	Wed Nov 23 18:51:59 2005
@@ -2,19 +2,19 @@
 
 (defun in-out-value (var)
   (with-buffer-streams (out-buf)
-    (deserialize (serialize var out-buf))))
+    (deserialize (serialize var out-buf) :sc *store-controller*)))
 
 (defun in-out-eq (var)
   (with-buffer-streams (out-buf)
-    (eq var (deserialize (serialize var out-buf)))))
+    (eq var (deserialize (serialize var out-buf) :sc *store-controller*))))
 
 (defun in-out-equal (var)
   (with-buffer-streams (out-buf)
-    (equal var (deserialize (serialize var out-buf)))))
+    (equal var (deserialize (serialize var out-buf) :sc *store-controller*))))
 
 (defun in-out-equalp (var)
   (with-buffer-streams (out-buf)
-    (equalp var (deserialize (serialize var out-buf)))))
+    (equalp var (deserialize (serialize var out-buf) :sc *store-controller*))))
 
 (deftest fixnums
     (are-not-null
@@ -33,7 +33,7 @@
      (typep (in-out-value most-positive-fixnum) 'fixnum)
      (typep (in-out-value most-negative-fixnum) 'fixnum))
   t t t t t)
-     
+
 (deftest bignums
     (are-not-null
      (in-out-equal 10000000000)
@@ -114,7 +114,7 @@
 (defun in-out-uninterned-equal (var)
   (with-buffer-streams (out-buf)
     (serialize var out-buf)
-    (let ((new (deserialize (serialize var out-buf))))
+    (let ((new (deserialize (serialize var out-buf) :sc *store-controller*)))
       (and (equal (symbol-name new) (symbol-name var))
 	   (equal (symbol-package new) (symbol-package var))))))
 
@@ -299,7 +299,7 @@
 
 (defun in-out-deep-equalp (var)
   (with-buffer-streams (out-buf)
-    (deep-equalp var (deserialize (serialize var out-buf)))))
+    (deep-equalp var (deserialize (serialize var out-buf) :sc *store-controller*))))
 
 (deftest objects
     (are-not-null
@@ -315,8 +315,8 @@
 	  (l1 (make-list 100))
 	  (h (make-hash-table :test 'equal))
 	  (g (make-array '(2 3 4)))
-	  (f (make-instance 'foo))
-	  (b (make-instance 'bar)))
+	  (f (make-instance 'foo ))
+	  (b (make-instance 'bar )))
       (setf (car c1) c1)
       (setf (cdr c1) c1)
       (setf (car c2) c1)
@@ -351,11 +351,16 @@
 
 (deftest persistent
     (let* ((*auto-commit* t)
-	   (f1 (make-instance 'pfoo))
-	   (f2 (make-instance 'pfoo :slot1 "this is a string"))
-	   (b1 (make-instance 'pbar :slot2 "another string"))
-	   (b2 (make-instance 'pbar))
-	   (h (make-instance 'btree)))
+	   (f1 (make-instance 'pfoo  :sc *store-controller*))
+	   (f2 (make-instance 'pfoo :slot1 "this is a string"  :sc *store-controller*))
+	   (b1 (make-instance 'pbar :slot2 "another string"  :sc *store-controller*))
+	   (b2 (make-instance 'pbar  :sc *store-controller*))
+
+;; Note, this as will will have to be split on clas,s if we we want to 
+;; test it both ways...since we won't know how they will want it 
+;; implemented, we will have to somehow make a choice here, maybe 
+;; based on the stype of *store-controller*
+	   (h (build-btree *store-controller*)))
       (are-not-null
        (in-out-eq f1)
        (in-out-eq f2)
@@ -368,4 +373,7 @@
 	      (eq f1 (slot1 f1)))
        (progn (setf (get-value f2 h) f2)
 	      (eq (get-value f2 h) f2))))
-  t t t t t t t t)
+   t t t t t t t t)
+
+  
+	  




More information about the Elephant-cvs mailing list