[bknr-cvs] r2369 - branches/bos/projects/bos/m2
ksprotte at common-lisp.net
ksprotte at common-lisp.net
Sat Jan 19 11:57:40 UTC 2008
Author: ksprotte
Date: Sat Jan 19 06:57:38 2008
New Revision: 2369
Modified:
branches/bos/projects/bos/m2/allocation-cache.lisp
branches/bos/projects/bos/m2/allocation-test.lisp
Log:
added test allocation-area.one-contract.notany-m2-contract, which
now also passes based on new function cache-entry-valid-p
in allocation-cache.lisp
Modified: branches/bos/projects/bos/m2/allocation-cache.lisp
==============================================================================
--- branches/bos/projects/bos/m2/allocation-cache.lisp (original)
+++ branches/bos/projects/bos/m2/allocation-cache.lisp Sat Jan 19 06:57:38 2008
@@ -119,16 +119,43 @@
(defstruct cache-entry
area region)
-(declaim (inline index-lookup index-pop index-push size-indexed-p))
-(defun index-lookup (n)
+(defun cache-entry-valid-p (cache-entry)
+ (notany #'m2-contract (cache-entry-region cache-entry)))
+
+(declaim (inline %index-lookup %index-pop index-lookup index-pop index-push size-indexed-p))
+(defun %index-lookup (n)
"Will return the first index cache-entry of size N or
-nil if it does not exist."
+nil if it does not exist. The entry is not validated!"
(first (aref (allocation-cache-index *allocation-cache*) (1- n))))
+(defun %index-pop (n)
+ "As INDEX-LOOKUP, but will remove the cache-entry
+from the index. The entry is not validated!"
+ (pop (aref (allocation-cache-index *allocation-cache*) (1- n))))
+
+(defun index-ensure-valid-entry-for-n (n)
+ "Ensures that the next available entry (the next
+one that would be popped) is valid. If not, the entry
+is removed recursively until a valid entry is available
+or no entries for N are left."
+ (awhen (%index-lookup n)
+ (if (cache-entry-valid-p it)
+ it
+ (progn
+ (%index-pop n)
+ (index-ensure-valid-entry-for-n n)))))
+
+(defun index-lookup (n)
+ "Will return the first valid cache-entry of size N or
+nil if it does not exist."
+ (index-ensure-valid-entry-for-n n))
+
(defun index-pop (n)
"As INDEX-LOOKUP, but will remove the cache-entry
from the index."
- (pop (aref (allocation-cache-index *allocation-cache*) (1- n))))
+ (awhen (index-lookup n)
+ (%index-pop n)
+ it))
(defun index-push (n cache-entry)
"Add cache-entry (which has to be of size N) to index."
Modified: branches/bos/projects/bos/m2/allocation-test.lisp
==============================================================================
--- branches/bos/projects/bos/m2/allocation-test.lisp (original)
+++ branches/bos/projects/bos/m2/allocation-test.lisp Sat Jan 19 06:57:38 2008
@@ -37,4 +37,13 @@
(m2-count (* 100 100)))
(finishes (make-contract sponsor m2-count))
(signals (error) (make-contract sponsor m2-count))
- (is (zerop (allocation-area-free-m2s area))))))
\ No newline at end of file
+ (is (zerop (allocation-area-free-m2s area))))))
+
+(test allocation-area.one-contract.notany-m2-contract
+ (with-fixture empty-store ()
+ (let ((area (make-allocation-rectangle 0 0 8 8))
+ (sponsor (make-sponsor :login "test-sponsor")))
+ (finishes (make-contract sponsor 10))
+ (is (= (- 64 10) (allocation-area-free-m2s area)))
+ (signals (error) (make-contract sponsor 64)))))
+
More information about the Bknr-cvs
mailing list