Added RESULT type corrections.

This commit is contained in:
gheber 2015-01-01 18:30:57 -06:00
parent b3627d3b5d
commit ad86b8c500
7 changed files with 69 additions and 72 deletions

View File

@ -12,4 +12,5 @@
(:file "chcm-elementary-op-test") (:file "chcm-elementary-op-test")
(:file "diabolo") (:file "diabolo")
(:file "circle") (:file "circle")
(:file "ccn"))) (:file "ccn")
(:file "effective-homology-test")))

View File

@ -58,6 +58,10 @@
ZERO-CMBN ZERO-CMBN
ZERO-INTR-DFFR ZERO-INTR-DFFR
;; effective-homology.lisp
BUILD-RDCT
;; fibrations.lisp ;; fibrations.lisp
FIBRATION-TOTAL FIBRATION-TOTAL
@ -68,6 +72,7 @@
;; macros.lisp ;; macros.lisp
-1-EXPT-N
? ?
BASIS BASIS
BINOMIAL-P-Q BINOMIAL-P-Q

View File

@ -1,5 +1,6 @@
#+sbcl(require 'asdf) #+sbcl(require 'asdf)
(asdf:operate 'asdf:load-op 'kenzo)
(asdf:operate 'asdf:load-op 'kenzo-test) (asdf:operate 'asdf:load-op 'kenzo-test)
(in-package :kenzo-test) (in-package :kenzo-test)
(run!) (run!)

View File

@ -294,62 +294,63 @@
(DEFUN MRPH-GNRT (cmpr2 intr degr gnrt memory &optional (left -1) (right (fill-pointer memory))) (DEFUN MRPH-GNRT (cmpr2 intr degr gnrt memory
&optional (left -1) (right (fill-pointer memory)))
(declare (declare
(type intr-mrph intr) (type intr-mrph intr)
;; (function (fixnum gnrt) cmbn) ;; (function (fixnum gnrt) cmbn)
(type cmprf cmpr2) (type cmprf cmpr2)
(fixnum degr left right) (fixnum degr left right)
(type gnrt gnrt) (type gnrt gnrt)
(vector memory) (vector memory)
(special *results-n*) (special *results-n*)
(fixnum *results-n*)) (fixnum *results-n*))
;; (vector result) ;; (vector result)
(the (values cmbn fixnum) (the (values cmbn fixnum)
;;; cmbn = image of the generator ;; cmbn = image of the generator
;;; fixnum = index "exact" or just "lower" of the maybe stored result ;; fixnum = index "exact" or just "lower" of the maybe stored result
(loop (loop
(when (= right (1+ left)) ;; the result for gnrt is not available (when (= right (1+ left)) ; the result for gnrt is not available
(push (get-internal-run-time) *start-stack*) (push (get-internal-run-time) *start-stack*)
(let ((value (funcall intr degr gnrt)) (let ((value (funcall intr degr gnrt))
(runtime (- (get-internal-run-time) (pop *start-stack*)))) (runtime (- (get-internal-run-time) (pop *start-stack*))))
(declare (declare
(type cmbn value) (type cmbn value)
(integer runtime)) (integer runtime))
(if (> runtime +too-much-time+) (if (> runtime +too-much-time+)
;;; the condition deciding whether ;; the condition deciding whether
;;; storing must happen ;; storing must happen
(let ((old-length (vector-push-extend nil memory))) (let ((old-length (vector-push-extend nil memory)))
(declare (fixnum old-length)) (declare (fixnum old-length))
(replace memory memory (replace memory memory
:start1 (1+ right) :end1 (1+ old-length) :start1 (1+ right) :end1 (1+ old-length)
:start2 right :end2 old-length) :start2 right :end2 old-length)
(setf (aref memory right) (setf (aref memory right)
(make-result (make-result
:gnrt gnrt :value value :gnrt gnrt :value value :clnm 1
:clnm 1 :rntm (let ((rntm
:rntm (let ((rntm (float
(float (/ runtime
(/ runtime internal-time-units-per-second)))) internal-time-units-per-second))))
(declare (single-float rntm)) (declare (single-float rntm))
(incf *results-cmlt-tm* rntm) (incf *results-cmlt-tm* rntm)
rntm))) rntm)))
(mapl #'(lambda (mark) (mapl #'(lambda (mark)
(declare (cons mark)) (declare (cons mark))
(incf (car mark) runtime)) (incf (car mark) runtime))
*start-stack*) *start-stack*)
(when (> (incf *results-n*) *results-max*) (when (> (incf *results-n*) *results-max*)
(clean-results)) (clean-results))
(return (values value right))) (return (values value right)))
(return (values value left))))) (return (values value left)))))
(let ((middle (truncate (+ right left) 2))) (let ((middle (truncate (+ right left) 2)))
(declare (fixnum middle)) (declare (fixnum middle))
(ecase (funcall cmpr2 gnrt (result-gnrt (aref memory middle))) (ecase (funcall cmpr2 gnrt (result-gnrt (aref memory middle)))
(:equal (let ((rslt (aref memory middle))) (:equal (let ((rslt (aref memory middle)))
(declare (type cons rslt)) (declare (type result rslt))
(incf (result-clnm rslt)) (incf (result-clnm rslt))
(return (values (result-value rslt) middle)))) (return (values (result-value rslt) middle))))
(:less (setf right middle)) (:less (setf right middle))
(:greater (setf left middle))))))) (:greater (setf left middle)))))))

View File

@ -150,10 +150,10 @@
(orgn :type list :initarg :orgn :reader orgn))) (orgn :type list :initarg :orgn :reader orgn)))
(DEFSTRUCT (RESULT (:print-function result-print)) (DEFSTRUCT (RESULT (:print-function result-print))
(gnrt #+allegro :type #+allegro gnrt) (gnrt nil :type gnrt)
(value #+allegro :type #+allegro cmbn) (value nil :type cmbn)
(clnm #+allegro :type #+allegro fixnum) (clnm 0 :type fixnum)
(rntm #+allegro :type #+allegro single-float)) (rntm 0.0 :type single-float))
;;; ;;;
;;; EFFECTIVE HOMOLOGY ;;; EFFECTIVE HOMOLOGY

View File

@ -3,16 +3,6 @@
(in-suite :kenzo) (in-suite :kenzo)
(test result-print
(let ((rslt (format nil "~a"
(cat:make-result :gnrt 'a :value '(a a)
:clnm 23 :rntm 2.345))))
(is (equal rslt (format nil "~{~a~}"
'(#\Newline "<Rslt>" #\Newline
" GNRT-> A" #\Newline
" VALUE-> (A A)" #\Newline
" CLNM-> 23" #\Newline
" RNTM-> 2.345"))))))
#| #|
(do-control #'s-cmpr (cmbn 0 1 'a 1 'b -1 'c)) (do-control #'s-cmpr (cmbn 0 1 'a 1 'b -1 'c))
@ -24,7 +14,6 @@
(control #'s-cmpr (cmbn 0 1 'a 1 'b -1 'b)) (control #'s-cmpr (cmbn 0 1 'a 1 'b -1 'b))
|# |#
(test do-control (test do-control
(let ((comb (cat:do-control #'cat:s-cmpr (cat:cmbn 0 1 'a 1 'b -1 'c)))) (let ((comb (cat:do-control #'cat:s-cmpr (cat:cmbn 0 1 'a 1 'b -1 'c))))
(is (equal (cat:cmbn-degr comb) 0)) (is (equal (cat:cmbn-degr comb) 0))
@ -66,9 +55,9 @@
(defparameter *n* 10) (defparameter *n* 10)
(defun ff (degr i) (defun ff (degr i)
(do ((*2n* (ash *n* 1)) (do ((2*n* (ash *n* 1))
(rslt cat:+empty-list+ (rslt cat:+empty-list+
(cons (cons (let ((cffc (- (random *2n*) *n*))) (cons (cons (let ((cffc (- (random 2*n*) *n*)))
(if (minusp cffc) cffc (1+ cffc))) (if (minusp cffc) cffc (1+ cffc)))
(decf gnrt (1+ (random *n*)))) (decf gnrt (1+ (random *n*))))
rslt)) rslt))
@ -76,7 +65,7 @@
(k 0 (1+ k))) (k 0 (1+ k)))
((= k *n*) ((= k *n*)
(cat:make-cmbn (cat:make-cmbn
:degr 0 :degr degr
:list rslt)))) :list rslt))))
(test cmbn-? (test cmbn-?

View File

@ -46,9 +46,9 @@
(defparameter *n* 5) (defparameter *n* 5)
(defun ff (degr i) (defun ff (degr i)
(do ((*2n* (ash *n* 1)) (do ((2*n* (ash *n* 1))
(rslt cat:+empty-list+ (rslt cat:+empty-list+
(cons (cons (let ((cffc (- (random *2n*) *n*))) (cons (cons (let ((cffc (- (random 2*n*) *n*)))
(if (minusp cffc) cffc (1+ cffc))) (if (minusp cffc) cffc (1+ cffc)))
(decf gnrt (1+ (random *n*)))) (decf gnrt (1+ (random *n*))))
rslt)) rslt))
@ -56,7 +56,7 @@
(k 0 (1+ k))) (k 0 (1+ k)))
((= k *n*) ((= k *n*)
(cat:make-cmbn (cat:make-cmbn
:degr 0 :degr degr
:list rslt)))) :list rslt))))
(test cmps (test cmps