[isidorus-cvs] r213 - in branches/new-datamodel/src: model unit_tests
Lukas Giessmann
lgiessmann at common-lisp.net
Fri Feb 26 15:50:45 UTC 2010
Author: lgiessmann
Date: Fri Feb 26 10:50:44 2010
New Revision: 213
Log:
new-datamodel: added some unit-tests for the base class TypableC; optimized the function add-type.
Modified:
branches/new-datamodel/src/model/datamodel.lisp
branches/new-datamodel/src/unit_tests/datamodel_test.lisp
Modified: branches/new-datamodel/src/model/datamodel.lisp
==============================================================================
--- branches/new-datamodel/src/model/datamodel.lisp (original)
+++ branches/new-datamodel/src/model/datamodel.lisp Fri Feb 26 10:50:44 2010
@@ -94,6 +94,9 @@
(in-package :datamodel)
+;;TODO: add-type/add-parent/add-<x>-identifier handle situation where
+;; new objects hve to be bound in an earlier revision than one
+;; where a object is already bound
;;TODO: finalize add-reifier
;;TODO: replace add-to-version-history in VersionedAssociationC with a pseudo
;; initarg in make-construct
@@ -170,7 +173,7 @@
(defpclass TypableC()
- ((instance-of :associate (TypeAssociationC type-topic)
+ ((instance-of :associate (TypeAssociationC typable-construct)
:inherit t
:documentation "Contains all association-objects that contain
the actual type-topic."))
@@ -1527,6 +1530,7 @@
(map 'list #'player-topic
(filter-slot-value-by-revision construct 'player
:start-revision revision))))
+ ;;TODO: search a player-assoc for the passed construct that was set in an older version
(cond ((and already-set-player
(eql (first already-set-player) player-topic))
(let ((player-assoc
@@ -1763,24 +1767,30 @@
(let ((already-set-type
(map 'list #'type-topic
(filter-slot-value-by-revision construct 'instance-of
- :start-revision revision))))
- (cond ((and already-set-type
- (eql (first already-set-type) type-topic))
+ :start-revision revision)))
+ (same-type-assoc
+ (loop for type-assoc in (slot-p construct 'instance-of)
+ when (eql (type-topic type-assoc) type-topic)
+ return type-assoc)))
+ (when (and already-set-type
+ (not (eql type-topic already-set-type)))
+ (error "From add-type(): ~a can't be typed by ~a since it is typed by ~a"
+ construct type-topic already-set-type))
+ (cond (already-set-type
(let ((type-assoc
(loop for type-assoc in (slot-p construct 'instance-of)
when (eql type-topic (type-topic type-assoc))
return type-assoc)))
(add-to-version-history type-assoc :start-revision revision)))
- ((not already-set-type)
+ (same-type-assoc
+ (add-to-version-history same-type-assoc :start-revision revision))
+ (t
(let ((assoc
(make-instance 'TypeAssociationC
:type-topic type-topic
:typable-construct construct)))
- (add-to-version-history assoc :start-revision revision)))
- (t
- (error "From add-type(): ~a can't be typed by ~a since it is already typed by the topic ~a"
- construct type-topic already-set-type)))
- construct)))
+ (add-to-version-history assoc :start-revision revision)))))
+ construct))
(defgeneric delete-type (construct type-topic &key revision)
Modified: branches/new-datamodel/src/unit_tests/datamodel_test.lisp
==============================================================================
--- branches/new-datamodel/src/unit_tests/datamodel_test.lisp (original)
+++ branches/new-datamodel/src/unit_tests/datamodel_test.lisp Fri Feb 26 10:50:44 2010
@@ -30,7 +30,8 @@
:test-ReifiableConstructC
:test-OccurrenceC
:test-VariantC
- :test-NameC))
+ :test-NameC
+ :test-TypableC))
;;TODO: test delete-construct
@@ -689,6 +690,41 @@
(is-false (parent name-2))
(add-parent name-2 top-1 :revision revision-8)
(is (eql top-1 (parent name-2))))))
+
+
+(test test-TypableC ()
+ "Tests various functions of the base class TypableC."
+ (with-fixture with-empty-db (*db-dir*)
+ (let ((name-1 (make-instance 'NameC))
+ (name-2 (make-instance 'NameC))
+ (top-1 (make-instance 'TopicC))
+ (top-2 (make-instance 'TopicC))
+ (revision-0-5 50)
+ (revision-1 100)
+ (revision-2 200)
+ (revision-3 300))
+ (setf *TM-REVISION* revision-1)
+ (is-false (instance-of name-1))
+ (add-type name-1 top-1)
+ (is (eql top-1 (instance-of name-1)))
+ (is-false (instance-of name-1 :revision revision-0-5))
+ (is (eql top-1 (instance-of name-1 :revision revision-2)))
+ (signals error (add-type name-1 top-2))
+ (add-type name-2 top-1 :revision revision-2)
+ (is (= (length (union (list name-1 name-2)
+ (used-as-type top-1))) 2))
+ (is (= (length (union (list name-1)
+ (used-as-type top-1
+ :revision revision-1))) 1))
+ (delete-type name-1 top-1 :revision revision-3)
+ (is-false (instance-of name-1))
+ (is (= (length (union (list name-2)
+ (used-as-type top-1))) 1))
+ (add-type name-1 top-1 :revision revision-3)
+ (is (eql top-1 (instance-of name-1)))
+ (is (= (length (union (list name-1 name-2)
+ (used-as-type top-1))) 2))
+ (is (= (length (slot-value top-1 'd::used-as-type)) 2)))))
@@ -707,4 +743,5 @@
(it.bese.fiveam:run! 'test-OccurrenceC)
(it.bese.fiveam:run! 'test-VariantC)
(it.bese.fiveam:run! 'test-NameC)
+ (it.bese.fiveam:run! 'test-TypableC)
)
\ No newline at end of file
More information about the Isidorus-cvs
mailing list