1function sstest3                                                            %#ok
2%SSTEST3: an exhaustive test of ssmult
3%
4% For a list of all 64 functions computed by ssmult, look at the source code
5% of this test.
6%
7% See also ssmult, mtimes.
8
9% Copyright 2007-2009, Timothy A. Davis, http://www.suitesparse.com
10
11fprintf ('\nsstest3: Please wait ') ;
12
13for m = 0:30
14    fprintf ('.') ;
15    for n = 0:30
16        for k = 0:30
17
18            for Acomplex = 0:1
19                for Bcomplex = 0:1
20
21                    A = sprand (m, n, 0.3) ;
22                    if (Acomplex)
23                        A = 1i*sprand (m, n, 0.3) ;
24                    end
25
26                    %-----------------------------------------------------------
27                    % y = A*B and variants
28                    %-----------------------------------------------------------
29
30                    B = sprand (n, k, 0.3) ;
31                    if (Bcomplex)
32                        B = 1i*sprand (n, k, 0.3) ;
33                    end
34
35                    y = A*B ;
36                    z = ssmult (A, B, 0,0, 0,0, 0,0) ;
37                    err = norm (y-z,1) ;
38                    if (err > 0)
39                        err
40                        error ('!') ;
41                    end
42
43                    y = conj(A*B) ;
44                    z = ssmult (A, B, 0,0, 0,0, 0,1) ;
45                    err = norm (y-z,1) ;
46                    if (err > 0)
47                        err
48                        error ('!') ;
49                    end
50
51                    y = (A*B).' ;
52                    z = ssmult (A, B, 0,0, 0,0, 1,0) ;
53                    err = norm (y-z,1) ;
54                    if (err > 0)
55                        err
56                        error ('!') ;
57                    end
58
59                    y = (A*B)' ;
60                    z = ssmult (A, B, 0,0, 0,0, 1,1) ;
61                    err = norm (y-z,1) ;
62                    if (err > 0)
63                        err
64                        error ('!') ;
65                    end
66
67                    %-----------------------------------------------------------
68                    % y = A*conj(B) and variants
69                    %-----------------------------------------------------------
70
71                    y = A*conj(B) ;
72                    z = ssmult (A, B, 0,0, 0,1, 0,0) ;
73                    err = norm (y-z,1) ;
74                    if (err > 0)
75                        err
76                        error ('!') ;
77                    end
78
79                    y = conj(A*conj(B)) ;
80                    z = ssmult (A, B, 0,0, 0,1, 0,1) ;
81                    err = norm (y-z,1) ;
82                    if (err > 0)
83                        err
84                        error ('!') ;
85                    end
86
87                    y = (A*conj(B)).' ;
88                    z = ssmult (A, B, 0,0, 0,1, 1,0) ;
89                    err = norm (y-z,1) ;
90                    if (err > 0)
91                        err
92                        error ('!') ;
93                    end
94
95                    y = (A*conj(B))' ;
96                    z = ssmult (A, B, 0,0, 0,1, 1,1) ;
97                    err = norm (y-z,1) ;
98                    if (err > 0)
99                        err
100                        error ('!') ;
101                    end
102
103                    %-----------------------------------------------------------
104                    % y = conj(A)*B and variants
105                    %-----------------------------------------------------------
106
107                    y = conj(A)*B ;
108                    z = ssmult (A, B, 0,1, 0,0, 0,0) ;
109                    err = norm (y-z,1) ;
110                    if (err > 0)
111                        err
112                        error ('!') ;
113                    end
114
115                    y = conj(conj(A)*B) ;
116                    z = ssmult (A, B, 0,1, 0,0, 0,1) ;
117                    err = norm (y-z,1) ;
118                    if (err > 0)
119                        err
120                        error ('!') ;
121                    end
122
123                    y = (conj(A)*B).' ;
124                    z = ssmult (A, B, 0,1, 0,0, 1,0) ;
125                    err = norm (y-z,1) ;
126                    if (err > 0)
127                        err
128                        error ('!') ;
129                    end
130
131                    y = (conj(A)*B)' ;
132                    z = ssmult (A, B, 0,1, 0,0, 1,1) ;
133                    err = norm (y-z,1) ;
134                    if (err > 0)
135                        err
136                        error ('!') ;
137                    end
138
139                    %-----------------------------------------------------------
140                    % y = conj(A)*conj(B) and variants
141                    %-----------------------------------------------------------
142
143                    y = conj(A)*conj(B) ;
144                    z = ssmult (A, B, 0,1, 0,1, 0,0) ;
145                    err = norm (y-z,1) ;
146                    if (err > 0)
147                        err
148                        error ('!') ;
149                    end
150
151                    y = conj(conj(A)*conj(B)) ;
152                    z = ssmult (A, B, 0,1, 0,1, 0,1) ;
153                    err = norm (y-z,1) ;
154                    if (err > 0)
155                        err
156                        error ('!') ;
157                    end
158
159                    y = (conj(A)*conj(B)).' ;
160                    z = ssmult (A, B, 0,1, 0,1, 1,0) ;
161                    err = norm (y-z,1) ;
162                    if (err > 0)
163                        err
164                        error ('!') ;
165                    end
166
167                    y = (conj(A)*conj(B))' ;
168                    z = ssmult (A, B, 0,1, 0,1, 1,1) ;
169                    err = norm (y-z,1) ;
170                    if (err > 0)
171                        err
172                        error ('!') ;
173                    end
174
175                    %-----------------------------------------------------------
176                    % y = A.'*B and variants
177                    %-----------------------------------------------------------
178
179                    B = sprand (m, k, 0.3) ;
180                    if (Bcomplex)
181                        B = 1i*sprand (m, k, 0.3) ;
182                    end
183
184                    y = A.'*B ;
185                    z = ssmult (A, B, 1,0, 0,0, 0,0) ;
186                    err = norm (y-z,1) ;
187                    if (err > 0)
188                        err
189                        error ('!') ;
190                    end
191
192                    y = conj(A.'*B) ;
193                    z = ssmult (A, B, 1,0, 0,0, 0,1) ;
194                    err = norm (y-z,1) ;
195                    if (err > 0)
196                        err
197                        error ('!') ;
198                    end
199
200                    y = (A.'*B).' ;
201                    z = ssmult (A, B, 1,0, 0,0, 1,0) ;
202                    err = norm (y-z,1) ;
203                    if (err > 0)
204                        err
205                        error ('!') ;
206                    end
207
208                    y = (A.'*B)' ;
209                    z = ssmult (A, B, 1,0, 0,0, 1,1) ;
210                    err = norm (y-z,1) ;
211                    if (err > 0)
212                        err
213                        error ('!') ;
214                    end
215
216                    %-----------------------------------------------------------
217                    % y = A.'*conj(B) and variants
218                    %-----------------------------------------------------------
219
220                    y = (A.'*conj(B))' ;
221                    z = ssmult (A, B, 1,0, 0,1, 1,1) ;
222                    err = norm (y-z,1) ;
223                    if (err > 0)
224                        err
225                        error ('!') ;
226                    end
227
228                    y = (A.'*conj(B)).' ;
229                    z = ssmult (A, B, 1,0, 0,1, 1,0) ;
230                    err = norm (y-z,1) ;
231                    if (err > 0)
232                        err
233                        error ('!') ;
234                    end
235
236                    y = (A.'*conj(B)) ;
237                    z = ssmult (A, B, 1,0, 0,1, 0,0) ;
238                    err = norm (y-z,1) ;
239                    if (err > 0)
240                        err
241                        error ('!') ;
242                    end
243
244                    y = conj(A.'*conj(B)) ;
245                    z = ssmult (A, B, 1,0, 0,1, 0,1) ;
246                    err = norm (y-z,1) ;
247                    if (err > 0)
248                        err
249                        error ('!') ;
250                    end
251
252                    %-----------------------------------------------------------
253                    % y = A'*B and variants
254                    %-----------------------------------------------------------
255
256                    y = A'*B ;
257                    z = ssmult (A, B, 1,1, 0,0, 0,0) ;
258                    err = norm (y-z,1) ;
259                    if (err > 0)
260                        err
261                        error ('!') ;
262                    end
263
264                    y = conj(A'*B) ;
265                    z = ssmult (A, B, 1,1, 0,0, 0,1) ;
266                    err = norm (y-z,1) ;
267                    if (err > 0)
268                        err
269                        error ('!') ;
270                    end
271
272                    y = (A'*B).' ;
273                    z = ssmult (A, B, 1,1, 0,0, 1,0) ;
274                    err = norm (y-z,1) ;
275                    if (err > 0)
276                        err
277                        error ('!') ;
278                    end
279
280                    y = (A'*B)' ;
281                    z = ssmult (A, B, 1,1, 0,0, 1,1) ;
282                    err = norm (y-z,1) ;
283                    if (err > 0)
284                        err
285                        error ('!') ;
286                    end
287
288                    %-----------------------------------------------------------
289                    % y = A'*conj(B) and variants
290                    %-----------------------------------------------------------
291
292                    y = A'*conj(B) ;
293                    z = ssmult (A, B, 1,1, 0,1, 0,0) ;
294                    err = norm (y-z,1) ;
295                    if (err > 0)
296                        err
297                        error ('!') ;
298                    end
299
300                    y = conj(A'*conj(B)) ;
301                    z = ssmult (A, B, 1,1, 0,1, 0,1) ;
302                    err = norm (y-z,1) ;
303                    if (err > 0)
304                        err
305                        error ('!') ;
306                    end
307
308                    y = (A'*conj(B))' ;
309                    z = ssmult (A, B, 1,1, 0,1, 1,1) ;
310                    err = norm (y-z,1) ;
311                    if (err > 0)
312                        err
313                        error ('!') ;
314                    end
315
316                    y = (A'*conj(B)).' ;
317                    z = ssmult (A, B, 1,1, 0,1, 1,0) ;
318                    err = norm (y-z,1) ;
319                    if (err > 0)
320                        err
321                        error ('!') ;
322                    end
323
324                    %-----------------------------------------------------------
325                    % y = A*B.' and variants
326                    %-----------------------------------------------------------
327
328                    B = sprand (k,n, 0.3) ;
329                    if (Bcomplex)
330                        B = 1i*sprand (k, n, 0.3) ;
331                    end
332
333                    y = A*B.' ;
334                    z = ssmult (A, B, 0,0, 1,0, 0,0) ;
335                    err = norm (y-z,1) ;
336                    if (err > 0)
337                        err
338                        error ('!') ;
339                    end
340
341                    y = conj(A*B.') ;
342                    z = ssmult (A, B, 0,0, 1,0, 0,1) ;
343                    err = norm (y-z,1) ;
344                    if (err > 0)
345                        err
346                        error ('!') ;
347                    end
348
349                    y = (A*B.').' ;
350                    z = ssmult (A, B, 0,0, 1,0, 1,0) ;
351                    err = norm (y-z,1) ;
352                    if (err > 0)
353                        err
354                        error ('!') ;
355                    end
356
357                    y = (A*B.')' ;
358                    z = ssmult (A, B, 0,0, 1,0, 1,1) ;
359                    err = norm (y-z,1) ;
360                    if (err > 0)
361                        err
362                        error ('!') ;
363                    end
364
365                    %-----------------------------------------------------------
366                    % y = A*B' and variants
367                    %-----------------------------------------------------------
368
369                    y = A*B' ;
370                    z = ssmult (A, B, 0,0, 1,1, 0,0) ;
371                    err = norm (y-z,1) ;
372                    if (err > 0)
373                        err
374                        error ('!') ;
375                    end
376
377                    y = conj (A*B') ;
378                    z = ssmult (A, B, 0,0, 1,1, 0,1) ;
379                    err = norm (y-z,1) ;
380                    if (err > 0)
381                        err
382                        error ('!') ;
383                    end
384
385                    y = (A*B').' ;
386                    z = ssmult (A, B, 0,0, 1,1, 1,0) ;
387                    err = norm (y-z,1) ;
388                    if (err > 0)
389                        err
390                        error ('!') ;
391                    end
392
393                    y = (A*B')' ;
394                    z = ssmult (A, B, 0,0, 1,1, 1,1) ;
395                    err = norm (y-z,1) ;
396                    if (err > 0)
397                        err
398                        error ('!') ;
399                    end
400
401                    %-----------------------------------------------------------
402                    % y = conj(A)*B.' and variants
403                    %-----------------------------------------------------------
404
405                    y = conj(A)*B.' ;
406                    z = ssmult (A, B, 0,1, 1,0, 0,0) ;
407                    err = norm (y-z,1) ;
408                    if (err > 0)
409                        err
410                        error ('!') ;
411                    end
412
413                    y = conj(conj(A)*B.') ;
414                    z = ssmult (A, B, 0,1, 1,0, 0,1) ;
415                    err = norm (y-z,1) ;
416                    if (err > 0)
417                        err
418                        error ('!') ;
419                    end
420
421                    y = (conj(A)*B.').' ;
422                    z = ssmult (A, B, 0,1, 1,0, 1,0) ;
423                    err = norm (y-z,1) ;
424                    if (err > 0)
425                        err
426                        error ('!') ;
427                    end
428
429                    y = (conj(A)*B.')' ;
430                    z = ssmult (A, B, 0,1, 1,0, 1,1) ;
431                    err = norm (y-z,1) ;
432                    if (err > 0)
433                        err
434                        error ('!') ;
435                    end
436
437                    %-----------------------------------------------------------
438                    % y = conj(A)*B' and variants
439                    %-----------------------------------------------------------
440
441                    y = conj(A)*B' ;
442                    z = ssmult (A, B, 0,1, 1,1, 0,0) ;
443                    err = norm (y-z,1) ;
444                    if (err > 0)
445                        err
446                        error ('!') ;
447                    end
448
449                    y = conj(conj(A)*B') ;
450                    z = ssmult (A, B, 0,1, 1,1, 0,1) ;
451                    err = norm (y-z,1) ;
452                    if (err > 0)
453                        err
454                        error ('!') ;
455                    end
456
457                    y = (conj(A)*B').' ;
458                    z = ssmult (A, B, 0,1, 1,1, 1,0) ;
459                    err = norm (y-z,1) ;
460                    if (err > 0)
461                        err
462                        error ('!') ;
463                    end
464
465                    y = (conj(A)*B')' ;
466                    z = ssmult (A, B, 0,1, 1,1, 1,1) ;
467                    err = norm (y-z,1) ;
468                    if (err > 0)
469                        err
470                        error ('!') ;
471                    end
472
473                    %-----------------------------------------------------------
474                    % y = A.'*B.' and variants
475                    %-----------------------------------------------------------
476
477                    B = sprand (k,m, 0.3)  ;
478                    if (Bcomplex)
479                        B = 1i*sprand (k, m, 0.3) ;
480                    end
481
482                    y = A.'*B.' ;
483                    z = ssmult (A, B, 1,0, 1,0, 0,0) ;
484                    err = norm (y-z,1) ;
485                    if (err > 0)
486                        err
487                        error ('!') ;
488                    end
489
490                    y = conj(A.'*B.') ;
491                    z = ssmult (A, B, 1,0, 1,0, 0,1) ;
492                    err = norm (y-z,1) ;
493                    if (err > 0)
494                        err
495                        error ('!') ;
496                    end
497
498                    y = (A.'*B.').' ;
499                    z = ssmult (A, B, 1,0, 1,0, 1,0) ;
500                    err = norm (y-z,1) ;
501                    if (err > 0)
502                        err
503                        error ('!') ;
504                    end
505
506                    y = (A.'*B.')' ;
507                    z = ssmult (A, B, 1,0, 1,0, 1,1) ;
508                    err = norm (y-z,1) ;
509                    if (err > 0)
510                        err
511                        error ('!') ;
512                    end
513
514                    %-----------------------------------------------------------
515                    % y = A'*B.' and variants
516                    %-----------------------------------------------------------
517
518                    y = A'*B.' ;
519                    z = ssmult (A, B, 1,1, 1,0, 0,0) ;
520                    err = norm (y-z,1) ;
521                    if (err > 0)
522                        err
523                        error ('!') ;
524                    end
525
526                    y = conj(A'*B.') ;
527                    z = ssmult (A, B, 1,1, 1,0, 0,1) ;
528                    err = norm (y-z,1) ;
529                    if (err > 0)
530                        err
531                        error ('!') ;
532                    end
533
534                    y = (A'*B.').' ;
535                    z = ssmult (A, B, 1,1, 1,0, 1,0) ;
536                    err = norm (y-z,1) ;
537                    if (err > 0)
538                        err
539                        error ('!') ;
540                    end
541
542                    y = (A'*B.')' ;
543                    z = ssmult (A, B, 1,1, 1,0, 1,1) ;
544                    err = norm (y-z,1) ;
545                    if (err > 0)
546                        err
547                        error ('!') ;
548                    end
549
550                    %-----------------------------------------------------------
551                    % y = A.'*B' and variants
552                    %-----------------------------------------------------------
553
554                    y = A.'*B' ;
555                    z = ssmult (A, B, 1,0, 1,1, 0,0) ;
556                    err = norm (y-z,1) ;
557                    if (err > 0)
558                        err
559                        error ('!') ;
560                    end
561
562                    y = conj (A.'*B') ;
563                    z = ssmult (A, B, 1,0, 1,1, 0,1) ;
564                    err = norm (y-z,1) ;
565                    if (err > 0)
566                        err
567                        error ('!') ;
568                    end
569
570                    y = (A.'*B').' ;
571                    z = ssmult (A, B, 1,0, 1,1, 1,0) ;
572                    err = norm (y-z,1) ;
573                    if (err > 0)
574                        err
575                        error ('!') ;
576                    end
577
578                    y = (A.'*B')' ;
579                    z = ssmult (A, B, 1,0, 1,1, 1,1) ;
580                    err = norm (y-z,1) ;
581                    if (err > 0)
582                        err
583                        error ('!') ;
584                    end
585
586                    %-----------------------------------------------------------
587                    % y = A'*B' and variants
588                    %-----------------------------------------------------------
589
590                    y = A'*B' ;
591                    z = ssmult (A, B, 1,1, 1,1, 0,0) ;
592                    err = norm (y-z,1) ;
593                    if (err > 0)
594                        err
595                        error ('!') ;
596                    end
597
598                    y = conj(A'*B') ;
599                    z = ssmult (A, B, 1,1, 1,1, 0,1) ;
600                    err = norm (y-z,1) ;
601                    if (err > 0)
602                        err
603                        error ('!') ;
604                    end
605
606                    y = (A'*B').' ;
607                    z = ssmult (A, B, 1,1, 1,1, 1,0) ;
608                    err = norm (y-z,1) ;
609                    if (err > 0)
610                        err
611                        error ('!') ;
612                    end
613
614                    y = (A'*B')' ;
615                    z = ssmult (A, B, 1,1, 1,1, 1,1) ;
616                    err = norm (y-z,1) ;
617                    if (err > 0)
618                        err
619                        error ('!') ;
620                    end
621
622                end
623            end
624        end
625    end
626end
627fprintf ('\nsstest3: all tests passed') ;
628