[elephant-cvs] CVS elephant/tests

ieslick ieslick at common-lisp.net
Sun Mar 11 03:31:10 UTC 2007


Update of /project/elephant/cvsroot/elephant/tests
In directory clnet:/tmp/cvs-serv26571/tests

Modified Files:
	elephant-tests.lisp testmigration.lisp 
Log Message:
Added functionality and test for migrating persistent references inside lisp aggregates: array, list and hash tables

--- /project/elephant/cvsroot/elephant/tests/elephant-tests.lisp	2007/02/26 19:12:19	1.26
+++ /project/elephant/cvsroot/elephant/tests/elephant-tests.lisp	2007/03/11 03:31:10	1.27
@@ -145,6 +145,7 @@
     (print (do-test 'migrate-btree))
     (print (do-test 'migrate-idx-btree))
     (print (do-test 'migrate-pclass))
+    (print (do-test 'migrate-mult-pclass))
     (print (do-test 'migrate-ipclass))))
     
 (defun do-migration-test-spec (test spec1 spec2)
--- /project/elephant/cvsroot/elephant/tests/testmigration.lisp	2007/02/03 04:09:14	1.14
+++ /project/elephant/cvsroot/elephant/tests/testmigration.lisp	2007/03/11 03:31:10	1.15
@@ -65,7 +65,7 @@
 		      do
 		      (setf (get-value i ibt) (* i i))))
 		 (let ((mig (migrate sc2 ibt)))
-		   (btree-differ ibt mig)))
+		   (btree-differ-p ibt mig)))
 	    (close-store sc1)
 	    (close-store sc2))))
   nil)
@@ -103,7 +103,7 @@
 		       (progn
 			 (format t "YIKES ~A ~%" i)
 			 )))
-		(not (btree-differ ibt mig)))))
+		(not (btree-differ-p ibt mig)))))
 	  (progn
 	    (setq *store-controller* old-store)
 	    (close-store sc1)
@@ -144,6 +144,45 @@
 	    (close-store sc2))))
   t)
 
+(deftest migrate-mult-pclass 
+    (progn
+      (let* ((*store-controller* nil)
+	     (sc1 (open-store *test-spec-primary* :recover t :deadlock-detect t))
+	     (sc2 (open-store *test-spec-secondary* :recover t :deadlock-detect t)))
+	(unwind-protect
+	     (progn (elephant::reset-migrate-duplicate-detection)
+		    (let* ((simplesrc (make-instance 'pfoo :slot1 0 :sc sc1))
+			   (i1 (make-instance 'pfoo :slot1 1 :sc sc1))
+			   (i2 (make-instance 'pfoo :slot1 2 :sc sc1))
+			   (i3 (make-instance 'pfoo :slot1 3 :sc sc1))
+			   (list (list i1 i1))
+			   (array (make-array '(2 2) :initial-contents `((,i2 1)
+									 (,i2 2))))
+			   (hash (make-hash-table)))
+	    (setf (gethash 1 hash) i3)
+	    (setf (gethash 2 hash) i3)
+	    (let* ((newsimple (migrate sc2 simplesrc))
+		   (newlist (migrate sc2 list))
+		   (newarray (migrate sc2 array))
+		   (newhash (migrate sc2 hash)))
+		(values (and (and (slot-boundp newsimple 'slot1)
+				  (eq (slot1 newsimple) 0)))
+			(and (not (eq i1 (first newlist)))
+			     (eq (first newlist) (second newlist))
+			     (and (slot-boundp (first newlist) 'slot1)
+				  (eq (slot1 (first newlist)) 1)))
+			(and (not (eq i2 (aref newarray 0 0)))
+			     (eq (aref newarray 0 0) (aref newarray 1 0))
+			     (and (slot-boundp (aref newarray 0 0) 'slot1)
+				  (eq (slot1 (aref newarray 0 0)) 2)))
+			(and (not (eq i3 (gethash 1 newhash)))
+			     (eq (gethash 1 newhash) (gethash 2 newhash))
+			     (and (slot-boundp (gethash 1 newhash) 'slot1)
+				  (eq (slot1 (gethash 1 newhash)) 3)))))))
+	  (close-store sc1)
+	  (close-store sc2))))
+  t t t t t t t t t t)
+
 (defpclass ipfoo ()
   ((slot1 :accessor slot1 :initarg :slot1 :index t)))
 
@@ -167,7 +206,7 @@
 		     (remove-kv 'ipfoo (elephant::controller-class-root sc2)))
 		   (setf (elephant::%index-cache (find-class 'ipfoo)) nil)
 		   (find-class-index 'ipfoo :sc sc1)
-		   (format t "Making objects~%")
+;;		   (format t "Making objects~%")
 ;;		   (with-transaction (:store-controller sc2)
 ;;		     (drop-instances (get-instances-by-class 'ipfoo) :sc sc2))
 		   (with-transaction (:store-controller sc1 :retries 2)
@@ -175,12 +214,12 @@
 		     (make-instance 'ipfoo :slot1 1 :sc sc1)
 		     (make-instance 'ipfoo :slot1 10 :sc sc1)
 		     (make-instance 'ipfoo :slot1 20 :sc sc1))
-		   (format t "Migrating~%")
+;;		   (format t "Migrating~%")
 		   (migrate sc2 sc1)
 		   ;; Make sure our ipfoo class now points at a cache in sc2!
 		   (assert (equal (elephant::controller-spec sc2)
-				  (:dbcn-spc-pst (elephant::%index-cache (find-class 'ipfoo)))))
-		   (format t "Fetching~%")
+				  (elephant::dbcn-spc-pst (elephant::%index-cache (find-class 'ipfoo)))))
+;;		   (format t "Fetching~%")
 		   (let ((fm1 (get-instances-by-value 'ipfoo 'slot1 1))
 			 (fm2 (get-instances-by-value 'ipfoo 'slot1 10))
 			 (fm3 (get-instances-by-value 'ipfoo 'slot1 20))




More information about the Elephant-cvs mailing list