1 //=================================================================================================
2 /*!
3 // \file src/mathtest/adaptors/lowermatrix/SparseTest1.cpp
4 // \brief Source file for the LowerMatrix sparse test (part 1)
5 //
6 // Copyright (C) 2012-2020 Klaus Iglberger - All Rights Reserved
7 //
8 // This file is part of the Blaze library. You can redistribute it and/or modify it under
9 // the terms of the New (Revised) BSD License. Redistribution and use in source and binary
10 // forms, with or without modification, are permitted provided that the following conditions
11 // are met:
12 //
13 // 1. Redistributions of source code must retain the above copyright notice, this list of
14 // conditions and the following disclaimer.
15 // 2. Redistributions in binary form must reproduce the above copyright notice, this list
16 // of conditions and the following disclaimer in the documentation and/or other materials
17 // provided with the distribution.
18 // 3. Neither the names of the Blaze development group nor the names of its contributors
19 // may be used to endorse or promote products derived from this software without specific
20 // prior written permission.
21 //
22 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
23 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
24 // OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
25 // SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
26 // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
27 // TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
28 // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
29 // CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
30 // ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
31 // DAMAGE.
32 */
33 //=================================================================================================
34
35
36 //*************************************************************************************************
37 // Includes
38 //*************************************************************************************************
39
40 #include <cstdlib>
41 #include <iostream>
42 #include <blaze/math/CompressedMatrix.h>
43 #include <blaze/math/DynamicMatrix.h>
44 #include <blaze/math/StaticMatrix.h>
45 #include <blazetest/mathtest/adaptors/lowermatrix/SparseTest.h>
46
47 #ifdef BLAZE_USE_HPX_THREADS
48 # include <hpx/hpx_main.hpp>
49 #endif
50
51
52 namespace blazetest {
53
54 namespace mathtest {
55
56 namespace adaptors {
57
58 namespace lowermatrix {
59
60 //=================================================================================================
61 //
62 // CONSTRUCTORS
63 //
64 //=================================================================================================
65
66 //*************************************************************************************************
67 /*!\brief Constructor for the LowerMatrix sparse test.
68 //
69 // \exception std::runtime_error Operation error detected.
70 */
SparseTest()71 SparseTest::SparseTest()
72 {
73 testConstructors();
74 testAssignment();
75 testAddAssign();
76 testSubAssign();
77 testSchurAssign();
78 testMultAssign();
79 }
80 //*************************************************************************************************
81
82
83
84
85 //=================================================================================================
86 //
87 // TEST FUNCTIONS
88 //
89 //=================================================================================================
90
91 //*************************************************************************************************
92 /*!\brief Test of the LowerMatrix constructors.
93 //
94 // \return void
95 // \exception std::runtime_error Error detected.
96 //
97 // This function performs a test of all constructors of the LowerMatrix specialization.
98 // In case an error is detected, a \a std::runtime_error exception is thrown.
99 */
testConstructors()100 void SparseTest::testConstructors()
101 {
102 //=====================================================================================
103 // Row-major default constructor
104 //=====================================================================================
105
106 // Default constructor (CompressedMatrix)
107 {
108 test_ = "Row-major LowerMatrix default constructor (CompressedMatrix)";
109
110 const LT lower;
111
112 checkRows ( lower, 0UL );
113 checkColumns ( lower, 0UL );
114 checkNonZeros( lower, 0UL );
115 }
116
117
118 //=====================================================================================
119 // Row-major size constructor
120 //=====================================================================================
121
122 // Size constructor (CompressedMatrix)
123 {
124 test_ = "Row-major LowerMatrix size constructor (CompressedMatrix)";
125
126 const LT lower( 2UL );
127
128 checkRows ( lower, 2UL );
129 checkColumns ( lower, 2UL );
130 checkNonZeros( lower, 0UL );
131 }
132
133
134 //=====================================================================================
135 // Row-major list initialization
136 //=====================================================================================
137
138 // Complete initializer list
139 {
140 test_ = "Row-major LowerMatrix initializer list constructor (complete list)";
141
142 const LT lower{ { 1, 0, 0 }, { 2, 3, 0 }, { 4, 5, 6 } };
143
144 checkRows ( lower, 3UL );
145 checkColumns ( lower, 3UL );
146 checkCapacity( lower, 6UL );
147 checkNonZeros( lower, 6UL );
148 checkNonZeros( lower, 0UL, 1UL );
149 checkNonZeros( lower, 1UL, 2UL );
150 checkNonZeros( lower, 2UL, 3UL );
151
152 if( lower(0,0) != 1 || lower(0,1) != 0 || lower(0,2) != 0 ||
153 lower(1,0) != 2 || lower(1,1) != 3 || lower(1,2) != 0 ||
154 lower(2,0) != 4 || lower(2,1) != 5 || lower(2,2) != 6 ) {
155 std::ostringstream oss;
156 oss << " Test: " << test_ << "\n"
157 << " Error: Construction failed\n"
158 << " Details:\n"
159 << " Result:\n" << lower << "\n"
160 << " Expected result:\n( 1 0 0 )\n( 2 3 0 )\n( 4 5 6 )\n";
161 throw std::runtime_error( oss.str() );
162 }
163 }
164
165 // Incomplete initializer list
166 {
167 test_ = "Row-major LowerMatrix initializer list constructor (incomplete list)";
168
169 const LT lower{ { 1 }, { 2, 3 }, { 4, 5, 6 } };
170
171 checkRows ( lower, 3UL );
172 checkColumns ( lower, 3UL );
173 checkCapacity( lower, 6UL );
174 checkNonZeros( lower, 6UL );
175 checkNonZeros( lower, 0UL, 1UL );
176 checkNonZeros( lower, 1UL, 2UL );
177 checkNonZeros( lower, 2UL, 3UL );
178
179 if( lower(0,0) != 1 || lower(0,1) != 0 || lower(0,2) != 0 ||
180 lower(1,0) != 2 || lower(1,1) != 3 || lower(1,2) != 0 ||
181 lower(2,0) != 4 || lower(2,1) != 5 || lower(2,2) != 6 ) {
182 std::ostringstream oss;
183 oss << " Test: " << test_ << "\n"
184 << " Error: Construction failed\n"
185 << " Details:\n"
186 << " Result:\n" << lower << "\n"
187 << " Expected result:\n( 1 0 0 )\n( 2 3 0 )\n( 4 5 6 )\n";
188 throw std::runtime_error( oss.str() );
189 }
190 }
191
192
193 //=====================================================================================
194 // Row-major copy constructor
195 //=====================================================================================
196
197 // Copy constructor (0x0)
198 {
199 test_ = "Row-major LowerMatrix copy constructor (0x0)";
200
201 const LT lower1;
202 const LT lower2( lower1 );
203
204 checkRows ( lower2, 0UL );
205 checkColumns ( lower2, 0UL );
206 checkNonZeros( lower2, 0UL );
207 }
208
209 // Copy constructor (3x3)
210 {
211 test_ = "Row-major LowerMatrix copy constructor (3x3)";
212
213 LT lower1( 3UL );
214 lower1(0,0) = 1;
215 lower1(1,0) = -4;
216 lower1(1,1) = 2;
217 lower1(2,0) = 7;
218 lower1(2,2) = 3;
219
220 const LT lower2( lower1 );
221
222 checkRows ( lower2, 3UL );
223 checkColumns ( lower2, 3UL );
224 checkCapacity( lower2, 5UL );
225 checkNonZeros( lower2, 5UL );
226 checkNonZeros( lower2, 0UL, 1UL );
227 checkNonZeros( lower2, 1UL, 2UL );
228 checkNonZeros( lower2, 2UL, 2UL );
229
230 if( lower2(0,0) != 1 || lower2(0,1) != 0 || lower2(0,2) != 0 ||
231 lower2(1,0) != -4 || lower2(1,1) != 2 || lower2(1,2) != 0 ||
232 lower2(2,0) != 7 || lower2(2,1) != 0 || lower2(2,2) != 3 ) {
233 std::ostringstream oss;
234 oss << " Test: " << test_ << "\n"
235 << " Error: Construction failed\n"
236 << " Details:\n"
237 << " Result:\n" << lower2 << "\n"
238 << " Expected result:\n( 1 0 0 )\n( -4 2 0 )\n( 7 0 3 )\n";
239 throw std::runtime_error( oss.str() );
240 }
241 }
242
243
244 //=====================================================================================
245 // Row-major move constructor
246 //=====================================================================================
247
248 // Move constructor (0x0)
249 {
250 test_ = "Row-major LowerMatrix move constructor (0x0)";
251
252 LT lower1;
253 LT lower2( std::move( lower1 ) );
254
255 checkRows ( lower2, 0UL );
256 checkColumns ( lower2, 0UL );
257 checkNonZeros( lower2, 0UL );
258 }
259
260 // Move constructor (3x3)
261 {
262 test_ = "Row-major LowerMatrix move constructor (3x3)";
263
264 LT lower1( 3UL );
265 lower1(0,0) = 1;
266 lower1(1,0) = -4;
267 lower1(1,1) = 2;
268 lower1(2,0) = 7;
269 lower1(2,2) = 3;
270
271 LT lower2( std::move( lower1 ) );
272
273 checkRows ( lower2, 3UL );
274 checkColumns ( lower2, 3UL );
275 checkCapacity( lower2, 5UL );
276 checkNonZeros( lower2, 5UL );
277 checkNonZeros( lower2, 0UL, 1UL );
278 checkNonZeros( lower2, 1UL, 2UL );
279 checkNonZeros( lower2, 2UL, 2UL );
280
281 if( lower2(0,0) != 1 || lower2(0,1) != 0 || lower2(0,2) != 0 ||
282 lower2(1,0) != -4 || lower2(1,1) != 2 || lower2(1,2) != 0 ||
283 lower2(2,0) != 7 || lower2(2,1) != 0 || lower2(2,2) != 3 ) {
284 std::ostringstream oss;
285 oss << " Test: " << test_ << "\n"
286 << " Error: Construction failed\n"
287 << " Details:\n"
288 << " Result:\n" << lower2 << "\n"
289 << " Expected result:\n( 1 0 0 )\n( -4 2 0 )\n( 7 0 3 )\n";
290 throw std::runtime_error( oss.str() );
291 }
292 }
293
294
295 //=====================================================================================
296 // Row-major conversion constructor
297 //=====================================================================================
298
299 // Conversion constructor (0x0)
300 {
301 test_ = "Row-major LowerMatrix conversion constructor (0x0)";
302
303 const blaze::DynamicMatrix<int,blaze::rowMajor> mat;
304 const LT lower( mat );
305
306 checkRows ( lower, 0UL );
307 checkColumns ( lower, 0UL );
308 checkNonZeros( lower, 0UL );
309 }
310
311 // Conversion constructor (lower)
312 {
313 test_ = "Row-major LowerMatrix conversion constructor (lower)";
314
315 blaze::StaticMatrix<int,3UL,3UL,blaze::rowMajor> mat;
316 mat(0,0) = 1;
317 mat(1,0) = -4;
318 mat(1,1) = 2;
319 mat(2,0) = 7;
320 mat(2,2) = 3;
321
322 const LT lower( mat );
323
324 checkRows ( lower, 3UL );
325 checkColumns ( lower, 3UL );
326 checkCapacity( lower, 5UL );
327 checkNonZeros( lower, 5UL );
328 checkNonZeros( lower, 0UL, 1UL );
329 checkNonZeros( lower, 1UL, 2UL );
330 checkNonZeros( lower, 2UL, 2UL );
331
332 if( lower(0,0) != 1 || lower(0,1) != 0 || lower(0,2) != 0 ||
333 lower(1,0) != -4 || lower(1,1) != 2 || lower(1,2) != 0 ||
334 lower(2,0) != 7 || lower(2,1) != 0 || lower(2,2) != 3 ) {
335 std::ostringstream oss;
336 oss << " Test: " << test_ << "\n"
337 << " Error: Construction failed\n"
338 << " Details:\n"
339 << " Result:\n" << lower << "\n"
340 << " Expected result:\n( 1 0 0 )\n( -4 2 0 )\n( 7 0 3 )\n";
341 throw std::runtime_error( oss.str() );
342 }
343 }
344
345 // Conversion constructor (non-lower)
346 {
347 test_ = "Row-major LowerMatrix conversion constructor (non-lower)";
348
349 blaze::StaticMatrix<int,3UL,3UL,blaze::rowMajor> mat;
350 mat(0,0) = 1;
351 mat(0,2) = 5;
352 mat(1,0) = -4;
353 mat(1,1) = 2;
354 mat(2,0) = 7;
355 mat(2,2) = 3;
356
357 try {
358 const LT lower( mat );
359
360 std::ostringstream oss;
361 oss << " Test: " << test_ << "\n"
362 << " Error: Setup of non-lower LowerMatrix succeeded\n"
363 << " Details:\n"
364 << " Result:\n" << lower << "\n";
365 throw std::runtime_error( oss.str() );
366 }
367 catch( std::invalid_argument& ) {}
368 }
369
370 // Conversion constructor (LowerMatrix)
371 {
372 test_ = "Row-major LowerMatrix conversion constructor (LowerMatrix)";
373
374 blaze::LowerMatrix< blaze::StaticMatrix<int,3UL,3UL,blaze::rowMajor> > lower1;
375 lower1(0,0) = 1;
376 lower1(1,0) = -4;
377 lower1(1,1) = 2;
378 lower1(2,0) = 7;
379 lower1(2,2) = 3;
380
381 const LT lower2( lower1 );
382
383 checkRows ( lower2, 3UL );
384 checkColumns ( lower2, 3UL );
385 checkCapacity( lower2, 5UL );
386 checkNonZeros( lower2, 5UL );
387 checkNonZeros( lower2, 0UL, 1UL );
388 checkNonZeros( lower2, 1UL, 2UL );
389 checkNonZeros( lower2, 2UL, 2UL );
390
391 if( lower2(0,0) != 1 || lower2(0,1) != 0 || lower2(0,2) != 0 ||
392 lower2(1,0) != -4 || lower2(1,1) != 2 || lower2(1,2) != 0 ||
393 lower2(2,0) != 7 || lower2(2,1) != 0 || lower2(2,2) != 3 ) {
394 std::ostringstream oss;
395 oss << " Test: " << test_ << "\n"
396 << " Error: Construction failed\n"
397 << " Details:\n"
398 << " Result:\n" << lower2 << "\n"
399 << " Expected result:\n( 1 0 0 )\n( -4 2 0 )\n( 7 0 3 )\n";
400 throw std::runtime_error( oss.str() );
401 }
402 }
403
404
405 //=====================================================================================
406 // Column-major default constructor
407 //=====================================================================================
408
409 // Default constructor (CompressedMatrix)
410 {
411 test_ = "Column-major LowerMatrix default constructor (CompressedMatrix)";
412
413 const OLT lower;
414
415 checkRows ( lower, 0UL );
416 checkColumns ( lower, 0UL );
417 checkNonZeros( lower, 0UL );
418 }
419
420
421 //=====================================================================================
422 // Column-major size constructor
423 //=====================================================================================
424
425 // Size constructor (CompressedMatrix)
426 {
427 test_ = "Column-major LowerMatrix size constructor (CompressedMatrix)";
428
429 const OLT lower( 2UL );
430
431 checkRows ( lower, 2UL );
432 checkColumns ( lower, 2UL );
433 checkNonZeros( lower, 0UL );
434 }
435
436
437 //=====================================================================================
438 // Column-major list initialization
439 //=====================================================================================
440
441 // Complete initializer list
442 {
443 test_ = "Column-major LowerMatrix initializer list constructor (complete list)";
444
445 const OLT lower{ { 1, 0, 0 }, { 2, 3, 0 }, { 4, 5, 6 } };
446
447 checkRows ( lower, 3UL );
448 checkColumns ( lower, 3UL );
449 checkCapacity( lower, 6UL );
450 checkNonZeros( lower, 6UL );
451 checkNonZeros( lower, 0UL, 3UL );
452 checkNonZeros( lower, 1UL, 2UL );
453 checkNonZeros( lower, 2UL, 1UL );
454
455 if( lower(0,0) != 1 || lower(0,1) != 0 || lower(0,2) != 0 ||
456 lower(1,0) != 2 || lower(1,1) != 3 || lower(1,2) != 0 ||
457 lower(2,0) != 4 || lower(2,1) != 5 || lower(2,2) != 6 ) {
458 std::ostringstream oss;
459 oss << " Test: " << test_ << "\n"
460 << " Error: Construction failed\n"
461 << " Details:\n"
462 << " Result:\n" << lower << "\n"
463 << " Expected result:\n( 1 0 0 )\n( 2 3 0 )\n( 4 5 6 )\n";
464 throw std::runtime_error( oss.str() );
465 }
466 }
467
468 // Incomplete initializer list
469 {
470 test_ = "Column-major LowerMatrix initializer list constructor (incomplete list)";
471
472 const OLT lower{ { 1 }, { 2, 3 }, { 4, 5, 6 } };
473
474 checkRows ( lower, 3UL );
475 checkColumns ( lower, 3UL );
476 checkCapacity( lower, 6UL );
477 checkNonZeros( lower, 6UL );
478 checkNonZeros( lower, 0UL, 3UL );
479 checkNonZeros( lower, 1UL, 2UL );
480 checkNonZeros( lower, 2UL, 1UL );
481
482 if( lower(0,0) != 1 || lower(0,1) != 0 || lower(0,2) != 0 ||
483 lower(1,0) != 2 || lower(1,1) != 3 || lower(1,2) != 0 ||
484 lower(2,0) != 4 || lower(2,1) != 5 || lower(2,2) != 6 ) {
485 std::ostringstream oss;
486 oss << " Test: " << test_ << "\n"
487 << " Error: Construction failed\n"
488 << " Details:\n"
489 << " Result:\n" << lower << "\n"
490 << " Expected result:\n( 1 0 0 )\n( 2 3 0 )\n( 4 5 6 )\n";
491 throw std::runtime_error( oss.str() );
492 }
493 }
494
495
496 //=====================================================================================
497 // Column-major copy constructor
498 //=====================================================================================
499
500 // Copy constructor (0x0)
501 {
502 test_ = "Column-major LowerMatrix copy constructor (0x0)";
503
504 const OLT lower1;
505 const OLT lower2( lower1 );
506
507 checkRows ( lower2, 0UL );
508 checkColumns ( lower2, 0UL );
509 checkNonZeros( lower2, 0UL );
510 }
511
512 // Copy constructor (3x3)
513 {
514 test_ = "Column-major LowerMatrix copy constructor (3x3)";
515
516 OLT lower1( 3UL );
517 lower1(0,0) = 1;
518 lower1(1,0) = -4;
519 lower1(1,1) = 2;
520 lower1(2,0) = 7;
521 lower1(2,2) = 3;
522
523 const OLT lower2( lower1 );
524
525 checkRows ( lower2, 3UL );
526 checkColumns ( lower2, 3UL );
527 checkCapacity( lower2, 5UL );
528 checkNonZeros( lower2, 5UL );
529 checkNonZeros( lower2, 0UL, 3UL );
530 checkNonZeros( lower2, 1UL, 1UL );
531 checkNonZeros( lower2, 2UL, 1UL );
532
533 if( lower2(0,0) != 1 || lower2(0,1) != 0 || lower2(0,2) != 0 ||
534 lower2(1,0) != -4 || lower2(1,1) != 2 || lower2(1,2) != 0 ||
535 lower2(2,0) != 7 || lower2(2,1) != 0 || lower2(2,2) != 3 ) {
536 std::ostringstream oss;
537 oss << " Test: " << test_ << "\n"
538 << " Error: Construction failed\n"
539 << " Details:\n"
540 << " Result:\n" << lower2 << "\n"
541 << " Expected result:\n( 1 0 0 )\n( -4 2 0 )\n( 7 0 3 )\n";
542 throw std::runtime_error( oss.str() );
543 }
544 }
545
546
547 //=====================================================================================
548 // Column-major move constructor
549 //=====================================================================================
550
551 // Move constructor (0x0)
552 {
553 test_ = "Column-major LowerMatrix move constructor (0x0)";
554
555 OLT lower1;
556 OLT lower2( std::move( lower1 ) );
557
558 checkRows ( lower2, 0UL );
559 checkColumns ( lower2, 0UL );
560 checkNonZeros( lower2, 0UL );
561 }
562
563 // Move constructor (3x3)
564 {
565 test_ = "Column-major LowerMatrix move constructor (3x3)";
566
567 OLT lower1( 3UL );
568 lower1(0,0) = 1;
569 lower1(1,0) = -4;
570 lower1(1,1) = 2;
571 lower1(2,0) = 7;
572 lower1(2,2) = 3;
573
574 OLT lower2( std::move( lower1 ) );
575
576 checkRows ( lower2, 3UL );
577 checkColumns ( lower2, 3UL );
578 checkCapacity( lower2, 5UL );
579 checkNonZeros( lower2, 5UL );
580 checkNonZeros( lower2, 0UL, 3UL );
581 checkNonZeros( lower2, 1UL, 1UL );
582 checkNonZeros( lower2, 2UL, 1UL );
583
584 if( lower2(0,0) != 1 || lower2(0,1) != 0 || lower2(0,2) != 0 ||
585 lower2(1,0) != -4 || lower2(1,1) != 2 || lower2(1,2) != 0 ||
586 lower2(2,0) != 7 || lower2(2,1) != 0 || lower2(2,2) != 3 ) {
587 std::ostringstream oss;
588 oss << " Test: " << test_ << "\n"
589 << " Error: Construction failed\n"
590 << " Details:\n"
591 << " Result:\n" << lower2 << "\n"
592 << " Expected result:\n( 1 0 0 )\n( -4 2 0 )\n( 7 0 3 )\n";
593 throw std::runtime_error( oss.str() );
594 }
595 }
596
597
598 //=====================================================================================
599 // Column-major conversion constructor
600 //=====================================================================================
601
602 // Conversion constructor (0x0)
603 {
604 test_ = "Column-major LowerMatrix conversion constructor (0x0)";
605
606 const blaze::DynamicMatrix<int,blaze::columnMajor> mat;
607 const OLT lower( mat );
608
609 checkRows ( lower, 0UL );
610 checkColumns ( lower, 0UL );
611 checkNonZeros( lower, 0UL );
612 }
613
614 // Conversion constructor (lower)
615 {
616 test_ = "Column-major LowerMatrix conversion constructor (lower)";
617
618 blaze::StaticMatrix<int,3UL,3UL,blaze::columnMajor> mat;
619 mat(0,0) = 1;
620 mat(1,0) = -4;
621 mat(1,1) = 2;
622 mat(2,0) = 7;
623 mat(2,2) = 3;
624
625 const OLT lower( mat );
626
627 checkRows ( lower, 3UL );
628 checkColumns ( lower, 3UL );
629 checkCapacity( lower, 5UL );
630 checkNonZeros( lower, 5UL );
631 checkNonZeros( lower, 0UL, 3UL );
632 checkNonZeros( lower, 1UL, 1UL );
633 checkNonZeros( lower, 2UL, 1UL );
634
635 if( lower(0,0) != 1 || lower(0,1) != 0 || lower(0,2) != 0 ||
636 lower(1,0) != -4 || lower(1,1) != 2 || lower(1,2) != 0 ||
637 lower(2,0) != 7 || lower(2,1) != 0 || lower(2,2) != 3 ) {
638 std::ostringstream oss;
639 oss << " Test: " << test_ << "\n"
640 << " Error: Construction failed\n"
641 << " Details:\n"
642 << " Result:\n" << lower << "\n"
643 << " Expected result:\n( 1 0 0 )\n( -4 2 0 )\n( 7 0 3 )\n";
644 throw std::runtime_error( oss.str() );
645 }
646 }
647
648 // Conversion constructor (non-lower)
649 {
650 test_ = "Column-major LowerMatrix conversion constructor (non-lower)";
651
652 blaze::StaticMatrix<int,3UL,3UL,blaze::columnMajor> mat;
653 mat(0,0) = 1;
654 mat(0,2) = 5;
655 mat(1,0) = -4;
656 mat(1,1) = 2;
657 mat(2,0) = 7;
658 mat(2,2) = 3;
659
660 try {
661 const OLT lower( mat );
662
663 std::ostringstream oss;
664 oss << " Test: " << test_ << "\n"
665 << " Error: Setup of non-lower LowerMatrix succeeded\n"
666 << " Details:\n"
667 << " Result:\n" << lower << "\n";
668 throw std::runtime_error( oss.str() );
669 }
670 catch( std::invalid_argument& ) {}
671 }
672
673 // Conversion constructor (LowerMatrix)
674 {
675 test_ = "Column-major LowerMatrix conversion constructor (LowerMatrix)";
676
677 blaze::LowerMatrix< blaze::StaticMatrix<int,3UL,3UL,blaze::columnMajor> > lower1;
678 lower1(0,0) = 1;
679 lower1(1,0) = -4;
680 lower1(1,1) = 2;
681 lower1(2,0) = 7;
682 lower1(2,2) = 3;
683
684 const OLT lower2( lower1 );
685
686 checkRows ( lower2, 3UL );
687 checkColumns ( lower2, 3UL );
688 checkCapacity( lower2, 5UL );
689 checkNonZeros( lower2, 5UL );
690 checkNonZeros( lower2, 0UL, 3UL );
691 checkNonZeros( lower2, 1UL, 1UL );
692 checkNonZeros( lower2, 2UL, 1UL );
693
694 if( lower2(0,0) != 1 || lower2(0,1) != 0 || lower2(0,2) != 0 ||
695 lower2(1,0) != -4 || lower2(1,1) != 2 || lower2(1,2) != 0 ||
696 lower2(2,0) != 7 || lower2(2,1) != 0 || lower2(2,2) != 3 ) {
697 std::ostringstream oss;
698 oss << " Test: " << test_ << "\n"
699 << " Error: Construction failed\n"
700 << " Details:\n"
701 << " Result:\n" << lower2 << "\n"
702 << " Expected result:\n( 1 0 0 )\n( -4 2 0 )\n( 7 0 3 )\n";
703 throw std::runtime_error( oss.str() );
704 }
705 }
706 }
707 //*************************************************************************************************
708
709
710 //*************************************************************************************************
711 /*!\brief Test of the LowerMatrix assignment operators.
712 //
713 // \return void
714 // \exception std::runtime_error Error detected.
715 //
716 // This function performs a test of all assignment operators of the LowerMatrix specialization.
717 // In case an error is detected, a \a std::runtime_error exception is thrown.
718 */
testAssignment()719 void SparseTest::testAssignment()
720 {
721 //=====================================================================================
722 // Row-major list assignment
723 //=====================================================================================
724
725 // Complete initializer list
726 {
727 test_ = "Row-major LowerMatrix initializer list assignment (complete list)";
728
729 LT lower;
730 lower = { { 1, 0, 0 }, { 2, 3, 0 }, { 4, 5, 6 } };
731
732 checkRows ( lower, 3UL );
733 checkColumns ( lower, 3UL );
734 checkNonZeros( lower, 6UL );
735 checkNonZeros( lower, 0UL, 1UL );
736 checkNonZeros( lower, 1UL, 2UL );
737 checkNonZeros( lower, 2UL, 3UL );
738
739 if( lower(0,0) != 1 || lower(0,1) != 0 || lower(0,2) != 0 ||
740 lower(1,0) != 2 || lower(1,1) != 3 || lower(1,2) != 0 ||
741 lower(2,0) != 4 || lower(2,1) != 5 || lower(2,2) != 6 ) {
742 std::ostringstream oss;
743 oss << " Test: " << test_ << "\n"
744 << " Error: Assignment failed\n"
745 << " Details:\n"
746 << " Result:\n" << lower << "\n"
747 << " Expected result:\n( 1 0 0 )\n( 2 3 0 )\n( 4 5 6 )\n";
748 throw std::runtime_error( oss.str() );
749 }
750 }
751
752 // Incomplete initializer list
753 {
754 test_ = "Row-major LowerMatrix initializer list assignment (incomplete list)";
755
756 LT lower;
757 lower = { { 1 }, { 2, 3 }, { 4, 5, 6 } };
758
759 checkRows ( lower, 3UL );
760 checkColumns ( lower, 3UL );
761 checkNonZeros( lower, 6UL );
762 checkNonZeros( lower, 0UL, 1UL );
763 checkNonZeros( lower, 1UL, 2UL );
764 checkNonZeros( lower, 2UL, 3UL );
765
766 if( lower(0,0) != 1 || lower(0,1) != 0 || lower(0,2) != 0 ||
767 lower(1,0) != 2 || lower(1,1) != 3 || lower(1,2) != 0 ||
768 lower(2,0) != 4 || lower(2,1) != 5 || lower(2,2) != 6 ) {
769 std::ostringstream oss;
770 oss << " Test: " << test_ << "\n"
771 << " Error: Assignment failed\n"
772 << " Details:\n"
773 << " Result:\n" << lower << "\n"
774 << " Expected result:\n( 1 0 0 )\n( 2 3 0 )\n( 4 5 6 )\n";
775 throw std::runtime_error( oss.str() );
776 }
777 }
778
779
780 //=====================================================================================
781 // Row-major copy assignment
782 //=====================================================================================
783
784 // Copy assignment (0x0)
785 {
786 test_ = "Row-major LowerMatrix copy assignment (0x0)";
787
788 LT lower1, lower2;
789
790 lower2 = lower1;
791
792 checkRows ( lower2, 0UL );
793 checkColumns ( lower2, 0UL );
794 checkNonZeros( lower2, 0UL );
795 }
796
797 // Copy assignment (3x3)
798 {
799 test_ = "Row-major LowerMatrix copy assignment (3x3)";
800
801 LT lower1( 3UL );
802 lower1(0,0) = 1;
803 lower1(1,0) = -4;
804 lower1(1,1) = 2;
805 lower1(2,0) = 7;
806 lower1(2,2) = 3;
807
808 LT lower2;
809 lower2 = lower1;
810
811 checkRows ( lower2, 3UL );
812 checkColumns ( lower2, 3UL );
813 checkNonZeros( lower2, 5UL );
814 checkNonZeros( lower2, 0UL, 1UL );
815 checkNonZeros( lower2, 1UL, 2UL );
816 checkNonZeros( lower2, 2UL, 2UL );
817
818 if( lower2(0,0) != 1 || lower2(0,1) != 0 || lower2(0,2) != 0 ||
819 lower2(1,0) != -4 || lower2(1,1) != 2 || lower2(1,2) != 0 ||
820 lower2(2,0) != 7 || lower2(2,1) != 0 || lower2(2,2) != 3 ) {
821 std::ostringstream oss;
822 oss << " Test: " << test_ << "\n"
823 << " Error: Assignment failed\n"
824 << " Details:\n"
825 << " Result:\n" << lower2 << "\n"
826 << " Expected result:\n( 1 0 0 )\n( -4 2 0 )\n( 7 0 3 )\n";
827 throw std::runtime_error( oss.str() );
828 }
829 }
830
831
832 //=====================================================================================
833 // Row-major move assignment
834 //=====================================================================================
835
836 // Move assignment (0x0)
837 {
838 test_ = "Row-major LowerMatrix move assignment (0x0)";
839
840 LT lower1, lower2;
841
842 lower2 = std::move( lower1 );
843
844 checkRows ( lower2, 0UL );
845 checkColumns ( lower2, 0UL );
846 checkNonZeros( lower2, 0UL );
847 }
848
849 // Move assignment (3x3)
850 {
851 test_ = "Row-major LowerMatrix move assignment (3x3)";
852
853 LT lower1( 3UL );
854 lower1(0,0) = 1;
855 lower1(1,0) = -4;
856 lower1(1,1) = 2;
857 lower1(2,0) = 7;
858 lower1(2,2) = 3;
859
860 LT lower2;
861 lower2 = std::move( lower1 );
862
863 checkRows ( lower2, 3UL );
864 checkColumns ( lower2, 3UL );
865 checkNonZeros( lower2, 5UL );
866 checkNonZeros( lower2, 0UL, 1UL );
867 checkNonZeros( lower2, 1UL, 2UL );
868 checkNonZeros( lower2, 2UL, 2UL );
869
870 if( lower2(0,0) != 1 || lower2(0,1) != 0 || lower2(0,2) != 0 ||
871 lower2(1,0) != -4 || lower2(1,1) != 2 || lower2(1,2) != 0 ||
872 lower2(2,0) != 7 || lower2(2,1) != 0 || lower2(2,2) != 3 ) {
873 std::ostringstream oss;
874 oss << " Test: " << test_ << "\n"
875 << " Error: Assignment failed\n"
876 << " Details:\n"
877 << " Result:\n" << lower2 << "\n"
878 << " Expected result:\n( 1 0 0 )\n( -4 2 0 )\n( 7 0 3 )\n";
879 throw std::runtime_error( oss.str() );
880 }
881 }
882
883
884 //=====================================================================================
885 // Row-major dense matrix assignment
886 //=====================================================================================
887
888 // Conversion assignment (0x0)
889 {
890 test_ = "Row-major LowerMatrix dense matrix assignment (0x0)";
891
892 const blaze::DynamicMatrix<int,blaze::rowMajor> mat;
893
894 LT lower;
895 lower = mat;
896
897 checkRows ( lower, 0UL );
898 checkColumns ( lower, 0UL );
899 checkNonZeros( lower, 0UL );
900 }
901
902 // Row-major/row-major dense matrix assignment (lower)
903 {
904 test_ = "Row-major/row-major LowerMatrix dense matrix assignment (lower)";
905
906 blaze::StaticMatrix<int,3UL,3UL,blaze::rowMajor> mat;
907 mat(0,0) = 1;
908 mat(1,0) = -4;
909 mat(1,1) = 2;
910 mat(2,0) = 7;
911 mat(2,2) = 3;
912
913 LT lower;
914 lower = mat;
915
916 checkRows ( lower, 3UL );
917 checkColumns ( lower, 3UL );
918 checkNonZeros( lower, 5UL );
919 checkNonZeros( lower, 0UL, 1UL );
920 checkNonZeros( lower, 1UL, 2UL );
921 checkNonZeros( lower, 2UL, 2UL );
922
923 if( lower(0,0) != 1 || lower(0,1) != 0 || lower(0,2) != 0 ||
924 lower(1,0) != -4 || lower(1,1) != 2 || lower(1,2) != 0 ||
925 lower(2,0) != 7 || lower(2,1) != 0 || lower(2,2) != 3 ) {
926 std::ostringstream oss;
927 oss << " Test: " << test_ << "\n"
928 << " Error: Assignment failed\n"
929 << " Details:\n"
930 << " Result:\n" << lower << "\n"
931 << " Expected result:\n( 1 0 0 )\n( -4 2 0 )\n( 7 0 3 )\n";
932 throw std::runtime_error( oss.str() );
933 }
934 }
935
936 // Row-major/column-major dense matrix assignment (lower)
937 {
938 test_ = "Row-major/column-major LowerMatrix dense matrix assignment (lower)";
939
940 blaze::StaticMatrix<int,3UL,3UL,blaze::columnMajor> mat;
941 mat(0,0) = 1;
942 mat(1,0) = -4;
943 mat(1,1) = 2;
944 mat(2,0) = 7;
945 mat(2,2) = 3;
946
947 LT lower;
948 lower = mat;
949
950 checkRows ( lower, 3UL );
951 checkColumns ( lower, 3UL );
952 checkNonZeros( lower, 5UL );
953 checkNonZeros( lower, 0UL, 1UL );
954 checkNonZeros( lower, 1UL, 2UL );
955 checkNonZeros( lower, 2UL, 2UL );
956
957 if( lower(0,0) != 1 || lower(0,1) != 0 || lower(0,2) != 0 ||
958 lower(1,0) != -4 || lower(1,1) != 2 || lower(1,2) != 0 ||
959 lower(2,0) != 7 || lower(2,1) != 0 || lower(2,2) != 3 ) {
960 std::ostringstream oss;
961 oss << " Test: " << test_ << "\n"
962 << " Error: Assignment failed\n"
963 << " Details:\n"
964 << " Result:\n" << lower << "\n"
965 << " Expected result:\n( 1 0 0 )\n( -4 2 0 )\n( 7 0 3 )\n";
966 throw std::runtime_error( oss.str() );
967 }
968 }
969
970 // Row-major/row-major dense matrix assignment (non-lower)
971 {
972 test_ = "Row-major/row-major LowerMatrix dense matrix assignment (non-lower)";
973
974 blaze::StaticMatrix<int,3UL,3UL,blaze::rowMajor> mat;
975 mat(0,0) = 1;
976 mat(0,2) = 5;
977 mat(1,0) = -4;
978 mat(1,1) = 2;
979 mat(2,0) = 7;
980 mat(2,2) = 3;
981
982 try {
983 LT lower;
984 lower = mat;
985
986 std::ostringstream oss;
987 oss << " Test: " << test_ << "\n"
988 << " Error: Assignment of non-lower row-major matrix succeeded\n"
989 << " Details:\n"
990 << " Result:\n" << lower << "\n";
991 throw std::runtime_error( oss.str() );
992 }
993 catch( std::invalid_argument& ) {}
994 }
995
996 // Row-major/column-major dense matrix assignment (non-lower)
997 {
998 test_ = "Row-major/column-major LowerMatrix dense matrix assignment (non-lower)";
999
1000 blaze::StaticMatrix<int,3UL,3UL,blaze::columnMajor> mat;
1001 mat(0,0) = 1;
1002 mat(0,2) = 5;
1003 mat(1,0) = -4;
1004 mat(1,1) = 2;
1005 mat(2,0) = 7;
1006 mat(2,2) = 3;
1007
1008 try {
1009 LT lower;
1010 lower = mat;
1011
1012 std::ostringstream oss;
1013 oss << " Test: " << test_ << "\n"
1014 << " Error: Assignment of non-lower column-major matrix succeeded\n"
1015 << " Details:\n"
1016 << " Result:\n" << lower << "\n";
1017 throw std::runtime_error( oss.str() );
1018 }
1019 catch( std::invalid_argument& ) {}
1020 }
1021
1022 // Row-major/row-major dense matrix assignment (LowerMatrix)
1023 {
1024 test_ = "Row-major/row-major LowerMatrix dense matrix assignment (LowerMatrix)";
1025
1026 blaze::LowerMatrix< blaze::StaticMatrix<int,3UL,3UL,blaze::rowMajor> > lower1;
1027 lower1(0,0) = 1;
1028 lower1(1,0) = -4;
1029 lower1(1,1) = 2;
1030 lower1(2,0) = 7;
1031 lower1(2,2) = 3;
1032
1033 LT lower2;
1034 lower2 = lower1;
1035
1036 checkRows ( lower2, 3UL );
1037 checkColumns ( lower2, 3UL );
1038 checkNonZeros( lower2, 5UL );
1039 checkNonZeros( lower2, 0UL, 1UL );
1040 checkNonZeros( lower2, 1UL, 2UL );
1041 checkNonZeros( lower2, 2UL, 2UL );
1042
1043 if( lower2(0,0) != 1 || lower2(0,1) != 0 || lower2(0,2) != 0 ||
1044 lower2(1,0) != -4 || lower2(1,1) != 2 || lower2(1,2) != 0 ||
1045 lower2(2,0) != 7 || lower2(2,1) != 0 || lower2(2,2) != 3 ) {
1046 std::ostringstream oss;
1047 oss << " Test: " << test_ << "\n"
1048 << " Error: Assignment failed\n"
1049 << " Details:\n"
1050 << " Result:\n" << lower2 << "\n"
1051 << " Expected result:\n( 1 0 0 )\n( -4 2 0 )\n( 7 0 3 )\n";
1052 throw std::runtime_error( oss.str() );
1053 }
1054 }
1055
1056 // Row-major/column-major dense matrix assignment (LowerMatrix)
1057 {
1058 test_ = "Row-major/column-major LowerMatrix dense matrix assignment (LowerMatrix)";
1059
1060 blaze::LowerMatrix< blaze::StaticMatrix<int,3UL,3UL,blaze::columnMajor> > lower1;
1061 lower1(0,0) = 1;
1062 lower1(1,0) = -4;
1063 lower1(1,1) = 2;
1064 lower1(2,0) = 7;
1065 lower1(2,2) = 3;
1066
1067 LT lower2;
1068 lower2 = lower1;
1069
1070 checkRows ( lower2, 3UL );
1071 checkColumns ( lower2, 3UL );
1072 checkNonZeros( lower2, 5UL );
1073 checkNonZeros( lower2, 0UL, 1UL );
1074 checkNonZeros( lower2, 1UL, 2UL );
1075 checkNonZeros( lower2, 2UL, 2UL );
1076
1077 if( lower2(0,0) != 1 || lower2(0,1) != 0 || lower2(0,2) != 0 ||
1078 lower2(1,0) != -4 || lower2(1,1) != 2 || lower2(1,2) != 0 ||
1079 lower2(2,0) != 7 || lower2(2,1) != 0 || lower2(2,2) != 3 ) {
1080 std::ostringstream oss;
1081 oss << " Test: " << test_ << "\n"
1082 << " Error: Assignment failed\n"
1083 << " Details:\n"
1084 << " Result:\n" << lower2 << "\n"
1085 << " Expected result:\n( 1 0 0 )\n( -4 2 0 )\n( 7 0 3 )\n";
1086 throw std::runtime_error( oss.str() );
1087 }
1088 }
1089
1090
1091 //=====================================================================================
1092 // Row-major sparse matrix assignment
1093 //=====================================================================================
1094
1095 // Conversion assignment (0x0)
1096 {
1097 test_ = "Row-major LowerMatrix sparse matrix assignment (0x0)";
1098
1099 const blaze::CompressedMatrix<int,blaze::rowMajor> mat;
1100
1101 LT lower;
1102 lower = mat;
1103
1104 checkRows ( lower, 0UL );
1105 checkColumns ( lower, 0UL );
1106 checkNonZeros( lower, 0UL );
1107 }
1108
1109 // Row-major/row-major sparse matrix assignment (lower)
1110 {
1111 test_ = "Row-major/row-major LowerMatrix sparse matrix assignment (lower)";
1112
1113 blaze::CompressedMatrix<int,blaze::rowMajor> mat( 3UL, 3UL, 6UL );
1114 mat(0,0) = 1;
1115 mat(1,0) = -4;
1116 mat(1,1) = 2;
1117 mat(2,0) = 7;
1118 mat(2,2) = 3;
1119 mat.insert( 1UL, 2UL, 0 );
1120
1121 LT lower;
1122 lower = mat;
1123
1124 checkRows ( lower, 3UL );
1125 checkColumns ( lower, 3UL );
1126 checkNonZeros( lower, 5UL );
1127 checkNonZeros( lower, 0UL, 1UL );
1128 checkNonZeros( lower, 1UL, 2UL );
1129 checkNonZeros( lower, 2UL, 2UL );
1130
1131 if( lower(0,0) != 1 || lower(0,1) != 0 || lower(0,2) != 0 ||
1132 lower(1,0) != -4 || lower(1,1) != 2 || lower(1,2) != 0 ||
1133 lower(2,0) != 7 || lower(2,1) != 0 || lower(2,2) != 3 ) {
1134 std::ostringstream oss;
1135 oss << " Test: " << test_ << "\n"
1136 << " Error: Assignment failed\n"
1137 << " Details:\n"
1138 << " Result:\n" << lower << "\n"
1139 << " Expected result:\n( 1 0 0 )\n( -4 2 0 )\n( 7 0 3 )\n";
1140 throw std::runtime_error( oss.str() );
1141 }
1142 }
1143
1144 // Row-major/column-major sparse matrix assignment (lower)
1145 {
1146 test_ = "Row-major/column-major LowerMatrix sparse matrix assignment (lower)";
1147
1148 blaze::CompressedMatrix<int,blaze::columnMajor> mat( 3UL, 3UL, 6UL );
1149 mat(0,0) = 1;
1150 mat(1,0) = -4;
1151 mat(1,1) = 2;
1152 mat(2,0) = 7;
1153 mat(2,2) = 3;
1154 mat.insert( 1UL, 2UL, 0 );
1155
1156 LT lower;
1157 lower = mat;
1158
1159 checkRows ( lower, 3UL );
1160 checkColumns ( lower, 3UL );
1161 checkNonZeros( lower, 5UL );
1162 checkNonZeros( lower, 0UL, 1UL );
1163 checkNonZeros( lower, 1UL, 2UL );
1164 checkNonZeros( lower, 2UL, 2UL );
1165
1166 if( lower(0,0) != 1 || lower(0,1) != 0 || lower(0,2) != 0 ||
1167 lower(1,0) != -4 || lower(1,1) != 2 || lower(1,2) != 0 ||
1168 lower(2,0) != 7 || lower(2,1) != 0 || lower(2,2) != 3 ) {
1169 std::ostringstream oss;
1170 oss << " Test: " << test_ << "\n"
1171 << " Error: Assignment failed\n"
1172 << " Details:\n"
1173 << " Result:\n" << lower << "\n"
1174 << " Expected result:\n( 1 0 0 )\n( -4 2 0 )\n( 7 0 3 )\n";
1175 throw std::runtime_error( oss.str() );
1176 }
1177 }
1178
1179 // Row-major/row-major sparse matrix assignment (non-lower)
1180 {
1181 test_ = "Row-major/row-major LowerMatrix sparse matrix assignment (non-lower)";
1182
1183 blaze::CompressedMatrix<int,blaze::rowMajor> mat( 3UL, 3UL, 6UL );
1184 mat(0,0) = 1;
1185 mat(0,2) = 5;
1186 mat(1,0) = -4;
1187 mat(1,1) = 2;
1188 mat(2,0) = 7;
1189 mat(2,2) = 3;
1190
1191 try {
1192 LT lower;
1193 lower = mat;
1194
1195 std::ostringstream oss;
1196 oss << " Test: " << test_ << "\n"
1197 << " Error: Assignment of non-lower row-major matrix succeeded\n"
1198 << " Details:\n"
1199 << " Result:\n" << lower << "\n";
1200 throw std::runtime_error( oss.str() );
1201 }
1202 catch( std::invalid_argument& ) {}
1203 }
1204
1205 // Row-major/column-major sparse matrix assignment (non-lower)
1206 {
1207 test_ = "Row-major/column-major LowerMatrix sparse matrix assignment (non-lower)";
1208
1209 blaze::CompressedMatrix<int,blaze::columnMajor> mat( 3UL, 3UL, 6UL );
1210 mat(0,0) = 1;
1211 mat(0,2) = 5;
1212 mat(1,0) = -4;
1213 mat(1,1) = 2;
1214 mat(2,0) = 7;
1215 mat(2,2) = 3;
1216
1217 try {
1218 LT lower;
1219 lower = mat;
1220
1221 std::ostringstream oss;
1222 oss << " Test: " << test_ << "\n"
1223 << " Error: Assignment of non-lower column-major matrix succeeded\n"
1224 << " Details:\n"
1225 << " Result:\n" << lower << "\n";
1226 throw std::runtime_error( oss.str() );
1227 }
1228 catch( std::invalid_argument& ) {}
1229 }
1230
1231 // Row-major/row-major sparse matrix assignment (LowerMatrix)
1232 {
1233 test_ = "Row-major/row-major LowerMatrix sparse matrix assignment (LowerMatrix)";
1234
1235 blaze::LowerMatrix< blaze::CompressedMatrix<unsigned int,blaze::rowMajor> > lower1( 3UL, 5UL );
1236 lower1(0,0) = 1;
1237 lower1(1,0) = -4;
1238 lower1(1,1) = 2;
1239 lower1(2,0) = 7;
1240 lower1(2,2) = 3;
1241
1242 LT lower2;
1243 lower2 = lower1;
1244
1245 checkRows ( lower2, 3UL );
1246 checkColumns ( lower2, 3UL );
1247 checkNonZeros( lower2, 5UL );
1248 checkNonZeros( lower2, 0UL, 1UL );
1249 checkNonZeros( lower2, 1UL, 2UL );
1250 checkNonZeros( lower2, 2UL, 2UL );
1251
1252 if( lower2(0,0) != 1 || lower2(0,1) != 0 || lower2(0,2) != 0 ||
1253 lower2(1,0) != -4 || lower2(1,1) != 2 || lower2(1,2) != 0 ||
1254 lower2(2,0) != 7 || lower2(2,1) != 0 || lower2(2,2) != 3 ) {
1255 std::ostringstream oss;
1256 oss << " Test: " << test_ << "\n"
1257 << " Error: Assignment failed\n"
1258 << " Details:\n"
1259 << " Result:\n" << lower2 << "\n"
1260 << " Expected result:\n( 1 0 0 )\n( -4 2 0 )\n( 7 0 3 )\n";
1261 throw std::runtime_error( oss.str() );
1262 }
1263 }
1264
1265 // Row-major/column-major sparse matrix assignment (LowerMatrix)
1266 {
1267 test_ = "Row-major/column-major LowerMatrix sparse matrix assignment (LowerMatrix)";
1268
1269 blaze::LowerMatrix< blaze::CompressedMatrix<int,blaze::columnMajor> > lower1( 3UL, 5UL );
1270 lower1(0,0) = 1;
1271 lower1(1,0) = -4;
1272 lower1(1,1) = 2;
1273 lower1(2,0) = 7;
1274 lower1(2,2) = 3;
1275
1276 LT lower2;
1277 lower2 = lower1;
1278
1279 checkRows ( lower2, 3UL );
1280 checkColumns ( lower2, 3UL );
1281 checkNonZeros( lower2, 5UL );
1282 checkNonZeros( lower2, 0UL, 1UL );
1283 checkNonZeros( lower2, 1UL, 2UL );
1284 checkNonZeros( lower2, 2UL, 2UL );
1285
1286 if( lower2(0,0) != 1 || lower2(0,1) != 0 || lower2(0,2) != 0 ||
1287 lower2(1,0) != -4 || lower2(1,1) != 2 || lower2(1,2) != 0 ||
1288 lower2(2,0) != 7 || lower2(2,1) != 0 || lower2(2,2) != 3 ) {
1289 std::ostringstream oss;
1290 oss << " Test: " << test_ << "\n"
1291 << " Error: Assignment failed\n"
1292 << " Details:\n"
1293 << " Result:\n" << lower2 << "\n"
1294 << " Expected result:\n( 1 0 0 )\n( -4 2 0 )\n( 7 0 3 )\n";
1295 throw std::runtime_error( oss.str() );
1296 }
1297 }
1298
1299
1300 //=====================================================================================
1301 // Column-major list assignment
1302 //=====================================================================================
1303
1304 // Complete initializer list
1305 {
1306 test_ = "Column-major LowerMatrix initializer list assignment (complete list)";
1307
1308 OLT lower;
1309 lower = { { 1, 0, 0 }, { 2, 3, 0 }, { 4, 5, 6 } };
1310
1311 checkRows ( lower, 3UL );
1312 checkColumns ( lower, 3UL );
1313 checkNonZeros( lower, 6UL );
1314 checkNonZeros( lower, 0UL, 3UL );
1315 checkNonZeros( lower, 1UL, 2UL );
1316 checkNonZeros( lower, 2UL, 1UL );
1317
1318 if( lower(0,0) != 1 || lower(0,1) != 0 || lower(0,2) != 0 ||
1319 lower(1,0) != 2 || lower(1,1) != 3 || lower(1,2) != 0 ||
1320 lower(2,0) != 4 || lower(2,1) != 5 || lower(2,2) != 6 ) {
1321 std::ostringstream oss;
1322 oss << " Test: " << test_ << "\n"
1323 << " Error: Assignment failed\n"
1324 << " Details:\n"
1325 << " Result:\n" << lower << "\n"
1326 << " Expected result:\n( 1 0 0 )\n( 2 3 0 )\n( 4 5 6 )\n";
1327 throw std::runtime_error( oss.str() );
1328 }
1329 }
1330
1331 // Incomplete initializer list
1332 {
1333 test_ = "Column-major LowerMatrix initializer list assignment (incomplete list)";
1334
1335 OLT lower;
1336 lower = { { 1 }, { 2, 3 }, { 4, 5, 6 } };
1337
1338 checkRows ( lower, 3UL );
1339 checkColumns ( lower, 3UL );
1340 checkNonZeros( lower, 6UL );
1341 checkNonZeros( lower, 0UL, 3UL );
1342 checkNonZeros( lower, 1UL, 2UL );
1343 checkNonZeros( lower, 2UL, 1UL );
1344
1345 if( lower(0,0) != 1 || lower(0,1) != 0 || lower(0,2) != 0 ||
1346 lower(1,0) != 2 || lower(1,1) != 3 || lower(1,2) != 0 ||
1347 lower(2,0) != 4 || lower(2,1) != 5 || lower(2,2) != 6 ) {
1348 std::ostringstream oss;
1349 oss << " Test: " << test_ << "\n"
1350 << " Error: Assignment failed\n"
1351 << " Details:\n"
1352 << " Result:\n" << lower << "\n"
1353 << " Expected result:\n( 1 0 0 )\n( 2 3 0 )\n( 4 5 6 )\n";
1354 throw std::runtime_error( oss.str() );
1355 }
1356 }
1357
1358
1359 //=====================================================================================
1360 // Column-major copy assignment
1361 //=====================================================================================
1362
1363 // Copy assignment (0x0)
1364 {
1365 test_ = "Column-major LowerMatrix copy assignment (0x0)";
1366
1367 OLT lower1, lower2;
1368
1369 lower2 = lower1;
1370
1371 checkRows ( lower2, 0UL );
1372 checkColumns ( lower2, 0UL );
1373 checkNonZeros( lower2, 0UL );
1374 }
1375
1376 // Copy assignment (3x3)
1377 {
1378 test_ = "Column-major LowerMatrix copy assignment (3x3)";
1379
1380 OLT lower1( 3UL );
1381 lower1(0,0) = 1;
1382 lower1(1,0) = -4;
1383 lower1(1,1) = 2;
1384 lower1(2,0) = 7;
1385 lower1(2,2) = 3;
1386
1387 OLT lower2;
1388 lower2 = lower1;
1389
1390 checkRows ( lower2, 3UL );
1391 checkColumns ( lower2, 3UL );
1392 checkNonZeros( lower2, 5UL );
1393 checkNonZeros( lower2, 0UL, 3UL );
1394 checkNonZeros( lower2, 1UL, 1UL );
1395 checkNonZeros( lower2, 2UL, 1UL );
1396
1397 if( lower2(0,0) != 1 || lower2(0,1) != 0 || lower2(0,2) != 0 ||
1398 lower2(1,0) != -4 || lower2(1,1) != 2 || lower2(1,2) != 0 ||
1399 lower2(2,0) != 7 || lower2(2,1) != 0 || lower2(2,2) != 3 ) {
1400 std::ostringstream oss;
1401 oss << " Test: " << test_ << "\n"
1402 << " Error: Assignment failed\n"
1403 << " Details:\n"
1404 << " Result:\n" << lower2 << "\n"
1405 << " Expected result:\n( 1 0 0 )\n( -4 2 0 )\n( 7 0 3 )\n";
1406 throw std::runtime_error( oss.str() );
1407 }
1408 }
1409
1410
1411 //=====================================================================================
1412 // Column-major move assignment
1413 //=====================================================================================
1414
1415 // Move assignment (0x0)
1416 {
1417 test_ = "Column-major LowerMatrix move assignment (0x0)";
1418
1419 OLT lower1, lower2;
1420
1421 lower2 = std::move( lower1 );
1422
1423 checkRows ( lower2, 0UL );
1424 checkColumns ( lower2, 0UL );
1425 checkNonZeros( lower2, 0UL );
1426 }
1427
1428 // Move assignment (3x3)
1429 {
1430 test_ = "Column-major LowerMatrix move assignment (3x3)";
1431
1432 OLT lower1( 3UL );
1433 lower1(0,0) = 1;
1434 lower1(1,0) = -4;
1435 lower1(1,1) = 2;
1436 lower1(2,0) = 7;
1437 lower1(2,2) = 3;
1438
1439 OLT lower2;
1440 lower2 = std::move( lower1 );
1441
1442 checkRows ( lower2, 3UL );
1443 checkColumns ( lower2, 3UL );
1444 checkNonZeros( lower2, 5UL );
1445 checkNonZeros( lower2, 0UL, 3UL );
1446 checkNonZeros( lower2, 1UL, 1UL );
1447 checkNonZeros( lower2, 2UL, 1UL );
1448
1449 if( lower2(0,0) != 1 || lower2(0,1) != 0 || lower2(0,2) != 0 ||
1450 lower2(1,0) != -4 || lower2(1,1) != 2 || lower2(1,2) != 0 ||
1451 lower2(2,0) != 7 || lower2(2,1) != 0 || lower2(2,2) != 3 ) {
1452 std::ostringstream oss;
1453 oss << " Test: " << test_ << "\n"
1454 << " Error: Assignment failed\n"
1455 << " Details:\n"
1456 << " Result:\n" << lower2 << "\n"
1457 << " Expected result:\n( 1 0 0 )\n( -4 2 0 )\n( 7 0 3 )\n";
1458 throw std::runtime_error( oss.str() );
1459 }
1460 }
1461
1462
1463 //=====================================================================================
1464 // Column-major dense matrix assignment
1465 //=====================================================================================
1466
1467 // Conversion assignment (0x0)
1468 {
1469 test_ = "Column-major LowerMatrix dense matrix assignment (0x0)";
1470
1471 const blaze::DynamicMatrix<int,blaze::columnMajor> mat;
1472
1473 OLT lower;
1474 lower = mat;
1475
1476 checkRows ( lower, 0UL );
1477 checkColumns ( lower, 0UL );
1478 checkNonZeros( lower, 0UL );
1479 }
1480
1481 // Column-major/row-major dense matrix assignment (lower)
1482 {
1483 test_ = "Column-major/row-major LowerMatrix dense matrix assignment (lower)";
1484
1485 blaze::StaticMatrix<int,3UL,3UL,blaze::rowMajor> mat;
1486 mat(0,0) = 1;
1487 mat(1,0) = -4;
1488 mat(1,1) = 2;
1489 mat(2,0) = 7;
1490 mat(2,2) = 3;
1491
1492 OLT lower;
1493 lower = mat;
1494
1495 checkRows ( lower, 3UL );
1496 checkColumns ( lower, 3UL );
1497 checkNonZeros( lower, 5UL );
1498 checkNonZeros( lower, 0UL, 3UL );
1499 checkNonZeros( lower, 1UL, 1UL );
1500 checkNonZeros( lower, 2UL, 1UL );
1501
1502 if( lower(0,0) != 1 || lower(0,1) != 0 || lower(0,2) != 0 ||
1503 lower(1,0) != -4 || lower(1,1) != 2 || lower(1,2) != 0 ||
1504 lower(2,0) != 7 || lower(2,1) != 0 || lower(2,2) != 3 ) {
1505 std::ostringstream oss;
1506 oss << " Test: " << test_ << "\n"
1507 << " Error: Assignment failed\n"
1508 << " Details:\n"
1509 << " Result:\n" << lower << "\n"
1510 << " Expected result:\n( 1 0 0 )\n( -4 2 0 )\n( 7 0 3 )\n";
1511 throw std::runtime_error( oss.str() );
1512 }
1513 }
1514
1515 // Column-major/column-major dense matrix assignment (lower)
1516 {
1517 test_ = "Column-major/column-major LowerMatrix dense matrix assignment (lower)";
1518
1519 blaze::StaticMatrix<int,3UL,3UL,blaze::columnMajor> mat;
1520 mat(0,0) = 1;
1521 mat(1,0) = -4;
1522 mat(1,1) = 2;
1523 mat(2,0) = 7;
1524 mat(2,2) = 3;
1525
1526 OLT lower;
1527 lower = mat;
1528
1529 checkRows ( lower, 3UL );
1530 checkColumns ( lower, 3UL );
1531 checkNonZeros( lower, 5UL );
1532 checkNonZeros( lower, 0UL, 3UL );
1533 checkNonZeros( lower, 1UL, 1UL );
1534 checkNonZeros( lower, 2UL, 1UL );
1535
1536 if( lower(0,0) != 1 || lower(0,1) != 0 || lower(0,2) != 0 ||
1537 lower(1,0) != -4 || lower(1,1) != 2 || lower(1,2) != 0 ||
1538 lower(2,0) != 7 || lower(2,1) != 0 || lower(2,2) != 3 ) {
1539 std::ostringstream oss;
1540 oss << " Test: " << test_ << "\n"
1541 << " Error: Assignment failed\n"
1542 << " Details:\n"
1543 << " Result:\n" << lower << "\n"
1544 << " Expected result:\n( 1 0 0 )\n( -4 2 0 )\n( 7 0 3 )\n";
1545 throw std::runtime_error( oss.str() );
1546 }
1547 }
1548
1549 // Column-major/row-major dense matrix assignment (non-lower)
1550 {
1551 test_ = "Column-major/row-major LowerMatrix dense matrix assignment (non-lower)";
1552
1553 blaze::StaticMatrix<int,3UL,3UL,blaze::rowMajor> mat;
1554 mat(0,0) = 1;
1555 mat(0,2) = 5;
1556 mat(1,0) = -4;
1557 mat(1,1) = 2;
1558 mat(2,0) = 7;
1559 mat(2,2) = 3;
1560
1561 try {
1562 OLT lower;
1563 lower = mat;
1564
1565 std::ostringstream oss;
1566 oss << " Test: " << test_ << "\n"
1567 << " Error: Assignment of non-lower row-major matrix succeeded\n"
1568 << " Details:\n"
1569 << " Result:\n" << lower << "\n";
1570 throw std::runtime_error( oss.str() );
1571 }
1572 catch( std::invalid_argument& ) {}
1573 }
1574
1575 // Column-major/column-major dense matrix assignment (non-lower)
1576 {
1577 test_ = "Column-major/column-major LowerMatrix dense matrix assignment (non-lower)";
1578
1579 blaze::StaticMatrix<int,3UL,3UL,blaze::columnMajor> mat;
1580 mat(0,0) = 1;
1581 mat(0,2) = 5;
1582 mat(1,0) = -4;
1583 mat(1,1) = 2;
1584 mat(2,0) = 7;
1585 mat(2,2) = 3;
1586
1587 try {
1588 OLT lower;
1589 lower = mat;
1590
1591 std::ostringstream oss;
1592 oss << " Test: " << test_ << "\n"
1593 << " Error: Assignment of non-lower column-major matrix succeeded\n"
1594 << " Details:\n"
1595 << " Result:\n" << lower << "\n";
1596 throw std::runtime_error( oss.str() );
1597 }
1598 catch( std::invalid_argument& ) {}
1599 }
1600
1601 // Column-major/row-major dense matrix assignment (LowerMatrix)
1602 {
1603 test_ = "Column-major/row-major LowerMatrix dense matrix assignment (LowerMatrix)";
1604
1605 blaze::LowerMatrix< blaze::StaticMatrix<int,3UL,3UL,blaze::rowMajor> > lower1;
1606 lower1(0,0) = 1;
1607 lower1(1,0) = -4;
1608 lower1(1,1) = 2;
1609 lower1(2,0) = 7;
1610 lower1(2,2) = 3;
1611
1612 OLT lower2;
1613 lower2 = lower1;
1614
1615 checkRows ( lower2, 3UL );
1616 checkColumns ( lower2, 3UL );
1617 checkNonZeros( lower2, 5UL );
1618 checkNonZeros( lower2, 0UL, 3UL );
1619 checkNonZeros( lower2, 1UL, 1UL );
1620 checkNonZeros( lower2, 2UL, 1UL );
1621
1622 if( lower2(0,0) != 1 || lower2(0,1) != 0 || lower2(0,2) != 0 ||
1623 lower2(1,0) != -4 || lower2(1,1) != 2 || lower2(1,2) != 0 ||
1624 lower2(2,0) != 7 || lower2(2,1) != 0 || lower2(2,2) != 3 ) {
1625 std::ostringstream oss;
1626 oss << " Test: " << test_ << "\n"
1627 << " Error: Assignment failed\n"
1628 << " Details:\n"
1629 << " Result:\n" << lower2 << "\n"
1630 << " Expected result:\n( 1 0 0 )\n( -4 2 0 )\n( 7 0 3 )\n";
1631 throw std::runtime_error( oss.str() );
1632 }
1633 }
1634
1635 // Column-major/column-major dense matrix assignment (LowerMatrix)
1636 {
1637 test_ = "Column-major/column-major LowerMatrix dense matrix assignment (LowerMatrix)";
1638
1639 blaze::LowerMatrix< blaze::StaticMatrix<int,3UL,3UL,blaze::columnMajor> > lower1;
1640 lower1(0,0) = 1;
1641 lower1(1,0) = -4;
1642 lower1(1,1) = 2;
1643 lower1(2,0) = 7;
1644 lower1(2,2) = 3;
1645
1646 OLT lower2;
1647 lower2 = lower1;
1648
1649 checkRows ( lower2, 3UL );
1650 checkColumns ( lower2, 3UL );
1651 checkNonZeros( lower2, 5UL );
1652 checkNonZeros( lower2, 0UL, 3UL );
1653 checkNonZeros( lower2, 1UL, 1UL );
1654 checkNonZeros( lower2, 2UL, 1UL );
1655
1656 if( lower2(0,0) != 1 || lower2(0,1) != 0 || lower2(0,2) != 0 ||
1657 lower2(1,0) != -4 || lower2(1,1) != 2 || lower2(1,2) != 0 ||
1658 lower2(2,0) != 7 || lower2(2,1) != 0 || lower2(2,2) != 3 ) {
1659 std::ostringstream oss;
1660 oss << " Test: " << test_ << "\n"
1661 << " Error: Assignment failed\n"
1662 << " Details:\n"
1663 << " Result:\n" << lower2 << "\n"
1664 << " Expected result:\n( 1 0 0 )\n( -4 2 0 )\n( 7 0 3 )\n";
1665 throw std::runtime_error( oss.str() );
1666 }
1667 }
1668
1669
1670 //=====================================================================================
1671 // Column-major sparse matrix assignment
1672 //=====================================================================================
1673
1674 // Conversion assignment (0x0)
1675 {
1676 test_ = "Column-major LowerMatrix sparse matrix assignment (0x0)";
1677
1678 const blaze::CompressedMatrix<int,blaze::columnMajor> mat;
1679
1680 OLT lower;
1681 lower = mat;
1682
1683 checkRows ( lower, 0UL );
1684 checkColumns ( lower, 0UL );
1685 checkNonZeros( lower, 0UL );
1686 }
1687
1688 // Column-major/row-major sparse matrix assignment (lower)
1689 {
1690 test_ = "Column-major/row-major LowerMatrix sparse matrix assignment (lower)";
1691
1692 blaze::CompressedMatrix<int,blaze::rowMajor> mat( 3UL, 3UL, 6UL );
1693 mat(0,0) = 1;
1694 mat(1,0) = -4;
1695 mat(1,1) = 2;
1696 mat(2,0) = 7;
1697 mat(2,2) = 3;
1698 mat.insert( 1UL, 2UL, 0 );
1699
1700 OLT lower;
1701 lower = mat;
1702
1703 checkRows ( lower, 3UL );
1704 checkColumns ( lower, 3UL );
1705 checkNonZeros( lower, 5UL );
1706 checkNonZeros( lower, 0UL, 3UL );
1707 checkNonZeros( lower, 1UL, 1UL );
1708 checkNonZeros( lower, 2UL, 1UL );
1709
1710 if( lower(0,0) != 1 || lower(0,1) != 0 || lower(0,2) != 0 ||
1711 lower(1,0) != -4 || lower(1,1) != 2 || lower(1,2) != 0 ||
1712 lower(2,0) != 7 || lower(2,1) != 0 || lower(2,2) != 3 ) {
1713 std::ostringstream oss;
1714 oss << " Test: " << test_ << "\n"
1715 << " Error: Assignment failed\n"
1716 << " Details:\n"
1717 << " Result:\n" << lower << "\n"
1718 << " Expected result:\n( 1 0 0 )\n( -4 2 0 )\n( 7 0 3 )\n";
1719 throw std::runtime_error( oss.str() );
1720 }
1721 }
1722
1723 // Column-major/column-major sparse matrix assignment (lower)
1724 {
1725 test_ = "Column-major/column-major LowerMatrix sparse matrix assignment (lower)";
1726
1727 blaze::CompressedMatrix<int,blaze::columnMajor> mat( 3UL, 3UL, 6UL );
1728 mat(0,0) = 1;
1729 mat(1,0) = -4;
1730 mat(1,1) = 2;
1731 mat(2,0) = 7;
1732 mat(2,2) = 3;
1733 mat.insert( 1UL, 2UL, 0 );
1734
1735 OLT lower;
1736 lower = mat;
1737
1738 checkRows ( lower, 3UL );
1739 checkColumns ( lower, 3UL );
1740 checkNonZeros( lower, 5UL );
1741 checkNonZeros( lower, 0UL, 3UL );
1742 checkNonZeros( lower, 1UL, 1UL );
1743 checkNonZeros( lower, 2UL, 1UL );
1744
1745 if( lower(0,0) != 1 || lower(0,1) != 0 || lower(0,2) != 0 ||
1746 lower(1,0) != -4 || lower(1,1) != 2 || lower(1,2) != 0 ||
1747 lower(2,0) != 7 || lower(2,1) != 0 || lower(2,2) != 3 ) {
1748 std::ostringstream oss;
1749 oss << " Test: " << test_ << "\n"
1750 << " Error: Assignment failed\n"
1751 << " Details:\n"
1752 << " Result:\n" << lower << "\n"
1753 << " Expected result:\n( 1 0 0 )\n( -4 2 0 )\n( 7 0 3 )\n";
1754 throw std::runtime_error( oss.str() );
1755 }
1756 }
1757
1758 // Column-major/row-major sparse matrix assignment (non-lower)
1759 {
1760 test_ = "Column-major/row-major LowerMatrix sparse matrix assignment (non-lower)";
1761
1762 blaze::CompressedMatrix<int,blaze::rowMajor> mat( 3UL, 3UL, 6UL );
1763 mat(0,0) = 1;
1764 mat(0,2) = 5;
1765 mat(1,0) = -4;
1766 mat(1,1) = 2;
1767 mat(2,0) = 7;
1768 mat(2,2) = 3;
1769
1770 try {
1771 OLT lower;
1772 lower = mat;
1773
1774 std::ostringstream oss;
1775 oss << " Test: " << test_ << "\n"
1776 << " Error: Assignment of non-lower row-major matrix succeeded\n"
1777 << " Details:\n"
1778 << " Result:\n" << lower << "\n";
1779 throw std::runtime_error( oss.str() );
1780 }
1781 catch( std::invalid_argument& ) {}
1782 }
1783
1784 // Column-major/column-major sparse matrix assignment (non-lower)
1785 {
1786 test_ = "Column-major/column-major LowerMatrix sparse matrix assignment (non-lower)";
1787
1788 blaze::CompressedMatrix<int,blaze::columnMajor> mat( 3UL, 3UL, 6UL );
1789 mat(0,0) = 1;
1790 mat(0,2) = 5;
1791 mat(1,0) = -4;
1792 mat(1,1) = 2;
1793 mat(2,0) = 7;
1794 mat(2,2) = 3;
1795
1796 try {
1797 OLT lower;
1798 lower = mat;
1799
1800 std::ostringstream oss;
1801 oss << " Test: " << test_ << "\n"
1802 << " Error: Assignment of non-lower column-major matrix succeeded\n"
1803 << " Details:\n"
1804 << " Result:\n" << lower << "\n";
1805 throw std::runtime_error( oss.str() );
1806 }
1807 catch( std::invalid_argument& ) {}
1808 }
1809
1810 // Column-major/row-major sparse matrix assignment (LowerMatrix)
1811 {
1812 test_ = "Column-major/row-major LowerMatrix sparse matrix assignment (LowerMatrix)";
1813
1814 blaze::LowerMatrix< blaze::CompressedMatrix<int,blaze::rowMajor> > lower1( 3UL, 5UL );
1815 lower1(0,0) = 1;
1816 lower1(1,0) = -4;
1817 lower1(1,1) = 2;
1818 lower1(2,0) = 7;
1819 lower1(2,2) = 3;
1820
1821 OLT lower2;
1822 lower2 = lower1;
1823
1824 checkRows ( lower2, 3UL );
1825 checkColumns ( lower2, 3UL );
1826 checkNonZeros( lower2, 5UL );
1827 checkNonZeros( lower2, 0UL, 3UL );
1828 checkNonZeros( lower2, 1UL, 1UL );
1829 checkNonZeros( lower2, 2UL, 1UL );
1830
1831 if( lower2(0,0) != 1 || lower2(0,1) != 0 || lower2(0,2) != 0 ||
1832 lower2(1,0) != -4 || lower2(1,1) != 2 || lower2(1,2) != 0 ||
1833 lower2(2,0) != 7 || lower2(2,1) != 0 || lower2(2,2) != 3 ) {
1834 std::ostringstream oss;
1835 oss << " Test: " << test_ << "\n"
1836 << " Error: Assignment failed\n"
1837 << " Details:\n"
1838 << " Result:\n" << lower2 << "\n"
1839 << " Expected result:\n( 1 0 0 )\n( -4 2 0 )\n( 7 0 3 )\n";
1840 throw std::runtime_error( oss.str() );
1841 }
1842 }
1843
1844 // Column-major/column-major sparse matrix assignment (LowerMatrix)
1845 {
1846 test_ = "Column-major/column-major LowerMatrix sparse matrix assignment (LowerMatrix)";
1847
1848 blaze::LowerMatrix< blaze::CompressedMatrix<unsigned int,blaze::columnMajor> > lower1( 3UL, 5UL );
1849 lower1(0,0) = 1;
1850 lower1(1,0) = -4;
1851 lower1(1,1) = 2;
1852 lower1(2,0) = 7;
1853 lower1(2,2) = 3;
1854
1855 OLT lower2;
1856 lower2 = lower1;
1857
1858 checkRows ( lower2, 3UL );
1859 checkColumns ( lower2, 3UL );
1860 checkNonZeros( lower2, 5UL );
1861 checkNonZeros( lower2, 0UL, 3UL );
1862 checkNonZeros( lower2, 1UL, 1UL );
1863 checkNonZeros( lower2, 2UL, 1UL );
1864
1865 if( lower2(0,0) != 1 || lower2(0,1) != 0 || lower2(0,2) != 0 ||
1866 lower2(1,0) != -4 || lower2(1,1) != 2 || lower2(1,2) != 0 ||
1867 lower2(2,0) != 7 || lower2(2,1) != 0 || lower2(2,2) != 3 ) {
1868 std::ostringstream oss;
1869 oss << " Test: " << test_ << "\n"
1870 << " Error: Assignment failed\n"
1871 << " Details:\n"
1872 << " Result:\n" << lower2 << "\n"
1873 << " Expected result:\n( 1 0 0 )\n( -4 2 0 )\n( 7 0 3 )\n";
1874 throw std::runtime_error( oss.str() );
1875 }
1876 }
1877 }
1878 //*************************************************************************************************
1879
1880
1881 //*************************************************************************************************
1882 /*!\brief Test of the LowerMatrix addition assignment operators.
1883 //
1884 // \return void
1885 // \exception std::runtime_error Error detected.
1886 //
1887 // This function performs a test of the addition assignment operators of the LowerMatrix
1888 // specialization. In case an error is detected, a \a std::runtime_error exception is thrown.
1889 */
testAddAssign()1890 void SparseTest::testAddAssign()
1891 {
1892 //=====================================================================================
1893 // Row-major dense matrix addition assignment
1894 //=====================================================================================
1895
1896 // Row-major/row-major dense matrix addition assignment (lower)
1897 {
1898 test_ = "Row-major/row-major LowerMatrix dense matrix addition assignment (lower)";
1899
1900 blaze::DynamicMatrix<int,blaze::rowMajor> mat( 3UL, 3UL, 0 );
1901 mat(1,0) = 2;
1902 mat(1,1) = -2;
1903 mat(2,0) = 6;
1904 mat(2,1) = 5;
1905
1906 LT lower( 3UL );
1907 lower(0,0) = 1;
1908 lower(1,0) = -4;
1909 lower(1,1) = 2;
1910 lower(2,0) = 7;
1911 lower(2,2) = 3;
1912
1913 lower += mat;
1914
1915 checkRows ( lower, 3UL );
1916 checkColumns ( lower, 3UL );
1917 checkCapacity( lower, 5UL );
1918 checkNonZeros( lower, 5UL );
1919 checkNonZeros( lower, 0UL, 1UL );
1920 checkNonZeros( lower, 1UL, 1UL );
1921 checkNonZeros( lower, 2UL, 3UL );
1922
1923 if( lower(0,0) != 1 || lower(0,1) != 0 || lower(0,2) != 0 ||
1924 lower(1,0) != -2 || lower(1,1) != 0 || lower(1,2) != 0 ||
1925 lower(2,0) != 13 || lower(2,1) != 5 || lower(2,2) != 3 ) {
1926 std::ostringstream oss;
1927 oss << " Test: " << test_ << "\n"
1928 << " Error: Addition assignment failed\n"
1929 << " Details:\n"
1930 << " Result:\n" << lower << "\n"
1931 << " Expected result:\n( 1 0 0 )\n( -2 0 0 )\n( 13 5 3 )\n";
1932 throw std::runtime_error( oss.str() );
1933 }
1934 }
1935
1936 // Row-major/column-major dense matrix addition assignment (lower)
1937 {
1938 test_ = "Row-major/column-major LowerMatrix dense matrix addition assignment (lower)";
1939
1940 blaze::DynamicMatrix<int,blaze::columnMajor> mat( 3UL, 3UL, 0 );
1941 mat(1,0) = 2;
1942 mat(1,1) = -2;
1943 mat(2,0) = 6;
1944 mat(2,1) = 5;
1945
1946 LT lower( 3UL );
1947 lower(0,0) = 1;
1948 lower(1,0) = -4;
1949 lower(1,1) = 2;
1950 lower(2,0) = 7;
1951 lower(2,2) = 3;
1952
1953 lower += mat;
1954
1955 checkRows ( lower, 3UL );
1956 checkColumns ( lower, 3UL );
1957 checkCapacity( lower, 5UL );
1958 checkNonZeros( lower, 5UL );
1959 checkNonZeros( lower, 0UL, 1UL );
1960 checkNonZeros( lower, 1UL, 1UL );
1961 checkNonZeros( lower, 2UL, 3UL );
1962
1963 if( lower(0,0) != 1 || lower(0,1) != 0 || lower(0,2) != 0 ||
1964 lower(1,0) != -2 || lower(1,1) != 0 || lower(1,2) != 0 ||
1965 lower(2,0) != 13 || lower(2,1) != 5 || lower(2,2) != 3 ) {
1966 std::ostringstream oss;
1967 oss << " Test: " << test_ << "\n"
1968 << " Error: Addition assignment failed\n"
1969 << " Details:\n"
1970 << " Result:\n" << lower << "\n"
1971 << " Expected result:\n( 1 0 0 )\n( -2 0 0 )\n( 13 5 3 )\n";
1972 throw std::runtime_error( oss.str() );
1973 }
1974 }
1975
1976 // Row-major/row-major dense matrix addition assignment (non-lower)
1977 {
1978 test_ = "Row-major/row-major LowerMatrix dense matrix addition assignment (non-lower)";
1979
1980 blaze::DynamicMatrix<int,blaze::rowMajor> mat( 3UL, 3UL, 0 );
1981 mat(0,2) = 6;
1982
1983 LT lower( 3UL );
1984 lower(0,0) = 1;
1985 lower(1,0) = -4;
1986 lower(1,1) = 2;
1987 lower(2,0) = 7;
1988 lower(2,2) = 3;
1989
1990 try {
1991 lower += mat;
1992
1993 std::ostringstream oss;
1994 oss << " Test: " << test_ << "\n"
1995 << " Error: Addition assignment of non-lower row-major matrix succeeded\n"
1996 << " Details:\n"
1997 << " Result:\n" << lower << "\n";
1998 throw std::runtime_error( oss.str() );
1999 }
2000 catch( std::invalid_argument& ) {}
2001 }
2002
2003 // Row-major/column-major dense matrix addition assignment (non-lower)
2004 {
2005 test_ = "Row-major/column-major LowerMatrix dense matrix addition assignment (non-lower)";
2006
2007 blaze::DynamicMatrix<int,blaze::columnMajor> mat( 3UL, 3UL, 0 );
2008 mat(0,2) = 6;
2009
2010 LT lower( 3UL );
2011 lower(0,0) = 1;
2012 lower(1,0) = -4;
2013 lower(1,1) = 2;
2014 lower(2,0) = 7;
2015 lower(2,2) = 3;
2016
2017 try {
2018 lower += mat;
2019
2020 std::ostringstream oss;
2021 oss << " Test: " << test_ << "\n"
2022 << " Error: Addition assignment of non-lower column-major matrix succeeded\n"
2023 << " Details:\n"
2024 << " Result:\n" << lower << "\n";
2025 throw std::runtime_error( oss.str() );
2026 }
2027 catch( std::invalid_argument& ) {}
2028 }
2029
2030 // Row-major/row-major dense matrix addition assignment (LowerMatrix)
2031 {
2032 test_ = "Row-major/row-major LowerMatrix dense matrix addition assignment (LowerMatrix)";
2033
2034 blaze::LowerMatrix< blaze::StaticMatrix<int,3UL,3UL,blaze::rowMajor> > lower1;
2035 lower1(1,0) = 2;
2036 lower1(1,1) = -2;
2037 lower1(2,0) = 6;
2038 lower1(2,1) = 5;
2039
2040 LT lower2( 3UL );
2041 lower2(0,0) = 1;
2042 lower2(1,0) = -4;
2043 lower2(1,1) = 2;
2044 lower2(2,0) = 7;
2045 lower2(2,2) = 3;
2046
2047 lower2 += lower1;
2048
2049 checkRows ( lower2, 3UL );
2050 checkColumns ( lower2, 3UL );
2051 checkCapacity( lower2, 5UL );
2052 checkNonZeros( lower2, 5UL );
2053 checkNonZeros( lower2, 0UL, 1UL );
2054 checkNonZeros( lower2, 1UL, 1UL );
2055 checkNonZeros( lower2, 2UL, 3UL );
2056
2057 if( lower2(0,0) != 1 || lower2(0,1) != 0 || lower2(0,2) != 0 ||
2058 lower2(1,0) != -2 || lower2(1,1) != 0 || lower2(1,2) != 0 ||
2059 lower2(2,0) != 13 || lower2(2,1) != 5 || lower2(2,2) != 3 ) {
2060 std::ostringstream oss;
2061 oss << " Test: " << test_ << "\n"
2062 << " Error: Addition assignment failed\n"
2063 << " Details:\n"
2064 << " Result:\n" << lower2 << "\n"
2065 << " Expected result:\n( 1 0 0 )\n( -2 0 0 )\n( 13 5 3 )\n";
2066 throw std::runtime_error( oss.str() );
2067 }
2068 }
2069
2070 // Row-major/column-major dense matrix addition assignment (LowerMatrix)
2071 {
2072 test_ = "Row-major/column-major LowerMatrix dense matrix addition assignment (LowerMatrix)";
2073
2074 blaze::LowerMatrix< blaze::StaticMatrix<int,3UL,3UL,blaze::columnMajor> > lower1;
2075 lower1(1,0) = 2;
2076 lower1(1,1) = -2;
2077 lower1(2,0) = 6;
2078 lower1(2,1) = 5;
2079
2080 LT lower2( 3UL );
2081 lower2(0,0) = 1;
2082 lower2(1,0) = -4;
2083 lower2(1,1) = 2;
2084 lower2(2,0) = 7;
2085 lower2(2,2) = 3;
2086
2087 lower2 += lower1;
2088
2089 checkRows ( lower2, 3UL );
2090 checkColumns ( lower2, 3UL );
2091 checkCapacity( lower2, 5UL );
2092 checkNonZeros( lower2, 5UL );
2093 checkNonZeros( lower2, 0UL, 1UL );
2094 checkNonZeros( lower2, 1UL, 1UL );
2095 checkNonZeros( lower2, 2UL, 3UL );
2096
2097 if( lower2(0,0) != 1 || lower2(0,1) != 0 || lower2(0,2) != 0 ||
2098 lower2(1,0) != -2 || lower2(1,1) != 0 || lower2(1,2) != 0 ||
2099 lower2(2,0) != 13 || lower2(2,1) != 5 || lower2(2,2) != 3 ) {
2100 std::ostringstream oss;
2101 oss << " Test: " << test_ << "\n"
2102 << " Error: Addition assignment failed\n"
2103 << " Details:\n"
2104 << " Result:\n" << lower2 << "\n"
2105 << " Expected result:\n( 1 0 0 )\n( -2 0 0 )\n( 13 5 3 )\n";
2106 throw std::runtime_error( oss.str() );
2107 }
2108 }
2109
2110
2111 //=====================================================================================
2112 // Row-major sparse matrix addition assignment
2113 //=====================================================================================
2114
2115 // Row-major/row-major sparse matrix addition assignment (lower)
2116 {
2117 test_ = "Row-major/row-major LowerMatrix sparse matrix addition assignment (lower)";
2118
2119 blaze::CompressedMatrix<int,blaze::rowMajor> mat( 3UL, 3UL, 5UL );
2120 mat(1,0) = 2;
2121 mat(1,1) = -2;
2122 mat(2,0) = 6;
2123 mat(2,1) = 5;
2124 mat.insert( 1UL, 2UL, 0 );
2125
2126 LT lower( 3UL );
2127 lower(0,0) = 1;
2128 lower(1,0) = -4;
2129 lower(1,1) = 2;
2130 lower(2,0) = 7;
2131 lower(2,2) = 3;
2132
2133 lower += mat;
2134
2135 checkRows ( lower, 3UL );
2136 checkColumns ( lower, 3UL );
2137 checkCapacity( lower, 6UL );
2138 checkNonZeros( lower, 6UL );
2139 checkNonZeros( lower, 0UL, 1UL );
2140 checkNonZeros( lower, 1UL, 2UL );
2141 checkNonZeros( lower, 2UL, 3UL );
2142
2143 if( lower(0,0) != 1 || lower(0,1) != 0 || lower(0,2) != 0 ||
2144 lower(1,0) != -2 || lower(1,1) != 0 || lower(1,2) != 0 ||
2145 lower(2,0) != 13 || lower(2,1) != 5 || lower(2,2) != 3 ) {
2146 std::ostringstream oss;
2147 oss << " Test: " << test_ << "\n"
2148 << " Error: Addition assignment failed\n"
2149 << " Details:\n"
2150 << " Result:\n" << lower << "\n"
2151 << " Expected result:\n( 1 0 0 )\n( -2 0 0 )\n( 13 5 3 )\n";
2152 throw std::runtime_error( oss.str() );
2153 }
2154 }
2155
2156 // Row-major/column-major sparse matrix addition assignment (lower)
2157 {
2158 test_ = "Row-major/column-major LowerMatrix sparse matrix addition assignment (lower)";
2159
2160 blaze::CompressedMatrix<int,blaze::columnMajor> mat( 3UL, 3UL, 5UL );
2161 mat(1,0) = 2;
2162 mat(1,1) = -2;
2163 mat(2,0) = 6;
2164 mat(2,1) = 5;
2165 mat.insert( 1UL, 2UL, 0 );
2166
2167 LT lower( 3UL );
2168 lower(0,0) = 1;
2169 lower(1,0) = -4;
2170 lower(1,1) = 2;
2171 lower(2,0) = 7;
2172 lower(2,2) = 3;
2173
2174 lower += mat;
2175
2176 checkRows ( lower, 3UL );
2177 checkColumns ( lower, 3UL );
2178 checkCapacity( lower, 6UL );
2179 checkNonZeros( lower, 6UL );
2180 checkNonZeros( lower, 0UL, 1UL );
2181 checkNonZeros( lower, 1UL, 2UL );
2182 checkNonZeros( lower, 2UL, 3UL );
2183
2184 if( lower(0,0) != 1 || lower(0,1) != 0 || lower(0,2) != 0 ||
2185 lower(1,0) != -2 || lower(1,1) != 0 || lower(1,2) != 0 ||
2186 lower(2,0) != 13 || lower(2,1) != 5 || lower(2,2) != 3 ) {
2187 std::ostringstream oss;
2188 oss << " Test: " << test_ << "\n"
2189 << " Error: Addition assignment failed\n"
2190 << " Details:\n"
2191 << " Result:\n" << lower << "\n"
2192 << " Expected result:\n( 1 0 0 )\n( -2 0 0 )\n( 13 5 3 )\n";
2193 throw std::runtime_error( oss.str() );
2194 }
2195 }
2196
2197 // Row-major/row-major sparse matrix addition assignment (non-lower)
2198 {
2199 test_ = "Row-major/row-major LowerMatrix sparse matrix addition assignment (non-lower)";
2200
2201 blaze::CompressedMatrix<int,blaze::rowMajor> mat( 3UL, 3UL, 1UL );
2202 mat(0,2) = 6;
2203
2204 LT lower( 3UL );
2205 lower(0,0) = 1;
2206 lower(1,0) = -4;
2207 lower(1,1) = 2;
2208 lower(2,0) = 7;
2209 lower(2,2) = 3;
2210
2211 try {
2212 lower += mat;
2213
2214 std::ostringstream oss;
2215 oss << " Test: " << test_ << "\n"
2216 << " Error: Addition assignment of non-lower row-major matrix succeeded\n"
2217 << " Details:\n"
2218 << " Result:\n" << lower << "\n";
2219 throw std::runtime_error( oss.str() );
2220 }
2221 catch( std::invalid_argument& ) {}
2222 }
2223
2224 // Row-major/column-major sparse matrix addition assignment (non-lower)
2225 {
2226 test_ = "Row-major/column-major LowerMatrix sparse matrix addition assignment (non-lower)";
2227
2228 blaze::CompressedMatrix<int,blaze::columnMajor> mat( 3UL, 3UL, 1UL );
2229 mat(0,2) = 6;
2230
2231 LT lower( 3UL );
2232 lower(0,0) = 1;
2233 lower(1,0) = -4;
2234 lower(1,1) = 2;
2235 lower(2,0) = 7;
2236 lower(2,2) = 3;
2237
2238 try {
2239 lower += mat;
2240
2241 std::ostringstream oss;
2242 oss << " Test: " << test_ << "\n"
2243 << " Error: Addition assignment of non-lower column-major matrix succeeded\n"
2244 << " Details:\n"
2245 << " Result:\n" << lower << "\n";
2246 throw std::runtime_error( oss.str() );
2247 }
2248 catch( std::invalid_argument& ) {}
2249 }
2250
2251 // Row-major/row-major sparse matrix addition assignment (LowerMatrix)
2252 {
2253 test_ = "Row-major/row-major LowerMatrix sparse matrix addition assignment (LowerMatrix)";
2254
2255 LT lower1( 3UL, 4UL );
2256 lower1(1,0) = 2;
2257 lower1(1,1) = -2;
2258 lower1(2,0) = 6;
2259 lower1(2,1) = 5;
2260
2261 LT lower2( 3UL );
2262 lower2(0,0) = 1;
2263 lower2(1,0) = -4;
2264 lower2(1,1) = 2;
2265 lower2(2,0) = 7;
2266 lower2(2,2) = 3;
2267
2268 lower2 += lower1;
2269
2270 checkRows ( lower2, 3UL );
2271 checkColumns ( lower2, 3UL );
2272 checkCapacity( lower2, 6UL );
2273 checkNonZeros( lower2, 6UL );
2274 checkNonZeros( lower2, 0UL, 1UL );
2275 checkNonZeros( lower2, 1UL, 2UL );
2276 checkNonZeros( lower2, 2UL, 3UL );
2277
2278 if( lower2(0,0) != 1 || lower2(0,1) != 0 || lower2(0,2) != 0 ||
2279 lower2(1,0) != -2 || lower2(1,1) != 0 || lower2(1,2) != 0 ||
2280 lower2(2,0) != 13 || lower2(2,1) != 5 || lower2(2,2) != 3 ) {
2281 std::ostringstream oss;
2282 oss << " Test: " << test_ << "\n"
2283 << " Error: Addition assignment failed\n"
2284 << " Details:\n"
2285 << " Result:\n" << lower2 << "\n"
2286 << " Expected result:\n( 1 0 0 )\n( -2 0 0 )\n( 13 5 3 )\n";
2287 throw std::runtime_error( oss.str() );
2288 }
2289 }
2290
2291 // Row-major/column-major sparse matrix addition assignment (LowerMatrix)
2292 {
2293 test_ = "Row-major/column-major LowerMatrix sparse matrix addition assignment (LowerMatrix)";
2294
2295 OLT lower1( 3UL, 4UL );
2296 lower1(1,0) = 2;
2297 lower1(1,1) = -2;
2298 lower1(2,0) = 6;
2299 lower1(2,1) = 5;
2300
2301 LT lower2( 3UL );
2302 lower2(0,0) = 1;
2303 lower2(1,0) = -4;
2304 lower2(1,1) = 2;
2305 lower2(2,0) = 7;
2306 lower2(2,2) = 3;
2307
2308 lower2 += lower1;
2309
2310 checkRows ( lower2, 3UL );
2311 checkColumns ( lower2, 3UL );
2312 checkCapacity( lower2, 6UL );
2313 checkNonZeros( lower2, 6UL );
2314 checkNonZeros( lower2, 0UL, 1UL );
2315 checkNonZeros( lower2, 1UL, 2UL );
2316 checkNonZeros( lower2, 2UL, 3UL );
2317
2318 if( lower2(0,0) != 1 || lower2(0,1) != 0 || lower2(0,2) != 0 ||
2319 lower2(1,0) != -2 || lower2(1,1) != 0 || lower2(1,2) != 0 ||
2320 lower2(2,0) != 13 || lower2(2,1) != 5 || lower2(2,2) != 3 ) {
2321 std::ostringstream oss;
2322 oss << " Test: " << test_ << "\n"
2323 << " Error: Addition assignment failed\n"
2324 << " Details:\n"
2325 << " Result:\n" << lower2 << "\n"
2326 << " Expected result:\n( 1 0 0 )\n( -2 0 0 )\n( 13 5 3 )\n";
2327 throw std::runtime_error( oss.str() );
2328 }
2329 }
2330
2331
2332 //=====================================================================================
2333 // Column-major dense matrix addition assignment
2334 //=====================================================================================
2335
2336 // Column-major/row-major dense matrix addition assignment (lower)
2337 {
2338 test_ = "Column-major/row-major LowerMatrix dense matrix addition assignment (lower)";
2339
2340 blaze::DynamicMatrix<int,blaze::rowMajor> mat( 3UL, 3UL, 0 );
2341 mat(1,0) = 2;
2342 mat(1,1) = -2;
2343 mat(2,0) = 6;
2344 mat(2,1) = 5;
2345
2346 OLT lower( 3UL );
2347 lower(0,0) = 1;
2348 lower(1,0) = -4;
2349 lower(1,1) = 2;
2350 lower(2,0) = 7;
2351 lower(2,2) = 3;
2352
2353 lower += mat;
2354
2355 checkRows ( lower, 3UL );
2356 checkColumns ( lower, 3UL );
2357 checkCapacity( lower, 5UL );
2358 checkNonZeros( lower, 5UL );
2359 checkNonZeros( lower, 0UL, 3UL );
2360 checkNonZeros( lower, 1UL, 1UL );
2361 checkNonZeros( lower, 2UL, 1UL );
2362
2363 if( lower(0,0) != 1 || lower(0,1) != 0 || lower(0,2) != 0 ||
2364 lower(1,0) != -2 || lower(1,1) != 0 || lower(1,2) != 0 ||
2365 lower(2,0) != 13 || lower(2,1) != 5 || lower(2,2) != 3 ) {
2366 std::ostringstream oss;
2367 oss << " Test: " << test_ << "\n"
2368 << " Error: Addition assignment failed\n"
2369 << " Details:\n"
2370 << " Result:\n" << lower << "\n"
2371 << " Expected result:\n( 1 0 0 )\n( -2 0 0 )\n( 13 5 3 )\n";
2372 throw std::runtime_error( oss.str() );
2373 }
2374 }
2375
2376 // Column-major/column-major dense matrix addition assignment (lower)
2377 {
2378 test_ = "Column-major/column-major LowerMatrix dense matrix addition assignment (lower)";
2379
2380 blaze::DynamicMatrix<int,blaze::columnMajor> mat( 3UL, 3UL, 0 );
2381 mat(1,0) = 2;
2382 mat(1,1) = -2;
2383 mat(2,0) = 6;
2384 mat(2,1) = 5;
2385
2386 OLT lower( 3UL );
2387 lower(0,0) = 1;
2388 lower(1,0) = -4;
2389 lower(1,1) = 2;
2390 lower(2,0) = 7;
2391 lower(2,2) = 3;
2392
2393 lower += mat;
2394
2395 checkRows ( lower, 3UL );
2396 checkColumns ( lower, 3UL );
2397 checkCapacity( lower, 5UL );
2398 checkNonZeros( lower, 5UL );
2399 checkNonZeros( lower, 0UL, 3UL );
2400 checkNonZeros( lower, 1UL, 1UL );
2401 checkNonZeros( lower, 2UL, 1UL );
2402
2403 if( lower(0,0) != 1 || lower(0,1) != 0 || lower(0,2) != 0 ||
2404 lower(1,0) != -2 || lower(1,1) != 0 || lower(1,2) != 0 ||
2405 lower(2,0) != 13 || lower(2,1) != 5 || lower(2,2) != 3 ) {
2406 std::ostringstream oss;
2407 oss << " Test: " << test_ << "\n"
2408 << " Error: Addition assignment failed\n"
2409 << " Details:\n"
2410 << " Result:\n" << lower << "\n"
2411 << " Expected result:\n( 1 0 0 )\n( -2 0 0 )\n( 13 5 3 )\n";
2412 throw std::runtime_error( oss.str() );
2413 }
2414 }
2415
2416 // Column-major/row-major dense matrix addition assignment (non-lower)
2417 {
2418 test_ = "Column-major/row-major LowerMatrix dense matrix addition assignment (non-lower)";
2419
2420 blaze::DynamicMatrix<int,blaze::rowMajor> mat( 3UL, 3UL, 0 );
2421 mat(0,2) = 6;
2422
2423 OLT lower( 3UL );
2424 lower(0,0) = 1;
2425 lower(1,0) = -4;
2426 lower(1,1) = 2;
2427 lower(2,0) = 7;
2428 lower(2,2) = 3;
2429
2430 try {
2431 lower += mat;
2432
2433 std::ostringstream oss;
2434 oss << " Test: " << test_ << "\n"
2435 << " Error: Addition assignment of non-lower row-major matrix succeeded\n"
2436 << " Details:\n"
2437 << " Result:\n" << lower << "\n";
2438 throw std::runtime_error( oss.str() );
2439 }
2440 catch( std::invalid_argument& ) {}
2441 }
2442
2443 // Column-major/column-major dense matrix addition assignment (non-lower)
2444 {
2445 test_ = "Column-major/column-major LowerMatrix dense matrix addition assignment (non-lower)";
2446
2447 blaze::DynamicMatrix<int,blaze::columnMajor> mat( 3UL, 3UL, 0 );
2448 mat(0,2) = 6;
2449
2450 OLT lower( 3UL );
2451 lower(0,0) = 1;
2452 lower(1,0) = -4;
2453 lower(1,1) = 2;
2454 lower(2,0) = 7;
2455 lower(2,2) = 3;
2456
2457 try {
2458 lower += mat;
2459
2460 std::ostringstream oss;
2461 oss << " Test: " << test_ << "\n"
2462 << " Error: Addition assignment of non-lower column-major matrix succeeded\n"
2463 << " Details:\n"
2464 << " Result:\n" << lower << "\n";
2465 throw std::runtime_error( oss.str() );
2466 }
2467 catch( std::invalid_argument& ) {}
2468 }
2469
2470 // Column-major/row-major dense matrix addition assignment (LowerMatrix)
2471 {
2472 test_ = "Column-major/row-major LowerMatrix dense matrix addition assignment (LowerMatrix)";
2473
2474 blaze::LowerMatrix< blaze::StaticMatrix<int,3UL,3UL,blaze::rowMajor> > lower1;
2475 lower1(1,0) = 2;
2476 lower1(1,1) = -2;
2477 lower1(2,0) = 6;
2478 lower1(2,1) = 5;
2479
2480 OLT lower2( 3UL );
2481 lower2(0,0) = 1;
2482 lower2(1,0) = -4;
2483 lower2(1,1) = 2;
2484 lower2(2,0) = 7;
2485 lower2(2,2) = 3;
2486
2487 lower2 += lower1;
2488
2489 checkRows ( lower2, 3UL );
2490 checkColumns ( lower2, 3UL );
2491 checkCapacity( lower2, 5UL );
2492 checkNonZeros( lower2, 5UL );
2493 checkNonZeros( lower2, 0UL, 3UL );
2494 checkNonZeros( lower2, 1UL, 1UL );
2495 checkNonZeros( lower2, 2UL, 1UL );
2496
2497 if( lower2(0,0) != 1 || lower2(0,1) != 0 || lower2(0,2) != 0 ||
2498 lower2(1,0) != -2 || lower2(1,1) != 0 || lower2(1,2) != 0 ||
2499 lower2(2,0) != 13 || lower2(2,1) != 5 || lower2(2,2) != 3 ) {
2500 std::ostringstream oss;
2501 oss << " Test: " << test_ << "\n"
2502 << " Error: Addition assignment failed\n"
2503 << " Details:\n"
2504 << " Result:\n" << lower2 << "\n"
2505 << " Expected result:\n( 1 0 0 )\n( -2 0 0 )\n( 13 5 3 )\n";
2506 throw std::runtime_error( oss.str() );
2507 }
2508 }
2509
2510 // Column-major/column-major dense matrix addition assignment (LowerMatrix)
2511 {
2512 test_ = "Column-major/column-major LowerMatrix dense matrix addition assignment (LowerMatrix)";
2513
2514 blaze::LowerMatrix< blaze::StaticMatrix<int,3UL,3UL,blaze::columnMajor> > lower1;
2515 lower1(1,0) = 2;
2516 lower1(1,1) = -2;
2517 lower1(2,0) = 6;
2518 lower1(2,1) = 5;
2519
2520 OLT lower2( 3UL );
2521 lower2(0,0) = 1;
2522 lower2(1,0) = -4;
2523 lower2(1,1) = 2;
2524 lower2(2,0) = 7;
2525 lower2(2,2) = 3;
2526
2527 lower2 += lower1;
2528
2529 checkRows ( lower2, 3UL );
2530 checkColumns ( lower2, 3UL );
2531 checkCapacity( lower2, 5UL );
2532 checkNonZeros( lower2, 5UL );
2533 checkNonZeros( lower2, 0UL, 3UL );
2534 checkNonZeros( lower2, 1UL, 1UL );
2535 checkNonZeros( lower2, 2UL, 1UL );
2536
2537 if( lower2(0,0) != 1 || lower2(0,1) != 0 || lower2(0,2) != 0 ||
2538 lower2(1,0) != -2 || lower2(1,1) != 0 || lower2(1,2) != 0 ||
2539 lower2(2,0) != 13 || lower2(2,1) != 5 || lower2(2,2) != 3 ) {
2540 std::ostringstream oss;
2541 oss << " Test: " << test_ << "\n"
2542 << " Error: Addition assignment failed\n"
2543 << " Details:\n"
2544 << " Result:\n" << lower2 << "\n"
2545 << " Expected result:\n( 1 0 0 )\n( -2 0 0 )\n( 13 5 3 )\n";
2546 throw std::runtime_error( oss.str() );
2547 }
2548 }
2549
2550
2551 //=====================================================================================
2552 // Column-major sparse matrix addition assignment
2553 //=====================================================================================
2554
2555 // Column-major/row-major sparse matrix addition assignment (lower)
2556 {
2557 test_ = "Column-major/row-major LowerMatrix sparse matrix addition assignment (lower)";
2558
2559 blaze::CompressedMatrix<int,blaze::rowMajor> mat( 3UL, 3UL, 5UL );
2560 mat(1,0) = 2;
2561 mat(1,1) = -2;
2562 mat(2,0) = 6;
2563 mat(2,1) = 5;
2564 mat.insert( 1UL, 2UL, 0 );
2565
2566 OLT lower( 3UL );
2567 lower(0,0) = 1;
2568 lower(1,0) = -4;
2569 lower(1,1) = 2;
2570 lower(2,0) = 7;
2571 lower(2,2) = 3;
2572
2573 lower += mat;
2574
2575 checkRows ( lower, 3UL );
2576 checkColumns ( lower, 3UL );
2577 checkCapacity( lower, 6UL );
2578 checkNonZeros( lower, 6UL );
2579 checkNonZeros( lower, 0UL, 3UL );
2580 checkNonZeros( lower, 1UL, 2UL );
2581 checkNonZeros( lower, 2UL, 1UL );
2582
2583 if( lower(0,0) != 1 || lower(0,1) != 0 || lower(0,2) != 0 ||
2584 lower(1,0) != -2 || lower(1,1) != 0 || lower(1,2) != 0 ||
2585 lower(2,0) != 13 || lower(2,1) != 5 || lower(2,2) != 3 ) {
2586 std::ostringstream oss;
2587 oss << " Test: " << test_ << "\n"
2588 << " Error: Addition assignment failed\n"
2589 << " Details:\n"
2590 << " Result:\n" << lower << "\n"
2591 << " Expected result:\n( 1 0 0 )\n( -2 0 0 )\n( 13 5 3 )\n";
2592 throw std::runtime_error( oss.str() );
2593 }
2594 }
2595
2596 // Column-major/column-major sparse matrix addition assignment (lower)
2597 {
2598 test_ = "Column-major/column-major LowerMatrix sparse matrix addition assignment (lower)";
2599
2600 blaze::CompressedMatrix<int,blaze::columnMajor> mat( 3UL, 3UL, 5UL );
2601 mat(1,0) = 2;
2602 mat(1,1) = -2;
2603 mat(2,0) = 6;
2604 mat(2,1) = 5;
2605 mat.insert( 1UL, 2UL, 0 );
2606
2607 OLT lower( 3UL );
2608 lower(0,0) = 1;
2609 lower(1,0) = -4;
2610 lower(1,1) = 2;
2611 lower(2,0) = 7;
2612 lower(2,2) = 3;
2613
2614 lower += mat;
2615
2616 checkRows ( lower, 3UL );
2617 checkColumns ( lower, 3UL );
2618 checkCapacity( lower, 6UL );
2619 checkNonZeros( lower, 6UL );
2620 checkNonZeros( lower, 0UL, 3UL );
2621 checkNonZeros( lower, 1UL, 2UL );
2622 checkNonZeros( lower, 2UL, 1UL );
2623
2624 if( lower(0,0) != 1 || lower(0,1) != 0 || lower(0,2) != 0 ||
2625 lower(1,0) != -2 || lower(1,1) != 0 || lower(1,2) != 0 ||
2626 lower(2,0) != 13 || lower(2,1) != 5 || lower(2,2) != 3 ) {
2627 std::ostringstream oss;
2628 oss << " Test: " << test_ << "\n"
2629 << " Error: Addition assignment failed\n"
2630 << " Details:\n"
2631 << " Result:\n" << lower << "\n"
2632 << " Expected result:\n( 1 0 0 )\n( -2 0 0 )\n( 13 5 3 )\n";
2633 throw std::runtime_error( oss.str() );
2634 }
2635 }
2636
2637 // Column-major/row-major sparse matrix addition assignment (non-lower)
2638 {
2639 test_ = "Column-major/row-major LowerMatrix sparse matrix addition assignment (non-lower)";
2640
2641 blaze::CompressedMatrix<int,blaze::rowMajor> mat( 3UL, 3UL, 1UL );
2642 mat(0,2) = 6;
2643
2644 OLT lower( 3UL );
2645 lower(0,0) = 1;
2646 lower(1,0) = -4;
2647 lower(1,1) = 2;
2648 lower(2,0) = 7;
2649 lower(2,2) = 3;
2650
2651 try {
2652 lower += mat;
2653
2654 std::ostringstream oss;
2655 oss << " Test: " << test_ << "\n"
2656 << " Error: Addition assignment of non-lower row-major matrix succeeded\n"
2657 << " Details:\n"
2658 << " Result:\n" << lower << "\n";
2659 throw std::runtime_error( oss.str() );
2660 }
2661 catch( std::invalid_argument& ) {}
2662 }
2663
2664 // Column-major/column-major sparse matrix addition assignment (non-lower)
2665 {
2666 test_ = "Column-major/column-major LowerMatrix sparse matrix addition assignment (non-lower)";
2667
2668 blaze::CompressedMatrix<int,blaze::columnMajor> mat( 3UL, 3UL, 1UL );
2669 mat(0,2) = 6;
2670
2671 OLT lower( 3UL );
2672 lower(0,0) = 1;
2673 lower(1,0) = -4;
2674 lower(1,1) = 2;
2675 lower(2,0) = 7;
2676 lower(2,2) = 3;
2677
2678 try {
2679 lower += mat;
2680
2681 std::ostringstream oss;
2682 oss << " Test: " << test_ << "\n"
2683 << " Error: Addition assignment of non-lower column-major matrix succeeded\n"
2684 << " Details:\n"
2685 << " Result:\n" << lower << "\n";
2686 throw std::runtime_error( oss.str() );
2687 }
2688 catch( std::invalid_argument& ) {}
2689 }
2690
2691 // Column-major/row-major sparse matrix addition assignment (LowerMatrix)
2692 {
2693 test_ = "Column-major/row-major LowerMatrix sparse matrix addition assignment (LowerMatrix)";
2694
2695 LT lower1( 3UL, 4UL );
2696 lower1(1,0) = 2;
2697 lower1(1,1) = -2;
2698 lower1(2,0) = 6;
2699 lower1(2,1) = 5;
2700
2701 OLT lower2( 3UL );
2702 lower2(0,0) = 1;
2703 lower2(1,0) = -4;
2704 lower2(1,1) = 2;
2705 lower2(2,0) = 7;
2706 lower2(2,2) = 3;
2707
2708 lower2 += lower1;
2709
2710 checkRows ( lower2, 3UL );
2711 checkColumns ( lower2, 3UL );
2712 checkCapacity( lower2, 6UL );
2713 checkNonZeros( lower2, 6UL );
2714 checkNonZeros( lower2, 0UL, 3UL );
2715 checkNonZeros( lower2, 1UL, 2UL );
2716 checkNonZeros( lower2, 2UL, 1UL );
2717
2718 if( lower2(0,0) != 1 || lower2(0,1) != 0 || lower2(0,2) != 0 ||
2719 lower2(1,0) != -2 || lower2(1,1) != 0 || lower2(1,2) != 0 ||
2720 lower2(2,0) != 13 || lower2(2,1) != 5 || lower2(2,2) != 3 ) {
2721 std::ostringstream oss;
2722 oss << " Test: " << test_ << "\n"
2723 << " Error: Addition assignment failed\n"
2724 << " Details:\n"
2725 << " Result:\n" << lower2 << "\n"
2726 << " Expected result:\n( 1 0 0 )\n( -2 0 0 )\n( 13 5 3 )\n";
2727 throw std::runtime_error( oss.str() );
2728 }
2729 }
2730
2731 // Column-major/column-major sparse matrix addition assignment (LowerMatrix)
2732 {
2733 test_ = "Column-major/column-major LowerMatrix sparse matrix addition assignment (LowerMatrix)";
2734
2735 OLT lower1( 3UL, 4UL );
2736 lower1(1,0) = 2;
2737 lower1(1,1) = -2;
2738 lower1(2,0) = 6;
2739 lower1(2,1) = 5;
2740
2741 OLT lower2( 3UL );
2742 lower2(0,0) = 1;
2743 lower2(1,0) = -4;
2744 lower2(1,1) = 2;
2745 lower2(2,0) = 7;
2746 lower2(2,2) = 3;
2747
2748 lower2 += lower1;
2749
2750 checkRows ( lower2, 3UL );
2751 checkColumns ( lower2, 3UL );
2752 checkCapacity( lower2, 6UL );
2753 checkNonZeros( lower2, 6UL );
2754 checkNonZeros( lower2, 0UL, 3UL );
2755 checkNonZeros( lower2, 1UL, 2UL );
2756 checkNonZeros( lower2, 2UL, 1UL );
2757
2758 if( lower2(0,0) != 1 || lower2(0,1) != 0 || lower2(0,2) != 0 ||
2759 lower2(1,0) != -2 || lower2(1,1) != 0 || lower2(1,2) != 0 ||
2760 lower2(2,0) != 13 || lower2(2,1) != 5 || lower2(2,2) != 3 ) {
2761 std::ostringstream oss;
2762 oss << " Test: " << test_ << "\n"
2763 << " Error: Addition assignment failed\n"
2764 << " Details:\n"
2765 << " Result:\n" << lower2 << "\n"
2766 << " Expected result:\n( 1 0 0 )\n( -2 0 0 )\n( 13 5 3 )\n";
2767 throw std::runtime_error( oss.str() );
2768 }
2769 }
2770 }
2771 //*************************************************************************************************
2772
2773
2774 //*************************************************************************************************
2775 /*!\brief Test of the LowerMatrix subtraction assignment operators.
2776 //
2777 // \return void
2778 // \exception std::runtime_error Error detected.
2779 //
2780 // This function performs a test of the subtraction assignment operators of the LowerMatrix
2781 // specialization. In case an error is detected, a \a std::runtime_error exception is thrown.
2782 */
testSubAssign()2783 void SparseTest::testSubAssign()
2784 {
2785 //=====================================================================================
2786 // Row-major dense matrix subtraction assignment
2787 //=====================================================================================
2788
2789 // Row-major/row-major dense matrix subtraction assignment (lower)
2790 {
2791 test_ = "Row-major/row-major LowerMatrix dense matrix subtraction assignment (lower)";
2792
2793 blaze::DynamicMatrix<int,blaze::rowMajor> mat( 3UL, 3UL, 0 );
2794 mat(1,0) = -2;
2795 mat(1,1) = 2;
2796 mat(2,0) = 6;
2797 mat(2,1) = 5;
2798
2799 LT lower( 3UL );
2800 lower(0,0) = 1;
2801 lower(1,0) = -4;
2802 lower(1,1) = 2;
2803 lower(2,0) = 7;
2804 lower(2,2) = 3;
2805
2806 lower -= mat;
2807
2808 checkRows ( lower, 3UL );
2809 checkColumns ( lower, 3UL );
2810 checkCapacity( lower, 5UL );
2811 checkNonZeros( lower, 5UL );
2812 checkNonZeros( lower, 0UL, 1UL );
2813 checkNonZeros( lower, 1UL, 1UL );
2814 checkNonZeros( lower, 2UL, 3UL );
2815
2816 if( lower(0,0) != 1 || lower(0,1) != 0 || lower(0,2) != 0 ||
2817 lower(1,0) != -2 || lower(1,1) != 0 || lower(1,2) != 0 ||
2818 lower(2,0) != 1 || lower(2,1) != -5 || lower(2,2) != 3 ) {
2819 std::ostringstream oss;
2820 oss << " Test: " << test_ << "\n"
2821 << " Error: Subtraction assignment failed\n"
2822 << " Details:\n"
2823 << " Result:\n" << lower << "\n"
2824 << " Expected result:\n( 1 0 0 )\n( -2 0 0 )\n( 1 -5 3 )\n";
2825 throw std::runtime_error( oss.str() );
2826 }
2827 }
2828
2829 // Row-major/column-major dense matrix subtraction assignment (lower)
2830 {
2831 test_ = "Row-major/column-major LowerMatrix dense matrix subtraction assignment (lower)";
2832
2833 blaze::DynamicMatrix<int,blaze::columnMajor> mat( 3UL, 3UL, 0 );
2834 mat(1,0) = -2;
2835 mat(1,1) = 2;
2836 mat(2,0) = 6;
2837 mat(2,1) = 5;
2838
2839 LT lower( 3UL );
2840 lower(0,0) = 1;
2841 lower(1,0) = -4;
2842 lower(1,1) = 2;
2843 lower(2,0) = 7;
2844 lower(2,2) = 3;
2845
2846 lower -= mat;
2847
2848 checkRows ( lower, 3UL );
2849 checkColumns ( lower, 3UL );
2850 checkCapacity( lower, 5UL );
2851 checkNonZeros( lower, 5UL );
2852 checkNonZeros( lower, 0UL, 1UL );
2853 checkNonZeros( lower, 1UL, 1UL );
2854 checkNonZeros( lower, 2UL, 3UL );
2855
2856 if( lower(0,0) != 1 || lower(0,1) != 0 || lower(0,2) != 0 ||
2857 lower(1,0) != -2 || lower(1,1) != 0 || lower(1,2) != 0 ||
2858 lower(2,0) != 1 || lower(2,1) != -5 || lower(2,2) != 3 ) {
2859 std::ostringstream oss;
2860 oss << " Test: " << test_ << "\n"
2861 << " Error: Subtraction assignment failed\n"
2862 << " Details:\n"
2863 << " Result:\n" << lower << "\n"
2864 << " Expected result:\n( 1 0 0 )\n( -2 0 0 )\n( 1 -5 3 )\n";
2865 throw std::runtime_error( oss.str() );
2866 }
2867 }
2868
2869 // Row-major/row-major dense matrix subtraction assignment (non-lower)
2870 {
2871 test_ = "Row-major/row-major LowerMatrix dense matrix subtraction assignment (non-lower)";
2872
2873 blaze::DynamicMatrix<int,blaze::rowMajor> mat( 3UL, 3UL, 0 );
2874 mat(0,2) = 6;
2875
2876 LT lower( 3UL );
2877 lower(0,0) = 1;
2878 lower(1,0) = -4;
2879 lower(1,1) = 2;
2880 lower(2,0) = 7;
2881 lower(2,2) = 3;
2882
2883 try {
2884 lower -= mat;
2885
2886 std::ostringstream oss;
2887 oss << " Test: " << test_ << "\n"
2888 << " Error: Subtraction assignment of non-lower row-major matrix succeeded\n"
2889 << " Details:\n"
2890 << " Result:\n" << lower << "\n";
2891 throw std::runtime_error( oss.str() );
2892 }
2893 catch( std::invalid_argument& ) {}
2894 }
2895
2896 // Row-major/column-major dense matrix subtraction assignment (non-lower)
2897 {
2898 test_ = "Row-major/column-major LowerMatrix dense matrix subtraction assignment (non-lower)";
2899
2900 blaze::DynamicMatrix<int,blaze::columnMajor> mat( 3UL, 3UL, 0 );
2901 mat(0,2) = 6;
2902
2903 LT lower( 3UL );
2904 lower(0,0) = 1;
2905 lower(1,0) = -4;
2906 lower(1,1) = 2;
2907 lower(2,0) = 7;
2908 lower(2,2) = 3;
2909
2910 try {
2911 lower -= mat;
2912
2913 std::ostringstream oss;
2914 oss << " Test: " << test_ << "\n"
2915 << " Error: Subtraction assignment of non-lower column-major matrix succeeded\n"
2916 << " Details:\n"
2917 << " Result:\n" << lower << "\n";
2918 throw std::runtime_error( oss.str() );
2919 }
2920 catch( std::invalid_argument& ) {}
2921 }
2922
2923 // Row-major/row-major dense matrix subtraction assignment (LowerMatrix)
2924 {
2925 test_ = "Row-major/row-major LowerMatrix dense matrix subtraction assignment (LowerMatrix)";
2926
2927 blaze::LowerMatrix< blaze::StaticMatrix<int,3UL,3UL,blaze::rowMajor> > lower1;
2928 lower1(1,0) = -2;
2929 lower1(1,1) = 2;
2930 lower1(2,0) = 6;
2931 lower1(2,1) = 5;
2932
2933 LT lower2( 3UL );
2934 lower2(0,0) = 1;
2935 lower2(1,0) = -4;
2936 lower2(1,1) = 2;
2937 lower2(2,0) = 7;
2938 lower2(2,2) = 3;
2939
2940 lower2 -= lower1;
2941
2942 checkRows ( lower2, 3UL );
2943 checkColumns ( lower2, 3UL );
2944 checkCapacity( lower2, 5UL );
2945 checkNonZeros( lower2, 5UL );
2946 checkNonZeros( lower2, 0UL, 1UL );
2947 checkNonZeros( lower2, 1UL, 1UL );
2948 checkNonZeros( lower2, 2UL, 3UL );
2949
2950 if( lower2(0,0) != 1 || lower2(0,1) != 0 || lower2(0,2) != 0 ||
2951 lower2(1,0) != -2 || lower2(1,1) != 0 || lower2(1,2) != 0 ||
2952 lower2(2,0) != 1 || lower2(2,1) != -5 || lower2(2,2) != 3 ) {
2953 std::ostringstream oss;
2954 oss << " Test: " << test_ << "\n"
2955 << " Error: Subtraction assignment failed\n"
2956 << " Details:\n"
2957 << " Result:\n" << lower2 << "\n"
2958 << " Expected result:\n( 1 0 0 )\n( -2 0 0 )\n( 1 -5 3 )\n";
2959 throw std::runtime_error( oss.str() );
2960 }
2961 }
2962
2963 // Row-major/column-major dense matrix subtraction assignment (LowerMatrix)
2964 {
2965 test_ = "Row-major/column-major LowerMatrix dense matrix subtraction assignment (LowerMatrix)";
2966
2967 blaze::LowerMatrix< blaze::StaticMatrix<int,3UL,3UL,blaze::columnMajor> > lower1;
2968 lower1(1,0) = -2;
2969 lower1(1,1) = 2;
2970 lower1(2,0) = 6;
2971 lower1(2,1) = 5;
2972
2973 LT lower2( 3UL );
2974 lower2(0,0) = 1;
2975 lower2(1,0) = -4;
2976 lower2(1,1) = 2;
2977 lower2(2,0) = 7;
2978 lower2(2,2) = 3;
2979
2980 lower2 -= lower1;
2981
2982 checkRows ( lower2, 3UL );
2983 checkColumns ( lower2, 3UL );
2984 checkCapacity( lower2, 5UL );
2985 checkNonZeros( lower2, 5UL );
2986 checkNonZeros( lower2, 0UL, 1UL );
2987 checkNonZeros( lower2, 1UL, 1UL );
2988 checkNonZeros( lower2, 2UL, 3UL );
2989
2990 if( lower2(0,0) != 1 || lower2(0,1) != 0 || lower2(0,2) != 0 ||
2991 lower2(1,0) != -2 || lower2(1,1) != 0 || lower2(1,2) != 0 ||
2992 lower2(2,0) != 1 || lower2(2,1) != -5 || lower2(2,2) != 3 ) {
2993 std::ostringstream oss;
2994 oss << " Test: " << test_ << "\n"
2995 << " Error: Subtraction assignment failed\n"
2996 << " Details:\n"
2997 << " Result:\n" << lower2 << "\n"
2998 << " Expected result:\n( 1 0 0 )\n( -2 0 0 )\n( 1 -5 3 )\n";
2999 throw std::runtime_error( oss.str() );
3000 }
3001 }
3002
3003
3004 //=====================================================================================
3005 // Row-major sparse matrix subtraction assignment
3006 //=====================================================================================
3007
3008 // Row-major/row-major sparse matrix subtraction assignment (lower)
3009 {
3010 test_ = "Row-major/row-major LowerMatrix sparse matrix subtraction assignment (lower)";
3011
3012 blaze::CompressedMatrix<int,blaze::rowMajor> mat( 3UL, 3UL, 5UL );
3013 mat(1,0) = -2;
3014 mat(1,1) = 2;
3015 mat(2,0) = 6;
3016 mat(2,1) = 5;
3017 mat.insert( 1UL, 2UL, 0 );
3018
3019 LT lower( 3UL );
3020 lower(0,0) = 1;
3021 lower(1,0) = -4;
3022 lower(1,1) = 2;
3023 lower(2,0) = 7;
3024 lower(2,2) = 3;
3025
3026 lower -= mat;
3027
3028 checkRows ( lower, 3UL );
3029 checkColumns ( lower, 3UL );
3030 checkCapacity( lower, 6UL );
3031 checkNonZeros( lower, 6UL );
3032 checkNonZeros( lower, 0UL, 1UL );
3033 checkNonZeros( lower, 1UL, 2UL );
3034 checkNonZeros( lower, 2UL, 3UL );
3035
3036 if( lower(0,0) != 1 || lower(0,1) != 0 || lower(0,2) != 0 ||
3037 lower(1,0) != -2 || lower(1,1) != 0 || lower(1,2) != 0 ||
3038 lower(2,0) != 1 || lower(2,1) != -5 || lower(2,2) != 3 ) {
3039 std::ostringstream oss;
3040 oss << " Test: " << test_ << "\n"
3041 << " Error: Subtraction assignment failed\n"
3042 << " Details:\n"
3043 << " Result:\n" << lower << "\n"
3044 << " Expected result:\n( 1 0 0 )\n( -2 0 0 )\n( 1 -5 3 )\n";
3045 throw std::runtime_error( oss.str() );
3046 }
3047 }
3048
3049 // Row-major/column-major sparse matrix subtraction assignment (lower)
3050 {
3051 test_ = "Row-major/column-major LowerMatrix sparse matrix subtraction assignment (lower)";
3052
3053 blaze::CompressedMatrix<int,blaze::columnMajor> mat( 3UL, 3UL, 5UL );
3054 mat(1,0) = -2;
3055 mat(1,1) = 2;
3056 mat(2,0) = 6;
3057 mat(2,1) = 5;
3058 mat.insert( 1UL, 2UL, 0 );
3059
3060 LT lower( 3UL );
3061 lower(0,0) = 1;
3062 lower(1,0) = -4;
3063 lower(1,1) = 2;
3064 lower(2,0) = 7;
3065 lower(2,2) = 3;
3066
3067 lower -= mat;
3068
3069 checkRows ( lower, 3UL );
3070 checkColumns ( lower, 3UL );
3071 checkCapacity( lower, 6UL );
3072 checkNonZeros( lower, 6UL );
3073 checkNonZeros( lower, 0UL, 1UL );
3074 checkNonZeros( lower, 1UL, 2UL );
3075 checkNonZeros( lower, 2UL, 3UL );
3076
3077 if( lower(0,0) != 1 || lower(0,1) != 0 || lower(0,2) != 0 ||
3078 lower(1,0) != -2 || lower(1,1) != 0 || lower(1,2) != 0 ||
3079 lower(2,0) != 1 || lower(2,1) != -5 || lower(2,2) != 3 ) {
3080 std::ostringstream oss;
3081 oss << " Test: " << test_ << "\n"
3082 << " Error: Subtraction assignment failed\n"
3083 << " Details:\n"
3084 << " Result:\n" << lower << "\n"
3085 << " Expected result:\n( 1 0 0 )\n( -2 0 0 )\n( 1 -5 3 )\n";
3086 throw std::runtime_error( oss.str() );
3087 }
3088 }
3089
3090 // Row-major/row-major sparse matrix subtraction assignment (non-lower)
3091 {
3092 test_ = "Row-major/row-major LowerMatrix sparse matrix subtraction assignment (non-lower)";
3093
3094 blaze::CompressedMatrix<int,blaze::rowMajor> mat( 3UL, 3UL, 1UL );
3095 mat(0,2) = 6;
3096
3097 LT lower( 3UL );
3098 lower(0,0) = 1;
3099 lower(1,0) = -4;
3100 lower(1,1) = 2;
3101 lower(2,0) = 7;
3102 lower(2,2) = 3;
3103
3104 try {
3105 lower -= mat;
3106
3107 std::ostringstream oss;
3108 oss << " Test: " << test_ << "\n"
3109 << " Error: Subtraction assignment of non-lower row-major matrix succeeded\n"
3110 << " Details:\n"
3111 << " Result:\n" << lower << "\n";
3112 throw std::runtime_error( oss.str() );
3113 }
3114 catch( std::invalid_argument& ) {}
3115 }
3116
3117 // Row-major/column-major sparse matrix subtraction assignment (non-lower)
3118 {
3119 test_ = "Row-major/column-major LowerMatrix sparse matrix subtraction assignment (non-lower)";
3120
3121 blaze::CompressedMatrix<int,blaze::columnMajor> mat( 3UL, 3UL, 1UL );
3122 mat(0,2) = 6;
3123
3124 LT lower( 3UL );
3125 lower(0,0) = 1;
3126 lower(1,0) = -4;
3127 lower(1,1) = 2;
3128 lower(2,0) = 7;
3129 lower(2,2) = 3;
3130
3131 try {
3132 lower -= mat;
3133
3134 std::ostringstream oss;
3135 oss << " Test: " << test_ << "\n"
3136 << " Error: Subtraction assignment of non-lower column-major matrix succeeded\n"
3137 << " Details:\n"
3138 << " Result:\n" << lower << "\n";
3139 throw std::runtime_error( oss.str() );
3140 }
3141 catch( std::invalid_argument& ) {}
3142 }
3143
3144 // Row-major/row-major sparse matrix subtraction assignment (LowerMatrix)
3145 {
3146 test_ = "Row-major/row-major LowerMatrix sparse matrix subtraction assignment (LowerMatrix)";
3147
3148 LT lower1( 3UL, 4UL );
3149 lower1(1,0) = -2;
3150 lower1(1,1) = 2;
3151 lower1(2,0) = 6;
3152 lower1(2,1) = 5;
3153
3154 LT lower2( 3UL );
3155 lower2(0,0) = 1;
3156 lower2(1,0) = -4;
3157 lower2(1,1) = 2;
3158 lower2(2,0) = 7;
3159 lower2(2,2) = 3;
3160
3161 lower2 -= lower1;
3162
3163 checkRows ( lower2, 3UL );
3164 checkColumns ( lower2, 3UL );
3165 checkCapacity( lower2, 6UL );
3166 checkNonZeros( lower2, 6UL );
3167 checkNonZeros( lower2, 0UL, 1UL );
3168 checkNonZeros( lower2, 1UL, 2UL );
3169 checkNonZeros( lower2, 2UL, 3UL );
3170
3171 if( lower2(0,0) != 1 || lower2(0,1) != 0 || lower2(0,2) != 0 ||
3172 lower2(1,0) != -2 || lower2(1,1) != 0 || lower2(1,2) != 0 ||
3173 lower2(2,0) != 1 || lower2(2,1) != -5 || lower2(2,2) != 3 ) {
3174 std::ostringstream oss;
3175 oss << " Test: " << test_ << "\n"
3176 << " Error: Subtraction assignment failed\n"
3177 << " Details:\n"
3178 << " Result:\n" << lower2 << "\n"
3179 << " Expected result:\n( 1 0 0 )\n( -2 0 0 )\n( 1 -5 3 )\n";
3180 throw std::runtime_error( oss.str() );
3181 }
3182 }
3183
3184 // Row-major/column-major sparse matrix subtraction assignment (LowerMatrix)
3185 {
3186 test_ = "Row-major/column-major LowerMatrix sparse matrix subtraction assignment (LowerMatrix)";
3187
3188 OLT lower1( 3UL, 4UL );
3189 lower1(1,0) = -2;
3190 lower1(1,1) = 2;
3191 lower1(2,0) = 6;
3192 lower1(2,1) = 5;
3193
3194 LT lower2( 3UL );
3195 lower2(0,0) = 1;
3196 lower2(1,0) = -4;
3197 lower2(1,1) = 2;
3198 lower2(2,0) = 7;
3199 lower2(2,2) = 3;
3200
3201 lower2 -= lower1;
3202
3203 checkRows ( lower2, 3UL );
3204 checkColumns ( lower2, 3UL );
3205 checkCapacity( lower2, 6UL );
3206 checkNonZeros( lower2, 6UL );
3207 checkNonZeros( lower2, 0UL, 1UL );
3208 checkNonZeros( lower2, 1UL, 2UL );
3209 checkNonZeros( lower2, 2UL, 3UL );
3210
3211 if( lower2(0,0) != 1 || lower2(0,1) != 0 || lower2(0,2) != 0 ||
3212 lower2(1,0) != -2 || lower2(1,1) != 0 || lower2(1,2) != 0 ||
3213 lower2(2,0) != 1 || lower2(2,1) != -5 || lower2(2,2) != 3 ) {
3214 std::ostringstream oss;
3215 oss << " Test: " << test_ << "\n"
3216 << " Error: Subtraction assignment failed\n"
3217 << " Details:\n"
3218 << " Result:\n" << lower2 << "\n"
3219 << " Expected result:\n( 1 0 0 )\n( -2 0 0 )\n( 1 -5 3 )\n";
3220 throw std::runtime_error( oss.str() );
3221 }
3222 }
3223
3224
3225 //=====================================================================================
3226 // Column-major dense matrix subtraction assignment
3227 //=====================================================================================
3228
3229 // Column-major/row-major dense matrix subtraction assignment (lower)
3230 {
3231 test_ = "Column-major/row-major LowerMatrix dense matrix subtraction assignment (lower)";
3232
3233 blaze::DynamicMatrix<int,blaze::rowMajor> mat( 3UL, 3UL, 0 );
3234 mat(1,0) = -2;
3235 mat(1,1) = 2;
3236 mat(2,0) = 6;
3237 mat(2,1) = 5;
3238
3239 OLT lower( 3UL );
3240 lower(0,0) = 1;
3241 lower(1,0) = -4;
3242 lower(1,1) = 2;
3243 lower(2,0) = 7;
3244 lower(2,2) = 3;
3245
3246 lower -= mat;
3247
3248 checkRows ( lower, 3UL );
3249 checkColumns ( lower, 3UL );
3250 checkCapacity( lower, 5UL );
3251 checkNonZeros( lower, 5UL );
3252 checkNonZeros( lower, 0UL, 3UL );
3253 checkNonZeros( lower, 1UL, 1UL );
3254 checkNonZeros( lower, 2UL, 1UL );
3255
3256 if( lower(0,0) != 1 || lower(0,1) != 0 || lower(0,2) != 0 ||
3257 lower(1,0) != -2 || lower(1,1) != 0 || lower(1,2) != 0 ||
3258 lower(2,0) != 1 || lower(2,1) != -5 || lower(2,2) != 3 ) {
3259 std::ostringstream oss;
3260 oss << " Test: " << test_ << "\n"
3261 << " Error: Subtraction assignment failed\n"
3262 << " Details:\n"
3263 << " Result:\n" << lower << "\n"
3264 << " Expected result:\n( 1 0 0 )\n( -2 0 0 )\n( 1 -5 3 )\n";
3265 throw std::runtime_error( oss.str() );
3266 }
3267 }
3268
3269 // Column-major/column-major dense matrix subtraction assignment (lower)
3270 {
3271 test_ = "Column-major/column-major LowerMatrix dense matrix subtraction assignment (lower)";
3272
3273 blaze::DynamicMatrix<int,blaze::columnMajor> mat( 3UL, 3UL, 0 );
3274 mat(1,0) = -2;
3275 mat(1,1) = 2;
3276 mat(2,0) = 6;
3277 mat(2,1) = 5;
3278
3279 OLT lower( 3UL );
3280 lower(0,0) = 1;
3281 lower(1,0) = -4;
3282 lower(1,1) = 2;
3283 lower(2,0) = 7;
3284 lower(2,2) = 3;
3285
3286 lower -= mat;
3287
3288 checkRows ( lower, 3UL );
3289 checkColumns ( lower, 3UL );
3290 checkCapacity( lower, 5UL );
3291 checkNonZeros( lower, 5UL );
3292 checkNonZeros( lower, 0UL, 3UL );
3293 checkNonZeros( lower, 1UL, 1UL );
3294 checkNonZeros( lower, 2UL, 1UL );
3295
3296 if( lower(0,0) != 1 || lower(0,1) != 0 || lower(0,2) != 0 ||
3297 lower(1,0) != -2 || lower(1,1) != 0 || lower(1,2) != 0 ||
3298 lower(2,0) != 1 || lower(2,1) != -5 || lower(2,2) != 3 ) {
3299 std::ostringstream oss;
3300 oss << " Test: " << test_ << "\n"
3301 << " Error: Subtraction assignment failed\n"
3302 << " Details:\n"
3303 << " Result:\n" << lower << "\n"
3304 << " Expected result:\n( 1 0 0 )\n( -2 0 0 )\n( 1 -5 3 )\n";
3305 throw std::runtime_error( oss.str() );
3306 }
3307 }
3308
3309 // Column-major/row-major dense matrix subtraction assignment (non-lower)
3310 {
3311 test_ = "Column-major/row-major LowerMatrix dense matrix subtraction assignment (non-lower)";
3312
3313 blaze::DynamicMatrix<int,blaze::rowMajor> mat( 3UL, 3UL, 0 );
3314 mat(0,2) = 6;
3315
3316 OLT lower( 3UL );
3317 lower(0,0) = 1;
3318 lower(1,0) = -4;
3319 lower(1,1) = 2;
3320 lower(2,0) = 7;
3321 lower(2,2) = 3;
3322
3323 try {
3324 lower -= mat;
3325
3326 std::ostringstream oss;
3327 oss << " Test: " << test_ << "\n"
3328 << " Error: Subtraction assignment of non-lower row-major matrix succeeded\n"
3329 << " Details:\n"
3330 << " Result:\n" << lower << "\n";
3331 throw std::runtime_error( oss.str() );
3332 }
3333 catch( std::invalid_argument& ) {}
3334 }
3335
3336 // Column-major/column-major dense matrix subtraction assignment (non-lower)
3337 {
3338 test_ = "Column-major/column-major LowerMatrix dense matrix subtraction assignment (non-lower)";
3339
3340 blaze::DynamicMatrix<int,blaze::columnMajor> mat( 3UL, 3UL, 0 );
3341 mat(0,2) = 6;
3342
3343 OLT lower( 3UL );
3344 lower(0,0) = 1;
3345 lower(1,0) = -4;
3346 lower(1,1) = 2;
3347 lower(2,0) = 7;
3348 lower(2,2) = 3;
3349
3350 try {
3351 lower -= mat;
3352
3353 std::ostringstream oss;
3354 oss << " Test: " << test_ << "\n"
3355 << " Error: Subtraction assignment of non-lower column-major matrix succeeded\n"
3356 << " Details:\n"
3357 << " Result:\n" << lower << "\n";
3358 throw std::runtime_error( oss.str() );
3359 }
3360 catch( std::invalid_argument& ) {}
3361 }
3362
3363 // Column-major/row-major dense matrix subtraction assignment (LowerMatrix)
3364 {
3365 test_ = "Column-major/row-major LowerMatrix dense matrix subtraction assignment (LowerMatrix)";
3366
3367 blaze::LowerMatrix< blaze::StaticMatrix<int,3UL,3UL,blaze::rowMajor> > lower1;
3368 lower1(1,0) = -2;
3369 lower1(1,1) = 2;
3370 lower1(2,0) = 6;
3371 lower1(2,1) = 5;
3372
3373 OLT lower2( 3UL );
3374 lower2(0,0) = 1;
3375 lower2(1,0) = -4;
3376 lower2(1,1) = 2;
3377 lower2(2,0) = 7;
3378 lower2(2,2) = 3;
3379
3380 lower2 -= lower1;
3381
3382 checkRows ( lower2, 3UL );
3383 checkColumns ( lower2, 3UL );
3384 checkCapacity( lower2, 5UL );
3385 checkNonZeros( lower2, 5UL );
3386 checkNonZeros( lower2, 0UL, 3UL );
3387 checkNonZeros( lower2, 1UL, 1UL );
3388 checkNonZeros( lower2, 2UL, 1UL );
3389
3390 if( lower2(0,0) != 1 || lower2(0,1) != 0 || lower2(0,2) != 0 ||
3391 lower2(1,0) != -2 || lower2(1,1) != 0 || lower2(1,2) != 0 ||
3392 lower2(2,0) != 1 || lower2(2,1) != -5 || lower2(2,2) != 3 ) {
3393 std::ostringstream oss;
3394 oss << " Test: " << test_ << "\n"
3395 << " Error: Subtraction assignment failed\n"
3396 << " Details:\n"
3397 << " Result:\n" << lower2 << "\n"
3398 << " Expected result:\n( 1 0 0 )\n( -2 0 0 )\n( 1 -5 3 )\n";
3399 throw std::runtime_error( oss.str() );
3400 }
3401 }
3402
3403 // Column-major/column-major dense matrix subtraction assignment (LowerMatrix)
3404 {
3405 test_ = "Column-major/column-major LowerMatrix dense matrix subtraction assignment (LowerMatrix)";
3406
3407 blaze::LowerMatrix< blaze::StaticMatrix<int,3UL,3UL,blaze::columnMajor> > lower1;
3408 lower1(1,0) = -2;
3409 lower1(1,1) = 2;
3410 lower1(2,0) = 6;
3411 lower1(2,1) = 5;
3412
3413 OLT lower2( 3UL );
3414 lower2(0,0) = 1;
3415 lower2(1,0) = -4;
3416 lower2(1,1) = 2;
3417 lower2(2,0) = 7;
3418 lower2(2,2) = 3;
3419
3420 lower2 -= lower1;
3421
3422 checkRows ( lower2, 3UL );
3423 checkColumns ( lower2, 3UL );
3424 checkCapacity( lower2, 5UL );
3425 checkNonZeros( lower2, 5UL );
3426 checkNonZeros( lower2, 0UL, 3UL );
3427 checkNonZeros( lower2, 1UL, 1UL );
3428 checkNonZeros( lower2, 2UL, 1UL );
3429
3430 if( lower2(0,0) != 1 || lower2(0,1) != 0 || lower2(0,2) != 0 ||
3431 lower2(1,0) != -2 || lower2(1,1) != 0 || lower2(1,2) != 0 ||
3432 lower2(2,0) != 1 || lower2(2,1) != -5 || lower2(2,2) != 3 ) {
3433 std::ostringstream oss;
3434 oss << " Test: " << test_ << "\n"
3435 << " Error: Subtraction assignment failed\n"
3436 << " Details:\n"
3437 << " Result:\n" << lower2 << "\n"
3438 << " Expected result:\n( 1 0 0 )\n( -2 0 0 )\n( 1 -5 3 )\n";
3439 throw std::runtime_error( oss.str() );
3440 }
3441 }
3442
3443
3444 //=====================================================================================
3445 // Column-major sparse matrix subtraction assignment
3446 //=====================================================================================
3447
3448 // Column-major/row-major sparse matrix subtraction assignment (lower)
3449 {
3450 test_ = "Column-major/row-major LowerMatrix sparse matrix subtraction assignment (lower)";
3451
3452 blaze::CompressedMatrix<int,blaze::rowMajor> mat( 3UL, 3UL, 5UL );
3453 mat(1,0) = -2;
3454 mat(1,1) = 2;
3455 mat(2,0) = 6;
3456 mat(2,1) = 5;
3457 mat.insert( 1UL, 2UL, 0 );
3458
3459 OLT lower( 3UL );
3460 lower(0,0) = 1;
3461 lower(1,0) = -4;
3462 lower(1,1) = 2;
3463 lower(2,0) = 7;
3464 lower(2,2) = 3;
3465
3466 lower -= mat;
3467
3468 checkRows ( lower, 3UL );
3469 checkColumns ( lower, 3UL );
3470 checkCapacity( lower, 6UL );
3471 checkNonZeros( lower, 6UL );
3472 checkNonZeros( lower, 0UL, 3UL );
3473 checkNonZeros( lower, 1UL, 2UL );
3474 checkNonZeros( lower, 2UL, 1UL );
3475
3476 if( lower(0,0) != 1 || lower(0,1) != 0 || lower(0,2) != 0 ||
3477 lower(1,0) != -2 || lower(1,1) != 0 || lower(1,2) != 0 ||
3478 lower(2,0) != 1 || lower(2,1) != -5 || lower(2,2) != 3 ) {
3479 std::ostringstream oss;
3480 oss << " Test: " << test_ << "\n"
3481 << " Error: Subtraction assignment failed\n"
3482 << " Details:\n"
3483 << " Result:\n" << lower << "\n"
3484 << " Expected result:\n( 1 0 0 )\n( -2 0 0 )\n( 1 -5 3 )\n";
3485 throw std::runtime_error( oss.str() );
3486 }
3487 }
3488
3489 // Column-major/column-major sparse matrix subtraction assignment (lower)
3490 {
3491 test_ = "Column-major/column-major LowerMatrix sparse matrix subtraction assignment (lower)";
3492
3493 blaze::CompressedMatrix<int,blaze::columnMajor> mat( 3UL, 3UL, 5UL );
3494 mat(1,0) = -2;
3495 mat(1,1) = 2;
3496 mat(2,0) = 6;
3497 mat(2,1) = 5;
3498 mat.insert( 1UL, 2UL, 0 );
3499
3500 OLT lower( 3UL );
3501 lower(0,0) = 1;
3502 lower(1,0) = -4;
3503 lower(1,1) = 2;
3504 lower(2,0) = 7;
3505 lower(2,2) = 3;
3506
3507 lower -= mat;
3508
3509 checkRows ( lower, 3UL );
3510 checkColumns ( lower, 3UL );
3511 checkCapacity( lower, 6UL );
3512 checkNonZeros( lower, 6UL );
3513 checkNonZeros( lower, 0UL, 3UL );
3514 checkNonZeros( lower, 1UL, 2UL );
3515 checkNonZeros( lower, 2UL, 1UL );
3516
3517 if( lower(0,0) != 1 || lower(0,1) != 0 || lower(0,2) != 0 ||
3518 lower(1,0) != -2 || lower(1,1) != 0 || lower(1,2) != 0 ||
3519 lower(2,0) != 1 || lower(2,1) != -5 || lower(2,2) != 3 ) {
3520 std::ostringstream oss;
3521 oss << " Test: " << test_ << "\n"
3522 << " Error: Subtraction assignment failed\n"
3523 << " Details:\n"
3524 << " Result:\n" << lower << "\n"
3525 << " Expected result:\n( 1 0 0 )\n( -2 0 0 )\n( 1 -5 3 )\n";
3526 throw std::runtime_error( oss.str() );
3527 }
3528 }
3529
3530 // Column-major/row-major sparse matrix subtraction assignment (non-lower)
3531 {
3532 test_ = "Column-major/row-major LowerMatrix sparse matrix subtraction assignment (non-lower)";
3533
3534 blaze::CompressedMatrix<int,blaze::rowMajor> mat( 3UL, 3UL, 1UL );
3535 mat(0,2) = 6;
3536
3537 OLT lower( 3UL );
3538 lower(0,0) = 1;
3539 lower(1,0) = -4;
3540 lower(1,1) = 2;
3541 lower(2,0) = 7;
3542 lower(2,2) = 3;
3543
3544 try {
3545 lower -= mat;
3546
3547 std::ostringstream oss;
3548 oss << " Test: " << test_ << "\n"
3549 << " Error: Subtraction assignment of non-lower row-major matrix succeeded\n"
3550 << " Details:\n"
3551 << " Result:\n" << lower << "\n";
3552 throw std::runtime_error( oss.str() );
3553 }
3554 catch( std::invalid_argument& ) {}
3555 }
3556
3557 // Column-major/column-major sparse matrix subtraction assignment (non-lower)
3558 {
3559 test_ = "Column-major/column-major LowerMatrix sparse matrix subtraction assignment (non-lower)";
3560
3561 blaze::CompressedMatrix<int,blaze::columnMajor> mat( 3UL, 3UL, 1UL );
3562 mat(0,2) = 6;
3563
3564 OLT lower( 3UL );
3565 lower(0,0) = 1;
3566 lower(1,0) = -4;
3567 lower(1,1) = 2;
3568 lower(2,0) = 7;
3569 lower(2,2) = 3;
3570
3571 try {
3572 lower -= mat;
3573
3574 std::ostringstream oss;
3575 oss << " Test: " << test_ << "\n"
3576 << " Error: Subtraction assignment of non-lower column-major matrix succeeded\n"
3577 << " Details:\n"
3578 << " Result:\n" << lower << "\n";
3579 throw std::runtime_error( oss.str() );
3580 }
3581 catch( std::invalid_argument& ) {}
3582 }
3583
3584 // Column-major/row-major sparse matrix subtraction assignment (LowerMatrix)
3585 {
3586 test_ = "Column-major/row-major LowerMatrix sparse matrix subtraction assignment (LowerMatrix)";
3587
3588 LT lower1( 3UL, 4UL );
3589 lower1(1,0) = -2;
3590 lower1(1,1) = 2;
3591 lower1(2,0) = 6;
3592 lower1(2,1) = 5;
3593
3594 OLT lower2( 3UL );
3595 lower2(0,0) = 1;
3596 lower2(1,0) = -4;
3597 lower2(1,1) = 2;
3598 lower2(2,0) = 7;
3599 lower2(2,2) = 3;
3600
3601 lower2 -= lower1;
3602
3603 checkRows ( lower2, 3UL );
3604 checkColumns ( lower2, 3UL );
3605 checkCapacity( lower2, 6UL );
3606 checkNonZeros( lower2, 6UL );
3607 checkNonZeros( lower2, 0UL, 3UL );
3608 checkNonZeros( lower2, 1UL, 2UL );
3609 checkNonZeros( lower2, 2UL, 1UL );
3610
3611 if( lower2(0,0) != 1 || lower2(0,1) != 0 || lower2(0,2) != 0 ||
3612 lower2(1,0) != -2 || lower2(1,1) != 0 || lower2(1,2) != 0 ||
3613 lower2(2,0) != 1 || lower2(2,1) != -5 || lower2(2,2) != 3 ) {
3614 std::ostringstream oss;
3615 oss << " Test: " << test_ << "\n"
3616 << " Error: Subtraction assignment failed\n"
3617 << " Details:\n"
3618 << " Result:\n" << lower2 << "\n"
3619 << " Expected result:\n( 1 0 0 )\n( -2 0 0 )\n( 1 -5 3 )\n";
3620 throw std::runtime_error( oss.str() );
3621 }
3622 }
3623
3624 // Column-major/column-major sparse matrix subtraction assignment (LowerMatrix)
3625 {
3626 test_ = "Column-major/column-major LowerMatrix sparse matrix subtraction assignment (LowerMatrix)";
3627
3628 OLT lower1( 3UL, 4UL );
3629 lower1(1,0) = -2;
3630 lower1(1,1) = 2;
3631 lower1(2,0) = 6;
3632 lower1(2,1) = 5;
3633
3634 OLT lower2( 3UL );
3635 lower2(0,0) = 1;
3636 lower2(1,0) = -4;
3637 lower2(1,1) = 2;
3638 lower2(2,0) = 7;
3639 lower2(2,2) = 3;
3640
3641 lower2 -= lower1;
3642
3643 checkRows ( lower2, 3UL );
3644 checkColumns ( lower2, 3UL );
3645 checkCapacity( lower2, 6UL );
3646 checkNonZeros( lower2, 6UL );
3647 checkNonZeros( lower2, 0UL, 3UL );
3648 checkNonZeros( lower2, 1UL, 2UL );
3649 checkNonZeros( lower2, 2UL, 1UL );
3650
3651 if( lower2(0,0) != 1 || lower2(0,1) != 0 || lower2(0,2) != 0 ||
3652 lower2(1,0) != -2 || lower2(1,1) != 0 || lower2(1,2) != 0 ||
3653 lower2(2,0) != 1 || lower2(2,1) != -5 || lower2(2,2) != 3 ) {
3654 std::ostringstream oss;
3655 oss << " Test: " << test_ << "\n"
3656 << " Error: Subtraction assignment failed\n"
3657 << " Details:\n"
3658 << " Result:\n" << lower2 << "\n"
3659 << " Expected result:\n( 1 0 0 )\n( -2 0 0 )\n( 1 -5 3 )\n";
3660 throw std::runtime_error( oss.str() );
3661 }
3662 }
3663 }
3664 //*************************************************************************************************
3665
3666
3667 //*************************************************************************************************
3668 /*!\brief Test of the LowerMatrix Schur product assignment operators.
3669 //
3670 // \return void
3671 // \exception std::runtime_error Error detected.
3672 //
3673 // This function performs a test of the Schur product assignment operators of the LowerMatrix
3674 // specialization. In case an error is detected, a \a std::runtime_error exception is thrown.
3675 */
testSchurAssign()3676 void SparseTest::testSchurAssign()
3677 {
3678 //=====================================================================================
3679 // Row-major dense matrix Schur product assignment
3680 //=====================================================================================
3681
3682 // Row-major/row-major dense matrix Schur product assignment (general)
3683 {
3684 test_ = "Row-major/row-major LowerMatrix dense matrix Schur product assignment (general)";
3685
3686 blaze::DynamicMatrix<int,blaze::rowMajor> mat{ { 2, 0, 9 }, { 0, -2, 0 }, { 3, 5, 0 } };
3687
3688 LT lower( 3UL );
3689 lower(0,0) = 1;
3690 lower(1,0) = -4;
3691 lower(1,1) = 2;
3692 lower(2,0) = 7;
3693 lower(2,2) = 3;
3694
3695 lower %= mat;
3696
3697 checkRows ( lower, 3UL );
3698 checkColumns ( lower, 3UL );
3699 checkCapacity( lower, 5UL );
3700 checkNonZeros( lower, 5UL );
3701 checkNonZeros( lower, 0UL, 1UL );
3702 checkNonZeros( lower, 1UL, 2UL );
3703 checkNonZeros( lower, 2UL, 2UL );
3704
3705 if( lower(0,0) != 2 || lower(0,1) != 0 || lower(0,2) != 0 ||
3706 lower(1,0) != 0 || lower(1,1) != -4 || lower(1,2) != 0 ||
3707 lower(2,0) != 21 || lower(2,1) != 0 || lower(2,2) != 0 ) {
3708 std::ostringstream oss;
3709 oss << " Test: " << test_ << "\n"
3710 << " Error: Schur product assignment failed\n"
3711 << " Details:\n"
3712 << " Result:\n" << lower << "\n"
3713 << " Expected result:\n( 2 0 0 )\n( 0 -4 0 )\n( 21 0 0 )\n";
3714 throw std::runtime_error( oss.str() );
3715 }
3716 }
3717
3718 // Row-major/column-major dense matrix Schur product assignment (general)
3719 {
3720 test_ = "Row-major/column-major LowerMatrix dense matrix Schur product assignment (general)";
3721
3722 blaze::DynamicMatrix<int,blaze::columnMajor> mat{ { 2, 0, 9 }, { 0, -2, 0 }, { 3, 5, 0 } };
3723
3724 LT lower( 3UL );
3725 lower(0,0) = 1;
3726 lower(1,0) = -4;
3727 lower(1,1) = 2;
3728 lower(2,0) = 7;
3729 lower(2,2) = 3;
3730
3731 lower %= mat;
3732
3733 checkRows ( lower, 3UL );
3734 checkColumns ( lower, 3UL );
3735 checkCapacity( lower, 5UL );
3736 checkNonZeros( lower, 5UL );
3737 checkNonZeros( lower, 0UL, 1UL );
3738 checkNonZeros( lower, 1UL, 2UL );
3739 checkNonZeros( lower, 2UL, 2UL );
3740
3741 if( lower(0,0) != 2 || lower(0,1) != 0 || lower(0,2) != 0 ||
3742 lower(1,0) != 0 || lower(1,1) != -4 || lower(1,2) != 0 ||
3743 lower(2,0) != 21 || lower(2,1) != 0 || lower(2,2) != 0 ) {
3744 std::ostringstream oss;
3745 oss << " Test: " << test_ << "\n"
3746 << " Error: Schur product assignment failed\n"
3747 << " Details:\n"
3748 << " Result:\n" << lower << "\n"
3749 << " Expected result:\n( 2 0 0 )\n( 0 -4 0 )\n( 21 0 0 )\n";
3750 throw std::runtime_error( oss.str() );
3751 }
3752 }
3753
3754 // Row-major/row-major dense matrix Schur product assignment (LowerMatrix)
3755 {
3756 test_ = "Row-major/row-major LowerMatrix dense matrix Schur product assignment (LowerMatrix)";
3757
3758 blaze::LowerMatrix< blaze::StaticMatrix<int,3UL,3UL,blaze::rowMajor> > lower1;
3759 lower1(0,0) = 2;
3760 lower1(1,1) = -2;
3761 lower1(2,0) = 3;
3762 lower1(2,1) = 5;
3763
3764 LT lower2( 3UL );
3765 lower2(0,0) = 1;
3766 lower2(1,0) = -4;
3767 lower2(1,1) = 2;
3768 lower2(2,0) = 7;
3769 lower2(2,2) = 3;
3770
3771 lower2 %= lower1;
3772
3773 checkRows ( lower2, 3UL );
3774 checkColumns ( lower2, 3UL );
3775 checkCapacity( lower2, 5UL );
3776 checkNonZeros( lower2, 5UL );
3777 checkNonZeros( lower2, 0UL, 1UL );
3778 checkNonZeros( lower2, 1UL, 2UL );
3779 checkNonZeros( lower2, 2UL, 2UL );
3780
3781 if( lower2(0,0) != 2 || lower2(0,1) != 0 || lower2(0,2) != 0 ||
3782 lower2(1,0) != 0 || lower2(1,1) != -4 || lower2(1,2) != 0 ||
3783 lower2(2,0) != 21 || lower2(2,1) != 0 || lower2(2,2) != 0 ) {
3784 std::ostringstream oss;
3785 oss << " Test: " << test_ << "\n"
3786 << " Error: Schur product assignment failed\n"
3787 << " Details:\n"
3788 << " Result:\n" << lower2 << "\n"
3789 << " Expected result:\n( 2 0 0 )\n( 0 -4 0 )\n( 21 0 0 )\n";
3790 throw std::runtime_error( oss.str() );
3791 }
3792 }
3793
3794 // Row-major/column-major dense matrix Schur product assignment (LowerMatrix)
3795 {
3796 test_ = "Row-major/column-major LowerMatrix dense matrix Schur product assignment (LowerMatrix)";
3797
3798 blaze::LowerMatrix< blaze::StaticMatrix<int,3UL,3UL,blaze::columnMajor> > lower1;
3799 lower1(0,0) = 2;
3800 lower1(1,1) = -2;
3801 lower1(2,0) = 3;
3802 lower1(2,1) = 5;
3803
3804 LT lower2( 3UL );
3805 lower2(0,0) = 1;
3806 lower2(1,0) = -4;
3807 lower2(1,1) = 2;
3808 lower2(2,0) = 7;
3809 lower2(2,2) = 3;
3810
3811 lower2 %= lower1;
3812
3813 checkRows ( lower2, 3UL );
3814 checkColumns ( lower2, 3UL );
3815 checkCapacity( lower2, 5UL );
3816 checkNonZeros( lower2, 5UL );
3817 checkNonZeros( lower2, 0UL, 1UL );
3818 checkNonZeros( lower2, 1UL, 2UL );
3819 checkNonZeros( lower2, 2UL, 2UL );
3820
3821 if( lower2(0,0) != 2 || lower2(0,1) != 0 || lower2(0,2) != 0 ||
3822 lower2(1,0) != 0 || lower2(1,1) != -4 || lower2(1,2) != 0 ||
3823 lower2(2,0) != 21 || lower2(2,1) != 0 || lower2(2,2) != 0 ) {
3824 std::ostringstream oss;
3825 oss << " Test: " << test_ << "\n"
3826 << " Error: Schur product assignment failed\n"
3827 << " Details:\n"
3828 << " Result:\n" << lower2 << "\n"
3829 << " Expected result:\n( 2 0 0 )\n( 0 -4 0 )\n( 21 0 0 )\n";
3830 throw std::runtime_error( oss.str() );
3831 }
3832 }
3833
3834
3835 //=====================================================================================
3836 // Row-major sparse matrix Schur product assignment
3837 //=====================================================================================
3838
3839 // Row-major/row-major sparse matrix Schur product assignment (general)
3840 {
3841 test_ = "Row-major/row-major LowerMatrix sparse matrix Schur product assignment (general)";
3842
3843 blaze::CompressedMatrix<int,blaze::rowMajor> mat( 3UL, 3UL, 5UL );
3844 mat(0,0) = 2;
3845 mat(0,2) = 9;
3846 mat(1,1) = -2;
3847 mat(2,0) = 3;
3848 mat(2,1) = 5;
3849 mat.insert( 1UL, 2UL, 0 );
3850
3851 LT lower( 3UL );
3852 lower(0,0) = 1;
3853 lower(1,0) = -4;
3854 lower(1,1) = 2;
3855 lower(2,0) = 7;
3856 lower(2,2) = 3;
3857
3858 lower %= mat;
3859
3860 checkRows ( lower, 3UL );
3861 checkColumns ( lower, 3UL );
3862 checkCapacity( lower, 5UL );
3863 checkNonZeros( lower, 3UL );
3864 checkNonZeros( lower, 0UL, 1UL );
3865 checkNonZeros( lower, 1UL, 1UL );
3866 checkNonZeros( lower, 2UL, 1UL );
3867
3868 if( lower(0,0) != 2 || lower(0,1) != 0 || lower(0,2) != 0 ||
3869 lower(1,0) != 0 || lower(1,1) != -4 || lower(1,2) != 0 ||
3870 lower(2,0) != 21 || lower(2,1) != 0 || lower(2,2) != 0 ) {
3871 std::ostringstream oss;
3872 oss << " Test: " << test_ << "\n"
3873 << " Error: Schur product assignment failed\n"
3874 << " Details:\n"
3875 << " Result:\n" << lower << "\n"
3876 << " Expected result:\n( 2 0 0 )\n( 0 -4 0 )\n( 21 0 0 )\n";
3877 throw std::runtime_error( oss.str() );
3878 }
3879 }
3880
3881 // Row-major/column-major sparse matrix Schur product assignment (general)
3882 {
3883 test_ = "Row-major/column-major LowerMatrix sparse matrix Schur product assignment (general)";
3884
3885 blaze::CompressedMatrix<int,blaze::columnMajor> mat( 3UL, 3UL, 6UL );
3886 mat(0,0) = 2;
3887 mat(0,2) = 9;
3888 mat(1,1) = -2;
3889 mat(2,0) = 3;
3890 mat(2,1) = 5;
3891 mat.insert( 1UL, 2UL, 0 );
3892
3893 LT lower( 3UL );
3894 lower(0,0) = 1;
3895 lower(1,0) = -4;
3896 lower(1,1) = 2;
3897 lower(2,0) = 7;
3898 lower(2,2) = 3;
3899
3900 lower %= mat;
3901
3902 checkRows ( lower, 3UL );
3903 checkColumns ( lower, 3UL );
3904 checkCapacity( lower, 5UL );
3905 checkNonZeros( lower, 3UL );
3906 checkNonZeros( lower, 0UL, 1UL );
3907 checkNonZeros( lower, 1UL, 1UL );
3908 checkNonZeros( lower, 2UL, 1UL );
3909
3910 if( lower(0,0) != 2 || lower(0,1) != 0 || lower(0,2) != 0 ||
3911 lower(1,0) != 0 || lower(1,1) != -4 || lower(1,2) != 0 ||
3912 lower(2,0) != 21 || lower(2,1) != 0 || lower(2,2) != 0 ) {
3913 std::ostringstream oss;
3914 oss << " Test: " << test_ << "\n"
3915 << " Error: Schur product assignment failed\n"
3916 << " Details:\n"
3917 << " Result:\n" << lower << "\n"
3918 << " Expected result:\n( 2 0 0 )\n( 0 -4 0 )\n( 21 0 0 )\n";
3919 throw std::runtime_error( oss.str() );
3920 }
3921 }
3922
3923 // Row-major/row-major sparse matrix Schur product assignment (LowerMatrix)
3924 {
3925 test_ = "Row-major/row-major LowerMatrix sparse matrix Schur product assignment (LowerMatrix)";
3926
3927 LT lower1( 3UL, 4UL );
3928 lower1(0,0) = 2;
3929 lower1(1,1) = -2;
3930 lower1(2,0) = 3;
3931 lower1(2,1) = 5;
3932
3933 LT lower2( 3UL );
3934 lower2(0,0) = 1;
3935 lower2(1,0) = -4;
3936 lower2(1,1) = 2;
3937 lower2(2,0) = 7;
3938 lower2(2,2) = 3;
3939
3940 lower2 %= lower1;
3941
3942 checkRows ( lower2, 3UL );
3943 checkColumns ( lower2, 3UL );
3944 checkCapacity( lower2, 4UL );
3945 checkNonZeros( lower2, 3UL );
3946 checkNonZeros( lower2, 0UL, 1UL );
3947 checkNonZeros( lower2, 1UL, 1UL );
3948 checkNonZeros( lower2, 2UL, 1UL );
3949
3950 if( lower2(0,0) != 2 || lower2(0,1) != 0 || lower2(0,2) != 0 ||
3951 lower2(1,0) != 0 || lower2(1,1) != -4 || lower2(1,2) != 0 ||
3952 lower2(2,0) != 21 || lower2(2,1) != 0 || lower2(2,2) != 0 ) {
3953 std::ostringstream oss;
3954 oss << " Test: " << test_ << "\n"
3955 << " Error: Schur product assignment failed\n"
3956 << " Details:\n"
3957 << " Result:\n" << lower2 << "\n"
3958 << " Expected result:\n( 2 0 0 )\n( 0 -4 0 )\n( 21 0 0 )\n";
3959 throw std::runtime_error( oss.str() );
3960 }
3961 }
3962
3963 // Row-major/column-major sparse matrix Schur product assignment (LowerMatrix)
3964 {
3965 test_ = "Row-major/column-major LowerMatrix sparse matrix Schur product assignment (LowerMatrix)";
3966
3967 OLT lower1( 3UL, 4UL );
3968 lower1(0,0) = 2;
3969 lower1(1,1) = -2;
3970 lower1(2,0) = 3;
3971 lower1(2,1) = 5;
3972
3973 LT lower2( 3UL );
3974 lower2(0,0) = 1;
3975 lower2(1,0) = -4;
3976 lower2(1,1) = 2;
3977 lower2(2,0) = 7;
3978 lower2(2,2) = 3;
3979
3980 lower2 %= lower1;
3981
3982 checkRows ( lower2, 3UL );
3983 checkColumns ( lower2, 3UL );
3984 checkCapacity( lower2, 4UL );
3985 checkNonZeros( lower2, 3UL );
3986 checkNonZeros( lower2, 0UL, 1UL );
3987 checkNonZeros( lower2, 1UL, 1UL );
3988 checkNonZeros( lower2, 2UL, 1UL );
3989
3990 if( lower2(0,0) != 2 || lower2(0,1) != 0 || lower2(0,2) != 0 ||
3991 lower2(1,0) != 0 || lower2(1,1) != -4 || lower2(1,2) != 0 ||
3992 lower2(2,0) != 21 || lower2(2,1) != 0 || lower2(2,2) != 0 ) {
3993 std::ostringstream oss;
3994 oss << " Test: " << test_ << "\n"
3995 << " Error: Schur product assignment failed\n"
3996 << " Details:\n"
3997 << " Result:\n" << lower2 << "\n"
3998 << " Expected result:\n( 2 0 0 )\n( 0 -4 0 )\n( 21 0 0 )\n";
3999 throw std::runtime_error( oss.str() );
4000 }
4001 }
4002
4003
4004 //=====================================================================================
4005 // Column-major dense matrix Schur product assignment
4006 //=====================================================================================
4007
4008 // Column-major/row-major dense matrix Schur product assignment (general)
4009 {
4010 test_ = "Column-major/row-major LowerMatrix dense matrix Schur product assignment (general)";
4011
4012 blaze::DynamicMatrix<int,blaze::rowMajor> mat{ { 2, 0, 9 }, { 0, -2, 0 }, { 3, 5, 0 } };
4013
4014 OLT lower( 3UL );
4015 lower(0,0) = 1;
4016 lower(1,0) = -4;
4017 lower(1,1) = 2;
4018 lower(2,0) = 7;
4019 lower(2,2) = 3;
4020
4021 lower %= mat;
4022
4023 checkRows ( lower, 3UL );
4024 checkColumns ( lower, 3UL );
4025 checkCapacity( lower, 5UL );
4026 checkNonZeros( lower, 5UL );
4027 checkNonZeros( lower, 0UL, 3UL );
4028 checkNonZeros( lower, 1UL, 1UL );
4029 checkNonZeros( lower, 2UL, 1UL );
4030
4031 if( lower(0,0) != 2 || lower(0,1) != 0 || lower(0,2) != 0 ||
4032 lower(1,0) != 0 || lower(1,1) != -4 || lower(1,2) != 0 ||
4033 lower(2,0) != 21 || lower(2,1) != 0 || lower(2,2) != 0 ) {
4034 std::ostringstream oss;
4035 oss << " Test: " << test_ << "\n"
4036 << " Error: Schur product assignment failed\n"
4037 << " Details:\n"
4038 << " Result:\n" << lower << "\n"
4039 << " Expected result:\n( 2 0 0 )\n( 0 -4 0 )\n( 21 0 0 )\n";
4040 throw std::runtime_error( oss.str() );
4041 }
4042 }
4043
4044 // Column-major/column-major dense matrix Schur product assignment (general)
4045 {
4046 test_ = "Column-major/column-major LowerMatrix dense matrix Schur product assignment (general)";
4047
4048 blaze::DynamicMatrix<int,blaze::columnMajor> mat{ { 2, 0, 9 }, { 0, -2, 0 }, { 3, 5, 0 } };
4049
4050 OLT lower( 3UL );
4051 lower(0,0) = 1;
4052 lower(1,0) = -4;
4053 lower(1,1) = 2;
4054 lower(2,0) = 7;
4055 lower(2,2) = 3;
4056
4057 lower %= mat;
4058
4059 checkRows ( lower, 3UL );
4060 checkColumns ( lower, 3UL );
4061 checkCapacity( lower, 5UL );
4062 checkNonZeros( lower, 5UL );
4063 checkNonZeros( lower, 0UL, 3UL );
4064 checkNonZeros( lower, 1UL, 1UL );
4065 checkNonZeros( lower, 2UL, 1UL );
4066
4067 if( lower(0,0) != 2 || lower(0,1) != 0 || lower(0,2) != 0 ||
4068 lower(1,0) != 0 || lower(1,1) != -4 || lower(1,2) != 0 ||
4069 lower(2,0) != 21 || lower(2,1) != 0 || lower(2,2) != 0 ) {
4070 std::ostringstream oss;
4071 oss << " Test: " << test_ << "\n"
4072 << " Error: Schur product assignment failed\n"
4073 << " Details:\n"
4074 << " Result:\n" << lower << "\n"
4075 << " Expected result:\n( 2 0 0 )\n( 0 -4 0 )\n( 21 0 0 )\n";
4076 throw std::runtime_error( oss.str() );
4077 }
4078 }
4079
4080 // Column-major/row-major dense matrix Schur product assignment (LowerMatrix)
4081 {
4082 test_ = "Column-major/row-major LowerMatrix dense matrix Schur product assignment (LowerMatrix)";
4083
4084 blaze::LowerMatrix< blaze::StaticMatrix<int,3UL,3UL,blaze::rowMajor> > lower1;
4085 lower1(0,0) = 2;
4086 lower1(1,1) = -2;
4087 lower1(2,0) = 3;
4088 lower1(2,1) = 5;
4089
4090 OLT lower2( 3UL );
4091 lower2(0,0) = 1;
4092 lower2(1,0) = -4;
4093 lower2(1,1) = 2;
4094 lower2(2,0) = 7;
4095 lower2(2,2) = 3;
4096
4097 lower2 %= lower1;
4098
4099 checkRows ( lower2, 3UL );
4100 checkColumns ( lower2, 3UL );
4101 checkCapacity( lower2, 5UL );
4102 checkNonZeros( lower2, 5UL );
4103 checkNonZeros( lower2, 0UL, 3UL );
4104 checkNonZeros( lower2, 1UL, 1UL );
4105 checkNonZeros( lower2, 2UL, 1UL );
4106
4107 if( lower2(0,0) != 2 || lower2(0,1) != 0 || lower2(0,2) != 0 ||
4108 lower2(1,0) != 0 || lower2(1,1) != -4 || lower2(1,2) != 0 ||
4109 lower2(2,0) != 21 || lower2(2,1) != 0 || lower2(2,2) != 0 ) {
4110 std::ostringstream oss;
4111 oss << " Test: " << test_ << "\n"
4112 << " Error: Schur product assignment failed\n"
4113 << " Details:\n"
4114 << " Result:\n" << lower2 << "\n"
4115 << " Expected result:\n( 2 0 0 )\n( 0 -4 0 )\n( 21 0 0 )\n";
4116 throw std::runtime_error( oss.str() );
4117 }
4118 }
4119
4120 // Column-major/column-major dense matrix Schur product assignment (LowerMatrix)
4121 {
4122 test_ = "Column-major/column-major LowerMatrix dense matrix Schur product assignment (LowerMatrix)";
4123
4124 blaze::LowerMatrix< blaze::StaticMatrix<int,3UL,3UL,blaze::columnMajor> > lower1;
4125 lower1(0,0) = 2;
4126 lower1(1,1) = -2;
4127 lower1(2,0) = 3;
4128 lower1(2,1) = 5;
4129
4130 OLT lower2( 3UL );
4131 lower2(0,0) = 1;
4132 lower2(1,0) = -4;
4133 lower2(1,1) = 2;
4134 lower2(2,0) = 7;
4135 lower2(2,2) = 3;
4136
4137 lower2 %= lower1;
4138
4139 checkRows ( lower2, 3UL );
4140 checkColumns ( lower2, 3UL );
4141 checkCapacity( lower2, 5UL );
4142 checkNonZeros( lower2, 5UL );
4143 checkNonZeros( lower2, 0UL, 3UL );
4144 checkNonZeros( lower2, 1UL, 1UL );
4145 checkNonZeros( lower2, 2UL, 1UL );
4146
4147 if( lower2(0,0) != 2 || lower2(0,1) != 0 || lower2(0,2) != 0 ||
4148 lower2(1,0) != 0 || lower2(1,1) != -4 || lower2(1,2) != 0 ||
4149 lower2(2,0) != 21 || lower2(2,1) != 0 || lower2(2,2) != 0 ) {
4150 std::ostringstream oss;
4151 oss << " Test: " << test_ << "\n"
4152 << " Error: Schur product assignment failed\n"
4153 << " Details:\n"
4154 << " Result:\n" << lower2 << "\n"
4155 << " Expected result:\n( 2 0 0 )\n( 0 -4 0 )\n( 21 0 0 )\n";
4156 throw std::runtime_error( oss.str() );
4157 }
4158 }
4159
4160
4161 //=====================================================================================
4162 // Column-major sparse matrix Schur product assignment
4163 //=====================================================================================
4164
4165 // Column-major/row-major sparse matrix Schur product assignment (general)
4166 {
4167 test_ = "Column-major/row-major LowerMatrix sparse matrix Schur product assignment (general)";
4168
4169 blaze::CompressedMatrix<int,blaze::rowMajor> mat( 3UL, 3UL, 6UL );
4170 mat(0,0) = 2;
4171 mat(0,2) = 9;
4172 mat(1,1) = -2;
4173 mat(2,0) = 3;
4174 mat(2,1) = 5;
4175 mat.insert( 1UL, 2UL, 0 );
4176
4177 OLT lower( 3UL );
4178 lower(0,0) = 1;
4179 lower(1,0) = -4;
4180 lower(1,1) = 2;
4181 lower(2,0) = 7;
4182 lower(2,2) = 3;
4183
4184 lower %= mat;
4185
4186 checkRows ( lower, 3UL );
4187 checkColumns ( lower, 3UL );
4188 checkCapacity( lower, 5UL );
4189 checkNonZeros( lower, 3UL );
4190 checkNonZeros( lower, 0UL, 2UL );
4191 checkNonZeros( lower, 1UL, 1UL );
4192 checkNonZeros( lower, 2UL, 0UL );
4193
4194 if( lower(0,0) != 2 || lower(0,1) != 0 || lower(0,2) != 0 ||
4195 lower(1,0) != 0 || lower(1,1) != -4 || lower(1,2) != 0 ||
4196 lower(2,0) != 21 || lower(2,1) != 0 || lower(2,2) != 0 ) {
4197 std::ostringstream oss;
4198 oss << " Test: " << test_ << "\n"
4199 << " Error: Schur product assignment failed\n"
4200 << " Details:\n"
4201 << " Result:\n" << lower << "\n"
4202 << " Expected result:\n( 2 0 0 )\n( 0 -4 0 )\n( 21 0 0 )\n";
4203 throw std::runtime_error( oss.str() );
4204 }
4205 }
4206
4207 // Column-major/column-major sparse matrix Schur product assignment (general)
4208 {
4209 test_ = "Column-major/column-major LowerMatrix sparse matrix Schur product assignment (general)";
4210
4211 blaze::CompressedMatrix<int,blaze::columnMajor> mat( 3UL, 3UL, 6UL );
4212 mat(0,0) = 2;
4213 mat(0,2) = 9;
4214 mat(1,1) = -2;
4215 mat(2,0) = 3;
4216 mat(2,1) = 5;
4217 mat.insert( 1UL, 2UL, 0 );
4218
4219 OLT lower( 3UL );
4220 lower(0,0) = 1;
4221 lower(1,0) = -4;
4222 lower(1,1) = 2;
4223 lower(2,0) = 7;
4224 lower(2,2) = 3;
4225
4226 lower %= mat;
4227
4228 checkRows ( lower, 3UL );
4229 checkColumns ( lower, 3UL );
4230 checkCapacity( lower, 5UL );
4231 checkNonZeros( lower, 3UL );
4232 checkNonZeros( lower, 0UL, 2UL );
4233 checkNonZeros( lower, 1UL, 1UL );
4234 checkNonZeros( lower, 2UL, 0UL );
4235
4236 if( lower(0,0) != 2 || lower(0,1) != 0 || lower(0,2) != 0 ||
4237 lower(1,0) != 0 || lower(1,1) != -4 || lower(1,2) != 0 ||
4238 lower(2,0) != 21 || lower(2,1) != 0 || lower(2,2) != 0 ) {
4239 std::ostringstream oss;
4240 oss << " Test: " << test_ << "\n"
4241 << " Error: Schur product assignment failed\n"
4242 << " Details:\n"
4243 << " Result:\n" << lower << "\n"
4244 << " Expected result:\n( 2 0 0 )\n( 0 -4 0 )\n( 21 0 0 )\n";
4245 throw std::runtime_error( oss.str() );
4246 }
4247 }
4248
4249 // Column-major/row-major sparse matrix Schur product assignment (LowerMatrix)
4250 {
4251 test_ = "Column-major/row-major LowerMatrix sparse matrix Schur product assignment (LowerMatrix)";
4252
4253 LT lower1( 3UL, 4UL );
4254 lower1(0,0) = 2;
4255 lower1(1,1) = -2;
4256 lower1(2,0) = 3;
4257 lower1(2,1) = 5;
4258
4259 OLT lower2( 3UL );
4260 lower2(0,0) = 1;
4261 lower2(1,0) = -4;
4262 lower2(1,1) = 2;
4263 lower2(2,0) = 7;
4264 lower2(2,2) = 3;
4265
4266 lower2 %= lower1;
4267
4268 checkRows ( lower2, 3UL );
4269 checkColumns ( lower2, 3UL );
4270 checkCapacity( lower2, 4UL );
4271 checkNonZeros( lower2, 3UL );
4272 checkNonZeros( lower2, 0UL, 2UL );
4273 checkNonZeros( lower2, 1UL, 1UL );
4274 checkNonZeros( lower2, 2UL, 0UL );
4275
4276 if( lower2(0,0) != 2 || lower2(0,1) != 0 || lower2(0,2) != 0 ||
4277 lower2(1,0) != 0 || lower2(1,1) != -4 || lower2(1,2) != 0 ||
4278 lower2(2,0) != 21 || lower2(2,1) != 0 || lower2(2,2) != 0 ) {
4279 std::ostringstream oss;
4280 oss << " Test: " << test_ << "\n"
4281 << " Error: Schur product assignment failed\n"
4282 << " Details:\n"
4283 << " Result:\n" << lower2 << "\n"
4284 << " Expected result:\n( 2 0 0 )\n( 0 -4 0 )\n( 21 0 0 )\n";
4285 throw std::runtime_error( oss.str() );
4286 }
4287 }
4288
4289 // Column-major/column-major sparse matrix Schur product assignment (LowerMatrix)
4290 {
4291 test_ = "Column-major/column-major LowerMatrix sparse matrix Schur product assignment (LowerMatrix)";
4292
4293 OLT lower1( 3UL, 4UL );
4294 lower1(0,0) = 2;
4295 lower1(1,1) = -2;
4296 lower1(2,0) = 3;
4297 lower1(2,1) = 5;
4298
4299 OLT lower2( 3UL );
4300 lower2(0,0) = 1;
4301 lower2(1,0) = -4;
4302 lower2(1,1) = 2;
4303 lower2(2,0) = 7;
4304 lower2(2,2) = 3;
4305
4306 lower2 %= lower1;
4307
4308 checkRows ( lower2, 3UL );
4309 checkColumns ( lower2, 3UL );
4310 checkCapacity( lower2, 4UL );
4311 checkNonZeros( lower2, 3UL );
4312 checkNonZeros( lower2, 0UL, 2UL );
4313 checkNonZeros( lower2, 1UL, 1UL );
4314 checkNonZeros( lower2, 2UL, 0UL );
4315
4316 if( lower2(0,0) != 2 || lower2(0,1) != 0 || lower2(0,2) != 0 ||
4317 lower2(1,0) != 0 || lower2(1,1) != -4 || lower2(1,2) != 0 ||
4318 lower2(2,0) != 21 || lower2(2,1) != 0 || lower2(2,2) != 0 ) {
4319 std::ostringstream oss;
4320 oss << " Test: " << test_ << "\n"
4321 << " Error: Schur product assignment failed\n"
4322 << " Details:\n"
4323 << " Result:\n" << lower2 << "\n"
4324 << " Expected result:\n( 2 0 0 )\n( 0 -4 0 )\n( 21 0 0 )\n";
4325 throw std::runtime_error( oss.str() );
4326 }
4327 }
4328 }
4329 //*************************************************************************************************
4330
4331
4332 //*************************************************************************************************
4333 /*!\brief Test of the LowerMatrix multiplication assignment operators.
4334 //
4335 // \return void
4336 // \exception std::runtime_error Error detected.
4337 //
4338 // This function performs a test of the multiplication assignment operators of the LowerMatrix
4339 // specialization. In case an error is detected, a \a std::runtime_error exception is thrown.
4340 */
testMultAssign()4341 void SparseTest::testMultAssign()
4342 {
4343 //=====================================================================================
4344 // Row-major dense matrix multiplication assignment
4345 //=====================================================================================
4346
4347 // Row-major/row-major dense matrix multiplication assignment (lower)
4348 {
4349 test_ = "Row-major/row-major LowerMatrix dense matrix multiplication assignment (lower)";
4350
4351 blaze::DynamicMatrix<int,blaze::rowMajor> mat( 3UL, 3UL, 0 );
4352 mat(0,0) = 2;
4353 mat(1,1) = 2;
4354 mat(2,2) = 2;
4355
4356 LT lower( 3UL );
4357 lower(0,0) = 1;
4358 lower(1,0) = -4;
4359 lower(1,1) = 2;
4360 lower(2,0) = 7;
4361 lower(2,2) = 3;
4362
4363 lower *= mat;
4364
4365 checkRows ( lower, 3UL );
4366 checkColumns ( lower, 3UL );
4367 checkCapacity( lower, 5UL );
4368 checkNonZeros( lower, 5UL );
4369 checkNonZeros( lower, 0UL, 1UL );
4370 checkNonZeros( lower, 1UL, 2UL );
4371 checkNonZeros( lower, 2UL, 2UL );
4372
4373 if( lower(0,0) != 2 || lower(0,1) != 0 || lower(0,2) != 0 ||
4374 lower(1,0) != -8 || lower(1,1) != 4 || lower(1,2) != 0 ||
4375 lower(2,0) != 14 || lower(2,1) != 0 || lower(2,2) != 6 ) {
4376 std::ostringstream oss;
4377 oss << " Test: " << test_ << "\n"
4378 << " Error: Multiplication assignment failed\n"
4379 << " Details:\n"
4380 << " Result:\n" << lower << "\n"
4381 << " Expected result:\n( 2 0 0 )\n( -8 4 0 )\n( 14 0 6 )\n";
4382 throw std::runtime_error( oss.str() );
4383 }
4384 }
4385
4386 // Row-major/column-major dense matrix multiplication assignment (lower)
4387 {
4388 test_ = "Row-major/column-major LowerMatrix dense matrix multiplication assignment (lower)";
4389
4390 blaze::DynamicMatrix<int,blaze::columnMajor> mat( 3UL, 3UL, 0 );
4391 mat(0,0) = 2;
4392 mat(1,1) = 2;
4393 mat(2,2) = 2;
4394
4395 LT lower( 3UL );
4396 lower(0,0) = 1;
4397 lower(1,0) = -4;
4398 lower(1,1) = 2;
4399 lower(2,0) = 7;
4400 lower(2,2) = 3;
4401
4402 lower *= mat;
4403
4404 checkRows ( lower, 3UL );
4405 checkColumns ( lower, 3UL );
4406 checkCapacity( lower, 5UL );
4407 checkNonZeros( lower, 5UL );
4408 checkNonZeros( lower, 0UL, 1UL );
4409 checkNonZeros( lower, 1UL, 2UL );
4410 checkNonZeros( lower, 2UL, 2UL );
4411
4412 if( lower(0,0) != 2 || lower(0,1) != 0 || lower(0,2) != 0 ||
4413 lower(1,0) != -8 || lower(1,1) != 4 || lower(1,2) != 0 ||
4414 lower(2,0) != 14 || lower(2,1) != 0 || lower(2,2) != 6 ) {
4415 std::ostringstream oss;
4416 oss << " Test: " << test_ << "\n"
4417 << " Error: Multiplication assignment failed\n"
4418 << " Details:\n"
4419 << " Result:\n" << lower << "\n"
4420 << " Expected result:\n( 2 0 0 )\n( -8 4 0 )\n( 14 0 6 )\n";
4421 throw std::runtime_error( oss.str() );
4422 }
4423 }
4424
4425 // Row-major/row-major dense matrix multiplication assignment (non-lower)
4426 {
4427 test_ = "Row-major/row-major LowerMatrix dense matrix multiplication assignment (non-lower)";
4428
4429 blaze::DynamicMatrix<int,blaze::rowMajor> mat( 3UL, 3UL, 0 );
4430 mat(0,1) = -2;
4431 mat(0,2) = 6;
4432 mat(1,1) = 3;
4433 mat(2,0) = 6;
4434
4435 LT lower( 3UL );
4436 lower(0,0) = 1;
4437 lower(1,0) = -4;
4438 lower(1,1) = 2;
4439 lower(2,0) = 7;
4440 lower(2,2) = 3;
4441
4442 try {
4443 lower *= mat;
4444
4445 std::ostringstream oss;
4446 oss << " Test: " << test_ << "\n"
4447 << " Error: Multiplication assignment of non-lower row-major matrix succeeded\n"
4448 << " Details:\n"
4449 << " Result:\n" << lower << "\n";
4450 throw std::runtime_error( oss.str() );
4451 }
4452 catch( std::invalid_argument& ) {}
4453 }
4454
4455 // Row-major/column-major dense matrix multiplication assignment (non-lower)
4456 {
4457 test_ = "Row-major/column-major LowerMatrix dense matrix multiplication assignment (non-lower)";
4458
4459 blaze::DynamicMatrix<int,blaze::columnMajor> mat( 3UL, 3UL, 0 );
4460 mat(0,1) = -2;
4461 mat(0,2) = 6;
4462 mat(1,1) = 3;
4463 mat(2,0) = 6;
4464
4465 LT lower( 3UL );
4466 lower(0,0) = 1;
4467 lower(1,0) = -4;
4468 lower(1,1) = 2;
4469 lower(2,0) = 7;
4470 lower(2,2) = 3;
4471
4472 try {
4473 lower *= mat;
4474
4475 std::ostringstream oss;
4476 oss << " Test: " << test_ << "\n"
4477 << " Error: Multiplication assignment of non-lower column-major matrix succeeded\n"
4478 << " Details:\n"
4479 << " Result:\n" << lower << "\n";
4480 throw std::runtime_error( oss.str() );
4481 }
4482 catch( std::invalid_argument& ) {}
4483 }
4484
4485 // Row-major/row-major dense matrix multiplication assignment (LowerMatrix)
4486 {
4487 test_ = "Row-major/row-major LowerMatrix dense matrix multiplication assignment (LowerMatrix)";
4488
4489 blaze::LowerMatrix< blaze::StaticMatrix<int,3UL,3UL,blaze::rowMajor> > lower1;
4490 lower1(0,0) = 2;
4491 lower1(1,1) = 2;
4492 lower1(2,2) = 2;
4493
4494 LT lower2( 3UL );
4495 lower2(0,0) = 1;
4496 lower2(1,0) = -4;
4497 lower2(1,1) = 2;
4498 lower2(2,0) = 7;
4499 lower2(2,2) = 3;
4500
4501 lower2 *= lower1;
4502
4503 checkRows ( lower2, 3UL );
4504 checkColumns ( lower2, 3UL );
4505 checkCapacity( lower2, 5UL );
4506 checkNonZeros( lower2, 5UL );
4507 checkNonZeros( lower2, 0UL, 1UL );
4508 checkNonZeros( lower2, 1UL, 2UL );
4509 checkNonZeros( lower2, 2UL, 2UL );
4510
4511 if( lower2(0,0) != 2 || lower2(0,1) != 0 || lower2(0,2) != 0 ||
4512 lower2(1,0) != -8 || lower2(1,1) != 4 || lower2(1,2) != 0 ||
4513 lower2(2,0) != 14 || lower2(2,1) != 0 || lower2(2,2) != 6 ) {
4514 std::ostringstream oss;
4515 oss << " Test: " << test_ << "\n"
4516 << " Error: Multiplication assignment failed\n"
4517 << " Details:\n"
4518 << " Result:\n" << lower2 << "\n"
4519 << " Expected result:\n( 2 0 0 )\n( -8 4 0 )\n( 14 0 6 )\n";
4520 throw std::runtime_error( oss.str() );
4521 }
4522 }
4523
4524 // Row-major/column-major dense matrix multiplication assignment (LowerMatrix)
4525 {
4526 test_ = "Row-major/column-major LowerMatrix dense matrix multiplication assignment (LowerMatrix)";
4527
4528 blaze::LowerMatrix< blaze::StaticMatrix<int,3UL,3UL,blaze::columnMajor> > lower1;
4529 lower1(0,0) = 2;
4530 lower1(1,1) = 2;
4531 lower1(2,2) = 2;
4532
4533 LT lower2( 3UL );
4534 lower2(0,0) = 1;
4535 lower2(1,0) = -4;
4536 lower2(1,1) = 2;
4537 lower2(2,0) = 7;
4538 lower2(2,2) = 3;
4539
4540 lower2 *= lower1;
4541
4542 checkRows ( lower2, 3UL );
4543 checkColumns ( lower2, 3UL );
4544 checkCapacity( lower2, 5UL );
4545 checkNonZeros( lower2, 5UL );
4546 checkNonZeros( lower2, 0UL, 1UL );
4547 checkNonZeros( lower2, 1UL, 2UL );
4548 checkNonZeros( lower2, 2UL, 2UL );
4549
4550 if( lower2(0,0) != 2 || lower2(0,1) != 0 || lower2(0,2) != 0 ||
4551 lower2(1,0) != -8 || lower2(1,1) != 4 || lower2(1,2) != 0 ||
4552 lower2(2,0) != 14 || lower2(2,1) != 0 || lower2(2,2) != 6 ) {
4553 std::ostringstream oss;
4554 oss << " Test: " << test_ << "\n"
4555 << " Error: Multiplication assignment failed\n"
4556 << " Details:\n"
4557 << " Result:\n" << lower2 << "\n"
4558 << " Expected result:\n( 2 0 0 )\n( -8 4 0 )\n( 14 0 6 )\n";
4559 throw std::runtime_error( oss.str() );
4560 }
4561 }
4562
4563
4564 //=====================================================================================
4565 // Row-major sparse matrix multiplication assignment
4566 //=====================================================================================
4567
4568 // Row-major/row-major sparse matrix multiplication assignment (lower)
4569 {
4570 test_ = "Row-major/row-major LowerMatrix sparse matrix multiplication assignment (lower)";
4571
4572 blaze::CompressedMatrix<int,blaze::rowMajor> mat( 3UL, 3UL, 4UL );
4573 mat(0,0) = 2;
4574 mat(1,1) = 2;
4575 mat(2,2) = 2;
4576 mat.insert( 1UL, 2UL, 0 );
4577
4578 LT lower( 3UL );
4579 lower(0,0) = 1;
4580 lower(1,0) = -4;
4581 lower(1,1) = 2;
4582 lower(2,0) = 7;
4583 lower(2,2) = 3;
4584
4585 lower *= mat;
4586
4587 checkRows ( lower, 3UL );
4588 checkColumns ( lower, 3UL );
4589 checkCapacity( lower, 5UL );
4590 checkNonZeros( lower, 5UL );
4591 checkNonZeros( lower, 0UL, 1UL );
4592 checkNonZeros( lower, 1UL, 2UL );
4593 checkNonZeros( lower, 2UL, 2UL );
4594
4595 if( lower(0,0) != 2 || lower(0,1) != 0 || lower(0,2) != 0 ||
4596 lower(1,0) != -8 || lower(1,1) != 4 || lower(1,2) != 0 ||
4597 lower(2,0) != 14 || lower(2,1) != 0 || lower(2,2) != 6 ) {
4598 std::ostringstream oss;
4599 oss << " Test: " << test_ << "\n"
4600 << " Error: Multiplication assignment failed\n"
4601 << " Details:\n"
4602 << " Result:\n" << lower << "\n"
4603 << " Expected result:\n( 2 0 0 )\n( -8 4 0 )\n( 14 0 6 )\n";
4604 throw std::runtime_error( oss.str() );
4605 }
4606 }
4607
4608 // Row-major/column-major sparse matrix multiplication assignment (lower)
4609 {
4610 test_ = "Row-major/column-major LowerMatrix sparse matrix multiplication assignment (lower)";
4611
4612 blaze::CompressedMatrix<int,blaze::columnMajor> mat( 3UL, 3UL, 4UL );
4613 mat(0,0) = 2;
4614 mat(1,1) = 2;
4615 mat(2,2) = 2;
4616 mat.insert( 1UL, 2UL, 0 );
4617
4618 LT lower( 3UL );
4619 lower(0,0) = 1;
4620 lower(1,0) = -4;
4621 lower(1,1) = 2;
4622 lower(2,0) = 7;
4623 lower(2,2) = 3;
4624
4625 lower *= mat;
4626
4627 checkRows ( lower, 3UL );
4628 checkColumns ( lower, 3UL );
4629 checkCapacity( lower, 5UL );
4630 checkNonZeros( lower, 5UL );
4631 checkNonZeros( lower, 0UL, 1UL );
4632 checkNonZeros( lower, 1UL, 2UL );
4633 checkNonZeros( lower, 2UL, 2UL );
4634
4635 if( lower(0,0) != 2 || lower(0,1) != 0 || lower(0,2) != 0 ||
4636 lower(1,0) != -8 || lower(1,1) != 4 || lower(1,2) != 0 ||
4637 lower(2,0) != 14 || lower(2,1) != 0 || lower(2,2) != 6 ) {
4638 std::ostringstream oss;
4639 oss << " Test: " << test_ << "\n"
4640 << " Error: Multiplication assignment failed\n"
4641 << " Details:\n"
4642 << " Result:\n" << lower << "\n"
4643 << " Expected result:\n( 2 0 0 )\n( -8 4 0 )\n( 14 0 6 )\n";
4644 throw std::runtime_error( oss.str() );
4645 }
4646 }
4647
4648 // Row-major/row-major sparse matrix multiplication assignment (non-lower)
4649 {
4650 test_ = "Row-major/row-major LowerMatrix sparse matrix multiplication assignment (non-lower)";
4651
4652 blaze::CompressedMatrix<int,blaze::rowMajor> mat( 3UL, 3UL, 4UL );
4653 mat(0,1) = -2;
4654 mat(0,2) = 6;
4655 mat(1,1) = 3;
4656 mat(2,0) = 6;
4657
4658 LT lower( 3UL );
4659 lower(0,0) = 1;
4660 lower(1,0) = -4;
4661 lower(1,1) = 2;
4662 lower(2,0) = 7;
4663 lower(2,2) = 3;
4664
4665 try {
4666 lower *= mat;
4667
4668 std::ostringstream oss;
4669 oss << " Test: " << test_ << "\n"
4670 << " Error: Multiplication assignment of non-lower row-major matrix succeeded\n"
4671 << " Details:\n"
4672 << " Result:\n" << lower << "\n";
4673 throw std::runtime_error( oss.str() );
4674 }
4675 catch( std::invalid_argument& ) {}
4676 }
4677
4678 // Row-major/column-major sparse matrix multiplication assignment (non-lower)
4679 {
4680 test_ = "Row-major/column-major LowerMatrix sparse matrix multiplication assignment (non-lower)";
4681
4682 blaze::CompressedMatrix<int,blaze::columnMajor> mat( 3UL, 3UL, 4UL );
4683 mat(0,1) = -2;
4684 mat(0,2) = 6;
4685 mat(1,1) = 3;
4686 mat(2,0) = 6;
4687
4688 LT lower( 3UL );
4689 lower(0,0) = 1;
4690 lower(1,0) = -4;
4691 lower(1,1) = 2;
4692 lower(2,0) = 7;
4693 lower(2,2) = 3;
4694
4695 try {
4696 lower *= mat;
4697
4698 std::ostringstream oss;
4699 oss << " Test: " << test_ << "\n"
4700 << " Error: Multiplication assignment of non-lower column-major matrix succeeded\n"
4701 << " Details:\n"
4702 << " Result:\n" << lower << "\n";
4703 throw std::runtime_error( oss.str() );
4704 }
4705 catch( std::invalid_argument& ) {}
4706 }
4707
4708 // Row-major/row-major sparse matrix multiplication assignment (LowerMatrix)
4709 {
4710 test_ = "Row-major/row-major LowerMatrix sparse matrix multiplication assignment (LowerMatrix)";
4711
4712 LT lower1( 3UL, 3UL );
4713 lower1(0,0) = 2;
4714 lower1(1,1) = 2;
4715 lower1(2,2) = 2;
4716
4717 LT lower2( 3UL );
4718 lower2(0,0) = 1;
4719 lower2(1,0) = -4;
4720 lower2(1,1) = 2;
4721 lower2(2,0) = 7;
4722 lower2(2,2) = 3;
4723
4724 lower2 *= lower1;
4725
4726 checkRows ( lower2, 3UL );
4727 checkColumns ( lower2, 3UL );
4728 checkCapacity( lower2, 5UL );
4729 checkNonZeros( lower2, 5UL );
4730 checkNonZeros( lower2, 0UL, 1UL );
4731 checkNonZeros( lower2, 1UL, 2UL );
4732 checkNonZeros( lower2, 2UL, 2UL );
4733
4734 if( lower2(0,0) != 2 || lower2(0,1) != 0 || lower2(0,2) != 0 ||
4735 lower2(1,0) != -8 || lower2(1,1) != 4 || lower2(1,2) != 0 ||
4736 lower2(2,0) != 14 || lower2(2,1) != 0 || lower2(2,2) != 6 ) {
4737 std::ostringstream oss;
4738 oss << " Test: " << test_ << "\n"
4739 << " Error: Multiplication assignment failed\n"
4740 << " Details:\n"
4741 << " Result:\n" << lower2 << "\n"
4742 << " Expected result:\n( 2 0 0 )\n( -8 4 0 )\n( 14 0 6 )\n";
4743 throw std::runtime_error( oss.str() );
4744 }
4745 }
4746
4747 // Row-major/column-major sparse matrix multiplication assignment (LowerMatrix)
4748 {
4749 test_ = "Row-major/column-major LowerMatrix sparse matrix multiplication assignment (LowerMatrix)";
4750
4751 OLT lower1( 3UL, 3UL );
4752 lower1(0,0) = 2;
4753 lower1(1,1) = 2;
4754 lower1(2,2) = 2;
4755
4756 LT lower2( 3UL );
4757 lower2(0,0) = 1;
4758 lower2(1,0) = -4;
4759 lower2(1,1) = 2;
4760 lower2(2,0) = 7;
4761 lower2(2,2) = 3;
4762
4763 lower2 *= lower1;
4764
4765 checkRows ( lower2, 3UL );
4766 checkColumns ( lower2, 3UL );
4767 checkCapacity( lower2, 5UL );
4768 checkNonZeros( lower2, 5UL );
4769 checkNonZeros( lower2, 0UL, 1UL );
4770 checkNonZeros( lower2, 1UL, 2UL );
4771 checkNonZeros( lower2, 2UL, 2UL );
4772
4773 if( lower2(0,0) != 2 || lower2(0,1) != 0 || lower2(0,2) != 0 ||
4774 lower2(1,0) != -8 || lower2(1,1) != 4 || lower2(1,2) != 0 ||
4775 lower2(2,0) != 14 || lower2(2,1) != 0 || lower2(2,2) != 6 ) {
4776 std::ostringstream oss;
4777 oss << " Test: " << test_ << "\n"
4778 << " Error: Multiplication assignment failed\n"
4779 << " Details:\n"
4780 << " Result:\n" << lower2 << "\n"
4781 << " Expected result:\n( 2 0 0 )\n( -8 4 0 )\n( 14 0 6 )\n";
4782 throw std::runtime_error( oss.str() );
4783 }
4784 }
4785
4786
4787 //=====================================================================================
4788 // Column-major dense matrix multiplication assignment
4789 //=====================================================================================
4790
4791 // Column-major/row-major dense matrix multiplication assignment (lower)
4792 {
4793 test_ = "Column-major/row-major LowerMatrix dense matrix multiplication assignment (lower)";
4794
4795 blaze::DynamicMatrix<int,blaze::rowMajor> mat( 3UL, 3UL, 0 );
4796 mat(0,0) = 2;
4797 mat(1,1) = 2;
4798 mat(2,2) = 2;
4799
4800 OLT lower( 3UL );
4801 lower(0,0) = 1;
4802 lower(1,0) = -4;
4803 lower(1,1) = 2;
4804 lower(2,0) = 7;
4805 lower(2,2) = 3;
4806
4807 lower *= mat;
4808
4809 checkRows ( lower, 3UL );
4810 checkColumns ( lower, 3UL );
4811 checkCapacity( lower, 5UL );
4812 checkNonZeros( lower, 5UL );
4813 checkNonZeros( lower, 0UL, 3UL );
4814 checkNonZeros( lower, 1UL, 1UL );
4815 checkNonZeros( lower, 2UL, 1UL );
4816
4817 if( lower(0,0) != 2 || lower(0,1) != 0 || lower(0,2) != 0 ||
4818 lower(1,0) != -8 || lower(1,1) != 4 || lower(1,2) != 0 ||
4819 lower(2,0) != 14 || lower(2,1) != 0 || lower(2,2) != 6 ) {
4820 std::ostringstream oss;
4821 oss << " Test: " << test_ << "\n"
4822 << " Error: Multiplication assignment failed\n"
4823 << " Details:\n"
4824 << " Result:\n" << lower << "\n"
4825 << " Expected result:\n( 2 0 0 )\n( -8 4 0 )\n( 14 0 6 )\n";
4826 throw std::runtime_error( oss.str() );
4827 }
4828 }
4829
4830 // Column-major/column-major dense matrix multiplication assignment (lower)
4831 {
4832 test_ = "Column-major/column-major LowerMatrix dense matrix multiplication assignment (lower)";
4833
4834 blaze::DynamicMatrix<int,blaze::columnMajor> mat( 3UL, 3UL, 0 );
4835 mat(0,0) = 2;
4836 mat(1,1) = 2;
4837 mat(2,2) = 2;
4838
4839 OLT lower( 3UL );
4840 lower(0,0) = 1;
4841 lower(1,0) = -4;
4842 lower(1,1) = 2;
4843 lower(2,0) = 7;
4844 lower(2,2) = 3;
4845
4846 lower *= mat;
4847
4848 checkRows ( lower, 3UL );
4849 checkColumns ( lower, 3UL );
4850 checkCapacity( lower, 5UL );
4851 checkNonZeros( lower, 5UL );
4852 checkNonZeros( lower, 0UL, 3UL );
4853 checkNonZeros( lower, 1UL, 1UL );
4854 checkNonZeros( lower, 2UL, 1UL );
4855
4856 if( lower(0,0) != 2 || lower(0,1) != 0 || lower(0,2) != 0 ||
4857 lower(1,0) != -8 || lower(1,1) != 4 || lower(1,2) != 0 ||
4858 lower(2,0) != 14 || lower(2,1) != 0 || lower(2,2) != 6 ) {
4859 std::ostringstream oss;
4860 oss << " Test: " << test_ << "\n"
4861 << " Error: Multiplication assignment failed\n"
4862 << " Details:\n"
4863 << " Result:\n" << lower << "\n"
4864 << " Expected result:\n( 2 0 0 )\n( -8 4 0 )\n( 14 0 6 )\n";
4865 throw std::runtime_error( oss.str() );
4866 }
4867 }
4868
4869 // Column-major/row-major dense matrix multiplication assignment (non-lower)
4870 {
4871 test_ = "Column-major/row-major LowerMatrix dense matrix multiplication assignment (non-lower)";
4872
4873 blaze::DynamicMatrix<int,blaze::rowMajor> mat( 3UL, 3UL, 0 );
4874 mat(0,1) = -2;
4875 mat(0,2) = 6;
4876 mat(1,1) = 3;
4877 mat(2,0) = 6;
4878
4879 OLT lower( 3UL );
4880 lower(0,0) = 1;
4881 lower(1,0) = -4;
4882 lower(1,1) = 2;
4883 lower(2,0) = 7;
4884 lower(2,2) = 3;
4885
4886 try {
4887 lower *= mat;
4888
4889 std::ostringstream oss;
4890 oss << " Test: " << test_ << "\n"
4891 << " Error: Multiplication assignment of non-lower row-major matrix succeeded\n"
4892 << " Details:\n"
4893 << " Result:\n" << lower << "\n";
4894 throw std::runtime_error( oss.str() );
4895 }
4896 catch( std::invalid_argument& ) {}
4897 }
4898
4899 // Column-major/column-major dense matrix multiplication assignment (non-lower)
4900 {
4901 test_ = "Column-major/column-major LowerMatrix dense matrix multiplication assignment (non-lower)";
4902
4903 blaze::DynamicMatrix<int,blaze::columnMajor> mat( 3UL, 3UL, 0 );
4904 mat(0,1) = -2;
4905 mat(0,2) = 6;
4906 mat(1,1) = 3;
4907 mat(2,0) = 6;
4908
4909 OLT lower( 3UL );
4910 lower(0,0) = 1;
4911 lower(1,0) = -4;
4912 lower(1,1) = 2;
4913 lower(2,0) = 7;
4914 lower(2,2) = 3;
4915
4916 try {
4917 lower *= mat;
4918
4919 std::ostringstream oss;
4920 oss << " Test: " << test_ << "\n"
4921 << " Error: Multiplication assignment of non-lower column-major matrix succeeded\n"
4922 << " Details:\n"
4923 << " Result:\n" << lower << "\n";
4924 throw std::runtime_error( oss.str() );
4925 }
4926 catch( std::invalid_argument& ) {}
4927 }
4928
4929 // Column-major/row-major dense matrix multiplication assignment (LowerMatrix)
4930 {
4931 test_ = "Column-major/row-major LowerMatrix dense matrix multiplication assignment (LowerMatrix)";
4932
4933 blaze::LowerMatrix< blaze::StaticMatrix<int,3UL,3UL,blaze::rowMajor> > lower1;
4934 lower1(0,0) = 2;
4935 lower1(1,1) = 2;
4936 lower1(2,2) = 2;
4937
4938 OLT lower2( 3UL );
4939 lower2(0,0) = 1;
4940 lower2(1,0) = -4;
4941 lower2(1,1) = 2;
4942 lower2(2,0) = 7;
4943 lower2(2,2) = 3;
4944
4945 lower2 *= lower1;
4946
4947 checkRows ( lower2, 3UL );
4948 checkColumns ( lower2, 3UL );
4949 checkCapacity( lower2, 5UL );
4950 checkNonZeros( lower2, 5UL );
4951 checkNonZeros( lower2, 0UL, 3UL );
4952 checkNonZeros( lower2, 1UL, 1UL );
4953 checkNonZeros( lower2, 2UL, 1UL );
4954
4955 if( lower2(0,0) != 2 || lower2(0,1) != 0 || lower2(0,2) != 0 ||
4956 lower2(1,0) != -8 || lower2(1,1) != 4 || lower2(1,2) != 0 ||
4957 lower2(2,0) != 14 || lower2(2,1) != 0 || lower2(2,2) != 6 ) {
4958 std::ostringstream oss;
4959 oss << " Test: " << test_ << "\n"
4960 << " Error: Multiplication assignment failed\n"
4961 << " Details:\n"
4962 << " Result:\n" << lower2 << "\n"
4963 << " Expected result:\n( 2 0 0 )\n( -8 4 0 )\n( 14 0 6 )\n";
4964 throw std::runtime_error( oss.str() );
4965 }
4966 }
4967
4968 // Column-major/column-major dense matrix multiplication assignment (LowerMatrix)
4969 {
4970 test_ = "Column-major/column-major LowerMatrix dense matrix multiplication assignment (LowerMatrix)";
4971
4972 blaze::LowerMatrix< blaze::StaticMatrix<int,3UL,3UL,blaze::columnMajor> > lower1;
4973 lower1(0,0) = 2;
4974 lower1(1,1) = 2;
4975 lower1(2,2) = 2;
4976
4977 OLT lower2( 3UL );
4978 lower2(0,0) = 1;
4979 lower2(1,0) = -4;
4980 lower2(1,1) = 2;
4981 lower2(2,0) = 7;
4982 lower2(2,2) = 3;
4983
4984 lower2 *= lower1;
4985
4986 checkRows ( lower2, 3UL );
4987 checkColumns ( lower2, 3UL );
4988 checkCapacity( lower2, 5UL );
4989 checkNonZeros( lower2, 5UL );
4990 checkNonZeros( lower2, 0UL, 3UL );
4991 checkNonZeros( lower2, 1UL, 1UL );
4992 checkNonZeros( lower2, 2UL, 1UL );
4993
4994 if( lower2(0,0) != 2 || lower2(0,1) != 0 || lower2(0,2) != 0 ||
4995 lower2(1,0) != -8 || lower2(1,1) != 4 || lower2(1,2) != 0 ||
4996 lower2(2,0) != 14 || lower2(2,1) != 0 || lower2(2,2) != 6 ) {
4997 std::ostringstream oss;
4998 oss << " Test: " << test_ << "\n"
4999 << " Error: Multiplication assignment failed\n"
5000 << " Details:\n"
5001 << " Result:\n" << lower2 << "\n"
5002 << " Expected result:\n( 2 0 0 )\n( -8 4 0 )\n( 14 0 6 )\n";
5003 throw std::runtime_error( oss.str() );
5004 }
5005 }
5006
5007
5008 //=====================================================================================
5009 // Column-major sparse matrix multiplication assignment
5010 //=====================================================================================
5011
5012 // Column-major/row-major sparse matrix multiplication assignment (lower)
5013 {
5014 test_ = "Column-major/row-major LowerMatrix sparse matrix multiplication assignment (lower)";
5015
5016 blaze::CompressedMatrix<int,blaze::rowMajor> mat( 3UL, 3UL, 4UL );
5017 mat(0,0) = 2;
5018 mat(1,1) = 2;
5019 mat(2,2) = 2;
5020 mat.insert( 1UL, 2UL, 0 );
5021
5022 OLT lower( 3UL );
5023 lower(0,0) = 1;
5024 lower(1,0) = -4;
5025 lower(1,1) = 2;
5026 lower(2,0) = 7;
5027 lower(2,2) = 3;
5028
5029 lower *= mat;
5030
5031 checkRows ( lower, 3UL );
5032 checkColumns ( lower, 3UL );
5033 checkCapacity( lower, 5UL );
5034 checkNonZeros( lower, 5UL );
5035 checkNonZeros( lower, 0UL, 3UL );
5036 checkNonZeros( lower, 1UL, 1UL );
5037 checkNonZeros( lower, 2UL, 1UL );
5038
5039 if( lower(0,0) != 2 || lower(0,1) != 0 || lower(0,2) != 0 ||
5040 lower(1,0) != -8 || lower(1,1) != 4 || lower(1,2) != 0 ||
5041 lower(2,0) != 14 || lower(2,1) != 0 || lower(2,2) != 6 ) {
5042 std::ostringstream oss;
5043 oss << " Test: " << test_ << "\n"
5044 << " Error: Multiplication assignment failed\n"
5045 << " Details:\n"
5046 << " Result:\n" << lower << "\n"
5047 << " Expected result:\n( 2 0 0 )\n( -8 4 0 )\n( 14 0 6 )\n";
5048 throw std::runtime_error( oss.str() );
5049 }
5050 }
5051
5052 // Column-major/column-major sparse matrix multiplication assignment (lower)
5053 {
5054 test_ = "Column-major/column-major LowerMatrix sparse matrix multiplication assignment (lower)";
5055
5056 blaze::CompressedMatrix<int,blaze::columnMajor> mat( 3UL, 3UL, 4UL );
5057 mat(0,0) = 2;
5058 mat(1,1) = 2;
5059 mat(2,2) = 2;
5060 mat.insert( 1UL, 2UL, 0 );
5061
5062 OLT lower( 3UL );
5063 lower(0,0) = 1;
5064 lower(1,0) = -4;
5065 lower(1,1) = 2;
5066 lower(2,0) = 7;
5067 lower(2,2) = 3;
5068
5069 lower *= mat;
5070
5071 checkRows ( lower, 3UL );
5072 checkColumns ( lower, 3UL );
5073 checkCapacity( lower, 5UL );
5074 checkNonZeros( lower, 5UL );
5075 checkNonZeros( lower, 0UL, 3UL );
5076 checkNonZeros( lower, 1UL, 1UL );
5077 checkNonZeros( lower, 2UL, 1UL );
5078
5079 if( lower(0,0) != 2 || lower(0,1) != 0 || lower(0,2) != 0 ||
5080 lower(1,0) != -8 || lower(1,1) != 4 || lower(1,2) != 0 ||
5081 lower(2,0) != 14 || lower(2,1) != 0 || lower(2,2) != 6 ) {
5082 std::ostringstream oss;
5083 oss << " Test: " << test_ << "\n"
5084 << " Error: Multiplication assignment failed\n"
5085 << " Details:\n"
5086 << " Result:\n" << lower << "\n"
5087 << " Expected result:\n( 2 0 0 )\n( -8 4 0 )\n( 14 0 6 )\n";
5088 throw std::runtime_error( oss.str() );
5089 }
5090 }
5091
5092 // Column-major/row-major sparse matrix multiplication assignment (non-lower)
5093 {
5094 test_ = "Column-major/row-major LowerMatrix sparse matrix multiplication assignment (non-lower)";
5095
5096 blaze::CompressedMatrix<int,blaze::rowMajor> mat( 3UL, 3UL, 4UL );
5097 mat(0,1) = -2;
5098 mat(0,2) = 6;
5099 mat(1,1) = 3;
5100 mat(2,0) = 6;
5101
5102 OLT lower( 3UL );
5103 lower(0,0) = 1;
5104 lower(1,0) = -4;
5105 lower(1,1) = 2;
5106 lower(2,0) = 7;
5107 lower(2,2) = 3;
5108
5109 try {
5110 lower *= mat;
5111
5112 std::ostringstream oss;
5113 oss << " Test: " << test_ << "\n"
5114 << " Error: Multiplication assignment of non-lower row-major matrix succeeded\n"
5115 << " Details:\n"
5116 << " Result:\n" << lower << "\n";
5117 throw std::runtime_error( oss.str() );
5118 }
5119 catch( std::invalid_argument& ) {}
5120 }
5121
5122 // Column-major/column-major sparse matrix multiplication assignment (non-lower)
5123 {
5124 test_ = "Column-major/column-major LowerMatrix sparse matrix multiplication assignment (non-lower)";
5125
5126 blaze::CompressedMatrix<int,blaze::columnMajor> mat( 3UL, 3UL, 4UL );
5127 mat(0,1) = -2;
5128 mat(0,2) = 6;
5129 mat(1,1) = 3;
5130 mat(2,0) = 6;
5131
5132 OLT lower( 3UL );
5133 lower(0,0) = 1;
5134 lower(1,0) = -4;
5135 lower(1,1) = 2;
5136 lower(2,0) = 7;
5137 lower(2,2) = 3;
5138
5139 try {
5140 lower *= mat;
5141
5142 std::ostringstream oss;
5143 oss << " Test: " << test_ << "\n"
5144 << " Error: Multiplication assignment of non-lower column-major matrix succeeded\n"
5145 << " Details:\n"
5146 << " Result:\n" << lower << "\n";
5147 throw std::runtime_error( oss.str() );
5148 }
5149 catch( std::invalid_argument& ) {}
5150 }
5151
5152 // Column-major/row-major sparse matrix multiplication assignment (LowerMatrix)
5153 {
5154 test_ = "Column-major/row-major LowerMatrix sparse matrix multiplication assignment (LowerMatrix)";
5155
5156 LT lower1( 3UL, 3UL );
5157 lower1(0,0) = 2;
5158 lower1(1,1) = 2;
5159 lower1(2,2) = 2;
5160
5161 OLT lower2( 3UL );
5162 lower2(0,0) = 1;
5163 lower2(1,0) = -4;
5164 lower2(1,1) = 2;
5165 lower2(2,0) = 7;
5166 lower2(2,2) = 3;
5167
5168 lower2 *= lower1;
5169
5170 checkRows ( lower2, 3UL );
5171 checkColumns ( lower2, 3UL );
5172 checkCapacity( lower2, 5UL );
5173 checkNonZeros( lower2, 5UL );
5174 checkNonZeros( lower2, 0UL, 3UL );
5175 checkNonZeros( lower2, 1UL, 1UL );
5176 checkNonZeros( lower2, 2UL, 1UL );
5177
5178 if( lower2(0,0) != 2 || lower2(0,1) != 0 || lower2(0,2) != 0 ||
5179 lower2(1,0) != -8 || lower2(1,1) != 4 || lower2(1,2) != 0 ||
5180 lower2(2,0) != 14 || lower2(2,1) != 0 || lower2(2,2) != 6 ) {
5181 std::ostringstream oss;
5182 oss << " Test: " << test_ << "\n"
5183 << " Error: Multiplication assignment failed\n"
5184 << " Details:\n"
5185 << " Result:\n" << lower2 << "\n"
5186 << " Expected result:\n( 2 0 0 )\n( -8 4 0 )\n( 14 0 6 )\n";
5187 throw std::runtime_error( oss.str() );
5188 }
5189 }
5190
5191 // Column-major/column-major sparse matrix multiplication assignment (LowerMatrix)
5192 {
5193 test_ = "Column-major/column-major LowerMatrix sparse matrix multiplication assignment (LowerMatrix)";
5194
5195 OLT lower1( 3UL, 3UL );
5196 lower1(0,0) = 2;
5197 lower1(1,1) = 2;
5198 lower1(2,2) = 2;
5199
5200 OLT lower2( 3UL );
5201 lower2(0,0) = 1;
5202 lower2(1,0) = -4;
5203 lower2(1,1) = 2;
5204 lower2(2,0) = 7;
5205 lower2(2,2) = 3;
5206
5207 lower2 *= lower1;
5208
5209 checkRows ( lower2, 3UL );
5210 checkColumns ( lower2, 3UL );
5211 checkCapacity( lower2, 5UL );
5212 checkNonZeros( lower2, 5UL );
5213 checkNonZeros( lower2, 0UL, 3UL );
5214 checkNonZeros( lower2, 1UL, 1UL );
5215 checkNonZeros( lower2, 2UL, 1UL );
5216
5217 if( lower2(0,0) != 2 || lower2(0,1) != 0 || lower2(0,2) != 0 ||
5218 lower2(1,0) != -8 || lower2(1,1) != 4 || lower2(1,2) != 0 ||
5219 lower2(2,0) != 14 || lower2(2,1) != 0 || lower2(2,2) != 6 ) {
5220 std::ostringstream oss;
5221 oss << " Test: " << test_ << "\n"
5222 << " Error: Multiplication assignment failed\n"
5223 << " Details:\n"
5224 << " Result:\n" << lower2 << "\n"
5225 << " Expected result:\n( 2 0 0 )\n( -8 4 0 )\n( 14 0 6 )\n";
5226 throw std::runtime_error( oss.str() );
5227 }
5228 }
5229 }
5230 //*************************************************************************************************
5231
5232 } // namespace lowermatrix
5233
5234 } // namespace adaptors
5235
5236 } // namespace mathtest
5237
5238 } // namespace blazetest
5239
5240
5241
5242
5243 //=================================================================================================
5244 //
5245 // MAIN FUNCTION
5246 //
5247 //=================================================================================================
5248
5249 //*************************************************************************************************
main()5250 int main()
5251 {
5252 std::cout << " Running LowerMatrix sparse test (part 1)..." << std::endl;
5253
5254 try
5255 {
5256 RUN_LOWERMATRIX_SPARSE_TEST;
5257 }
5258 catch( std::exception& ex ) {
5259 std::cerr << "\n\n ERROR DETECTED during LowerMatrix sparse test (part 1):\n"
5260 << ex.what() << "\n";
5261 return EXIT_FAILURE;
5262 }
5263
5264 return EXIT_SUCCESS;
5265 }
5266 //*************************************************************************************************
5267