1 //=================================================================================================
2 /*!
3 //  \file blazetest/mathtest/adaptors/symmetricmatrix/SubmatrixNonScalarTest.h
4 //  \brief Header file for the SymmetricMatrix submatrix non-scalar test
5 //
6 //  Copyright (C) 2012-2020 Klaus Iglberger - All Rights Reserved
7 //
8 //  This file is part of the Blaze library. You can redistribute it and/or modify it under
9 //  the terms of the New (Revised) BSD License. Redistribution and use in source and binary
10 //  forms, with or without modification, are permitted provided that the following conditions
11 //  are met:
12 //
13 //  1. Redistributions of source code must retain the above copyright notice, this list of
14 //     conditions and the following disclaimer.
15 //  2. Redistributions in binary form must reproduce the above copyright notice, this list
16 //     of conditions and the following disclaimer in the documentation and/or other materials
17 //     provided with the distribution.
18 //  3. Neither the names of the Blaze development group nor the names of its contributors
19 //     may be used to endorse or promote products derived from this software without specific
20 //     prior written permission.
21 //
22 //  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
23 //  EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
24 //  OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
25 //  SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
26 //  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
27 //  TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
28 //  BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
29 //  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
30 //  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
31 //  DAMAGE.
32 */
33 //=================================================================================================
34 
35 #ifndef _BLAZETEST_MATHTEST_ADAPTORS_SYMMETRICMATRIX_SUBMATRIXNONSCALARTEST_H_
36 #define _BLAZETEST_MATHTEST_ADAPTORS_SYMMETRICMATRIX_SUBMATRIXNONSCALARTEST_H_
37 
38 
39 //*************************************************************************************************
40 // Includes
41 //*************************************************************************************************
42 
43 #include <sstream>
44 #include <stdexcept>
45 #include <string>
46 #include <blaze/math/CompressedMatrix.h>
47 #include <blaze/math/DynamicMatrix.h>
48 #include <blaze/math/Submatrix.h>
49 #include <blaze/math/SymmetricMatrix.h>
50 #include <blaze/math/typetraits/IsRowMajorMatrix.h>
51 #include <blazetest/system/Types.h>
52 
53 
54 namespace blazetest {
55 
56 namespace mathtest {
57 
58 namespace adaptors {
59 
60 namespace symmetricmatrix {
61 
62 //=================================================================================================
63 //
64 //  CLASS DEFINITION
65 //
66 //=================================================================================================
67 
68 //*************************************************************************************************
69 /*!\brief Auxiliary class for assignment tests to a submatrix of a non-scalar SymmetricMatrix.
70 //
71 // This class performs assignment tests to a submatrix of a SymmetricMatrix with non-scalar
72 // element type. It performs a series of both compile time as well as runtime tests.
73 */
74 class SubmatrixNonScalarTest
75 {
76  private:
77    //**Type definitions****************************************************************************
78    //! Type of a resizable, non-scalar element.
79    using VT = blaze::DynamicVector<int,blaze::rowVector>;
80 
81    //! Type of the dense non-scalar symmetric matrix.
82    using DST = blaze::SymmetricMatrix< blaze::DynamicMatrix<VT,blaze::rowMajor> >;
83 
84    //! Opposite dense non-scalar symmetric matrix type.
85    using DOST = DST::OppositeType;
86 
87    //! Type of the sparse non-scalar symmetric matrix.
88    using SST = blaze::SymmetricMatrix< blaze::CompressedMatrix<VT,blaze::rowMajor> >;
89 
90    //! Opposite sparse non-scalar symmetric matrix type.
91    using SOST = SST::OppositeType;
92    //**********************************************************************************************
93 
94  public:
95    //**Constructors********************************************************************************
96    /*!\name Constructors */
97    //@{
98    explicit SubmatrixNonScalarTest();
99    // No explicitly declared copy constructor.
100    //@}
101    //**********************************************************************************************
102 
103    //**Destructor**********************************************************************************
104    // No explicitly declared destructor.
105    //**********************************************************************************************
106 
107  private:
108    //**Test functions******************************************************************************
109    /*!\name Test functions */
110    //@{
111    template< typename ST > void testAssignment();
112 
113    template< typename Type >
114    void checkRows( const Type& matrix, size_t expectedRows ) const;
115 
116    template< typename Type >
117    void checkColumns( const Type& matrix, size_t expectedColumns ) const;
118 
119    template< typename Type >
120    void checkNonZeros( const Type& matrix, size_t expectedNonZeros ) const;
121    //@}
122    //**********************************************************************************************
123 
124    //**Utility functions***************************************************************************
125    /*!\name Utility functions */
126    //@{
127    template< typename ST > void init( ST& sym );
128    inline VT vec( int value );
129    //@}
130    //**********************************************************************************************
131 
132    //**Member variables****************************************************************************
133    /*!\name Member variables */
134    //@{
135    std::string test_;  //!< Label of the currently performed test.
136    //@}
137    //**********************************************************************************************
138 };
139 //*************************************************************************************************
140 
141 
142 
143 
144 //=================================================================================================
145 //
146 //  TEST FUNCTIONS
147 //
148 //=================================================================================================
149 
150 //*************************************************************************************************
151 /*!\brief Test of the assignment to a submatrix of a SymmetricMatrix.
152 //
153 // \return void
154 // \exception std::runtime_error Error detected.
155 //
156 // This function performs a test of the assignment to a submatrix of a SymmetricMatrix. In case an
157 // error is detected, a \a std::runtime_error exception is thrown.
158 */
159 template< typename ST >  // Type of the symmetric matrix
testAssignment()160 void SubmatrixNonScalarTest::testAssignment()
161 {
162    //=====================================================================================
163    // Dense matrix assignment
164    //=====================================================================================
165 
166    // ( (  1 ) ( -4 ) (  7 ) ( -2 ) (  5 ) (    ) )      ( ( 12 ) ( 18 ) ( 14 ) ( 15 ) (  5 ) (    ) )
167    // ( ( -4 ) (  2 ) (    ) (    ) ( -1 ) (  8 ) )      ( ( 18 ) ( 17 ) ( 11 ) ( 19 ) ( -1 ) (  8 ) )
168    // ( (  7 ) (    ) (  3 ) (  1 ) (    ) ( -2 ) )  =>  ( ( 14 ) ( 11 ) (  3 ) (  1 ) (    ) ( -2 ) )
169    // ( ( -2 ) (    ) (  1 ) (  5 ) (  7 ) (    ) )      ( ( 15 ) ( 19 ) (  1 ) (  5 ) (  7 ) (    ) )
170    // ( (  5 ) ( -1 ) (    ) (  7 ) (  1 ) ( -4 ) )      ( (  5 ) ( -1 ) (    ) (  7 ) (  1 ) ( -4 ) )
171    // ( (    ) (  8 ) ( -2 ) (    ) ( -4 ) (  7 ) )      ( (    ) (  8 ) ( -2 ) (    ) ( -4 ) (  7 ) )
172    {
173       test_ = "Dense matrix assignment test 1";
174 
175       {
176          blaze::DynamicMatrix<VT,blaze::rowMajor> tmp( 2UL, 4UL );
177          tmp(0,0) = vec( 12 );
178          tmp(0,1) = vec( 18 );
179          tmp(0,2) = vec( 14 );
180          tmp(0,3) = vec( 15 );
181          tmp(1,0) = vec( 18 );
182          tmp(1,1) = vec( 17 );
183          tmp(1,2) = vec( 11 );
184          tmp(1,3) = vec( 19 );
185 
186          ST sym;
187          init( sym );
188 
189          auto sm = submatrix( sym, 0UL, 0UL, 2UL, 4UL );
190          sm = tmp;
191 
192          checkRows    ( sym,  6UL );
193          checkColumns ( sym,  6UL );
194          checkNonZeros( sym, 30UL );
195 
196          if( sm(0,0) != vec( 12 ) || sm(0,1) != vec( 18 ) || sm(0,2) != vec( 14 ) || sm(0,3) != vec( 15 ) ||
197              sm(1,0) != vec( 18 ) || sm(1,1) != vec( 17 ) || sm(1,2) != vec( 11 ) || sm(1,3) != vec( 19 ) ) {
198             std::ostringstream oss;
199             oss << " Test: " << test_ << "\n"
200                 << " Error: Assignment to submatrix failed\n"
201                 << " Details:\n"
202                 << "   Result:\n" << sm << "\n"
203                 << "   Expected result:\n( ( 12 ) ( 18 ) ( 14 ) ( 15 ) )\n"
204                                         "( ( 18 ) ( 17 ) ( 11 ) ( 19 ) )\n";
205             throw std::runtime_error( oss.str() );
206          }
207 
208          if( sym(0,0) != vec( 12 )  || sym(0,1) != vec( 18 ) || sym(0,2) != vec( 14 )  || sym(0,3) != vec( 15 )  || sym(0,4) != vec(  5 )  || !isDefault( sym(0,5) ) ||
209              sym(1,0) != vec( 18 )  || sym(1,1) != vec( 17 ) || sym(1,2) != vec( 11 )  || sym(1,3) != vec( 19 )  || sym(1,4) != vec( -1 )  || sym(1,5) != vec(  8 )  ||
210              sym(2,0) != vec( 14 )  || sym(2,1) != vec( 11 ) || sym(2,2) != vec(  3 )  || sym(2,3) != vec(  1 )  || !isDefault( sym(2,4) ) || sym(2,5) != vec( -2 )  ||
211              sym(3,0) != vec( 15 )  || sym(3,1) != vec( 19 ) || sym(3,2) != vec(  1 )  || sym(3,3) != vec(  5 )  || sym(3,4) != vec(  7 )  || !isDefault( sym(3,5) ) ||
212              sym(4,0) != vec(  5 )  || sym(4,1) != vec( -1 ) || !isDefault( sym(4,2) ) || sym(4,3) != vec(  7 )  || sym(4,4) != vec(  1 )  || sym(4,5) != vec( -4 )  ||
213              !isDefault( sym(5,0) ) || sym(5,1) != vec(  8 ) || sym(5,2) != vec( -2 )  || !isDefault( sym(5,3) ) || sym(5,4) != vec( -4 )  || sym(5,5) != vec(  7 ) ) {
214             std::ostringstream oss;
215             oss << " Test: " << test_ << "\n"
216                 << " Error: Assignment to submatrix failed\n"
217                 << " Details:\n"
218                 << "   Result:\n" << sym << "\n"
219                 << "   Expected result:\n( ( 12 ) ( 18 ) ( 14 ) ( 15 ) (  5 ) (    ) )\n"
220                                         "( ( 18 ) ( 17 ) ( 11 ) ( 19 ) ( -1 ) (  8 ) )\n"
221                                         "( ( 14 ) ( 11 ) (  3 ) (  1 ) (    ) ( -2 ) )\n"
222                                         "( ( 15 ) ( 19 ) (  1 ) (  5 ) (  7 ) (    ) )\n"
223                                         "( (  5 ) ( -1 ) (    ) (  7 ) (  1 ) ( -4 ) )\n"
224                                         "( (    ) (  8 ) ( -2 ) (    ) ( -4 ) (  7 ) )\n";
225             throw std::runtime_error( oss.str() );
226          }
227       }
228 
229       {
230          blaze::DynamicMatrix<VT,blaze::columnMajor> tmp( 4UL, 2UL );
231          tmp(0,0) = vec( 12 );
232          tmp(0,1) = vec( 18 );
233          tmp(1,0) = vec( 18 );
234          tmp(1,1) = vec( 17 );
235          tmp(2,0) = vec( 14 );
236          tmp(2,1) = vec( 11 );
237          tmp(3,0) = vec( 15 );
238          tmp(3,1) = vec( 19 );
239 
240          ST sym;
241          init( sym );
242 
243          auto sm = submatrix( sym, 0UL, 0UL, 4UL, 2UL );
244          sm = tmp;
245 
246          checkRows    ( sym,  6UL );
247          checkColumns ( sym,  6UL );
248          checkNonZeros( sym, 30UL );
249 
250          if( sm(0,0) != vec( 12 ) || sm(0,1) != vec( 18 ) ||
251              sm(1,0) != vec( 18 ) || sm(1,1) != vec( 17 ) ||
252              sm(2,0) != vec( 14 ) || sm(2,1) != vec( 11 ) ||
253              sm(3,0) != vec( 15 ) || sm(3,1) != vec( 19 ) ) {
254             std::ostringstream oss;
255             oss << " Test: " << test_ << "\n"
256                 << " Error: Assignment to submatrix failed\n"
257                 << " Details:\n"
258                 << "   Result:\n" << sm << "\n"
259                 << "   Expected result:\n( ( 12 ) ( 18 ) )\n"
260                                         "( ( 18 ) ( 17 ) )\n"
261                                         "( ( 14 ) ( 11 ) )\n"
262                                         "( ( 15 ) ( 19 ) )\n";
263             throw std::runtime_error( oss.str() );
264          }
265 
266          if( sym(0,0) != vec( 12 )  || sym(0,1) != vec( 18 ) || sym(0,2) != vec( 14 )  || sym(0,3) != vec( 15 )  || sym(0,4) != vec(  5 )  || !isDefault( sym(0,5) ) ||
267              sym(1,0) != vec( 18 )  || sym(1,1) != vec( 17 ) || sym(1,2) != vec( 11 )  || sym(1,3) != vec( 19 )  || sym(1,4) != vec( -1 )  || sym(1,5) != vec(  8 )  ||
268              sym(2,0) != vec( 14 )  || sym(2,1) != vec( 11 ) || sym(2,2) != vec(  3 )  || sym(2,3) != vec(  1 )  || !isDefault( sym(2,4) ) || sym(2,5) != vec( -2 )  ||
269              sym(3,0) != vec( 15 )  || sym(3,1) != vec( 19 ) || sym(3,2) != vec(  1 )  || sym(3,3) != vec(  5 )  || sym(3,4) != vec(  7 )  || !isDefault( sym(3,5) ) ||
270              sym(4,0) != vec(  5 )  || sym(4,1) != vec( -1 ) || !isDefault( sym(4,2) ) || sym(4,3) != vec(  7 )  || sym(4,4) != vec(  1 )  || sym(4,5) != vec( -4 )  ||
271              !isDefault( sym(5,0) ) || sym(5,1) != vec(  8 ) || sym(5,2) != vec( -2 )  || !isDefault( sym(5,3) ) || sym(5,4) != vec( -4 )  || sym(5,5) != vec(  7 ) ) {
272             std::ostringstream oss;
273             oss << " Test: " << test_ << "\n"
274                 << " Error: Assignment to submatrix failed\n"
275                 << " Details:\n"
276                 << "   Result:\n" << sym << "\n"
277                 << "   Expected result:\n( ( 12 ) ( 18 ) ( 14 ) ( 15 ) (  5 ) (    ) )\n"
278                                         "( ( 18 ) ( 17 ) ( 11 ) ( 19 ) ( -1 ) (  8 ) )\n"
279                                         "( ( 14 ) ( 11 ) (  3 ) (  1 ) (    ) ( -2 ) )\n"
280                                         "( ( 15 ) ( 19 ) (  1 ) (  5 ) (  7 ) (    ) )\n"
281                                         "( (  5 ) ( -1 ) (    ) (  7 ) (  1 ) ( -4 ) )\n"
282                                         "( (    ) (  8 ) ( -2 ) (    ) ( -4 ) (  7 ) )\n";
283             throw std::runtime_error( oss.str() );
284          }
285       }
286    }
287 
288    // ( (  1 ) ( -4 ) (  7 ) ( -2 ) (  5 ) (    ) )      ( (  1 ) ( -4 ) (  7 ) ( -2 ) (  5 ) (    ) )
289    // ( ( -4 ) (  2 ) (    ) (    ) ( -1 ) (  8 ) )      ( ( -4 ) (  2 ) ( 12 ) ( 13 ) ( -1 ) (  8 ) )
290    // ( (  7 ) (    ) (  3 ) (  1 ) (    ) ( -2 ) )  =>  ( (  7 ) ( 12 ) ( 18 ) ( 14 ) ( 15 ) ( -2 ) )
291    // ( ( -2 ) (    ) (  1 ) (  5 ) (  7 ) (    ) )      ( ( -2 ) ( 13 ) ( 14 ) ( 11 ) ( 19 ) (    ) )
292    // ( (  5 ) ( -1 ) (    ) (  7 ) (  1 ) ( -4 ) )      ( (  5 ) ( -1 ) ( 15 ) ( 19 ) (  1 ) ( -4 ) )
293    // ( (    ) (  8 ) ( -2 ) (    ) ( -4 ) (  7 ) )      ( (    ) (  8 ) ( -2 ) (    ) ( -4 ) (  7 ) )
294    {
295       test_ = "Dense matrix assignment test 2";
296 
297       {
298          blaze::DynamicMatrix<VT,blaze::rowMajor> tmp( 2UL, 4UL );
299          tmp(0,0) = vec( 12 );
300          tmp(0,1) = vec( 18 );
301          tmp(0,2) = vec( 14 );
302          tmp(0,3) = vec( 15 );
303          tmp(1,0) = vec( 13 );
304          tmp(1,1) = vec( 14 );
305          tmp(1,2) = vec( 11 );
306          tmp(1,3) = vec( 19 );
307 
308          ST sym;
309          init( sym );
310 
311          auto sm = submatrix( sym, 2UL, 1UL, 2UL, 4UL );
312          sm = tmp;
313 
314          checkRows    ( sym,  6UL );
315          checkColumns ( sym,  6UL );
316          checkNonZeros( sym, 32UL );
317 
318          if( sm(0,0) != vec( 12 ) || sm(0,1) != vec( 18 ) || sm(0,2) != vec( 14 ) || sm(0,3) != vec( 15 ) ||
319              sm(1,0) != vec( 13 ) || sm(1,1) != vec( 14 ) || sm(1,2) != vec( 11 ) || sm(1,3) != vec( 19 ) ) {
320             std::ostringstream oss;
321             oss << " Test: " << test_ << "\n"
322                 << " Error: Assignment to submatrix failed\n"
323                 << " Details:\n"
324                 << "   Result:\n" << sm << "\n"
325                 << "   Expected result:\n( ( 12 ) ( 18 ) ( 14 ) ( 15 ) )\n"
326                                         "( ( 13 ) ( 14 ) ( 11 ) ( 19 ) )\n";
327             throw std::runtime_error( oss.str() );
328          }
329 
330          if( sym(0,0) != vec(  1 )  || sym(0,1) != vec( -4 ) || sym(0,2) != vec(  7 ) || sym(0,3) != vec( -2 )  || sym(0,4) != vec(  5 ) || !isDefault( sym(0,5) ) ||
331              sym(1,0) != vec( -4 )  || sym(1,1) != vec(  2 ) || sym(1,2) != vec( 12 ) || sym(1,3) != vec( 13 )  || sym(1,4) != vec( -1 ) || sym(1,5) != vec(  8 )  ||
332              sym(2,0) != vec(  7 )  || sym(2,1) != vec( 12 ) || sym(2,2) != vec( 18 ) || sym(2,3) != vec( 14 )  || sym(2,4) != vec( 15 ) || sym(2,5) != vec( -2 )  ||
333              sym(3,0) != vec( -2 )  || sym(3,1) != vec( 13 ) || sym(3,2) != vec( 14 ) || sym(3,3) != vec( 11 )  || sym(3,4) != vec( 19 ) || !isDefault( sym(3,5) ) ||
334              sym(4,0) != vec(  5 )  || sym(4,1) != vec( -1 ) || sym(4,2) != vec( 15 ) || sym(4,3) != vec( 19 )  || sym(4,4) != vec(  1 ) || sym(4,5) != vec( -4 )  ||
335              !isDefault( sym(5,0) ) || sym(5,1) != vec(  8 ) || sym(5,2) != vec( -2 ) || !isDefault( sym(5,3) ) || sym(5,4) != vec( -4 ) || sym(5,5) != vec(  7 ) ) {
336             std::ostringstream oss;
337             oss << " Test: " << test_ << "\n"
338                 << " Error: Assignment to submatrix failed\n"
339                 << " Details:\n"
340                 << "   Result:\n" << sym << "\n"
341                 << "   Expected result:\n( (  1 ) ( -4 ) (  7 ) ( -2 ) (  5 ) (    ) )\n"
342                                         "( ( -4 ) (  2 ) ( 12 ) ( 13 ) ( -1 ) (  8 ) )\n"
343                                         "( (  7 ) ( 12 ) ( 18 ) ( 14 ) ( 15 ) ( -2 ) )\n"
344                                         "( ( -2 ) ( 13 ) ( 14 ) ( 11 ) ( 19 ) (    ) )\n"
345                                         "( (  5 ) ( -1 ) ( 15 ) ( 19 ) (  1 ) ( -4 ) )\n"
346                                         "( (    ) (  8 ) ( -2 ) (    ) ( -4 ) (  7 ) )\n";
347             throw std::runtime_error( oss.str() );
348          }
349       }
350 
351       {
352          blaze::DynamicMatrix<VT,blaze::columnMajor> tmp( 4UL, 2UL );
353          tmp(0,0) = vec( 12 );
354          tmp(0,1) = vec( 13 );
355          tmp(1,0) = vec( 18 );
356          tmp(1,1) = vec( 14 );
357          tmp(2,0) = vec( 14 );
358          tmp(2,1) = vec( 11 );
359          tmp(3,0) = vec( 15 );
360          tmp(3,1) = vec( 19 );
361 
362          ST sym;
363          init( sym );
364 
365          auto sm = submatrix( sym, 1UL, 2UL, 4UL, 2UL );
366          sm = tmp;
367 
368          checkRows    ( sym,  6UL );
369          checkColumns ( sym,  6UL );
370          checkNonZeros( sym, 32UL );
371 
372          if( sm(0,0) != vec( 12 ) || sm(0,1) != vec( 13 ) ||
373              sm(1,0) != vec( 18 ) || sm(1,1) != vec( 14 ) ||
374              sm(2,0) != vec( 14 ) || sm(2,1) != vec( 11 ) ||
375              sm(3,0) != vec( 15 ) || sm(3,1) != vec( 19 ) ) {
376             std::ostringstream oss;
377             oss << " Test: " << test_ << "\n"
378                 << " Error: Assignment to submatrix failed\n"
379                 << " Details:\n"
380                 << "   Result:\n" << sm << "\n"
381                 << "   Expected result:\n( ( 12 ) ( 13 ) )\n"
382                                         "( ( 18 ) ( 14 ) )\n"
383                                         "( ( 14 ) ( 11 ) )\n"
384                                         "( ( 15 ) ( 19 ) )\n";
385             throw std::runtime_error( oss.str() );
386          }
387 
388          if( sym(0,0) != vec(  1 )  || sym(0,1) != vec( -4 ) || sym(0,2) != vec(  7 ) || sym(0,3) != vec( -2 )  || sym(0,4) != vec(  5 ) || !isDefault( sym(0,5) ) ||
389              sym(1,0) != vec( -4 )  || sym(1,1) != vec(  2 ) || sym(1,2) != vec( 12 ) || sym(1,3) != vec( 13 )  || sym(1,4) != vec( -1 ) || sym(1,5) != vec(  8 )  ||
390              sym(2,0) != vec(  7 )  || sym(2,1) != vec( 12 ) || sym(2,2) != vec( 18 ) || sym(2,3) != vec( 14 )  || sym(2,4) != vec( 15 ) || sym(2,5) != vec( -2 )  ||
391              sym(3,0) != vec( -2 )  || sym(3,1) != vec( 13 ) || sym(3,2) != vec( 14 ) || sym(3,3) != vec( 11 )  || sym(3,4) != vec( 19 ) || !isDefault( sym(3,5) ) ||
392              sym(4,0) != vec(  5 )  || sym(4,1) != vec( -1 ) || sym(4,2) != vec( 15 ) || sym(4,3) != vec( 19 )  || sym(4,4) != vec(  1 ) || sym(4,5) != vec( -4 )  ||
393              !isDefault( sym(5,0) ) || sym(5,1) != vec(  8 ) || sym(5,2) != vec( -2 ) || !isDefault( sym(5,3) ) || sym(5,4) != vec( -4 ) || sym(5,5) != vec(  7 ) ) {
394             std::ostringstream oss;
395             oss << " Test: " << test_ << "\n"
396                 << " Error: Assignment to submatrix failed\n"
397                 << " Details:\n"
398                 << "   Result:\n" << sym << "\n"
399                 << "   Expected result:\n( (  1 ) ( -4 ) (  7 ) ( -2 ) (  5 ) (    ) )\n"
400                                         "( ( -4 ) (  2 ) ( 12 ) ( 13 ) ( -1 ) (  8 ) )\n"
401                                         "( (  7 ) ( 12 ) ( 18 ) ( 14 ) ( 15 ) ( -2 ) )\n"
402                                         "( ( -2 ) ( 13 ) ( 14 ) ( 11 ) ( 19 ) (    ) )\n"
403                                         "( (  5 ) ( -1 ) ( 15 ) ( 19 ) (  1 ) ( -4 ) )\n"
404                                         "( (    ) (  8 ) ( -2 ) (    ) ( -4 ) (  7 ) )\n";
405             throw std::runtime_error( oss.str() );
406          }
407       }
408    }
409 
410    // ( (  1 ) ( -4 ) (  7 ) ( -2 ) (  5 ) (    ) )      ( (  1 ) ( -4 ) (  7 ) ( -2 ) (  5 ) (    ) )
411    // ( ( -4 ) (  2 ) (    ) (    ) ( -1 ) (  8 ) )      ( ( -4 ) (  2 ) (    ) (    ) ( -1 ) (  8 ) )
412    // ( (  7 ) (    ) (  3 ) (  1 ) (    ) ( -2 ) )  =>  ( (  7 ) (    ) (  3 ) (  1 ) ( 12 ) ( 13 ) )
413    // ( ( -2 ) (    ) (  1 ) (  5 ) (  7 ) (    ) )      ( ( -2 ) (    ) (  1 ) (  5 ) ( 18 ) ( 14 ) )
414    // ( (  5 ) ( -1 ) (    ) (  7 ) (  1 ) ( -4 ) )      ( (  5 ) ( -1 ) ( 12 ) ( 18 ) ( 14 ) ( 11 ) )
415    // ( (    ) (  8 ) ( -2 ) (    ) ( -4 ) (  7 ) )      ( (    ) (  8 ) ( 13 ) ( 14 ) ( 11 ) ( 19 ) )
416    {
417       test_ = "Dense matrix assignment test 3";
418 
419       {
420          blaze::DynamicMatrix<VT,blaze::rowMajor> tmp( 2UL, 4UL );
421          tmp(0,0) = vec( 12 );
422          tmp(0,1) = vec( 18 );
423          tmp(0,2) = vec( 14 );
424          tmp(0,3) = vec( 11 );
425          tmp(1,0) = vec( 13 );
426          tmp(1,1) = vec( 14 );
427          tmp(1,2) = vec( 11 );
428          tmp(1,3) = vec( 19 );
429 
430          ST sym;
431          init( sym );
432 
433          auto sm = submatrix( sym, 4UL, 2UL, 2UL, 4UL );
434          sm = tmp;
435 
436          checkRows    ( sym,  6UL );
437          checkColumns ( sym,  6UL );
438          checkNonZeros( sym, 30UL );
439 
440          if( sm(0,0) != vec( 12 ) || sm(0,1) != vec( 18 ) || sm(0,2) != vec( 14 ) || sm(0,3) != vec( 11 ) ||
441              sm(1,0) != vec( 13 ) || sm(1,1) != vec( 14 ) || sm(1,2) != vec( 11 ) || sm(1,3) != vec( 19 ) ) {
442             std::ostringstream oss;
443             oss << " Test: " << test_ << "\n"
444                 << " Error: Assignment to submatrix failed\n"
445                 << " Details:\n"
446                 << "   Result:\n" << sm << "\n"
447                 << "   Expected result:\n( ( 12 ) ( 18 ) ( 14 ) ( 11 ) )\n"
448                                         "( ( 13 ) ( 14 ) ( 11 ) ( 19 ) )\n";
449             throw std::runtime_error( oss.str() );
450          }
451 
452          if( sym(0,0) != vec(  1 )  || sym(0,1) != vec( -4 )  || sym(0,2) != vec(  7 )  || sym(0,3) != vec( -2 )  || sym(0,4) != vec(  5 ) || !isDefault( sym(0,5) ) ||
453              sym(1,0) != vec( -4 )  || sym(1,1) != vec(  2 )  || !isDefault( sym(1,2) ) || !isDefault( sym(1,3) ) || sym(1,4) != vec( -1 ) || sym(1,5) != vec(  8 )  ||
454              sym(2,0) != vec(  7 )  || !isDefault( sym(2,1) ) || sym(2,2) != vec(  3 )  || sym(2,3) != vec(  1 )  || sym(2,4) != vec( 12 ) || sym(2,5) != vec( 13 )  ||
455              sym(3,0) != vec( -2 )  || !isDefault( sym(3,1) ) || sym(3,2) != vec(  1 )  || sym(3,3) != vec(  5 )  || sym(3,4) != vec( 18 ) || sym(3,5) != vec( 14 )  ||
456              sym(4,0) != vec(  5 )  || sym(4,1) != vec( -1 )  || sym(4,2) != vec( 12 )  || sym(4,3) != vec( 18 )  || sym(4,4) != vec( 14 ) || sym(4,5) != vec( 11 )  ||
457              !isDefault( sym(5,0) ) || sym(5,1) != vec(  8 )  || sym(5,2) != vec( 13 )  || sym(5,3) != vec( 14 )  || sym(5,4) != vec( 11 ) || sym(5,5) != vec( 19 ) ) {
458             std::ostringstream oss;
459             oss << " Test: " << test_ << "\n"
460                 << " Error: Assignment to submatrix failed\n"
461                 << " Details:\n"
462                 << "   Result:\n" << sym << "\n"
463                 << "   Expected result:\n( (  1 ) ( -4 ) (  7 ) ( -2 ) (  5 ) (    ) )\n"
464                                         "( ( -4 ) (  2 ) (    ) (    ) ( -1 ) (  8 ) )\n"
465                                         "( (  7 ) (    ) (  3 ) (  1 ) ( 12 ) ( 13 ) )\n"
466                                         "( ( -2 ) (    ) (  1 ) (  5 ) ( 18 ) ( 14 ) )\n"
467                                         "( (  5 ) ( -1 ) ( 12 ) ( 18 ) ( 14 ) ( 11 ) )\n"
468                                         "( (    ) (  8 ) ( 13 ) ( 14 ) ( 11 ) ( 19 ) )\n";
469             throw std::runtime_error( oss.str() );
470          }
471       }
472 
473       {
474          blaze::DynamicMatrix<VT,blaze::columnMajor> tmp( 4UL, 2UL );
475          tmp(0,0) = vec( 12 );
476          tmp(0,1) = vec( 13 );
477          tmp(1,0) = vec( 18 );
478          tmp(1,1) = vec( 14 );
479          tmp(2,0) = vec( 14 );
480          tmp(2,1) = vec( 11 );
481          tmp(3,0) = vec( 11 );
482          tmp(3,1) = vec( 19 );
483 
484          ST sym;
485          init( sym );
486 
487          auto sm = submatrix( sym, 2UL, 4UL, 4UL, 2UL );
488          sm = tmp;
489 
490          checkRows    ( sym,  6UL );
491          checkColumns ( sym,  6UL );
492          checkNonZeros( sym, 30UL );
493 
494          if( sm(0,0) != vec( 12 ) || sm(0,1) != vec( 13 ) ||
495              sm(1,0) != vec( 18 ) || sm(1,1) != vec( 14 ) ||
496              sm(2,0) != vec( 14 ) || sm(2,1) != vec( 11 ) ||
497              sm(3,0) != vec( 11 ) || sm(3,1) != vec( 19 ) ) {
498             std::ostringstream oss;
499             oss << " Test: " << test_ << "\n"
500                 << " Error: Assignment to submatrix failed\n"
501                 << " Details:\n"
502                 << "   Result:\n" << sm << "\n"
503                 << "   Expected result:\n( ( 12 ) ( 13 ) )\n"
504                                         "( ( 18 ) ( 14 ) )\n"
505                                         "( ( 14 ) ( 11 ) )\n"
506                                         "( ( 11 ) ( 19 ) )\n";
507             throw std::runtime_error( oss.str() );
508          }
509 
510          if( sym(0,0) != vec(  1 )  || sym(0,1) != vec( -4 )  || sym(0,2) != vec(  7 )  || sym(0,3) != vec( -2 )  || sym(0,4) != vec(  5 ) || !isDefault( sym(0,5) ) ||
511              sym(1,0) != vec( -4 )  || sym(1,1) != vec(  2 )  || !isDefault( sym(1,2) ) || !isDefault( sym(1,3) ) || sym(1,4) != vec( -1 ) || sym(1,5) != vec(  8 )  ||
512              sym(2,0) != vec(  7 )  || !isDefault( sym(2,1) ) || sym(2,2) != vec(  3 )  || sym(2,3) != vec(  1 )  || sym(2,4) != vec( 12 ) || sym(2,5) != vec( 13 )  ||
513              sym(3,0) != vec( -2 )  || !isDefault( sym(3,1) ) || sym(3,2) != vec(  1 )  || sym(3,3) != vec(  5 )  || sym(3,4) != vec( 18 ) || sym(3,5) != vec( 14 )  ||
514              sym(4,0) != vec(  5 )  || sym(4,1) != vec( -1 )  || sym(4,2) != vec( 12 )  || sym(4,3) != vec( 18 )  || sym(4,4) != vec( 14 ) || sym(4,5) != vec( 11 )  ||
515              !isDefault( sym(5,0) ) || sym(5,1) != vec(  8 )  || sym(5,2) != vec( 13 )  || sym(5,3) != vec( 14 )  || sym(5,4) != vec( 11 ) || sym(5,5) != vec( 19 ) ) {
516             std::ostringstream oss;
517             oss << " Test: " << test_ << "\n"
518                 << " Error: Assignment to submatrix failed\n"
519                 << " Details:\n"
520                 << "   Result:\n" << sym << "\n"
521                 << "   Expected result:\n( (  1 ) ( -4 ) (  7 ) ( -2 ) (  5 ) (    ) )\n"
522                                         "( ( -4 ) (  2 ) (    ) (    ) ( -1 ) (  8 ) )\n"
523                                         "( (  7 ) (    ) (  3 ) (  1 ) ( 12 ) ( 13 ) )\n"
524                                         "( ( -2 ) (    ) (  1 ) (  5 ) ( 18 ) ( 14 ) )\n"
525                                         "( (  5 ) ( -1 ) ( 12 ) ( 18 ) ( 14 ) ( 11 ) )\n"
526                                         "( (    ) (  8 ) ( 13 ) ( 14 ) ( 11 ) ( 19 ) )\n";
527             throw std::runtime_error( oss.str() );
528          }
529       }
530    }
531 
532    // ( (  1 ) ( -4 ) (  7 ) ( -2 ) (  5 ) (    ) )      ( (  1 ) ( -4 ) ( 12 ) ( 13 ) ( 19 ) (    ) )
533    // ( ( -4 ) (  2 ) (    ) (    ) ( -1 ) (  8 ) )      ( ( -4 ) (  2 ) ( 18 ) ( 14 ) ( 11 ) (  8 ) )
534    // ( (  7 ) (    ) (  3 ) (  1 ) (    ) ( -2 ) )  =>  ( ( 12 ) ( 18 ) ( 14 ) ( 11 ) ( 12 ) ( -2 ) )
535    // ( ( -2 ) (    ) (  1 ) (  5 ) (  7 ) (    ) )      ( ( 13 ) ( 14 ) ( 11 ) ( 19 ) ( 14 ) (    ) )
536    // ( (  5 ) ( -1 ) (    ) (  7 ) (  1 ) ( -4 ) )      ( ( 19 ) ( 11 ) ( 12 ) ( 14 ) (  1 ) ( -4 ) )
537    // ( (    ) (  8 ) ( -2 ) (    ) ( -4 ) (  7 ) )      ( (    ) (  8 ) ( -2 ) (    ) ( -4 ) (  7 ) )
538    {
539       test_ = "Dense matrix assignment test 4";
540 
541       {
542          blaze::DynamicMatrix<VT,blaze::rowMajor> tmp( 3UL, 4UL );
543          tmp(0,0) = vec( 12 );
544          tmp(0,1) = vec( 18 );
545          tmp(0,2) = vec( 14 );
546          tmp(0,3) = vec( 11 );
547          tmp(1,0) = vec( 13 );
548          tmp(1,1) = vec( 14 );
549          tmp(1,2) = vec( 11 );
550          tmp(1,3) = vec( 19 );
551          tmp(2,0) = vec( 19 );
552          tmp(2,1) = vec( 11 );
553          tmp(2,2) = vec( 12 );
554          tmp(2,3) = vec( 14 );
555 
556          ST sym;
557          init( sym );
558 
559          auto sm = submatrix( sym, 2UL, 0UL, 3UL, 4UL );
560          sm = tmp;
561 
562          checkRows    ( sym,  6UL );
563          checkColumns ( sym,  6UL );
564          checkNonZeros( sym, 32UL );
565 
566          if( sm(0,0) != vec( 12 ) || sm(0,1) != vec( 18 ) || sm(0,2) != vec( 14 ) || sm(0,3) != vec( 11 ) ||
567              sm(1,0) != vec( 13 ) || sm(1,1) != vec( 14 ) || sm(1,2) != vec( 11 ) || sm(1,3) != vec( 19 ) ||
568              sm(2,0) != vec( 19 ) || sm(2,1) != vec( 11 ) || sm(2,2) != vec( 12 ) || sm(2,3) != vec( 14 ) ) {
569             std::ostringstream oss;
570             oss << " Test: " << test_ << "\n"
571                 << " Error: Assignment to submatrix failed\n"
572                 << " Details:\n"
573                 << "   Result:\n" << sm << "\n"
574                 << "   Expected result:\n( ( 12 ) ( 18 ) ( 14 ) ( 11 ) )\n"
575                                         "( ( 13 ) ( 14 ) ( 11 ) ( 19 ) )\n"
576                                         "( ( 19 ) ( 11 ) ( 12 ) ( 14 ) )\n";
577             throw std::runtime_error( oss.str() );
578          }
579 
580          if( sym(0,0) != vec(  1 )  || sym(0,1) != vec( -4 ) || sym(0,2) != vec( 12 ) || sym(0,3) != vec( 13 )  || sym(0,4) != vec( 19 ) || !isDefault( sym(0,5) ) ||
581              sym(1,0) != vec( -4 )  || sym(1,1) != vec(  2 ) || sym(1,2) != vec( 18 ) || sym(1,3) != vec( 14 )  || sym(1,4) != vec( 11 ) || sym(1,5) != vec(  8 )  ||
582              sym(2,0) != vec( 12 )  || sym(2,1) != vec( 18 ) || sym(2,2) != vec( 14 ) || sym(2,3) != vec( 11 )  || sym(2,4) != vec( 12 ) || sym(2,5) != vec( -2 )  ||
583              sym(3,0) != vec( 13 )  || sym(3,1) != vec( 14 ) || sym(3,2) != vec( 11 ) || sym(3,3) != vec( 19 )  || sym(3,4) != vec( 14 ) || !isDefault( sym(3,5) ) ||
584              sym(4,0) != vec( 19 )  || sym(4,1) != vec( 11 ) || sym(4,2) != vec( 12 ) || sym(4,3) != vec( 14 )  || sym(4,4) != vec(  1 ) || sym(4,5) != vec( -4 )  ||
585              !isDefault( sym(5,0) ) || sym(5,1) != vec(  8 ) || sym(5,2) != vec( -2 ) || !isDefault( sym(5,3) ) || sym(5,4) != vec( -4 ) || sym(5,5) != vec(  7 ) ) {
586             std::ostringstream oss;
587             oss << " Test: " << test_ << "\n"
588                 << " Error: Assignment to submatrix failed\n"
589                 << " Details:\n"
590                 << "   Result:\n" << sym << "\n"
591                 << "   Expected result:\n( (  1 ) ( -4 ) ( 12 ) ( 13 ) ( 19 ) (    ) )\n"
592                                         "( ( -4 ) (  2 ) ( 18 ) ( 14 ) ( 11 ) (  8 ) )\n"
593                                         "( ( 12 ) ( 18 ) ( 14 ) ( 11 ) ( 12 ) ( -2 ) )\n"
594                                         "( ( 13 ) ( 14 ) ( 11 ) ( 19 ) ( 14 ) (    ) )\n"
595                                         "( ( 19 ) ( 11 ) ( 12 ) ( 14 ) (  1 ) ( -4 ) )\n"
596                                         "( (    ) (  8 ) ( -2 ) (    ) ( -4 ) (  7 ) )\n";
597             throw std::runtime_error( oss.str() );
598          }
599       }
600 
601       {
602          blaze::DynamicMatrix<VT,blaze::rowMajor> tmp( 4UL, 3UL );
603          tmp(0,0) = vec( 12 );
604          tmp(0,1) = vec( 13 );
605          tmp(0,2) = vec( 19 );
606          tmp(1,0) = vec( 18 );
607          tmp(1,1) = vec( 14 );
608          tmp(1,2) = vec( 11 );
609          tmp(2,0) = vec( 14 );
610          tmp(2,1) = vec( 11 );
611          tmp(2,2) = vec( 12 );
612          tmp(3,0) = vec( 11 );
613          tmp(3,1) = vec( 19 );
614          tmp(3,2) = vec( 14 );
615 
616          ST sym;
617          init( sym );
618 
619          auto sm = submatrix( sym, 0UL, 2UL, 4UL, 3UL );
620          sm = tmp;
621 
622          checkRows    ( sym,  6UL );
623          checkColumns ( sym,  6UL );
624          checkNonZeros( sym, 32UL );
625 
626          if( sm(0,0) != vec( 12 ) || sm(0,1) != vec( 13 ) || sm(0,2) != vec( 19 ) ||
627              sm(1,0) != vec( 18 ) || sm(1,1) != vec( 14 ) || sm(1,2) != vec( 11 ) ||
628              sm(2,0) != vec( 14 ) || sm(2,1) != vec( 11 ) || sm(2,2) != vec( 12 ) ||
629              sm(3,0) != vec( 11 ) || sm(3,1) != vec( 19 ) || sm(3,2) != vec( 14 ) ) {
630             std::ostringstream oss;
631             oss << " Test: " << test_ << "\n"
632                 << " Error: Assignment to submatrix failed\n"
633                 << " Details:\n"
634                 << "   Result:\n" << sm << "\n"
635                 << "   Expected result:\n( ( 12 ) ( 13 ) ( 19 ) )\n"
636                                         "( ( 18 ) ( 14 ) ( 11 ) )\n"
637                                         "( ( 14 ) ( 11 ) ( 12 ) )\n"
638                                         "( ( 11 ) ( 19 ) ( 14 ) )\n";
639             throw std::runtime_error( oss.str() );
640          }
641 
642          if( sym(0,0) != vec(  1 )  || sym(0,1) != vec( -4 ) || sym(0,2) != vec( 12 ) || sym(0,3) != vec( 13 )  || sym(0,4) != vec( 19 ) || !isDefault( sym(0,5) ) ||
643              sym(1,0) != vec( -4 )  || sym(1,1) != vec(  2 ) || sym(1,2) != vec( 18 ) || sym(1,3) != vec( 14 )  || sym(1,4) != vec( 11 ) || sym(1,5) != vec(  8 )  ||
644              sym(2,0) != vec( 12 )  || sym(2,1) != vec( 18 ) || sym(2,2) != vec( 14 ) || sym(2,3) != vec( 11 )  || sym(2,4) != vec( 12 ) || sym(2,5) != vec( -2 )  ||
645              sym(3,0) != vec( 13 )  || sym(3,1) != vec( 14 ) || sym(3,2) != vec( 11 ) || sym(3,3) != vec( 19 )  || sym(3,4) != vec( 14 ) || !isDefault( sym(3,5) ) ||
646              sym(4,0) != vec( 19 )  || sym(4,1) != vec( 11 ) || sym(4,2) != vec( 12 ) || sym(4,3) != vec( 14 )  || sym(4,4) != vec(  1 ) || sym(4,5) != vec( -4 )  ||
647              !isDefault( sym(5,0) ) || sym(5,1) != vec(  8 ) || sym(5,2) != vec( -2 ) || !isDefault( sym(5,3) ) || sym(5,4) != vec( -4 ) || sym(5,5) != vec(  7 ) ) {
648             std::ostringstream oss;
649             oss << " Test: " << test_ << "\n"
650                 << " Error: Assignment to submatrix failed\n"
651                 << " Details:\n"
652                 << "   Result:\n" << sym << "\n"
653                 << "   Expected result:\n( (  1 ) ( -4 ) ( 12 ) ( 13 ) ( 19 ) (    ) )\n"
654                                         "( ( -4 ) (  2 ) ( 18 ) ( 14 ) ( 11 ) (  8 ) )\n"
655                                         "( ( 12 ) ( 18 ) ( 14 ) ( 11 ) ( 12 ) ( -2 ) )\n"
656                                         "( ( 13 ) ( 14 ) ( 11 ) ( 19 ) ( 14 ) (    ) )\n"
657                                         "( ( 19 ) ( 11 ) ( 12 ) ( 14 ) (  1 ) ( -4 ) )\n"
658                                         "( (    ) (  8 ) ( -2 ) (    ) ( -4 ) (  7 ) )\n";
659             throw std::runtime_error( oss.str() );
660          }
661       }
662    }
663 
664    // ( (  1 ) ( -4 ) (  7 ) ( -2 ) (  5 ) (    ) )      ( ( 12 ) ( 18 ) ( 14 ) ( 15 ) (  5 ) (    ) )
665    // ( ( -4 ) (  2 ) (    ) (    ) ( -1 ) (  8 ) )      ( ( 22 ) ( 17 ) ( 11 ) ( 19 ) ( -1 ) (  8 ) )
666    // ( (  7 ) (    ) (  3 ) (  1 ) (    ) ( -2 ) )  =>  ( ( 14 ) ( 11 ) (  3 ) (  1 ) (    ) ( -2 ) )
667    // ( ( -2 ) (    ) (  1 ) (  5 ) (  7 ) (    ) )      ( ( 15 ) ( 19 ) (  1 ) (  5 ) (  7 ) (    ) )
668    // ( (  5 ) ( -1 ) (    ) (  7 ) (  1 ) ( -4 ) )      ( (  5 ) ( -1 ) (    ) (  7 ) (  1 ) ( -4 ) )
669    // ( (    ) (  8 ) ( -2 ) (    ) ( -4 ) (  7 ) )      ( (    ) (  8 ) ( -2 ) (    ) ( -4 ) (  7 ) )
670    {
671       test_ = "Dense matrix assignment test 5";
672 
673       {
674          blaze::DynamicMatrix<VT,blaze::rowMajor> tmp( 2UL, 4UL );
675          tmp(0,0) = vec( 12 );
676          tmp(0,1) = vec( 18 );
677          tmp(0,2) = vec( 14 );
678          tmp(0,3) = vec( 15 );
679          tmp(1,0) = vec( 22 );
680          tmp(1,1) = vec( 17 );
681          tmp(1,2) = vec( 11 );
682          tmp(1,3) = vec( 19 );
683 
684          ST sym;
685          init( sym );
686 
687          auto sm = submatrix( sym, 0UL, 0UL, 2UL, 4UL );
688 
689          try {
690             sm = tmp;
691 
692             std::ostringstream oss;
693             oss << " Test: " << test_ << "\n"
694                 << " Error: Assignment of invalid matrix succeeded\n"
695                 << " Details:\n"
696                 << "   Result:\n" << sym << "\n";
697             throw std::runtime_error( oss.str() );
698          }
699          catch( std::invalid_argument& ) {}
700       }
701 
702       {
703          blaze::DynamicMatrix<VT,blaze::columnMajor> tmp( 4UL, 2UL );
704          tmp(0,0) = vec( 12 );
705          tmp(0,1) = vec( 18 );
706          tmp(1,0) = vec( 22 );
707          tmp(1,1) = vec( 17 );
708          tmp(2,0) = vec( 14 );
709          tmp(2,1) = vec( 11 );
710          tmp(3,0) = vec( 15 );
711          tmp(3,1) = vec( 19 );
712 
713          ST sym;
714          init( sym );
715 
716          auto sm = submatrix( sym, 0UL, 0UL, 4UL, 2UL );
717 
718          try {
719             sm = tmp;
720 
721             std::ostringstream oss;
722             oss << " Test: " << test_ << "\n"
723                 << " Error: Assignment of invalid matrix succeeded\n"
724                 << " Details:\n"
725                 << "   Result:\n" << sym << "\n";
726             throw std::runtime_error( oss.str() );
727          }
728          catch( std::invalid_argument& ) {}
729       }
730    }
731 
732    // ( (  1 ) ( -4 ) (  7 ) ( -2 ) (  5 ) (    ) )      ( (  1 ) ( -4 ) (  7 ) ( -2 ) (  5 ) (    ) )
733    // ( ( -4 ) (  2 ) (    ) (    ) ( -1 ) (  8 ) )      ( ( -4 ) (  2 ) ( 12 ) ( 13 ) ( -1 ) (  8 ) )
734    // ( (  7 ) (    ) (  3 ) (  1 ) (    ) ( -2 ) )  =>  ( (  7 ) ( 12 ) ( 18 ) ( 14 ) ( 15 ) ( -2 ) )
735    // ( ( -2 ) (    ) (  1 ) (  5 ) (  7 ) (    ) )      ( ( -2 ) ( 13 ) ( 22 ) ( 11 ) ( 19 ) (    ) )
736    // ( (  5 ) ( -1 ) (    ) (  7 ) (  1 ) ( -4 ) )      ( (  5 ) ( -1 ) ( 15 ) ( 19 ) (  1 ) ( -4 ) )
737    // ( (    ) (  8 ) ( -2 ) (    ) ( -4 ) (  7 ) )      ( (    ) (  8 ) ( -2 ) (    ) ( -4 ) (  7 ) )
738    {
739       test_ = "Dense matrix assignment test 6";
740 
741       {
742          blaze::DynamicMatrix<VT,blaze::rowMajor> tmp( 2UL, 4UL );
743          tmp(0,0) = vec( 12 );
744          tmp(0,1) = vec( 18 );
745          tmp(0,2) = vec( 14 );
746          tmp(0,3) = vec( 15 );
747          tmp(1,0) = vec( 13 );
748          tmp(1,1) = vec( 22 );
749          tmp(1,2) = vec( 11 );
750          tmp(1,3) = vec( 19 );
751 
752          ST sym;
753          init( sym );
754 
755          auto sm = submatrix( sym, 2UL, 1UL, 2UL, 4UL );
756 
757          try {
758             sm = tmp;
759 
760             std::ostringstream oss;
761             oss << " Test: " << test_ << "\n"
762                 << " Error: Assignment of invalid matrix succeeded\n"
763                 << " Details:\n"
764                 << "   Result:\n" << sym << "\n";
765             throw std::runtime_error( oss.str() );
766          }
767          catch( std::invalid_argument& ) {}
768       }
769 
770       {
771          blaze::DynamicMatrix<VT,blaze::columnMajor> tmp( 4UL, 2UL );
772          tmp(0,0) = vec( 12 );
773          tmp(0,1) = vec( 13 );
774          tmp(1,0) = vec( 18 );
775          tmp(1,1) = vec( 14 );
776          tmp(2,0) = vec( 22 );
777          tmp(2,1) = vec( 11 );
778          tmp(3,0) = vec( 15 );
779          tmp(3,1) = vec( 19 );
780 
781          ST sym;
782          init( sym );
783 
784          auto sm = submatrix( sym, 1UL, 2UL, 4UL, 2UL );
785 
786          try {
787             sm = tmp;
788 
789             std::ostringstream oss;
790             oss << " Test: " << test_ << "\n"
791                 << " Error: Assignment of invalid matrix succeeded\n"
792                 << " Details:\n"
793                 << "   Result:\n" << sym << "\n";
794             throw std::runtime_error( oss.str() );
795          }
796          catch( std::invalid_argument& ) {}
797       }
798    }
799 
800    // ( (  1 ) ( -4 ) (  7 ) ( -2 ) (  5 ) (    ) )      ( (  1 ) ( -4 ) (  7 ) ( -2 ) (  5 ) (    ) )
801    // ( ( -4 ) (  2 ) (    ) (    ) ( -1 ) (  8 ) )      ( ( -4 ) (  2 ) (    ) (    ) ( -1 ) (  8 ) )
802    // ( (  7 ) (    ) (  3 ) (  1 ) (    ) ( -2 ) )  =>  ( (  7 ) (    ) (  3 ) (  1 ) ( 12 ) ( 13 ) )
803    // ( ( -2 ) (    ) (  1 ) (  5 ) (  7 ) (    ) )      ( ( -2 ) (    ) (  1 ) (  5 ) ( 18 ) ( 14 ) )
804    // ( (  5 ) ( -1 ) (    ) (  7 ) (  1 ) ( -4 ) )      ( (  5 ) ( -1 ) ( 12 ) ( 18 ) ( 14 ) ( 11 ) )
805    // ( (    ) (  8 ) ( -2 ) (    ) ( -4 ) (  7 ) )      ( (    ) (  8 ) ( 13 ) ( 14 ) ( 22 ) ( 19 ) )
806    {
807       test_ = "Dense matrix assignment test 7";
808 
809       {
810          blaze::DynamicMatrix<VT,blaze::rowMajor> tmp( 2UL, 4UL );
811          tmp(0,0) = vec( 12 );
812          tmp(0,1) = vec( 18 );
813          tmp(0,2) = vec( 14 );
814          tmp(0,3) = vec( 11 );
815          tmp(1,0) = vec( 13 );
816          tmp(1,1) = vec( 14 );
817          tmp(1,2) = vec( 22 );
818          tmp(1,3) = vec( 19 );
819 
820          ST sym;
821          init( sym );
822 
823          auto sm = submatrix( sym, 4UL, 2UL, 2UL, 4UL );
824 
825          try {
826             sm = tmp;
827 
828             std::ostringstream oss;
829             oss << " Test: " << test_ << "\n"
830                 << " Error: Assignment of invalid matrix succeeded\n"
831                 << " Details:\n"
832                 << "   Result:\n" << sym << "\n";
833             throw std::runtime_error( oss.str() );
834          }
835          catch( std::invalid_argument& ) {}
836       }
837 
838       {
839          blaze::DynamicMatrix<VT,blaze::columnMajor> tmp( 4UL, 2UL );
840          tmp(0,0) = vec( 12 );
841          tmp(0,1) = vec( 13 );
842          tmp(1,0) = vec( 18 );
843          tmp(1,1) = vec( 14 );
844          tmp(2,0) = vec( 14 );
845          tmp(2,1) = vec( 11 );
846          tmp(3,0) = vec( 22 );
847          tmp(3,1) = vec( 19 );
848 
849          ST sym;
850          init( sym );
851 
852          auto sm = submatrix( sym, 2UL, 4UL, 4UL, 2UL );
853 
854          try {
855             sm = tmp;
856 
857             std::ostringstream oss;
858             oss << " Test: " << test_ << "\n"
859                 << " Error: Assignment of invalid matrix succeeded\n"
860                 << " Details:\n"
861                 << "   Result:\n" << sym << "\n";
862             throw std::runtime_error( oss.str() );
863          }
864          catch( std::invalid_argument& ) {}
865       }
866    }
867 
868    // ( (  1 ) ( -4 ) (  7 ) ( -2 ) (  5 ) (    ) )      ( (  1 ) ( -4 ) ( 12 ) ( 13 ) ( 19 ) (    ) )
869    // ( ( -4 ) (  2 ) (    ) (    ) ( -1 ) (  8 ) )      ( ( -4 ) (  2 ) ( 18 ) ( 14 ) ( 11 ) (  8 ) )
870    // ( (  7 ) (    ) (  3 ) (  1 ) (    ) ( -2 ) )  =>  ( ( 12 ) ( 18 ) ( 14 ) ( 11 ) ( 12 ) ( -2 ) )
871    // ( ( -2 ) (    ) (  1 ) (  5 ) (  7 ) (    ) )      ( ( 13 ) ( 14 ) ( 22 ) ( 19 ) ( 14 ) (    ) )
872    // ( (  5 ) ( -1 ) (    ) (  7 ) (  1 ) ( -4 ) )      ( ( 19 ) ( 11 ) ( 12 ) ( 14 ) (  1 ) ( -4 ) )
873    // ( (    ) (  8 ) ( -2 ) (    ) ( -4 ) (  7 ) )      ( (    ) (  8 ) ( -2 ) (    ) ( -4 ) (  7 ) )
874    {
875       test_ = "Dense matrix assignment test 8";
876 
877       {
878          blaze::DynamicMatrix<VT,blaze::rowMajor> tmp( 3UL, 4UL );
879          tmp(0,0) = vec( 12 );
880          tmp(0,1) = vec( 18 );
881          tmp(0,2) = vec( 14 );
882          tmp(0,3) = vec( 11 );
883          tmp(1,0) = vec( 13 );
884          tmp(1,1) = vec( 14 );
885          tmp(1,2) = vec( 22 );
886          tmp(1,3) = vec( 19 );
887          tmp(2,0) = vec( 19 );
888          tmp(2,1) = vec( 11 );
889          tmp(2,2) = vec( 12 );
890          tmp(2,3) = vec( 14 );
891 
892          ST sym;
893          init( sym );
894 
895          auto sm = submatrix( sym, 2UL, 0UL, 3UL, 4UL );
896 
897          try {
898             sm = tmp;
899 
900             std::ostringstream oss;
901             oss << " Test: " << test_ << "\n"
902                 << " Error: Assignment of invalid matrix succeeded\n"
903                 << " Details:\n"
904                 << "   Result:\n" << sym << "\n";
905             throw std::runtime_error( oss.str() );
906          }
907          catch( std::invalid_argument& ) {}
908       }
909 
910       {
911          blaze::DynamicMatrix<VT,blaze::rowMajor> tmp( 4UL, 3UL );
912          tmp(0,0) = vec( 12 );
913          tmp(0,1) = vec( 13 );
914          tmp(0,2) = vec( 19 );
915          tmp(1,0) = vec( 18 );
916          tmp(1,1) = vec( 14 );
917          tmp(1,2) = vec( 11 );
918          tmp(2,0) = vec( 14 );
919          tmp(2,1) = vec( 11 );
920          tmp(2,2) = vec( 12 );
921          tmp(3,0) = vec( 22 );
922          tmp(3,1) = vec( 19 );
923          tmp(3,2) = vec( 14 );
924 
925          ST sym;
926          init( sym );
927 
928          auto sm = submatrix( sym, 0UL, 2UL, 4UL, 3UL );
929 
930          try {
931             sm = tmp;
932 
933             std::ostringstream oss;
934             oss << " Test: " << test_ << "\n"
935                 << " Error: Assignment of invalid matrix succeeded\n"
936                 << " Details:\n"
937                 << "   Result:\n" << sym << "\n";
938             throw std::runtime_error( oss.str() );
939          }
940          catch( std::invalid_argument& ) {}
941       }
942    }
943 
944 
945    //=====================================================================================
946    // Sparse matrix assignment
947    //=====================================================================================
948 
949    // ( (  1 ) ( -4 ) (  7 ) ( -2 ) (  5 ) (    ) )      ( ( 12 ) ( 18 ) ( 14 ) ( 15 ) (  5 ) (    ) )
950    // ( ( -4 ) (  2 ) (    ) (    ) ( -1 ) (  8 ) )      ( ( 18 ) ( 17 ) ( 11 ) ( 19 ) ( -1 ) (  8 ) )
951    // ( (  7 ) (    ) (  3 ) (  1 ) (    ) ( -2 ) )  =>  ( ( 14 ) ( 11 ) (  3 ) (  1 ) (    ) ( -2 ) )
952    // ( ( -2 ) (    ) (  1 ) (  5 ) (  7 ) (    ) )      ( ( 15 ) ( 19 ) (  1 ) (  5 ) (  7 ) (    ) )
953    // ( (  5 ) ( -1 ) (    ) (  7 ) (  1 ) ( -4 ) )      ( (  5 ) ( -1 ) (    ) (  7 ) (  1 ) ( -4 ) )
954    // ( (    ) (  8 ) ( -2 ) (    ) ( -4 ) (  7 ) )      ( (    ) (  8 ) ( -2 ) (    ) ( -4 ) (  7 ) )
955    {
956       test_ = "Sparse matrix assignment test 1";
957 
958       {
959          blaze::CompressedMatrix<VT,blaze::rowMajor> tmp( 2UL, 4UL, 8UL );
960          tmp(0,0) = vec( 12 );
961          tmp(0,1) = vec( 18 );
962          tmp(0,2) = vec( 14 );
963          tmp(0,3) = vec( 15 );
964          tmp(1,0) = vec( 18 );
965          tmp(1,1) = vec( 17 );
966          tmp(1,2) = vec( 11 );
967          tmp(1,3) = vec( 19 );
968 
969          ST sym;
970          init( sym );
971 
972          auto sm = submatrix( sym, 0UL, 0UL, 2UL, 4UL );
973          sm = tmp;
974 
975          checkRows    ( sym,  6UL );
976          checkColumns ( sym,  6UL );
977          checkNonZeros( sym, 30UL );
978 
979          if( sm(0,0) != vec( 12 ) || sm(0,1) != vec( 18 ) || sm(0,2) != vec( 14 ) || sm(0,3) != vec( 15 ) ||
980              sm(1,0) != vec( 18 ) || sm(1,1) != vec( 17 ) || sm(1,2) != vec( 11 ) || sm(1,3) != vec( 19 ) ) {
981             std::ostringstream oss;
982             oss << " Test: " << test_ << "\n"
983                 << " Error: Assignment to submatrix failed\n"
984                 << " Details:\n"
985                 << "   Result:\n" << sm << "\n"
986                 << "   Expected result:\n( ( 12 ) ( 18 ) ( 14 ) ( 15 ) )\n"
987                                         "( ( 18 ) ( 17 ) ( 11 ) ( 19 ) )\n";
988             throw std::runtime_error( oss.str() );
989          }
990 
991          if( sym(0,0) != vec( 12 )  || sym(0,1) != vec( 18 ) || sym(0,2) != vec( 14 )  || sym(0,3) != vec( 15 )  || sym(0,4) != vec(  5 )  || !isDefault( sym(0,5) ) ||
992              sym(1,0) != vec( 18 )  || sym(1,1) != vec( 17 ) || sym(1,2) != vec( 11 )  || sym(1,3) != vec( 19 )  || sym(1,4) != vec( -1 )  || sym(1,5) != vec(  8 )  ||
993              sym(2,0) != vec( 14 )  || sym(2,1) != vec( 11 ) || sym(2,2) != vec(  3 )  || sym(2,3) != vec(  1 )  || !isDefault( sym(2,4) ) || sym(2,5) != vec( -2 )  ||
994              sym(3,0) != vec( 15 )  || sym(3,1) != vec( 19 ) || sym(3,2) != vec(  1 )  || sym(3,3) != vec(  5 )  || sym(3,4) != vec(  7 )  || !isDefault( sym(3,5) ) ||
995              sym(4,0) != vec(  5 )  || sym(4,1) != vec( -1 ) || !isDefault( sym(4,2) ) || sym(4,3) != vec(  7 )  || sym(4,4) != vec(  1 )  || sym(4,5) != vec( -4 )  ||
996              !isDefault( sym(5,0) ) || sym(5,1) != vec(  8 ) || sym(5,2) != vec( -2 )  || !isDefault( sym(5,3) ) || sym(5,4) != vec( -4 )  || sym(5,5) != vec(  7 ) ) {
997             std::ostringstream oss;
998             oss << " Test: " << test_ << "\n"
999                 << " Error: Assignment to submatrix failed\n"
1000                 << " Details:\n"
1001                 << "   Result:\n" << sym << "\n"
1002                 << "   Expected result:\n( ( 12 ) ( 18 ) ( 14 ) ( 15 ) (  5 ) (    ) )\n"
1003                                         "( ( 18 ) ( 17 ) ( 11 ) ( 19 ) ( -1 ) (  8 ) )\n"
1004                                         "( ( 14 ) ( 11 ) (  3 ) (  1 ) (    ) ( -2 ) )\n"
1005                                         "( ( 15 ) ( 19 ) (  1 ) (  5 ) (  7 ) (    ) )\n"
1006                                         "( (  5 ) ( -1 ) (    ) (  7 ) (  1 ) ( -4 ) )\n"
1007                                         "( (    ) (  8 ) ( -2 ) (    ) ( -4 ) (  7 ) )\n";
1008             throw std::runtime_error( oss.str() );
1009          }
1010       }
1011 
1012       {
1013          blaze::CompressedMatrix<VT,blaze::columnMajor> tmp( 4UL, 2UL, 8UL );
1014          tmp(0,0) = vec( 12 );
1015          tmp(0,1) = vec( 18 );
1016          tmp(1,0) = vec( 18 );
1017          tmp(1,1) = vec( 17 );
1018          tmp(2,0) = vec( 14 );
1019          tmp(2,1) = vec( 11 );
1020          tmp(3,0) = vec( 15 );
1021          tmp(3,1) = vec( 19 );
1022 
1023          ST sym;
1024          init( sym );
1025 
1026          auto sm = submatrix( sym, 0UL, 0UL, 4UL, 2UL );
1027          sm = tmp;
1028 
1029          checkRows    ( sym,  6UL );
1030          checkColumns ( sym,  6UL );
1031          checkNonZeros( sym, 30UL );
1032 
1033          if( sm(0,0) != vec( 12 ) || sm(0,1) != vec( 18 ) ||
1034              sm(1,0) != vec( 18 ) || sm(1,1) != vec( 17 ) ||
1035              sm(2,0) != vec( 14 ) || sm(2,1) != vec( 11 ) ||
1036              sm(3,0) != vec( 15 ) || sm(3,1) != vec( 19 ) ) {
1037             std::ostringstream oss;
1038             oss << " Test: " << test_ << "\n"
1039                 << " Error: Assignment to submatrix failed\n"
1040                 << " Details:\n"
1041                 << "   Result:\n" << sm << "\n"
1042                 << "   Expected result:\n( ( 12 ) ( 18 ) )\n"
1043                                         "( ( 18 ) ( 17 ) )\n"
1044                                         "( ( 14 ) ( 11 ) )\n"
1045                                         "( ( 15 ) ( 19 ) )\n";
1046             throw std::runtime_error( oss.str() );
1047          }
1048 
1049          if( sym(0,0) != vec( 12 )  || sym(0,1) != vec( 18 ) || sym(0,2) != vec( 14 )  || sym(0,3) != vec( 15 )  || sym(0,4) != vec(  5 )  || !isDefault( sym(0,5) ) ||
1050              sym(1,0) != vec( 18 )  || sym(1,1) != vec( 17 ) || sym(1,2) != vec( 11 )  || sym(1,3) != vec( 19 )  || sym(1,4) != vec( -1 )  || sym(1,5) != vec(  8 )  ||
1051              sym(2,0) != vec( 14 )  || sym(2,1) != vec( 11 ) || sym(2,2) != vec(  3 )  || sym(2,3) != vec(  1 )  || !isDefault( sym(2,4) ) || sym(2,5) != vec( -2 )  ||
1052              sym(3,0) != vec( 15 )  || sym(3,1) != vec( 19 ) || sym(3,2) != vec(  1 )  || sym(3,3) != vec(  5 )  || sym(3,4) != vec(  7 )  || !isDefault( sym(3,5) ) ||
1053              sym(4,0) != vec(  5 )  || sym(4,1) != vec( -1 ) || !isDefault( sym(4,2) ) || sym(4,3) != vec(  7 )  || sym(4,4) != vec(  1 )  || sym(4,5) != vec( -4 )  ||
1054              !isDefault( sym(5,0) ) || sym(5,1) != vec(  8 ) || sym(5,2) != vec( -2 )  || !isDefault( sym(5,3) ) || sym(5,4) != vec( -4 )  || sym(5,5) != vec(  7 ) ) {
1055             std::ostringstream oss;
1056             oss << " Test: " << test_ << "\n"
1057                 << " Error: Assignment to submatrix failed\n"
1058                 << " Details:\n"
1059                 << "   Result:\n" << sym << "\n"
1060                 << "   Expected result:\n( ( 12 ) ( 18 ) ( 14 ) ( 15 ) (  5 ) (    ) )\n"
1061                                         "( ( 18 ) ( 17 ) ( 11 ) ( 19 ) ( -1 ) (  8 ) )\n"
1062                                         "( ( 14 ) ( 11 ) (  3 ) (  1 ) (    ) ( -2 ) )\n"
1063                                         "( ( 15 ) ( 19 ) (  1 ) (  5 ) (  7 ) (    ) )\n"
1064                                         "( (  5 ) ( -1 ) (    ) (  7 ) (  1 ) ( -4 ) )\n"
1065                                         "( (    ) (  8 ) ( -2 ) (    ) ( -4 ) (  7 ) )\n";
1066             throw std::runtime_error( oss.str() );
1067          }
1068       }
1069    }
1070 
1071    // ( (  1 ) ( -4 ) (  7 ) ( -2 ) (  5 ) (    ) )      ( (  1 ) ( -4 ) (  7 ) ( -2 ) (  5 ) (    ) )
1072    // ( ( -4 ) (  2 ) (    ) (    ) ( -1 ) (  8 ) )      ( ( -4 ) (  2 ) ( 12 ) ( 13 ) ( -1 ) (  8 ) )
1073    // ( (  7 ) (    ) (  3 ) (  1 ) (    ) ( -2 ) )  =>  ( (  7 ) ( 12 ) ( 18 ) ( 14 ) ( 15 ) ( -2 ) )
1074    // ( ( -2 ) (    ) (  1 ) (  5 ) (  7 ) (    ) )      ( ( -2 ) ( 13 ) ( 14 ) ( 11 ) ( 19 ) (    ) )
1075    // ( (  5 ) ( -1 ) (    ) (  7 ) (  1 ) ( -4 ) )      ( (  5 ) ( -1 ) ( 15 ) ( 19 ) (  1 ) ( -4 ) )
1076    // ( (    ) (  8 ) ( -2 ) (    ) ( -4 ) (  7 ) )      ( (    ) (  8 ) ( -2 ) (    ) ( -4 ) (  7 ) )
1077    {
1078       test_ = "Sparse matrix assignment test 2";
1079 
1080       {
1081          blaze::CompressedMatrix<VT,blaze::rowMajor> tmp( 2UL, 4UL , 8UL);
1082          tmp(0,0) = vec( 12 );
1083          tmp(0,1) = vec( 18 );
1084          tmp(0,2) = vec( 14 );
1085          tmp(0,3) = vec( 15 );
1086          tmp(1,0) = vec( 13 );
1087          tmp(1,1) = vec( 14 );
1088          tmp(1,2) = vec( 11 );
1089          tmp(1,3) = vec( 19 );
1090 
1091          ST sym;
1092          init( sym );
1093 
1094          auto sm = submatrix( sym, 2UL, 1UL, 2UL, 4UL );
1095          sm = tmp;
1096 
1097          checkRows    ( sym,  6UL );
1098          checkColumns ( sym,  6UL );
1099          checkNonZeros( sym, 32UL );
1100 
1101          if( sm(0,0) != vec( 12 ) || sm(0,1) != vec( 18 ) || sm(0,2) != vec( 14 ) || sm(0,3) != vec( 15 ) ||
1102              sm(1,0) != vec( 13 ) || sm(1,1) != vec( 14 ) || sm(1,2) != vec( 11 ) || sm(1,3) != vec( 19 ) ) {
1103             std::ostringstream oss;
1104             oss << " Test: " << test_ << "\n"
1105                 << " Error: Assignment to submatrix failed\n"
1106                 << " Details:\n"
1107                 << "   Result:\n" << sm << "\n"
1108                 << "   Expected result:\n( ( 12 ) ( 18 ) ( 14 ) ( 15 ) )\n"
1109                                         "( ( 13 ) ( 14 ) ( 11 ) ( 19 ) )\n";
1110             throw std::runtime_error( oss.str() );
1111          }
1112 
1113          if( sym(0,0) != vec(  1 )  || sym(0,1) != vec( -4 ) || sym(0,2) != vec(  7 ) || sym(0,3) != vec( -2 )  || sym(0,4) != vec(  5 ) || !isDefault( sym(0,5) ) ||
1114              sym(1,0) != vec( -4 )  || sym(1,1) != vec(  2 ) || sym(1,2) != vec( 12 ) || sym(1,3) != vec( 13 )  || sym(1,4) != vec( -1 ) || sym(1,5) != vec(  8 )  ||
1115              sym(2,0) != vec(  7 )  || sym(2,1) != vec( 12 ) || sym(2,2) != vec( 18 ) || sym(2,3) != vec( 14 )  || sym(2,4) != vec( 15 ) || sym(2,5) != vec( -2 )  ||
1116              sym(3,0) != vec( -2 )  || sym(3,1) != vec( 13 ) || sym(3,2) != vec( 14 ) || sym(3,3) != vec( 11 )  || sym(3,4) != vec( 19 ) || !isDefault( sym(3,5) ) ||
1117              sym(4,0) != vec(  5 )  || sym(4,1) != vec( -1 ) || sym(4,2) != vec( 15 ) || sym(4,3) != vec( 19 )  || sym(4,4) != vec(  1 ) || sym(4,5) != vec( -4 )  ||
1118              !isDefault( sym(5,0) ) || sym(5,1) != vec(  8 ) || sym(5,2) != vec( -2 ) || !isDefault( sym(5,3) ) || sym(5,4) != vec( -4 ) || sym(5,5) != vec(  7 ) ) {
1119             std::ostringstream oss;
1120             oss << " Test: " << test_ << "\n"
1121                 << " Error: Assignment to submatrix failed\n"
1122                 << " Details:\n"
1123                 << "   Result:\n" << sym << "\n"
1124                 << "   Expected result:\n( (  1 ) ( -4 ) (  7 ) ( -2 ) (  5 ) (    ) )\n"
1125                                         "( ( -4 ) (  2 ) ( 12 ) ( 13 ) ( -1 ) (  8 ) )\n"
1126                                         "( (  7 ) ( 12 ) ( 18 ) ( 14 ) ( 15 ) ( -2 ) )\n"
1127                                         "( ( -2 ) ( 13 ) ( 14 ) ( 11 ) ( 19 ) (    ) )\n"
1128                                         "( (  5 ) ( -1 ) ( 15 ) ( 19 ) (  1 ) ( -4 ) )\n"
1129                                         "( (    ) (  8 ) ( -2 ) (    ) ( -4 ) (  7 ) )\n";
1130             throw std::runtime_error( oss.str() );
1131          }
1132       }
1133 
1134       {
1135          blaze::CompressedMatrix<VT,blaze::columnMajor> tmp( 4UL, 2UL, 8UL );
1136          tmp(0,0) = vec( 12 );
1137          tmp(0,1) = vec( 13 );
1138          tmp(1,0) = vec( 18 );
1139          tmp(1,1) = vec( 14 );
1140          tmp(2,0) = vec( 14 );
1141          tmp(2,1) = vec( 11 );
1142          tmp(3,0) = vec( 15 );
1143          tmp(3,1) = vec( 19 );
1144 
1145          ST sym;
1146          init( sym );
1147 
1148          auto sm = submatrix( sym, 1UL, 2UL, 4UL, 2UL );
1149          sm = tmp;
1150 
1151          checkRows    ( sym,  6UL );
1152          checkColumns ( sym,  6UL );
1153          checkNonZeros( sym, 32UL );
1154 
1155          if( sm(0,0) != vec( 12 ) || sm(0,1) != vec( 13 ) ||
1156              sm(1,0) != vec( 18 ) || sm(1,1) != vec( 14 ) ||
1157              sm(2,0) != vec( 14 ) || sm(2,1) != vec( 11 ) ||
1158              sm(3,0) != vec( 15 ) || sm(3,1) != vec( 19 ) ) {
1159             std::ostringstream oss;
1160             oss << " Test: " << test_ << "\n"
1161                 << " Error: Assignment to submatrix failed\n"
1162                 << " Details:\n"
1163                 << "   Result:\n" << sm << "\n"
1164                 << "   Expected result:\n( ( 12 ) ( 13 ) )\n"
1165                                         "( ( 18 ) ( 14 ) )\n"
1166                                         "( ( 14 ) ( 11 ) )\n"
1167                                         "( ( 15 ) ( 19 ) )\n";
1168             throw std::runtime_error( oss.str() );
1169          }
1170 
1171          if( sym(0,0) != vec(  1 )  || sym(0,1) != vec( -4 ) || sym(0,2) != vec(  7 ) || sym(0,3) != vec( -2 )  || sym(0,4) != vec(  5 ) || !isDefault( sym(0,5) ) ||
1172              sym(1,0) != vec( -4 )  || sym(1,1) != vec(  2 ) || sym(1,2) != vec( 12 ) || sym(1,3) != vec( 13 )  || sym(1,4) != vec( -1 ) || sym(1,5) != vec(  8 )  ||
1173              sym(2,0) != vec(  7 )  || sym(2,1) != vec( 12 ) || sym(2,2) != vec( 18 ) || sym(2,3) != vec( 14 )  || sym(2,4) != vec( 15 ) || sym(2,5) != vec( -2 )  ||
1174              sym(3,0) != vec( -2 )  || sym(3,1) != vec( 13 ) || sym(3,2) != vec( 14 ) || sym(3,3) != vec( 11 )  || sym(3,4) != vec( 19 ) || !isDefault( sym(3,5) ) ||
1175              sym(4,0) != vec(  5 )  || sym(4,1) != vec( -1 ) || sym(4,2) != vec( 15 ) || sym(4,3) != vec( 19 )  || sym(4,4) != vec(  1 ) || sym(4,5) != vec( -4 )  ||
1176              !isDefault( sym(5,0) ) || sym(5,1) != vec(  8 ) || sym(5,2) != vec( -2 ) || !isDefault( sym(5,3) ) || sym(5,4) != vec( -4 ) || sym(5,5) != vec(  7 ) ) {
1177             std::ostringstream oss;
1178             oss << " Test: " << test_ << "\n"
1179                 << " Error: Assignment to submatrix failed\n"
1180                 << " Details:\n"
1181                 << "   Result:\n" << sym << "\n"
1182                 << "   Expected result:\n( (  1 ) ( -4 ) (  7 ) ( -2 ) (  5 ) (    ) )\n"
1183                                         "( ( -4 ) (  2 ) ( 12 ) ( 13 ) ( -1 ) (  8 ) )\n"
1184                                         "( (  7 ) ( 12 ) ( 18 ) ( 14 ) ( 15 ) ( -2 ) )\n"
1185                                         "( ( -2 ) ( 13 ) ( 14 ) ( 11 ) ( 19 ) (    ) )\n"
1186                                         "( (  5 ) ( -1 ) ( 15 ) ( 19 ) (  1 ) ( -4 ) )\n"
1187                                         "( (    ) (  8 ) ( -2 ) (    ) ( -4 ) (  7 ) )\n";
1188             throw std::runtime_error( oss.str() );
1189          }
1190       }
1191    }
1192 
1193    // ( (  1 ) ( -4 ) (  7 ) ( -2 ) (  5 ) (    ) )      ( (  1 ) ( -4 ) (  7 ) ( -2 ) (  5 ) (    ) )
1194    // ( ( -4 ) (  2 ) (    ) (    ) ( -1 ) (  8 ) )      ( ( -4 ) (  2 ) (    ) (    ) ( -1 ) (  8 ) )
1195    // ( (  7 ) (    ) (  3 ) (  1 ) (    ) ( -2 ) )  =>  ( (  7 ) (    ) (  3 ) (  1 ) ( 12 ) ( 13 ) )
1196    // ( ( -2 ) (    ) (  1 ) (  5 ) (  7 ) (    ) )      ( ( -2 ) (    ) (  1 ) (  5 ) ( 18 ) ( 14 ) )
1197    // ( (  5 ) ( -1 ) (    ) (  7 ) (  1 ) ( -4 ) )      ( (  5 ) ( -1 ) ( 12 ) ( 18 ) ( 14 ) ( 11 ) )
1198    // ( (    ) (  8 ) ( -2 ) (    ) ( -4 ) (  7 ) )      ( (    ) (  8 ) ( 13 ) ( 14 ) ( 11 ) ( 19 ) )
1199    {
1200       test_ = "Sparse matrix assignment test 3";
1201 
1202       {
1203          blaze::CompressedMatrix<VT,blaze::rowMajor> tmp( 2UL, 4UL, 8UL );
1204          tmp(0,0) = vec( 12 );
1205          tmp(0,1) = vec( 18 );
1206          tmp(0,2) = vec( 14 );
1207          tmp(0,3) = vec( 11 );
1208          tmp(1,0) = vec( 13 );
1209          tmp(1,1) = vec( 14 );
1210          tmp(1,2) = vec( 11 );
1211          tmp(1,3) = vec( 19 );
1212 
1213          ST sym;
1214          init( sym );
1215 
1216          auto sm = submatrix( sym, 4UL, 2UL, 2UL, 4UL );
1217          sm = tmp;
1218 
1219          checkRows    ( sym,  6UL );
1220          checkColumns ( sym,  6UL );
1221          checkNonZeros( sym, 30UL );
1222 
1223          if( sm(0,0) != vec( 12 ) || sm(0,1) != vec( 18 ) || sm(0,2) != vec( 14 ) || sm(0,3) != vec( 11 ) ||
1224              sm(1,0) != vec( 13 ) || sm(1,1) != vec( 14 ) || sm(1,2) != vec( 11 ) || sm(1,3) != vec( 19 ) ) {
1225             std::ostringstream oss;
1226             oss << " Test: " << test_ << "\n"
1227                 << " Error: Assignment to submatrix failed\n"
1228                 << " Details:\n"
1229                 << "   Result:\n" << sm << "\n"
1230                 << "   Expected result:\n( ( 12 ) ( 18 ) ( 14 ) ( 11 ) )\n"
1231                                         "( ( 13 ) ( 14 ) ( 11 ) ( 19 ) )\n";
1232             throw std::runtime_error( oss.str() );
1233          }
1234 
1235          if( sym(0,0) != vec(  1 )  || sym(0,1) != vec( -4 )  || sym(0,2) != vec(  7 )  || sym(0,3) != vec( -2 )  || sym(0,4) != vec(  5 ) || !isDefault( sym(0,5) ) ||
1236              sym(1,0) != vec( -4 )  || sym(1,1) != vec(  2 )  || !isDefault( sym(1,2) ) || !isDefault( sym(1,3) ) || sym(1,4) != vec( -1 ) || sym(1,5) != vec(  8 )  ||
1237              sym(2,0) != vec(  7 )  || !isDefault( sym(2,1) ) || sym(2,2) != vec(  3 )  || sym(2,3) != vec(  1 )  || sym(2,4) != vec( 12 ) || sym(2,5) != vec( 13 )  ||
1238              sym(3,0) != vec( -2 )  || !isDefault( sym(3,1) ) || sym(3,2) != vec(  1 )  || sym(3,3) != vec(  5 )  || sym(3,4) != vec( 18 ) || sym(3,5) != vec( 14 )  ||
1239              sym(4,0) != vec(  5 )  || sym(4,1) != vec( -1 )  || sym(4,2) != vec( 12 )  || sym(4,3) != vec( 18 )  || sym(4,4) != vec( 14 ) || sym(4,5) != vec( 11 )  ||
1240              !isDefault( sym(5,0) ) || sym(5,1) != vec(  8 )  || sym(5,2) != vec( 13 )  || sym(5,3) != vec( 14 )  || sym(5,4) != vec( 11 ) || sym(5,5) != vec( 19 ) ) {
1241             std::ostringstream oss;
1242             oss << " Test: " << test_ << "\n"
1243                 << " Error: Assignment to submatrix failed\n"
1244                 << " Details:\n"
1245                 << "   Result:\n" << sym << "\n"
1246                 << "   Expected result:\n( (  1 ) ( -4 ) (  7 ) ( -2 ) (  5 ) (    ) )\n"
1247                                         "( ( -4 ) (  2 ) (    ) (    ) ( -1 ) (  8 ) )\n"
1248                                         "( (  7 ) (    ) (  3 ) (  1 ) ( 12 ) ( 13 ) )\n"
1249                                         "( ( -2 ) (    ) (  1 ) (  5 ) ( 18 ) ( 14 ) )\n"
1250                                         "( (  5 ) ( -1 ) ( 12 ) ( 18 ) ( 14 ) ( 11 ) )\n"
1251                                         "( (    ) (  8 ) ( 13 ) ( 14 ) ( 11 ) ( 19 ) )\n";
1252             throw std::runtime_error( oss.str() );
1253          }
1254       }
1255 
1256       {
1257          blaze::CompressedMatrix<VT,blaze::columnMajor> tmp( 4UL, 2UL, 8UL );
1258          tmp(0,0) = vec( 12 );
1259          tmp(0,1) = vec( 13 );
1260          tmp(1,0) = vec( 18 );
1261          tmp(1,1) = vec( 14 );
1262          tmp(2,0) = vec( 14 );
1263          tmp(2,1) = vec( 11 );
1264          tmp(3,0) = vec( 11 );
1265          tmp(3,1) = vec( 19 );
1266 
1267          ST sym;
1268          init( sym );
1269 
1270          auto sm = submatrix( sym, 2UL, 4UL, 4UL, 2UL );
1271          sm = tmp;
1272 
1273          checkRows    ( sym,  6UL );
1274          checkColumns ( sym,  6UL );
1275          checkNonZeros( sym, 30UL );
1276 
1277          if( sm(0,0) != vec( 12 ) || sm(0,1) != vec( 13 ) ||
1278              sm(1,0) != vec( 18 ) || sm(1,1) != vec( 14 ) ||
1279              sm(2,0) != vec( 14 ) || sm(2,1) != vec( 11 ) ||
1280              sm(3,0) != vec( 11 ) || sm(3,1) != vec( 19 ) ) {
1281             std::ostringstream oss;
1282             oss << " Test: " << test_ << "\n"
1283                 << " Error: Assignment to submatrix failed\n"
1284                 << " Details:\n"
1285                 << "   Result:\n" << sm << "\n"
1286                 << "   Expected result:\n( ( 12 ) ( 13 ) )\n"
1287                                         "( ( 18 ) ( 14 ) )\n"
1288                                         "( ( 14 ) ( 11 ) )\n"
1289                                         "( ( 11 ) ( 19 ) )\n";
1290             throw std::runtime_error( oss.str() );
1291          }
1292 
1293          if( sym(0,0) != vec(  1 )  || sym(0,1) != vec( -4 )  || sym(0,2) != vec(  7 )  || sym(0,3) != vec( -2 )  || sym(0,4) != vec(  5 ) || !isDefault( sym(0,5) ) ||
1294              sym(1,0) != vec( -4 )  || sym(1,1) != vec(  2 )  || !isDefault( sym(1,2) ) || !isDefault( sym(1,3) ) || sym(1,4) != vec( -1 ) || sym(1,5) != vec(  8 )  ||
1295              sym(2,0) != vec(  7 )  || !isDefault( sym(2,1) ) || sym(2,2) != vec(  3 )  || sym(2,3) != vec(  1 )  || sym(2,4) != vec( 12 ) || sym(2,5) != vec( 13 )  ||
1296              sym(3,0) != vec( -2 )  || !isDefault( sym(3,1) ) || sym(3,2) != vec(  1 )  || sym(3,3) != vec(  5 )  || sym(3,4) != vec( 18 ) || sym(3,5) != vec( 14 )  ||
1297              sym(4,0) != vec(  5 )  || sym(4,1) != vec( -1 )  || sym(4,2) != vec( 12 )  || sym(4,3) != vec( 18 )  || sym(4,4) != vec( 14 ) || sym(4,5) != vec( 11 )  ||
1298              !isDefault( sym(5,0) ) || sym(5,1) != vec(  8 )  || sym(5,2) != vec( 13 )  || sym(5,3) != vec( 14 )  || sym(5,4) != vec( 11 ) || sym(5,5) != vec( 19 ) ) {
1299             std::ostringstream oss;
1300             oss << " Test: " << test_ << "\n"
1301                 << " Error: Assignment to submatrix failed\n"
1302                 << " Details:\n"
1303                 << "   Result:\n" << sym << "\n"
1304                 << "   Expected result:\n( (  1 ) ( -4 ) (  7 ) ( -2 ) (  5 ) (    ) )\n"
1305                                         "( ( -4 ) (  2 ) (    ) (    ) ( -1 ) (  8 ) )\n"
1306                                         "( (  7 ) (    ) (  3 ) (  1 ) ( 12 ) ( 13 ) )\n"
1307                                         "( ( -2 ) (    ) (  1 ) (  5 ) ( 18 ) ( 14 ) )\n"
1308                                         "( (  5 ) ( -1 ) ( 12 ) ( 18 ) ( 14 ) ( 11 ) )\n"
1309                                         "( (    ) (  8 ) ( 13 ) ( 14 ) ( 11 ) ( 19 ) )\n";
1310             throw std::runtime_error( oss.str() );
1311          }
1312       }
1313    }
1314 
1315    // ( (  1 ) ( -4 ) (  7 ) ( -2 ) (  5 ) (    ) )      ( (  1 ) ( -4 ) ( 12 ) ( 13 ) ( 19 ) (    ) )
1316    // ( ( -4 ) (  2 ) (    ) (    ) ( -1 ) (  8 ) )      ( ( -4 ) (  2 ) ( 18 ) ( 14 ) ( 11 ) (  8 ) )
1317    // ( (  7 ) (    ) (  3 ) (  1 ) (    ) ( -2 ) )  =>  ( ( 12 ) ( 18 ) ( 14 ) ( 11 ) ( 12 ) ( -2 ) )
1318    // ( ( -2 ) (    ) (  1 ) (  5 ) (  7 ) (    ) )      ( ( 13 ) ( 14 ) ( 11 ) ( 19 ) ( 14 ) (    ) )
1319    // ( (  5 ) ( -1 ) (    ) (  7 ) (  1 ) ( -4 ) )      ( ( 19 ) ( 11 ) ( 12 ) ( 14 ) (  1 ) ( -4 ) )
1320    // ( (    ) (  8 ) ( -2 ) (    ) ( -4 ) (  7 ) )      ( (    ) (  8 ) ( -2 ) (    ) ( -4 ) (  7 ) )
1321    {
1322       test_ = "Sparse matrix assignment test 4";
1323 
1324       {
1325          blaze::CompressedMatrix<VT,blaze::rowMajor> tmp( 3UL, 4UL, 12UL );
1326          tmp(0,0) = vec( 12 );
1327          tmp(0,1) = vec( 18 );
1328          tmp(0,2) = vec( 14 );
1329          tmp(0,3) = vec( 11 );
1330          tmp(1,0) = vec( 13 );
1331          tmp(1,1) = vec( 14 );
1332          tmp(1,2) = vec( 11 );
1333          tmp(1,3) = vec( 19 );
1334          tmp(2,0) = vec( 19 );
1335          tmp(2,1) = vec( 11 );
1336          tmp(2,2) = vec( 12 );
1337          tmp(2,3) = vec( 14 );
1338 
1339          ST sym;
1340          init( sym );
1341 
1342          auto sm = submatrix( sym, 2UL, 0UL, 3UL, 4UL );
1343          sm = tmp;
1344 
1345          checkRows    ( sym,  6UL );
1346          checkColumns ( sym,  6UL );
1347          checkNonZeros( sym, 32UL );
1348 
1349          if( sm(0,0) != vec( 12 ) || sm(0,1) != vec( 18 ) || sm(0,2) != vec( 14 ) || sm(0,3) != vec( 11 ) ||
1350              sm(1,0) != vec( 13 ) || sm(1,1) != vec( 14 ) || sm(1,2) != vec( 11 ) || sm(1,3) != vec( 19 ) ||
1351              sm(2,0) != vec( 19 ) || sm(2,1) != vec( 11 ) || sm(2,2) != vec( 12 ) || sm(2,3) != vec( 14 ) ) {
1352             std::ostringstream oss;
1353             oss << " Test: " << test_ << "\n"
1354                 << " Error: Assignment to submatrix failed\n"
1355                 << " Details:\n"
1356                 << "   Result:\n" << sm << "\n"
1357                 << "   Expected result:\n( ( 12 ) ( 18 ) ( 14 ) ( 11 ) )\n"
1358                                         "( ( 13 ) ( 14 ) ( 11 ) ( 19 ) )\n"
1359                                         "( ( 19 ) ( 11 ) ( 12 ) ( 14 ) )\n";
1360             throw std::runtime_error( oss.str() );
1361          }
1362 
1363          if( sym(0,0) != vec(  1 )  || sym(0,1) != vec( -4 ) || sym(0,2) != vec( 12 ) || sym(0,3) != vec( 13 )  || sym(0,4) != vec( 19 ) || !isDefault( sym(0,5) ) ||
1364              sym(1,0) != vec( -4 )  || sym(1,1) != vec(  2 ) || sym(1,2) != vec( 18 ) || sym(1,3) != vec( 14 )  || sym(1,4) != vec( 11 ) || sym(1,5) != vec(  8 )  ||
1365              sym(2,0) != vec( 12 )  || sym(2,1) != vec( 18 ) || sym(2,2) != vec( 14 ) || sym(2,3) != vec( 11 )  || sym(2,4) != vec( 12 ) || sym(2,5) != vec( -2 )  ||
1366              sym(3,0) != vec( 13 )  || sym(3,1) != vec( 14 ) || sym(3,2) != vec( 11 ) || sym(3,3) != vec( 19 )  || sym(3,4) != vec( 14 ) || !isDefault( sym(3,5) ) ||
1367              sym(4,0) != vec( 19 )  || sym(4,1) != vec( 11 ) || sym(4,2) != vec( 12 ) || sym(4,3) != vec( 14 )  || sym(4,4) != vec(  1 ) || sym(4,5) != vec( -4 )  ||
1368              !isDefault( sym(5,0) ) || sym(5,1) != vec(  8 ) || sym(5,2) != vec( -2 ) || !isDefault( sym(5,3) ) || sym(5,4) != vec( -4 ) || sym(5,5) != vec(  7 ) ) {
1369             std::ostringstream oss;
1370             oss << " Test: " << test_ << "\n"
1371                 << " Error: Assignment to submatrix failed\n"
1372                 << " Details:\n"
1373                 << "   Result:\n" << sym << "\n"
1374                 << "   Expected result:\n( (  1 ) ( -4 ) ( 12 ) ( 13 ) ( 19 ) (    ) )\n"
1375                                         "( ( -4 ) (  2 ) ( 18 ) ( 14 ) ( 11 ) (  8 ) )\n"
1376                                         "( ( 12 ) ( 18 ) ( 14 ) ( 11 ) ( 12 ) ( -2 ) )\n"
1377                                         "( ( 13 ) ( 14 ) ( 11 ) ( 19 ) ( 14 ) (    ) )\n"
1378                                         "( ( 19 ) ( 11 ) ( 12 ) ( 14 ) (  1 ) ( -4 ) )\n"
1379                                         "( (    ) (  8 ) ( -2 ) (    ) ( -4 ) (  7 ) )\n";
1380             throw std::runtime_error( oss.str() );
1381          }
1382       }
1383 
1384       {
1385          blaze::CompressedMatrix<VT,blaze::rowMajor> tmp( 4UL, 3UL, 12UL );
1386          tmp(0,0) = vec( 12 );
1387          tmp(0,1) = vec( 13 );
1388          tmp(0,2) = vec( 19 );
1389          tmp(1,0) = vec( 18 );
1390          tmp(1,1) = vec( 14 );
1391          tmp(1,2) = vec( 11 );
1392          tmp(2,0) = vec( 14 );
1393          tmp(2,1) = vec( 11 );
1394          tmp(2,2) = vec( 12 );
1395          tmp(3,0) = vec( 11 );
1396          tmp(3,1) = vec( 19 );
1397          tmp(3,2) = vec( 14 );
1398 
1399          ST sym;
1400          init( sym );
1401 
1402          auto sm = submatrix( sym, 0UL, 2UL, 4UL, 3UL );
1403          sm = tmp;
1404 
1405          checkRows    ( sym,  6UL );
1406          checkColumns ( sym,  6UL );
1407          checkNonZeros( sym, 32UL );
1408 
1409          if( sm(0,0) != vec( 12 ) || sm(0,1) != vec( 13 ) || sm(0,2) != vec( 19 ) ||
1410              sm(1,0) != vec( 18 ) || sm(1,1) != vec( 14 ) || sm(1,2) != vec( 11 ) ||
1411              sm(2,0) != vec( 14 ) || sm(2,1) != vec( 11 ) || sm(2,2) != vec( 12 ) ||
1412              sm(3,0) != vec( 11 ) || sm(3,1) != vec( 19 ) || sm(3,2) != vec( 14 ) ) {
1413             std::ostringstream oss;
1414             oss << " Test: " << test_ << "\n"
1415                 << " Error: Assignment to submatrix failed\n"
1416                 << " Details:\n"
1417                 << "   Result:\n" << sm << "\n"
1418                 << "   Expected result:\n( ( 12 ) ( 13 ) ( 19 ) )\n"
1419                                         "( ( 18 ) ( 14 ) ( 11 ) )\n"
1420                                         "( ( 14 ) ( 11 ) ( 12 ) )\n"
1421                                         "( ( 11 ) ( 19 ) ( 14 ) )\n";
1422             throw std::runtime_error( oss.str() );
1423          }
1424 
1425          if( sym(0,0) != vec(  1 )  || sym(0,1) != vec( -4 ) || sym(0,2) != vec( 12 ) || sym(0,3) != vec( 13 )  || sym(0,4) != vec( 19 ) || !isDefault( sym(0,5) ) ||
1426              sym(1,0) != vec( -4 )  || sym(1,1) != vec(  2 ) || sym(1,2) != vec( 18 ) || sym(1,3) != vec( 14 )  || sym(1,4) != vec( 11 ) || sym(1,5) != vec(  8 )  ||
1427              sym(2,0) != vec( 12 )  || sym(2,1) != vec( 18 ) || sym(2,2) != vec( 14 ) || sym(2,3) != vec( 11 )  || sym(2,4) != vec( 12 ) || sym(2,5) != vec( -2 )  ||
1428              sym(3,0) != vec( 13 )  || sym(3,1) != vec( 14 ) || sym(3,2) != vec( 11 ) || sym(3,3) != vec( 19 )  || sym(3,4) != vec( 14 ) || !isDefault( sym(3,5) ) ||
1429              sym(4,0) != vec( 19 )  || sym(4,1) != vec( 11 ) || sym(4,2) != vec( 12 ) || sym(4,3) != vec( 14 )  || sym(4,4) != vec(  1 ) || sym(4,5) != vec( -4 )  ||
1430              !isDefault( sym(5,0) ) || sym(5,1) != vec(  8 ) || sym(5,2) != vec( -2 ) || !isDefault( sym(5,3) ) || sym(5,4) != vec( -4 ) || sym(5,5) != vec(  7 ) ) {
1431             std::ostringstream oss;
1432             oss << " Test: " << test_ << "\n"
1433                 << " Error: Assignment to submatrix failed\n"
1434                 << " Details:\n"
1435                 << "   Result:\n" << sym << "\n"
1436                 << "   Expected result:\n( (  1 ) ( -4 ) ( 12 ) ( 13 ) ( 19 ) (    ) )\n"
1437                                         "( ( -4 ) (  2 ) ( 18 ) ( 14 ) ( 11 ) (  8 ) )\n"
1438                                         "( ( 12 ) ( 18 ) ( 14 ) ( 11 ) ( 12 ) ( -2 ) )\n"
1439                                         "( ( 13 ) ( 14 ) ( 11 ) ( 19 ) ( 14 ) (    ) )\n"
1440                                         "( ( 19 ) ( 11 ) ( 12 ) ( 14 ) (  1 ) ( -4 ) )\n"
1441                                         "( (    ) (  8 ) ( -2 ) (    ) ( -4 ) (  7 ) )\n";
1442             throw std::runtime_error( oss.str() );
1443          }
1444       }
1445    }
1446 
1447    // ( (  1 ) ( -4 ) (  7 ) ( -2 ) (  5 ) (    ) )      ( ( 12 ) ( 18 ) ( 14 ) ( 15 ) (  5 ) (    ) )
1448    // ( ( -4 ) (  2 ) (    ) (    ) ( -1 ) (  8 ) )      ( ( 22 ) ( 17 ) ( 11 ) ( 19 ) ( -1 ) (  8 ) )
1449    // ( (  7 ) (    ) (  3 ) (  1 ) (    ) ( -2 ) )  =>  ( ( 14 ) ( 11 ) (  3 ) (  1 ) (    ) ( -2 ) )
1450    // ( ( -2 ) (    ) (  1 ) (  5 ) (  7 ) (    ) )      ( ( 15 ) ( 19 ) (  1 ) (  5 ) (  7 ) (    ) )
1451    // ( (  5 ) ( -1 ) (    ) (  7 ) (  1 ) ( -4 ) )      ( (  5 ) ( -1 ) (    ) (  7 ) (  1 ) ( -4 ) )
1452    // ( (    ) (  8 ) ( -2 ) (    ) ( -4 ) (  7 ) )      ( (    ) (  8 ) ( -2 ) (    ) ( -4 ) (  7 ) )
1453    {
1454       test_ = "Sparse matrix assignment test 5";
1455 
1456       {
1457          blaze::CompressedMatrix<VT,blaze::rowMajor> tmp( 2UL, 4UL, 8UL );
1458          tmp(0,0) = vec( 12 );
1459          tmp(0,1) = vec( 18 );
1460          tmp(0,2) = vec( 14 );
1461          tmp(0,3) = vec( 15 );
1462          tmp(1,0) = vec( 22 );
1463          tmp(1,1) = vec( 17 );
1464          tmp(1,2) = vec( 11 );
1465          tmp(1,3) = vec( 19 );
1466 
1467          ST sym;
1468          init( sym );
1469 
1470          auto sm = submatrix( sym, 0UL, 0UL, 2UL, 4UL );
1471 
1472          try {
1473             sm = tmp;
1474 
1475             std::ostringstream oss;
1476             oss << " Test: " << test_ << "\n"
1477                 << " Error: Assignment of invalid matrix succeeded\n"
1478                 << " Details:\n"
1479                 << "   Result:\n" << sym << "\n";
1480             throw std::runtime_error( oss.str() );
1481          }
1482          catch( std::invalid_argument& ) {}
1483       }
1484 
1485       {
1486          blaze::CompressedMatrix<VT,blaze::columnMajor> tmp( 4UL, 2UL, 8UL );
1487          tmp(0,0) = vec( 12 );
1488          tmp(0,1) = vec( 18 );
1489          tmp(1,0) = vec( 22 );
1490          tmp(1,1) = vec( 17 );
1491          tmp(2,0) = vec( 14 );
1492          tmp(2,1) = vec( 11 );
1493          tmp(3,0) = vec( 15 );
1494          tmp(3,1) = vec( 19 );
1495 
1496          ST sym;
1497          init( sym );
1498 
1499          auto sm = submatrix( sym, 0UL, 0UL, 4UL, 2UL );
1500 
1501          try {
1502             sm = tmp;
1503 
1504             std::ostringstream oss;
1505             oss << " Test: " << test_ << "\n"
1506                 << " Error: Assignment of invalid matrix succeeded\n"
1507                 << " Details:\n"
1508                 << "   Result:\n" << sym << "\n";
1509             throw std::runtime_error( oss.str() );
1510          }
1511          catch( std::invalid_argument& ) {}
1512       }
1513    }
1514 
1515    // ( (  1 ) ( -4 ) (  7 ) ( -2 ) (  5 ) (    ) )      ( (  1 ) ( -4 ) (  7 ) ( -2 ) (  5 ) (    ) )
1516    // ( ( -4 ) (  2 ) (    ) (    ) ( -1 ) (  8 ) )      ( ( -4 ) (  2 ) ( 12 ) ( 13 ) ( -1 ) (  8 ) )
1517    // ( (  7 ) (    ) (  3 ) (  1 ) (    ) ( -2 ) )  =>  ( (  7 ) ( 12 ) ( 18 ) ( 14 ) ( 15 ) ( -2 ) )
1518    // ( ( -2 ) (    ) (  1 ) (  5 ) (  7 ) (    ) )      ( ( -2 ) ( 13 ) ( 22 ) ( 11 ) ( 19 ) (    ) )
1519    // ( (  5 ) ( -1 ) (    ) (  7 ) (  1 ) ( -4 ) )      ( (  5 ) ( -1 ) ( 15 ) ( 19 ) (  1 ) ( -4 ) )
1520    // ( (    ) (  8 ) ( -2 ) (    ) ( -4 ) (  7 ) )      ( (    ) (  8 ) ( -2 ) (    ) ( -4 ) (  7 ) )
1521    {
1522       test_ = "Sparse matrix assignment test 6";
1523 
1524       {
1525          blaze::CompressedMatrix<VT,blaze::rowMajor> tmp( 2UL, 4UL, 8UL );
1526          tmp(0,0) = vec( 12 );
1527          tmp(0,1) = vec( 18 );
1528          tmp(0,2) = vec( 14 );
1529          tmp(0,3) = vec( 15 );
1530          tmp(1,0) = vec( 13 );
1531          tmp(1,1) = vec( 22 );
1532          tmp(1,2) = vec( 11 );
1533          tmp(1,3) = vec( 19 );
1534 
1535          ST sym;
1536          init( sym );
1537 
1538          auto sm = submatrix( sym, 2UL, 1UL, 2UL, 4UL );
1539 
1540          try {
1541             sm = tmp;
1542 
1543             std::ostringstream oss;
1544             oss << " Test: " << test_ << "\n"
1545                 << " Error: Assignment of invalid matrix succeeded\n"
1546                 << " Details:\n"
1547                 << "   Result:\n" << sym << "\n";
1548             throw std::runtime_error( oss.str() );
1549          }
1550          catch( std::invalid_argument& ) {}
1551       }
1552 
1553       {
1554          blaze::CompressedMatrix<VT,blaze::columnMajor> tmp( 4UL, 2UL, 8UL );
1555          tmp(0,0) = vec( 12 );
1556          tmp(0,1) = vec( 13 );
1557          tmp(1,0) = vec( 18 );
1558          tmp(1,1) = vec( 14 );
1559          tmp(2,0) = vec( 22 );
1560          tmp(2,1) = vec( 11 );
1561          tmp(3,0) = vec( 15 );
1562          tmp(3,1) = vec( 19 );
1563 
1564          ST sym;
1565          init( sym );
1566 
1567          auto sm = submatrix( sym, 1UL, 2UL, 4UL, 2UL );
1568 
1569          try {
1570             sm = tmp;
1571 
1572             std::ostringstream oss;
1573             oss << " Test: " << test_ << "\n"
1574                 << " Error: Assignment of invalid matrix succeeded\n"
1575                 << " Details:\n"
1576                 << "   Result:\n" << sym << "\n";
1577             throw std::runtime_error( oss.str() );
1578          }
1579          catch( std::invalid_argument& ) {}
1580       }
1581    }
1582 
1583    // ( (  1 ) ( -4 ) (  7 ) ( -2 ) (  5 ) (    ) )      ( (  1 ) ( -4 ) (  7 ) ( -2 ) (  5 ) (    ) )
1584    // ( ( -4 ) (  2 ) (    ) (    ) ( -1 ) (  8 ) )      ( ( -4 ) (  2 ) (    ) (    ) ( -1 ) (  8 ) )
1585    // ( (  7 ) (    ) (  3 ) (  1 ) (    ) ( -2 ) )  =>  ( (  7 ) (    ) (  3 ) (  1 ) ( 12 ) ( 13 ) )
1586    // ( ( -2 ) (    ) (  1 ) (  5 ) (  7 ) (    ) )      ( ( -2 ) (    ) (  1 ) (  5 ) ( 18 ) ( 14 ) )
1587    // ( (  5 ) ( -1 ) (    ) (  7 ) (  1 ) ( -4 ) )      ( (  5 ) ( -1 ) ( 12 ) ( 18 ) ( 14 ) ( 11 ) )
1588    // ( (    ) (  8 ) ( -2 ) (    ) ( -4 ) (  7 ) )      ( (    ) (  8 ) ( 13 ) ( 14 ) ( 22 ) ( 19 ) )
1589    {
1590       test_ = "Sparse matrix assignment test 7";
1591 
1592       {
1593          blaze::CompressedMatrix<VT,blaze::rowMajor> tmp( 2UL, 4UL, 8UL );
1594          tmp(0,0) = vec( 12 );
1595          tmp(0,1) = vec( 18 );
1596          tmp(0,2) = vec( 14 );
1597          tmp(0,3) = vec( 11 );
1598          tmp(1,0) = vec( 13 );
1599          tmp(1,1) = vec( 14 );
1600          tmp(1,2) = vec( 22 );
1601          tmp(1,3) = vec( 19 );
1602 
1603          ST sym;
1604          init( sym );
1605 
1606          auto sm = submatrix( sym, 4UL, 2UL, 2UL, 4UL );
1607 
1608          try {
1609             sm = tmp;
1610 
1611             std::ostringstream oss;
1612             oss << " Test: " << test_ << "\n"
1613                 << " Error: Assignment of invalid matrix succeeded\n"
1614                 << " Details:\n"
1615                 << "   Result:\n" << sym << "\n";
1616             throw std::runtime_error( oss.str() );
1617          }
1618          catch( std::invalid_argument& ) {}
1619       }
1620 
1621       {
1622          blaze::CompressedMatrix<VT,blaze::columnMajor> tmp( 4UL, 2UL, 8UL );
1623          tmp(0,0) = vec( 12 );
1624          tmp(0,1) = vec( 13 );
1625          tmp(1,0) = vec( 18 );
1626          tmp(1,1) = vec( 14 );
1627          tmp(2,0) = vec( 14 );
1628          tmp(2,1) = vec( 11 );
1629          tmp(3,0) = vec( 22 );
1630          tmp(3,1) = vec( 19 );
1631 
1632          ST sym;
1633          init( sym );
1634 
1635          auto sm = submatrix( sym, 2UL, 4UL, 4UL, 2UL );
1636 
1637          try {
1638             sm = tmp;
1639 
1640             std::ostringstream oss;
1641             oss << " Test: " << test_ << "\n"
1642                 << " Error: Assignment of invalid matrix succeeded\n"
1643                 << " Details:\n"
1644                 << "   Result:\n" << sym << "\n";
1645             throw std::runtime_error( oss.str() );
1646          }
1647          catch( std::invalid_argument& ) {}
1648       }
1649    }
1650 
1651    // ( (  1 ) ( -4 ) (  7 ) ( -2 ) (  5 ) (    ) )      ( (  1 ) ( -4 ) ( 12 ) ( 13 ) ( 19 ) (    ) )
1652    // ( ( -4 ) (  2 ) (    ) (    ) ( -1 ) (  8 ) )      ( ( -4 ) (  2 ) ( 18 ) ( 14 ) ( 11 ) (  8 ) )
1653    // ( (  7 ) (    ) (  3 ) (  1 ) (    ) ( -2 ) )  =>  ( ( 12 ) ( 18 ) ( 14 ) ( 11 ) ( 12 ) ( -2 ) )
1654    // ( ( -2 ) (    ) (  1 ) (  5 ) (  7 ) (    ) )      ( ( 13 ) ( 14 ) ( 22 ) ( 19 ) ( 14 ) (    ) )
1655    // ( (  5 ) ( -1 ) (    ) (  7 ) (  1 ) ( -4 ) )      ( ( 19 ) ( 11 ) ( 12 ) ( 14 ) (  1 ) ( -4 ) )
1656    // ( (    ) (  8 ) ( -2 ) (    ) ( -4 ) (  7 ) )      ( (    ) (  8 ) ( -2 ) (    ) ( -4 ) (  7 ) )
1657    {
1658       test_ = "Sparse matrix assignment test 8";
1659 
1660       {
1661          blaze::CompressedMatrix<VT,blaze::rowMajor> tmp( 3UL, 4UL, 12UL );
1662          tmp(0,0) = vec( 12 );
1663          tmp(0,1) = vec( 18 );
1664          tmp(0,2) = vec( 14 );
1665          tmp(0,3) = vec( 11 );
1666          tmp(1,0) = vec( 13 );
1667          tmp(1,1) = vec( 14 );
1668          tmp(1,2) = vec( 22 );
1669          tmp(1,3) = vec( 19 );
1670          tmp(2,0) = vec( 19 );
1671          tmp(2,1) = vec( 11 );
1672          tmp(2,2) = vec( 12 );
1673          tmp(2,3) = vec( 14 );
1674 
1675          ST sym;
1676          init( sym );
1677 
1678          auto sm = submatrix( sym, 2UL, 0UL, 3UL, 4UL );
1679 
1680          try {
1681             sm = tmp;
1682 
1683             std::ostringstream oss;
1684             oss << " Test: " << test_ << "\n"
1685                 << " Error: Assignment of invalid matrix succeeded\n"
1686                 << " Details:\n"
1687                 << "   Result:\n" << sym << "\n";
1688             throw std::runtime_error( oss.str() );
1689          }
1690          catch( std::invalid_argument& ) {}
1691       }
1692 
1693       {
1694          blaze::CompressedMatrix<VT,blaze::rowMajor> tmp( 4UL, 3UL, 12UL );
1695          tmp(0,0) = vec( 12 );
1696          tmp(0,1) = vec( 13 );
1697          tmp(0,2) = vec( 19 );
1698          tmp(1,0) = vec( 18 );
1699          tmp(1,1) = vec( 14 );
1700          tmp(1,2) = vec( 11 );
1701          tmp(2,0) = vec( 14 );
1702          tmp(2,1) = vec( 11 );
1703          tmp(2,2) = vec( 12 );
1704          tmp(3,0) = vec( 22 );
1705          tmp(3,1) = vec( 19 );
1706          tmp(3,2) = vec( 14 );
1707 
1708          ST sym;
1709          init( sym );
1710 
1711          auto sm = submatrix( sym, 0UL, 2UL, 4UL, 3UL );
1712 
1713          try {
1714             sm = tmp;
1715 
1716             std::ostringstream oss;
1717             oss << " Test: " << test_ << "\n"
1718                 << " Error: Assignment of invalid matrix succeeded\n"
1719                 << " Details:\n"
1720                 << "   Result:\n" << sym << "\n";
1721             throw std::runtime_error( oss.str() );
1722          }
1723          catch( std::invalid_argument& ) {}
1724       }
1725    }
1726 }
1727 //*************************************************************************************************
1728 
1729 
1730 //*************************************************************************************************
1731 /*!\brief Checking the number of rows of the given matrix.
1732 //
1733 // \param matrix The matrix to be checked.
1734 // \param expectedRows The expected number of rows of the matrix.
1735 // \return void
1736 // \exception std::runtime_error Error detected.
1737 //
1738 // This function checks the number of rows of the given matrix. In case the actual number of
1739 // rows does not correspond to the given expected number of rows, a \a std::runtime_error
1740 // exception is thrown.
1741 */
1742 template< typename Type >  // Type of the matrix
checkRows(const Type & matrix,size_t expectedRows)1743 void SubmatrixNonScalarTest::checkRows( const Type& matrix, size_t expectedRows ) const
1744 {
1745    if( matrix.rows() != expectedRows ) {
1746       std::ostringstream oss;
1747       oss << " Test: " << test_ << "\n"
1748           << " Error: Invalid number of rows detected\n"
1749           << " Details:\n"
1750           << "   Number of rows         : " << matrix.rows() << "\n"
1751           << "   Expected number of rows: " << expectedRows << "\n";
1752       throw std::runtime_error( oss.str() );
1753    }
1754 }
1755 //*************************************************************************************************
1756 
1757 
1758 //*************************************************************************************************
1759 /*!\brief Checking the number of columns of the given matrix.
1760 //
1761 // \param matrix The matrix to be checked.
1762 // \param expectedColumns The expected number of columns of the matrix.
1763 // \return void
1764 // \exception std::runtime_error Error detected.
1765 //
1766 // This function checks the number of columns of the given matrix. In case the actual number of
1767 // columns does not correspond to the given expected number of columns, a \a std::runtime_error
1768 // exception is thrown.
1769 */
1770 template< typename Type >  // Type of the matrix
checkColumns(const Type & matrix,size_t expectedColumns)1771 void SubmatrixNonScalarTest::checkColumns( const Type& matrix, size_t expectedColumns ) const
1772 {
1773    if( matrix.columns() != expectedColumns ) {
1774       std::ostringstream oss;
1775       oss << " Test: " << test_ << "\n"
1776           << " Error: Invalid number of columns detected\n"
1777           << " Details:\n"
1778           << "   Number of columns         : " << matrix.columns() << "\n"
1779           << "   Expected number of columns: " << expectedColumns << "\n";
1780       throw std::runtime_error( oss.str() );
1781    }
1782 }
1783 //*************************************************************************************************
1784 
1785 
1786 //*************************************************************************************************
1787 /*!\brief Checking the number of non-zero elements of the given matrix.
1788 //
1789 // \param matrix The matrix to be checked.
1790 // \param expectedNonZeros The expected number of non-zero elements of the matrix.
1791 // \return void
1792 // \exception std::runtime_error Error detected.
1793 //
1794 // This function checks the number of non-zero elements of the given matrix. In case the
1795 // actual number of non-zero elements does not correspond to the given expected number,
1796 // a \a std::runtime_error exception is thrown.
1797 */
1798 template< typename Type >  // Type of the matrix
checkNonZeros(const Type & matrix,size_t expectedNonZeros)1799 void SubmatrixNonScalarTest::checkNonZeros( const Type& matrix, size_t expectedNonZeros ) const
1800 {
1801    if( nonZeros( matrix ) != expectedNonZeros ) {
1802       std::ostringstream oss;
1803       oss << " Test: " << test_ << "\n"
1804           << " Error: Invalid number of non-zero elements\n"
1805           << " Details:\n"
1806           << "   Number of non-zeros         : " << nonZeros( matrix ) << "\n"
1807           << "   Expected number of non-zeros: " << expectedNonZeros << "\n";
1808       throw std::runtime_error( oss.str() );
1809    }
1810 
1811    if( capacity( matrix ) < nonZeros( matrix ) ) {
1812       std::ostringstream oss;
1813       oss << " Test: " << test_ << "\n"
1814           << " Error: Invalid capacity detected\n"
1815           << " Details:\n"
1816           << "   Number of non-zeros: " << nonZeros( matrix ) << "\n"
1817           << "   Capacity           : " << capacity( matrix ) << "\n";
1818       throw std::runtime_error( oss.str() );
1819    }
1820 }
1821 //*************************************************************************************************
1822 
1823 
1824 
1825 
1826 //=================================================================================================
1827 //
1828 //  UTILITY FUNCTIONS
1829 //
1830 //=================================================================================================
1831 
1832 //*************************************************************************************************
1833 /*!\brief Initializing the given symmetric matrix.
1834 //
1835 // \return void
1836 //
1837 // This function is called before each test case to initialize the given symmetric matrix.
1838 */
1839 template< typename ST >
init(ST & sym)1840 void SubmatrixNonScalarTest::init( ST& sym )
1841 {
1842    sym.resize( 6UL );
1843    sym(0,0) = vec(  1 );
1844    sym(0,1) = vec( -4 );
1845    sym(0,2) = vec(  7 );
1846    sym(0,3) = vec( -2 );
1847    sym(0,4) = vec(  5 );
1848    sym(1,1) = vec(  2 );
1849    sym(1,4) = vec( -1 );
1850    sym(1,5) = vec(  8 );
1851    sym(2,2) = vec(  3 );
1852    sym(2,3) = vec(  1 );
1853    sym(2,5) = vec( -2 );
1854    sym(3,3) = vec(  5 );
1855    sym(3,4) = vec(  7 );
1856    sym(4,4) = vec(  1 );
1857    sym(4,5) = vec( -4 );
1858    sym(5,5) = vec(  7 );
1859 }
1860 //*************************************************************************************************
1861 
1862 
1863 //*************************************************************************************************
1864 /*!\brief Setup of a vector.
1865 //
1866 // \param value The value of the vector.
1867 // \return The created vector.
1868 // \exception std::runtime_error Error detected.
1869 //
1870 // This function creates a single vector of size 1. The element of the vector is initialized with
1871 // the given integer value.
1872 */
vec(int value)1873 inline SubmatrixNonScalarTest::VT SubmatrixNonScalarTest::vec( int value )
1874 {
1875    return VT( 1UL, value );
1876 }
1877 //*************************************************************************************************
1878 
1879 
1880 
1881 
1882 //=================================================================================================
1883 //
1884 //  GLOBAL TEST FUNCTIONS
1885 //
1886 //=================================================================================================
1887 
1888 //*************************************************************************************************
1889 /*!\brief Testing the assignment to a submatrix of a non-scalar SymmetricMatrix.
1890 //
1891 // \return void
1892 */
runTest()1893 void runTest()
1894 {
1895    SubmatrixNonScalarTest();
1896 }
1897 //*************************************************************************************************
1898 
1899 
1900 
1901 
1902 //=================================================================================================
1903 //
1904 //  MACRO DEFINITIONS
1905 //
1906 //=================================================================================================
1907 
1908 //*************************************************************************************************
1909 /*! \cond BLAZE_INTERNAL */
1910 /*!\brief Macro for the execution of the SymmetricMatrix submatrix non-scalar test.
1911 */
1912 #define RUN_SYMMETRICMATRIX_SUBMATRIXNONSCALAR_TEST \
1913    blazetest::mathtest::adaptors::symmetricmatrix::runTest()
1914 /*! \endcond */
1915 //*************************************************************************************************
1916 
1917 } // namespace symmetricmatrix
1918 
1919 } // namespace adaptors
1920 
1921 } // namespace mathtest
1922 
1923 } // namespace blazetest
1924 
1925 #endif
1926