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