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