- Timestamp:
- 2015-06-22T19:56:53-07:00 (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/f4grobner/5am-symbolic-poly.lisp
r3224 r3225 51 51 (in-package :5am-symbolic-poly) 52 52 53 (def-suite poly-suite54 :description " Monompackage suite")53 (def-suite symbolic-poly-suite 54 :description "Symbolic polynomial package suite") 55 55 56 56 (in-suite poly-suite) 57 57 58 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;59 ;;60 ;; POLY class tests61 ;;62 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;63 58 64 (def-fixture poly-add-context () 65 (let ((p (make-instance 'poly)) 66 (q (make-instance 'poly :order nil)) 67 (p+q (make-instance 'poly)) 68 (p-q (make-instance 'poly)) 69 (p-uminus (make-instance 'poly))) 70 ;; Populate the polynomials; the lists of (exponents . coefficient) pairs 71 ;; must be in increasing order in Q, but Q is unordered (:ORDER NIL) 72 ;; so it will be automatically sorted. 73 (dolist (x '( ((2) . 22) ((4) . 44) ((5) . 55) ((8) . 88) ((9) . 99) )) 74 (insert-item p (make-instance 'term :exponents (car x) :coeff (cdr x)))) 75 (dolist (x '( ((9) . 90) ((0) . 11) ((2) . 20) ((3) . 33) ((4) . -44) ((7) . 77) ((8) . 88) )) 76 (insert-item q (make-instance 'term :exponents (car x) :coeff (cdr x)))) 77 ;; P+Q 78 (dolist (x '(((0) . 11) ((2) . 42) ((3) . 33) ((5) . 55) ((7) . 77) ((8) . 176) ((9) . 189) )) 79 (insert-item p+q (make-instance 'term :exponents (car x) :coeff (cdr x)))) 80 ;; P-Q 81 (dolist (x '(((0) . -11) ((2) . 2) ((3) . -33) ((4) . 88) ((5) . 55) ((7) . -77) ((9) . 9))) 82 (insert-item p-q (make-instance 'term :exponents (car x) :coeff (cdr x)))) 83 ;; -P 84 (dolist (x '( ((2) . -22) ((4) . -44) ((5) . -55) ((8) . -88) ((9) . -99) )) 85 (insert-item p-uminus (make-instance 'term :exponents (car x) :coeff (cdr x)))) 86 ;;(print p) (print q) (print p+q) (print p-q) 87 (&body))) 88 89 (test poly-add 90 "Polynomial addition" 91 (with-fixture poly-add-context () (is (r-equalp (add-to p q) p+q))) 92 (with-fixture poly-add-context () (is (r-equalp (subtract-from p q) p-q))) 93 (with-fixture poly-add-context () (is (r-equalp (unary-minus p) p-uminus))) 94 ) 95 96 (def-fixture poly-multiply-context () 97 (let ((p (make-instance 'poly)) 98 (q (make-instance 'poly :order nil)) 99 (p*q (make-instance 'poly))) 100 ;; Populate the polynomials; the lists of (exponents . coefficient) pairs 101 ;; must be in increasing order in Q, but Q is unordered (:ORDER NIL) 102 ;; so it will be automatically sorted. 103 (dolist (x '( ((0) . 1) ((1) . 2) )) 104 (insert-item p (make-instance 'term :exponents (car x) :coeff (cdr x)))) 105 (dolist (x '( ((0) . 1) ((1) . 3) )) 106 (insert-item q (make-instance 'term :exponents (car x) :coeff (cdr x)))) 107 ;; P*Q 108 (dolist (x '( ((0) . 1) ((1) . 5) ((2) . 6))) 109 (insert-item p*q (make-instance 'term :exponents (car x) :coeff (cdr x)))) 110 (&body))) 111 112 113 (test poly-multiply 114 "Polynomial multiplication" 115 (with-fixture poly-multiply-context () (is (r-equalp (r* p q) p*q))) 116 ) 117 118 (test poly-standard-extension 119 "Standard extension" 120 (let* ((p (alist->poly '( ((0) . 1) ((1) . 2)))) 121 (q (alist->poly '( ((0) . 1) ((2) . 3)))) 122 (plist (list p q)) 123 (p-ext (alist->poly '( ((1 0 0) . 1) ((1 0 1) . 2)))) 124 (q-ext (alist->poly '( ((0 1 0) . 1) ((0 1 2) . 3)))) 125 (plist-st-ext (list p-ext q-ext))) 126 (is (r-equalp (standard-extension plist) plist-st-ext)))) 127 128 (test poly-standard-extension-1 129 "Standard extension 1" 130 (let* ((p (alist->poly '( ((0) . 1) ((1) . 2)))) 131 (q (alist->poly '( ((0) . 1) ((2) . 3)))) 132 (plist (list p q)) 133 (p-ext (alist->poly '( ((0 0 0) . -1) ((1 0 0) . 1) ((1 0 1) . 2)))) 134 (q-ext (alist->poly '( ((0 0 0) . -1) ((0 1 0) . 1) ((0 1 2) . 3)))) 135 (plist-st-ext (list p-ext q-ext))) 136 (is (r-equalp (standard-extension-1 plist) plist-st-ext)))) 137 138 (test poly-standard-sum 139 "Standard sum" 140 (let* ((p (alist->poly '( ((0) . 1) ((1) . 2)))) 141 (q (alist->poly '( ((0) . 1) ((2) . 3)))) 142 (plist (list p q)) 143 (std-sum (alist->poly '(((0 0 0) . -1) ((0 1 0) . 1) ((0 1 2) . 3) 144 ((1 0 0) . 1) ((1 0 1) . 2))))) 145 (is (r-equalp (standard-sum plist) std-sum)))) 146 147 (run! 'poly-suite) 59 (run! 'symbolic-poly-suite) 148 60 (format t "All tests done!~%") 149 61
Note:
See TracChangeset
for help on using the changeset viewer.