diff --git a/books/bookvol10.5.pamphlet b/books/bookvol10.5.pamphlet
index 5fbcb2a..9a76229 100644
--- a/books/bookvol10.5.pamphlet
+++ b/books/bookvol10.5.pamphlet
@@ -761,6 +761,8 @@ c NEW
\begin{chunk}{dcabs1 example}
program dcabs1EX
+* Tim Daly April 23, 2012
+* unit tests for BLAS dcabs1
double complex a,b,c,d
a=COMPLEX(2.1,2.1)
b=(3.1D2,4.1D3)
@@ -1434,6 +1436,103 @@ c
\end{chunk}
+\begin{chunk}{dasum example}
+ program dasumEX
+* Tim Daly April 24, 2012
+* unit tests for BLAS dasum
+ double precision a(6)
+ double precision b
+ a = (/ 1.0D0, 2.0D0, 3.0D0, 4.0D0, 5.0D0, 6.0D0 /)
+ write(6,100)a(1),a(2),a(3)
+ 100 format("a(1)=",f6.3," a(2)=",f6.3," a(3)=",f6.3)
+ write(6,200)a(4),a(5),a(6)
+ 200 format("a(4)=",f6.3," a(5)=",f6.3," a(6)=",f6.3)
+ d=dasum(3,a,-1)
+ write(6,300)d
+ 300 format("d=",f6.3," should be 0.0, negative index")
+ d=dasum(3,a,0)
+ write(6,301)d
+ 301 format("d=",f6.3," should be 0.0, zero increment")
+ d=dasum(-11,a,1)
+ write(6,302)d
+ 302 format("d=",f6.3," should be 0.0, negative elements")
+ d=dasum(0,a,1)
+ write(6,303)d
+ 303 format("d=",f6.3," should be 0.0, no elements")
+ d=dasum(1,a,1)
+ write(6,304)d
+ 304 format("d=",f6.3," should be 1.0")
+ d=dasum(2,a,1)
+ write(6,305)d
+ 305 format("d=",f6.3," should be 3.0 = 1.0+2.0")
+ d=dasum(3,a,1)
+ write(6,306)d
+ 306 format("d=",f6.3," should be 6.0 = 1.0+2.0+3.0")
+ d=dasum(4,a,1)
+ write(6,307)d
+ 307 format("d=",f6.3," should be 10.0 = 1.0+2.0+3.0+4.0")
+ d=dasum(5,a,1)
+ write(6,308)d
+ 308 format("d=",f6.3," should be 15.0 = 1.0+2.0+3.0+4.0+5.0")
+ d=dasum(6,a,1)
+ write(6,309)d
+ 309 format("d=",f6.3," should be 21.0 = 1.0+2.0+3.0+4.0+5.0+6.0")
+ d=dasum(7,a,1)
+ write(6,310)d
+ 310 format("d=",f6.3," should be 21.0 = 1.0+2.0+3.0+4.0+5.0+6.0")
+ d=dasum(1,a,2)
+ write(6,311)d
+ 311 format("d=",f6.3," should be 1.0 = 1.0")
+ d=dasum(2,a,2)
+ write(6,312)d
+ 312 format("d=",f6.3," should be 4.0 = 1.0+3.0")
+ d=dasum(3,a,2)
+ write(6,313)d
+ 313 format("d=",f6.3," should be 9.0 = 1.0+3.0+5.0")
+ d=dasum(4,a,2)
+ write(6,314)d
+ 314 format("d=",f6.3," should be 9.0 = 1.0+3.0+5.0")
+ d=dasum(1,a,3)
+ write(6,315)d
+ 315 format("d=",f6.3," should be 1.0 = 1.0")
+ d=dasum(2,a,3)
+ write(6,316)d
+ 316 format("d=",f6.3," should be 5.0 = 1.0+4.0")
+ d=dasum(3,a,3)
+ write(6,317)d
+ 317 format("d=",f6.3," should be 5.0 = 1.0+4.0")
+ d=dasum(1,a,4)
+ write(6,318)d
+ 318 format("d=",f6.3," should be 1.0 = 1.0")
+ d=dasum(2,a,4)
+ write(6,319)d
+ 319 format("d=",f6.3," should be 6.0 = 1.0+5.0")
+ d=dasum(3,a,4)
+ write(6,320)d
+ 320 format("d=",f6.3," should be 6.0 = 1.0+5.0")
+ d=dasum(1,a,5)
+ write(6,321)d
+ 321 format("d=",f6.3," should be 1.0 = 1.0")
+ d=dasum(2,a,5)
+ write(6,322)d
+ 322 format("d=",f6.3," should be 7.0 = 1.0+6.0")
+ d=dasum(3,a,5)
+ write(6,323)d
+ 323 format("d=",f6.3," should be 7.0 = 1.0+6.0")
+ d=dasum(1,a,6)
+ write(6,324)d
+ 324 format("d=",f6.3," should be 1.0 = 1.0")
+ d=dasum(2,a,6)
+ write(6,325)d
+ 325 format("d=",f6.3," should be 1.0 = 1.0")
+ d=dasum(1,a,7)
+ write(6,326)d
+ 326 format("d=",f6.3," should be 1.0 = 1.0")
+ stop
+ end
+
+\end{chunk}
+
\begin{chunk}{BLAS 1 dasum}
(defun dasum (n dx incx)
(declare (type (simple-array double-float (*)) dx) (type fixnum incx n))
@@ -1512,6 +1611,11 @@ b:PRIMARR(DFLOAT):=[ [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0] ]
--R Type: PrimitiveArray(DoubleFloat)
--E 6
+\end{chunk}
+Note that Axiom properly handles array indexes that are out of bounds.
+The BLAS daxpy routine cannot check this condition.
+\begin{chunk}{daxpy.input}
+
--S 7 of 22
daxpy(8,2.0,a,1,b,1)
--R
@@ -1850,6 +1954,70 @@ c
\end{chunk}
+\begin{chunk}{daxpy example}
+ program daxpyEX
+* Tim Daly April 24, 2012
+* unit tests for BLAS daxpy (a*x+y)
+ double precision a(7)
+ double precision b(7)
+ double precision c(7)
+ a = (/ 1.0D0, 2.0D0, 3.0D0, 4.0D0, 5.0D0, 6.0D0, 7.0D0 /)
+ b = (/ 1.0D0, 2.0D0, 3.0D0, 4.0D0, 5.0D0, 6.0D0, 7.0D0 /)
+ write(6,100)a(1),a(2),a(3)
+ 100 format("a(1)=",f6.3," a(2)=",f6.3," a(3)=",f6.3)
+ write(6,101)a(4),a(5),a(6)
+ 101 format("a(4)=",f6.3," a(5)=",f6.3," a(6)=",f6.3)
+ write(6,102)b(1),b(2),b(3)
+ 102 format("b(1)=",f6.3," b(2)=",f6.3," b(3)=",f6.3)
+ write(6,103)b(4),b(5),b(6)
+ 103 format("b(4)=",f6.3," b(5)=",f6.3," b(6)=",f6.3)
+ call daxpy(3,2.0d0,a,1,b,1)
+ write(6,200)
+ 200 format(/,"t200 is (/ 3.0, 6.0, 9.0, 4.0, 5.0, 6.0, 7.0 /)")
+ write(6,201)b(1),b(2),b(3)
+ 201 format("b(1)=",f6.3," b(2)=",f6.3," b(3)=",f6.3)
+ write(6,202)b(4),b(5),b(6),b(7)
+ 202 format("b(4)=",f6.3," b(5)=",f6.3," b(6)=",f6.3," b(7)=",f6.3)
+ write(6,300)
+ 300 format(/,"t300 is (/ 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0 /)")
+ b = (/ 1.0D0, 2.0D0, 3.0D0, 4.0D0, 5.0D0, 6.0D0, 7.0D0 /)
+ call daxpy(7,2.0d0,a,1,b,1)
+ write(6,201)b(1),b(2),b(3)
+ write(6,202)b(4),b(5),b(6),b(7)
+ write(6,302)
+ 302 format(/,"t302 is (/ 3.0, 2.0, 3.0, 12.0, 5.0, 6.0, 21.0 /)")
+ b = (/ 1.0D0, 2.0D0, 3.0D0, 4.0D0, 5.0D0, 6.0D0, 7.0D0 /)
+ call daxpy(3,2.0d0,a,3,b,3)
+ write(6,201)b(1),b(2),b(3)
+ write(6,202)b(4),b(5),b(6),b(7)
+ write(6,303)
+ 303 format(/,"t303 is (/ 3.0, 2.0, 9.0, 4.0, 15.0, 6.0, 21.0 /)")
+ b = (/ 1.0D0, 2.0D0, 3.0D0, 4.0D0, 5.0D0, 6.0D0, 7.0D0 /)
+ call daxpy(4,2.0d0,a,2,b,2)
+ write(6,201)b(1),b(2),b(3)
+ write(6,202)b(4),b(5),b(6),b(7)
+ write(6,305)
+ 305 format(/,"t305 is (/ 3.0, 2.0, 9.0, 4.0, 15.0, 6.0, 7.0 /)")
+ b = (/ 1.0D0, 2.0D0, 3.0D0, 4.0D0, 5.0D0, 6.0D0, 7.0D0 /)
+ call daxpy(3,2.0d0,a,2,b,2)
+ write(6,201)b(1),b(2),b(3)
+ write(6,202)b(4),b(5),b(6),b(7)
+ write(6,306)
+ 306 format(/,"t306 is (/ -1.0, 2.0, -1.0, 4.0, -1.0, 6.0, 7.0 /)")
+ b = (/ 1.0D0, 2.0D0, 3.0D0, 4.0D0, 5.0D0, 6.0D0, 7.0D0 /)
+ call daxpy(3,-2.0d0,a,1,b,2)
+ write(6,201)b(1),b(2),b(3)
+ write(6,202)b(4),b(5),b(6),b(7)
+ write(6,307)
+ 307 format(/,"t307 is (/ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0 /)")
+ b = (/ 1.0D0, 2.0D0, 3.0D0, 4.0D0, 5.0D0, 6.0D0, 7.0D0 /)
+ call daxpy(3,0.0d0,a,1,b,2)
+ write(6,201)b(1),b(2),b(3)
+ write(6,202)b(4),b(5),b(6),b(7)
+ stop
+ end
+\end{chunk}
+
\begin{chunk}{BLAS 1 daxpy}
(defun daxpy (n da dx incx dy incy)
(declare (type (simple-array double-float) dx dy)
@@ -1889,6 +2057,32 @@ c
dy)
\end{chunk}
+
+\begin{chunk}{BLAS 1 daxpy lisp test}
+(setq a (vector 1.0d0 2.0d0 3.0d0 4.0d0 5.0d0 6.0d0 7.0d0))
+(setq b (vector 1.0d0 2.0d0 3.0d0 4.0d0 5.0d0 6.0d0 7.0d0))
+(daxpy 3 2.0d0 a 1 b 1)
+(setq b (vector 1.0d0 2.0d0 3.0d0 4.0d0 5.0d0 6.0d0 7.0d0))
+(daxpy 7 2.0d0 a 1 b 1)
+(setq b (vector 1.0d0 2.0d0 3.0d0 4.0d0 5.0d0 6.0d0 7.0d0))
+(daxpy 8 2.0d0 a 1 b 1)
+(setq b (vector 1.0d0 2.0d0 3.0d0 4.0d0 5.0d0 6.0d0 7.0d0))
+(daxpy 3 2.0d0 a 3 b 3)
+(setq b (vector 1.0d0 2.0d0 3.0d0 4.0d0 5.0d0 6.0d0 7.0d0))
+(daxpy 4 2.0d0 a 2 b 2)
+(setq b (vector 1.0d0 2.0d0 3.0d0 4.0d0 5.0d0 6.0d0 7.0d0))
+(daxpy 5 2.0d0 a 2 b 2)
+(setq b (vector 1.0d0 2.0d0 3.0d0 4.0d0 5.0d0 6.0d0 7.0d0))
+(daxpy 3 2.0d0 a 2 b 2)
+(setq b (vector 1.0d0 2.0d0 3.0d0 4.0d0 5.0d0 6.0d0 7.0d0))
+(daxpy 3 -2.0d0 a 2 b 2)
+(setq a (vector 1.0d0 2.0d0 3.0d0))
+(setq b (vector 1.0d0 2.0d0 3.0d0 4.0d0 5.0d0))
+(daxpy 3 -2.0d0 a 1 b 2)
+(setq b (vector 1.0d0 2.0d0 3.0d0 4.0d0 5.0d0 6.0d0 7.0d0))
+(daxpy 3 0.0d0 a 1 b 2)
+
+\end{chunk}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{dcopy BLAS}
%\pagehead{dcopy}{dcopy}
diff --git a/changelog b/changelog
index b27312b..2893cef 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,5 @@
+20120425 tpd src/axiom-website/patches.html 20120425.01.tpd.patch
+20120425 tpd books/bookvol10.5 BLAS1 daxpy test cases
20120423 tpd src/axiom-website/patches.html 20120423.01.tpd.patch
20120423 tpd books/bookvol10.5 add missing lapack routines
20120422 tpd src/axiom-website/patches.html 20120422.01.tpd.patch
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index 7c28148..03e5e07 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -3888,5 +3888,7 @@ src/input/cohen.input Joel Cohen algebra example
books/bookvol10.5 add LAPACK reference code
20120423.01.tpd.patch
books/bookvol10.5 add missing lapack routines
+20120425.01.tpd.patch
+books/bookvol10.5 BLAS1 daxpy test cases