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