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