Used the environment variable OPENBLAS_NUM_THREADS to set the number of threads in...
[platform/upstream/openblas.git] / ctest / c_zblat1.f
1       PROGRAM ZCBLAT1
2 *     Test program for the COMPLEX*16 Level 1 CBLAS.
3 *     Based upon the original CBLAS test routine together with:
4 *     F06GAF Example Program Text
5 *     .. Parameters ..
6       INTEGER          NOUT
7       PARAMETER        (NOUT=6)
8 *     .. Scalars in Common ..
9       INTEGER          ICASE, INCX, INCY, MODE, N
10       LOGICAL          PASS
11 *     .. Local Scalars ..
12       DOUBLE PRECISION SFAC
13       INTEGER          IC
14 *     .. External Subroutines ..
15       EXTERNAL         CHECK1, CHECK2, HEADER
16 *     .. Common blocks ..
17       COMMON           /COMBLA/ICASE, N, INCX, INCY, MODE, PASS
18 *     .. Data statements ..
19       DATA             SFAC/9.765625D-4/
20 *     .. Executable Statements ..
21       WRITE (NOUT,99999)
22       DO 20 IC = 1, 10
23          ICASE = IC
24          CALL HEADER
25 *
26 *        Initialize PASS, INCX, INCY, and MODE for a new case.
27 *        The value 9999 for INCX, INCY or MODE will appear in the
28 *        detailed  output, if any, for cases that do not involve
29 *        these parameters.
30 *
31          PASS = .TRUE.
32          INCX = 9999
33          INCY = 9999
34          MODE = 9999
35          IF (ICASE.LE.5) THEN
36             CALL CHECK2(SFAC)
37          ELSE IF (ICASE.GE.6) THEN
38             CALL CHECK1(SFAC)
39          END IF
40 *        -- Print
41          IF (PASS) WRITE (NOUT,99998)
42    20 CONTINUE
43       STOP
44 *
45 99999 FORMAT (' Complex CBLAS Test Program Results',/1X)
46 99998 FORMAT ('                                    ----- PASS -----')
47       END
48       SUBROUTINE HEADER
49 *     .. Parameters ..
50       INTEGER          NOUT
51       PARAMETER        (NOUT=6)
52 *     .. Scalars in Common ..
53       INTEGER          ICASE, INCX, INCY, MODE, N
54       LOGICAL          PASS
55 *     .. Local Arrays ..
56       CHARACTER*15      L(10)
57 *     .. Common blocks ..
58       COMMON           /COMBLA/ICASE, N, INCX, INCY, MODE, PASS
59 *     .. Data statements ..
60       DATA             L(1)/'CBLAS_ZDOTC'/
61       DATA             L(2)/'CBLAS_ZDOTU'/
62       DATA             L(3)/'CBLAS_ZAXPY'/
63       DATA             L(4)/'CBLAS_ZCOPY'/
64       DATA             L(5)/'CBLAS_ZSWAP'/
65       DATA             L(6)/'CBLAS_DZNRM2'/
66       DATA             L(7)/'CBLAS_DZASUM'/
67       DATA             L(8)/'CBLAS_ZSCAL'/
68       DATA             L(9)/'CBLAS_ZDSCAL'/
69       DATA             L(10)/'CBLAS_IZAMAX'/
70 *     .. Executable Statements ..
71       WRITE (NOUT,99999) ICASE, L(ICASE)
72       RETURN
73 *
74 99999 FORMAT (/' Test of subprogram number',I3,9X,A15)
75       END
76       SUBROUTINE CHECK1(SFAC)
77 *     .. Parameters ..
78       INTEGER           NOUT
79       PARAMETER         (NOUT=6)
80 *     .. Scalar Arguments ..
81       DOUBLE PRECISION  SFAC
82 *     .. Scalars in Common ..
83       INTEGER           ICASE, INCX, INCY, MODE, N
84       LOGICAL           PASS
85 *     .. Local Scalars ..
86       COMPLEX*16        CA
87       DOUBLE PRECISION  SA
88       INTEGER           I, J, LEN, NP1
89 *     .. Local Arrays ..
90       COMPLEX*16        CTRUE5(8,5,2), CTRUE6(8,5,2), CV(8,5,2), CX(8),
91      +                  MWPCS(5), MWPCT(5)
92       DOUBLE PRECISION  STRUE2(5), STRUE4(5)
93       INTEGER           ITRUE3(5)
94 *     .. External Functions ..
95       DOUBLE PRECISION  DZASUMTEST, DZNRM2TEST
96       INTEGER           IZAMAXTEST
97       EXTERNAL          DZASUMTEST, DZNRM2TEST, IZAMAXTEST
98 *     .. External Subroutines ..
99       EXTERNAL          ZSCALTEST, ZDSCALTEST, CTEST, ITEST1, STEST1
100 *     .. Intrinsic Functions ..
101       INTRINSIC         MAX
102 *     .. Common blocks ..
103       COMMON            /COMBLA/ICASE, N, INCX, INCY, MODE, PASS
104 *     .. Data statements ..
105       DATA              SA, CA/0.3D0, (0.4D0,-0.7D0)/
106       DATA              ((CV(I,J,1),I=1,8),J=1,5)/(0.1D0,0.1D0),
107      +                  (1.0D0,2.0D0), (1.0D0,2.0D0), (1.0D0,2.0D0),
108      +                  (1.0D0,2.0D0), (1.0D0,2.0D0), (1.0D0,2.0D0),
109      +                  (1.0D0,2.0D0), (0.3D0,-0.4D0), (3.0D0,4.0D0),
110      +                  (3.0D0,4.0D0), (3.0D0,4.0D0), (3.0D0,4.0D0),
111      +                  (3.0D0,4.0D0), (3.0D0,4.0D0), (3.0D0,4.0D0),
112      +                  (0.1D0,-0.3D0), (0.5D0,-0.1D0), (5.0D0,6.0D0),
113      +                  (5.0D0,6.0D0), (5.0D0,6.0D0), (5.0D0,6.0D0),
114      +                  (5.0D0,6.0D0), (5.0D0,6.0D0), (0.1D0,0.1D0),
115      +                  (-0.6D0,0.1D0), (0.1D0,-0.3D0), (7.0D0,8.0D0),
116      +                  (7.0D0,8.0D0), (7.0D0,8.0D0), (7.0D0,8.0D0),
117      +                  (7.0D0,8.0D0), (0.3D0,0.1D0), (0.1D0,0.4D0),
118      +                  (0.4D0,0.1D0), (0.1D0,0.2D0), (2.0D0,3.0D0),
119      +                  (2.0D0,3.0D0), (2.0D0,3.0D0), (2.0D0,3.0D0)/
120       DATA              ((CV(I,J,2),I=1,8),J=1,5)/(0.1D0,0.1D0),
121      +                  (4.0D0,5.0D0), (4.0D0,5.0D0), (4.0D0,5.0D0),
122      +                  (4.0D0,5.0D0), (4.0D0,5.0D0), (4.0D0,5.0D0),
123      +                  (4.0D0,5.0D0), (0.3D0,-0.4D0), (6.0D0,7.0D0),
124      +                  (6.0D0,7.0D0), (6.0D0,7.0D0), (6.0D0,7.0D0),
125      +                  (6.0D0,7.0D0), (6.0D0,7.0D0), (6.0D0,7.0D0),
126      +                  (0.1D0,-0.3D0), (8.0D0,9.0D0), (0.5D0,-0.1D0),
127      +                  (2.0D0,5.0D0), (2.0D0,5.0D0), (2.0D0,5.0D0),
128      +                  (2.0D0,5.0D0), (2.0D0,5.0D0), (0.1D0,0.1D0),
129      +                  (3.0D0,6.0D0), (-0.6D0,0.1D0), (4.0D0,7.0D0),
130      +                  (0.1D0,-0.3D0), (7.0D0,2.0D0), (7.0D0,2.0D0),
131      +                  (7.0D0,2.0D0), (0.3D0,0.1D0), (5.0D0,8.0D0),
132      +                  (0.1D0,0.4D0), (6.0D0,9.0D0), (0.4D0,0.1D0),
133      +                  (8.0D0,3.0D0), (0.1D0,0.2D0), (9.0D0,4.0D0)/
134       DATA              STRUE2/0.0D0, 0.5D0, 0.6D0, 0.7D0, 0.7D0/
135       DATA              STRUE4/0.0D0, 0.7D0, 1.0D0, 1.3D0, 1.7D0/
136       DATA              ((CTRUE5(I,J,1),I=1,8),J=1,5)/(0.1D0,0.1D0),
137      +                  (1.0D0,2.0D0), (1.0D0,2.0D0), (1.0D0,2.0D0),
138      +                  (1.0D0,2.0D0), (1.0D0,2.0D0), (1.0D0,2.0D0),
139      +                  (1.0D0,2.0D0), (-0.16D0,-0.37D0), (3.0D0,4.0D0),
140      +                  (3.0D0,4.0D0), (3.0D0,4.0D0), (3.0D0,4.0D0),
141      +                  (3.0D0,4.0D0), (3.0D0,4.0D0), (3.0D0,4.0D0),
142      +                  (-0.17D0,-0.19D0), (0.13D0,-0.39D0),
143      +                  (5.0D0,6.0D0), (5.0D0,6.0D0), (5.0D0,6.0D0),
144      +                  (5.0D0,6.0D0), (5.0D0,6.0D0), (5.0D0,6.0D0),
145      +                  (0.11D0,-0.03D0), (-0.17D0,0.46D0),
146      +                  (-0.17D0,-0.19D0), (7.0D0,8.0D0), (7.0D0,8.0D0),
147      +                  (7.0D0,8.0D0), (7.0D0,8.0D0), (7.0D0,8.0D0),
148      +                  (0.19D0,-0.17D0), (0.32D0,0.09D0),
149      +                  (0.23D0,-0.24D0), (0.18D0,0.01D0),
150      +                  (2.0D0,3.0D0), (2.0D0,3.0D0), (2.0D0,3.0D0),
151      +                  (2.0D0,3.0D0)/
152       DATA              ((CTRUE5(I,J,2),I=1,8),J=1,5)/(0.1D0,0.1D0),
153      +                  (4.0D0,5.0D0), (4.0D0,5.0D0), (4.0D0,5.0D0),
154      +                  (4.0D0,5.0D0), (4.0D0,5.0D0), (4.0D0,5.0D0),
155      +                  (4.0D0,5.0D0), (-0.16D0,-0.37D0), (6.0D0,7.0D0),
156      +                  (6.0D0,7.0D0), (6.0D0,7.0D0), (6.0D0,7.0D0),
157      +                  (6.0D0,7.0D0), (6.0D0,7.0D0), (6.0D0,7.0D0),
158      +                  (-0.17D0,-0.19D0), (8.0D0,9.0D0),
159      +                  (0.13D0,-0.39D0), (2.0D0,5.0D0), (2.0D0,5.0D0),
160      +                  (2.0D0,5.0D0), (2.0D0,5.0D0), (2.0D0,5.0D0),
161      +                  (0.11D0,-0.03D0), (3.0D0,6.0D0),
162      +                  (-0.17D0,0.46D0), (4.0D0,7.0D0),
163      +                  (-0.17D0,-0.19D0), (7.0D0,2.0D0), (7.0D0,2.0D0),
164      +                  (7.0D0,2.0D0), (0.19D0,-0.17D0), (5.0D0,8.0D0),
165      +                  (0.32D0,0.09D0), (6.0D0,9.0D0),
166      +                  (0.23D0,-0.24D0), (8.0D0,3.0D0),
167      +                  (0.18D0,0.01D0), (9.0D0,4.0D0)/
168       DATA              ((CTRUE6(I,J,1),I=1,8),J=1,5)/(0.1D0,0.1D0),
169      +                  (1.0D0,2.0D0), (1.0D0,2.0D0), (1.0D0,2.0D0),
170      +                  (1.0D0,2.0D0), (1.0D0,2.0D0), (1.0D0,2.0D0),
171      +                  (1.0D0,2.0D0), (0.09D0,-0.12D0), (3.0D0,4.0D0),
172      +                  (3.0D0,4.0D0), (3.0D0,4.0D0), (3.0D0,4.0D0),
173      +                  (3.0D0,4.0D0), (3.0D0,4.0D0), (3.0D0,4.0D0),
174      +                  (0.03D0,-0.09D0), (0.15D0,-0.03D0),
175      +                  (5.0D0,6.0D0), (5.0D0,6.0D0), (5.0D0,6.0D0),
176      +                  (5.0D0,6.0D0), (5.0D0,6.0D0), (5.0D0,6.0D0),
177      +                  (0.03D0,0.03D0), (-0.18D0,0.03D0),
178      +                  (0.03D0,-0.09D0), (7.0D0,8.0D0), (7.0D0,8.0D0),
179      +                  (7.0D0,8.0D0), (7.0D0,8.0D0), (7.0D0,8.0D0),
180      +                  (0.09D0,0.03D0), (0.03D0,0.12D0),
181      +                  (0.12D0,0.03D0), (0.03D0,0.06D0), (2.0D0,3.0D0),
182      +                  (2.0D0,3.0D0), (2.0D0,3.0D0), (2.0D0,3.0D0)/
183       DATA              ((CTRUE6(I,J,2),I=1,8),J=1,5)/(0.1D0,0.1D0),
184      +                  (4.0D0,5.0D0), (4.0D0,5.0D0), (4.0D0,5.0D0),
185      +                  (4.0D0,5.0D0), (4.0D0,5.0D0), (4.0D0,5.0D0),
186      +                  (4.0D0,5.0D0), (0.09D0,-0.12D0), (6.0D0,7.0D0),
187      +                  (6.0D0,7.0D0), (6.0D0,7.0D0), (6.0D0,7.0D0),
188      +                  (6.0D0,7.0D0), (6.0D0,7.0D0), (6.0D0,7.0D0),
189      +                  (0.03D0,-0.09D0), (8.0D0,9.0D0),
190      +                  (0.15D0,-0.03D0), (2.0D0,5.0D0), (2.0D0,5.0D0),
191      +                  (2.0D0,5.0D0), (2.0D0,5.0D0), (2.0D0,5.0D0),
192      +                  (0.03D0,0.03D0), (3.0D0,6.0D0),
193      +                  (-0.18D0,0.03D0), (4.0D0,7.0D0),
194      +                  (0.03D0,-0.09D0), (7.0D0,2.0D0), (7.0D0,2.0D0),
195      +                  (7.0D0,2.0D0), (0.09D0,0.03D0), (5.0D0,8.0D0),
196      +                  (0.03D0,0.12D0), (6.0D0,9.0D0), (0.12D0,0.03D0),
197      +                  (8.0D0,3.0D0), (0.03D0,0.06D0), (9.0D0,4.0D0)/
198       DATA              ITRUE3/0, 1, 2, 2, 2/
199 *     .. Executable Statements ..
200       DO 60 INCX = 1, 2
201          DO 40 NP1 = 1, 5
202             N = NP1 - 1
203             LEN = 2*MAX(N,1)
204 *           .. Set vector arguments ..
205             DO 20 I = 1, LEN
206                CX(I) = CV(I,NP1,INCX)
207    20       CONTINUE
208             IF (ICASE.EQ.6) THEN
209 *              .. DZNRM2TEST ..
210                CALL STEST1(DZNRM2TEST(N,CX,INCX),STRUE2(NP1),
211      +                     STRUE2(NP1),SFAC)
212             ELSE IF (ICASE.EQ.7) THEN
213 *              .. DZASUMTEST ..
214                CALL STEST1(DZASUMTEST(N,CX,INCX),STRUE4(NP1),
215      +                     STRUE4(NP1),SFAC)
216             ELSE IF (ICASE.EQ.8) THEN
217 *              .. ZSCALTEST ..
218                CALL ZSCALTEST(N,CA,CX,INCX)
219                CALL CTEST(LEN,CX,CTRUE5(1,NP1,INCX),CTRUE5(1,NP1,INCX),
220      +                    SFAC)
221             ELSE IF (ICASE.EQ.9) THEN
222 *              .. ZDSCALTEST ..
223                CALL ZDSCALTEST(N,SA,CX,INCX)
224                CALL CTEST(LEN,CX,CTRUE6(1,NP1,INCX),CTRUE6(1,NP1,INCX),
225      +                    SFAC)
226             ELSE IF (ICASE.EQ.10) THEN
227 *              .. IZAMAXTEST ..
228                CALL ITEST1(IZAMAXTEST(N,CX,INCX),ITRUE3(NP1))
229             ELSE
230                WRITE (NOUT,*) ' Shouldn''t be here in CHECK1'
231                STOP
232             END IF
233 *
234    40    CONTINUE
235    60 CONTINUE
236 *
237       INCX = 1
238       IF (ICASE.EQ.8) THEN
239 *        ZSCALTEST
240 *        Add a test for alpha equal to zero.
241          CA = (0.0D0,0.0D0)
242          DO 80 I = 1, 5
243             MWPCT(I) = (0.0D0,0.0D0)
244             MWPCS(I) = (1.0D0,1.0D0)
245    80    CONTINUE
246          CALL ZSCALTEST(5,CA,CX,INCX)
247          CALL CTEST(5,CX,MWPCT,MWPCS,SFAC)
248       ELSE IF (ICASE.EQ.9) THEN
249 *        ZDSCALTEST
250 *        Add a test for alpha equal to zero.
251          SA = 0.0D0
252          DO 100 I = 1, 5
253             MWPCT(I) = (0.0D0,0.0D0)
254             MWPCS(I) = (1.0D0,1.0D0)
255   100    CONTINUE
256          CALL ZDSCALTEST(5,SA,CX,INCX)
257          CALL CTEST(5,CX,MWPCT,MWPCS,SFAC)
258 *        Add a test for alpha equal to one.
259          SA = 1.0D0
260          DO 120 I = 1, 5
261             MWPCT(I) = CX(I)
262             MWPCS(I) = CX(I)
263   120    CONTINUE
264          CALL ZDSCALTEST(5,SA,CX,INCX)
265          CALL CTEST(5,CX,MWPCT,MWPCS,SFAC)
266 *        Add a test for alpha equal to minus one.
267          SA = -1.0D0
268          DO 140 I = 1, 5
269             MWPCT(I) = -CX(I)
270             MWPCS(I) = -CX(I)
271   140    CONTINUE
272          CALL ZDSCALTEST(5,SA,CX,INCX)
273          CALL CTEST(5,CX,MWPCT,MWPCS,SFAC)
274       END IF
275       RETURN
276       END
277       SUBROUTINE CHECK2(SFAC)
278 *     .. Parameters ..
279       INTEGER           NOUT
280       PARAMETER         (NOUT=6)
281 *     .. Scalar Arguments ..
282       DOUBLE PRECISION  SFAC
283 *     .. Scalars in Common ..
284       INTEGER           ICASE, INCX, INCY, MODE, N
285       LOGICAL           PASS
286 *     .. Local Scalars ..
287       COMPLEX*16        CA,ZTEMP
288       INTEGER           I, J, KI, KN, KSIZE, LENX, LENY, MX, MY
289 *     .. Local Arrays ..
290       COMPLEX*16        CDOT(1), CSIZE1(4), CSIZE2(7,2), CSIZE3(14),
291      +                  CT10X(7,4,4), CT10Y(7,4,4), CT6(4,4), CT7(4,4),
292      +                  CT8(7,4,4), CX(7), CX1(7), CY(7), CY1(7)
293       INTEGER           INCXS(4), INCYS(4), LENS(4,2), NS(4)
294 *     .. External Functions ..
295       EXTERNAL          ZDOTCTEST, ZDOTUTEST
296 *     .. External Subroutines ..
297       EXTERNAL          ZAXPYTEST, ZCOPYTEST, ZSWAPTEST, CTEST
298 *     .. Intrinsic Functions ..
299       INTRINSIC         ABS, MIN
300 *     .. Common blocks ..
301       COMMON            /COMBLA/ICASE, N, INCX, INCY, MODE, PASS
302 *     .. Data statements ..
303       DATA              CA/(0.4D0,-0.7D0)/
304       DATA              INCXS/1, 2, -2, -1/
305       DATA              INCYS/1, -2, 1, -2/
306       DATA              LENS/1, 1, 2, 4, 1, 1, 3, 7/
307       DATA              NS/0, 1, 2, 4/
308       DATA              CX1/(0.7D0,-0.8D0), (-0.4D0,-0.7D0),
309      +                  (-0.1D0,-0.9D0), (0.2D0,-0.8D0),
310      +                  (-0.9D0,-0.4D0), (0.1D0,0.4D0), (-0.6D0,0.6D0)/
311       DATA              CY1/(0.6D0,-0.6D0), (-0.9D0,0.5D0),
312      +                  (0.7D0,-0.6D0), (0.1D0,-0.5D0), (-0.1D0,-0.2D0),
313      +                  (-0.5D0,-0.3D0), (0.8D0,-0.7D0)/
314       DATA              ((CT8(I,J,1),I=1,7),J=1,4)/(0.6D0,-0.6D0),
315      +                  (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
316      +                  (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
317      +                  (0.32D0,-1.41D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
318      +                  (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
319      +                  (0.0D0,0.0D0), (0.32D0,-1.41D0),
320      +                  (-1.55D0,0.5D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
321      +                  (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
322      +                  (0.32D0,-1.41D0), (-1.55D0,0.5D0),
323      +                  (0.03D0,-0.89D0), (-0.38D0,-0.96D0),
324      +                  (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0)/
325       DATA              ((CT8(I,J,2),I=1,7),J=1,4)/(0.6D0,-0.6D0),
326      +                  (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
327      +                  (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
328      +                  (0.32D0,-1.41D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
329      +                  (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
330      +                  (0.0D0,0.0D0), (-0.07D0,-0.89D0),
331      +                  (-0.9D0,0.5D0), (0.42D0,-1.41D0), (0.0D0,0.0D0),
332      +                  (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
333      +                  (0.78D0,0.06D0), (-0.9D0,0.5D0),
334      +                  (0.06D0,-0.13D0), (0.1D0,-0.5D0),
335      +                  (-0.77D0,-0.49D0), (-0.5D0,-0.3D0),
336      +                  (0.52D0,-1.51D0)/
337       DATA              ((CT8(I,J,3),I=1,7),J=1,4)/(0.6D0,-0.6D0),
338      +                  (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
339      +                  (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
340      +                  (0.32D0,-1.41D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
341      +                  (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
342      +                  (0.0D0,0.0D0), (-0.07D0,-0.89D0),
343      +                  (-1.18D0,-0.31D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
344      +                  (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
345      +                  (0.78D0,0.06D0), (-1.54D0,0.97D0),
346      +                  (0.03D0,-0.89D0), (-0.18D0,-1.31D0),
347      +                  (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0)/
348       DATA              ((CT8(I,J,4),I=1,7),J=1,4)/(0.6D0,-0.6D0),
349      +                  (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
350      +                  (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
351      +                  (0.32D0,-1.41D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
352      +                  (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
353      +                  (0.0D0,0.0D0), (0.32D0,-1.41D0), (-0.9D0,0.5D0),
354      +                  (0.05D0,-0.6D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
355      +                  (0.0D0,0.0D0), (0.0D0,0.0D0), (0.32D0,-1.41D0),
356      +                  (-0.9D0,0.5D0), (0.05D0,-0.6D0), (0.1D0,-0.5D0),
357      +                  (-0.77D0,-0.49D0), (-0.5D0,-0.3D0),
358      +                  (0.32D0,-1.16D0)/
359       DATA              CT7/(0.0D0,0.0D0), (-0.06D0,-0.90D0),
360      +                  (0.65D0,-0.47D0), (-0.34D0,-1.22D0),
361      +                  (0.0D0,0.0D0), (-0.06D0,-0.90D0),
362      +                  (-0.59D0,-1.46D0), (-1.04D0,-0.04D0),
363      +                  (0.0D0,0.0D0), (-0.06D0,-0.90D0),
364      +                  (-0.83D0,0.59D0), (0.07D0,-0.37D0),
365      +                  (0.0D0,0.0D0), (-0.06D0,-0.90D0),
366      +                  (-0.76D0,-1.15D0), (-1.33D0,-1.82D0)/
367       DATA              CT6/(0.0D0,0.0D0), (0.90D0,0.06D0),
368      +                  (0.91D0,-0.77D0), (1.80D0,-0.10D0),
369      +                  (0.0D0,0.0D0), (0.90D0,0.06D0), (1.45D0,0.74D0),
370      +                  (0.20D0,0.90D0), (0.0D0,0.0D0), (0.90D0,0.06D0),
371      +                  (-0.55D0,0.23D0), (0.83D0,-0.39D0),
372      +                  (0.0D0,0.0D0), (0.90D0,0.06D0), (1.04D0,0.79D0),
373      +                  (1.95D0,1.22D0)/
374       DATA              ((CT10X(I,J,1),I=1,7),J=1,4)/(0.7D0,-0.8D0),
375      +                  (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
376      +                  (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
377      +                  (0.6D0,-0.6D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
378      +                  (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
379      +                  (0.0D0,0.0D0), (0.6D0,-0.6D0), (-0.9D0,0.5D0),
380      +                  (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
381      +                  (0.0D0,0.0D0), (0.0D0,0.0D0), (0.6D0,-0.6D0),
382      +                  (-0.9D0,0.5D0), (0.7D0,-0.6D0), (0.1D0,-0.5D0),
383      +                  (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0)/
384       DATA              ((CT10X(I,J,2),I=1,7),J=1,4)/(0.7D0,-0.8D0),
385      +                  (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
386      +                  (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
387      +                  (0.6D0,-0.6D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
388      +                  (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
389      +                  (0.0D0,0.0D0), (0.7D0,-0.6D0), (-0.4D0,-0.7D0),
390      +                  (0.6D0,-0.6D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
391      +                  (0.0D0,0.0D0), (0.0D0,0.0D0), (0.8D0,-0.7D0),
392      +                  (-0.4D0,-0.7D0), (-0.1D0,-0.2D0),
393      +                  (0.2D0,-0.8D0), (0.7D0,-0.6D0), (0.1D0,0.4D0),
394      +                  (0.6D0,-0.6D0)/
395       DATA              ((CT10X(I,J,3),I=1,7),J=1,4)/(0.7D0,-0.8D0),
396      +                  (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
397      +                  (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
398      +                  (0.6D0,-0.6D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
399      +                  (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
400      +                  (0.0D0,0.0D0), (-0.9D0,0.5D0), (-0.4D0,-0.7D0),
401      +                  (0.6D0,-0.6D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
402      +                  (0.0D0,0.0D0), (0.0D0,0.0D0), (0.1D0,-0.5D0),
403      +                  (-0.4D0,-0.7D0), (0.7D0,-0.6D0), (0.2D0,-0.8D0),
404      +                  (-0.9D0,0.5D0), (0.1D0,0.4D0), (0.6D0,-0.6D0)/
405       DATA              ((CT10X(I,J,4),I=1,7),J=1,4)/(0.7D0,-0.8D0),
406      +                  (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
407      +                  (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
408      +                  (0.6D0,-0.6D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
409      +                  (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
410      +                  (0.0D0,0.0D0), (0.6D0,-0.6D0), (0.7D0,-0.6D0),
411      +                  (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
412      +                  (0.0D0,0.0D0), (0.0D0,0.0D0), (0.6D0,-0.6D0),
413      +                  (0.7D0,-0.6D0), (-0.1D0,-0.2D0), (0.8D0,-0.7D0),
414      +                  (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0)/
415       DATA              ((CT10Y(I,J,1),I=1,7),J=1,4)/(0.6D0,-0.6D0),
416      +                  (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
417      +                  (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
418      +                  (0.7D0,-0.8D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
419      +                  (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
420      +                  (0.0D0,0.0D0), (0.7D0,-0.8D0), (-0.4D0,-0.7D0),
421      +                  (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
422      +                  (0.0D0,0.0D0), (0.0D0,0.0D0), (0.7D0,-0.8D0),
423      +                  (-0.4D0,-0.7D0), (-0.1D0,-0.9D0),
424      +                  (0.2D0,-0.8D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
425      +                  (0.0D0,0.0D0)/
426       DATA              ((CT10Y(I,J,2),I=1,7),J=1,4)/(0.6D0,-0.6D0),
427      +                  (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
428      +                  (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
429      +                  (0.7D0,-0.8D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
430      +                  (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
431      +                  (0.0D0,0.0D0), (-0.1D0,-0.9D0), (-0.9D0,0.5D0),
432      +                  (0.7D0,-0.8D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
433      +                  (0.0D0,0.0D0), (0.0D0,0.0D0), (-0.6D0,0.6D0),
434      +                  (-0.9D0,0.5D0), (-0.9D0,-0.4D0), (0.1D0,-0.5D0),
435      +                  (-0.1D0,-0.9D0), (-0.5D0,-0.3D0),
436      +                  (0.7D0,-0.8D0)/
437       DATA              ((CT10Y(I,J,3),I=1,7),J=1,4)/(0.6D0,-0.6D0),
438      +                  (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
439      +                  (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
440      +                  (0.7D0,-0.8D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
441      +                  (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
442      +                  (0.0D0,0.0D0), (-0.1D0,-0.9D0), (0.7D0,-0.8D0),
443      +                  (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
444      +                  (0.0D0,0.0D0), (0.0D0,0.0D0), (-0.6D0,0.6D0),
445      +                  (-0.9D0,-0.4D0), (-0.1D0,-0.9D0),
446      +                  (0.7D0,-0.8D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
447      +                  (0.0D0,0.0D0)/
448       DATA              ((CT10Y(I,J,4),I=1,7),J=1,4)/(0.6D0,-0.6D0),
449      +                  (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
450      +                  (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
451      +                  (0.7D0,-0.8D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
452      +                  (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
453      +                  (0.0D0,0.0D0), (0.7D0,-0.8D0), (-0.9D0,0.5D0),
454      +                  (-0.4D0,-0.7D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
455      +                  (0.0D0,0.0D0), (0.0D0,0.0D0), (0.7D0,-0.8D0),
456      +                  (-0.9D0,0.5D0), (-0.4D0,-0.7D0), (0.1D0,-0.5D0),
457      +                  (-0.1D0,-0.9D0), (-0.5D0,-0.3D0),
458      +                  (0.2D0,-0.8D0)/
459       DATA              CSIZE1/(0.0D0,0.0D0), (0.9D0,0.9D0),
460      +                  (1.63D0,1.73D0), (2.90D0,2.78D0)/
461       DATA              CSIZE3/(0.0D0,0.0D0), (0.0D0,0.0D0),
462      +                  (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
463      +                  (0.0D0,0.0D0), (0.0D0,0.0D0), (1.17D0,1.17D0),
464      +                  (1.17D0,1.17D0), (1.17D0,1.17D0),
465      +                  (1.17D0,1.17D0), (1.17D0,1.17D0),
466      +                  (1.17D0,1.17D0), (1.17D0,1.17D0)/
467       DATA              CSIZE2/(0.0D0,0.0D0), (0.0D0,0.0D0),
468      +                  (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
469      +                  (0.0D0,0.0D0), (0.0D0,0.0D0), (1.54D0,1.54D0),
470      +                  (1.54D0,1.54D0), (1.54D0,1.54D0),
471      +                  (1.54D0,1.54D0), (1.54D0,1.54D0),
472      +                  (1.54D0,1.54D0), (1.54D0,1.54D0)/
473 *     .. Executable Statements ..
474       DO 60 KI = 1, 4
475          INCX = INCXS(KI)
476          INCY = INCYS(KI)
477          MX = ABS(INCX)
478          MY = ABS(INCY)
479 *
480          DO 40 KN = 1, 4
481             N = NS(KN)
482             KSIZE = MIN(2,KN)
483             LENX = LENS(KN,MX)
484             LENY = LENS(KN,MY)
485 *           .. initialize all argument arrays ..
486             DO 20 I = 1, 7
487                CX(I) = CX1(I)
488                CY(I) = CY1(I)
489    20       CONTINUE
490             IF (ICASE.EQ.1) THEN
491 *              .. ZDOTCTEST ..
492                CALL ZDOTCTEST(N,CX,INCX,CY,INCY,ZTEMP)
493                CDOT(1) = ZTEMP
494                CALL CTEST(1,CDOT,CT6(KN,KI),CSIZE1(KN),SFAC)
495             ELSE IF (ICASE.EQ.2) THEN
496 *              .. ZDOTUTEST ..
497                CALL ZDOTUTEST(N,CX,INCX,CY,INCY,ZTEMP)
498                CDOT(1) = ZTEMP
499                CALL CTEST(1,CDOT,CT7(KN,KI),CSIZE1(KN),SFAC)
500             ELSE IF (ICASE.EQ.3) THEN
501 *              .. ZAXPYTEST ..
502                CALL ZAXPYTEST(N,CA,CX,INCX,CY,INCY)
503                CALL CTEST(LENY,CY,CT8(1,KN,KI),CSIZE2(1,KSIZE),SFAC)
504             ELSE IF (ICASE.EQ.4) THEN
505 *              .. ZCOPYTEST ..
506                CALL ZCOPYTEST(N,CX,INCX,CY,INCY)
507                CALL CTEST(LENY,CY,CT10Y(1,KN,KI),CSIZE3,1.0D0)
508             ELSE IF (ICASE.EQ.5) THEN
509 *              .. ZSWAPTEST ..
510                CALL ZSWAPTEST(N,CX,INCX,CY,INCY)
511                CALL CTEST(LENX,CX,CT10X(1,KN,KI),CSIZE3,1.0D0)
512                CALL CTEST(LENY,CY,CT10Y(1,KN,KI),CSIZE3,1.0D0)
513             ELSE
514                WRITE (NOUT,*) ' Shouldn''t be here in CHECK2'
515                STOP
516             END IF
517 *
518    40    CONTINUE
519    60 CONTINUE
520       RETURN
521       END
522       SUBROUTINE STEST(LEN,SCOMP,STRUE,SSIZE,SFAC)
523 *     ********************************* STEST **************************
524 *
525 *     THIS SUBR COMPARES ARRAYS  SCOMP() AND STRUE() OF LENGTH LEN TO
526 *     SEE IF THE TERM BY TERM DIFFERENCES, MULTIPLIED BY SFAC, ARE
527 *     NEGLIGIBLE.
528 *
529 *     C. L. LAWSON, JPL, 1974 DEC 10
530 *
531 *     .. Parameters ..
532       INTEGER          NOUT
533       PARAMETER        (NOUT=6)
534 *     .. Scalar Arguments ..
535       DOUBLE PRECISION SFAC
536       INTEGER          LEN
537 *     .. Array Arguments ..
538       DOUBLE PRECISION SCOMP(LEN), SSIZE(LEN), STRUE(LEN)
539 *     .. Scalars in Common ..
540       INTEGER          ICASE, INCX, INCY, MODE, N
541       LOGICAL          PASS
542 *     .. Local Scalars ..
543       DOUBLE PRECISION SD
544       INTEGER          I
545 *     .. External Functions ..
546       DOUBLE PRECISION SDIFF
547       EXTERNAL         SDIFF
548 *     .. Intrinsic Functions ..
549       INTRINSIC        ABS
550 *     .. Common blocks ..
551       COMMON           /COMBLA/ICASE, N, INCX, INCY, MODE, PASS
552 *     .. Executable Statements ..
553 *
554       DO 40 I = 1, LEN
555          SD = SCOMP(I) - STRUE(I)
556          IF (SDIFF(ABS(SSIZE(I))+ABS(SFAC*SD),ABS(SSIZE(I))).EQ.0.0D0)
557      +       GO TO 40
558 *
559 *                             HERE    SCOMP(I) IS NOT CLOSE TO STRUE(I).
560 *
561          IF ( .NOT. PASS) GO TO 20
562 *                             PRINT FAIL MESSAGE AND HEADER.
563          PASS = .FALSE.
564          WRITE (NOUT,99999)
565          WRITE (NOUT,99998)
566    20    WRITE (NOUT,99997) ICASE, N, INCX, INCY, MODE, I, SCOMP(I),
567      +     STRUE(I), SD, SSIZE(I)
568    40 CONTINUE
569       RETURN
570 *
571 99999 FORMAT ('                                       FAIL')
572 99998 FORMAT (/' CASE  N INCX INCY MODE  I                            ',
573      +       ' COMP(I)                             TRUE(I)  DIFFERENCE',
574      +       '     SIZE(I)',/1X)
575 99997 FORMAT (1X,I4,I3,3I5,I3,2D36.8,2D12.4)
576       END
577       SUBROUTINE STEST1(SCOMP1,STRUE1,SSIZE,SFAC)
578 *     ************************* STEST1 *****************************
579 *
580 *     THIS IS AN INTERFACE SUBROUTINE TO ACCOMODATE THE FORTRAN
581 *     REQUIREMENT THAT WHEN A DUMMY ARGUMENT IS AN ARRAY, THE
582 *     ACTUAL ARGUMENT MUST ALSO BE AN ARRAY OR AN ARRAY ELEMENT.
583 *
584 *     C.L. LAWSON, JPL, 1978 DEC 6
585 *
586 *     .. Scalar Arguments ..
587       DOUBLE PRECISION  SCOMP1, SFAC, STRUE1
588 *     .. Array Arguments ..
589       DOUBLE PRECISION  SSIZE(*)
590 *     .. Local Arrays ..
591       DOUBLE PRECISION  SCOMP(1), STRUE(1)
592 *     .. External Subroutines ..
593       EXTERNAL          STEST
594 *     .. Executable Statements ..
595 *
596       SCOMP(1) = SCOMP1
597       STRUE(1) = STRUE1
598       CALL STEST(1,SCOMP,STRUE,SSIZE,SFAC)
599 *
600       RETURN
601       END
602       DOUBLE PRECISION FUNCTION SDIFF(SA,SB)
603 *     ********************************* SDIFF **************************
604 *     COMPUTES DIFFERENCE OF TWO NUMBERS.  C. L. LAWSON, JPL 1974 FEB 15
605 *
606 *     .. Scalar Arguments ..
607       DOUBLE PRECISION                SA, SB
608 *     .. Executable Statements ..
609       SDIFF = SA - SB
610       RETURN
611       END
612       SUBROUTINE CTEST(LEN,CCOMP,CTRUE,CSIZE,SFAC)
613 *     **************************** CTEST *****************************
614 *
615 *     C.L. LAWSON, JPL, 1978 DEC 6
616 *
617 *     .. Scalar Arguments ..
618       DOUBLE PRECISION SFAC
619       INTEGER          LEN
620 *     .. Array Arguments ..
621       COMPLEX*16       CCOMP(LEN), CSIZE(LEN), CTRUE(LEN)
622 *     .. Local Scalars ..
623       INTEGER          I
624 *     .. Local Arrays ..
625       DOUBLE PRECISION SCOMP(20), SSIZE(20), STRUE(20)
626 *     .. External Subroutines ..
627       EXTERNAL         STEST
628 *     .. Intrinsic Functions ..
629       INTRINSIC        DIMAG, DBLE
630 *     .. Executable Statements ..
631       DO 20 I = 1, LEN
632          SCOMP(2*I-1) = DBLE(CCOMP(I))
633          SCOMP(2*I) = DIMAG(CCOMP(I))
634          STRUE(2*I-1) = DBLE(CTRUE(I))
635          STRUE(2*I) = DIMAG(CTRUE(I))
636          SSIZE(2*I-1) = DBLE(CSIZE(I))
637          SSIZE(2*I) = DIMAG(CSIZE(I))
638    20 CONTINUE
639 *
640       CALL STEST(2*LEN,SCOMP,STRUE,SSIZE,SFAC)
641       RETURN
642       END
643       SUBROUTINE ITEST1(ICOMP,ITRUE)
644 *     ********************************* ITEST1 *************************
645 *
646 *     THIS SUBROUTINE COMPARES THE VARIABLES ICOMP AND ITRUE FOR
647 *     EQUALITY.
648 *     C. L. LAWSON, JPL, 1974 DEC 10
649 *
650 *     .. Parameters ..
651       INTEGER           NOUT
652       PARAMETER         (NOUT=6)
653 *     .. Scalar Arguments ..
654       INTEGER           ICOMP, ITRUE
655 *     .. Scalars in Common ..
656       INTEGER           ICASE, INCX, INCY, MODE, N
657       LOGICAL           PASS
658 *     .. Local Scalars ..
659       INTEGER           ID
660 *     .. Common blocks ..
661       COMMON            /COMBLA/ICASE, N, INCX, INCY, MODE, PASS
662 *     .. Executable Statements ..
663       IF (ICOMP.EQ.ITRUE) GO TO 40
664 *
665 *                            HERE ICOMP IS NOT EQUAL TO ITRUE.
666 *
667       IF ( .NOT. PASS) GO TO 20
668 *                             PRINT FAIL MESSAGE AND HEADER.
669       PASS = .FALSE.
670       WRITE (NOUT,99999)
671       WRITE (NOUT,99998)
672    20 ID = ICOMP - ITRUE
673       WRITE (NOUT,99997) ICASE, N, INCX, INCY, MODE, ICOMP, ITRUE, ID
674    40 CONTINUE
675       RETURN
676 *
677 99999 FORMAT ('                                       FAIL')
678 99998 FORMAT (/' CASE  N INCX INCY MODE                               ',
679      +       ' COMP                                TRUE     DIFFERENCE',
680      +       /1X)
681 99997 FORMAT (1X,I4,I3,3I5,2I36,I12)
682       END