1 //=================================================================================================
2 /*!
3 // \file blazetest/mathtest/adaptors/diagonalmatrix/SubmatrixTest.h
4 // \brief Header file for the DiagonalMatrix submatrix 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_DIAGONALMATRIX_SUBMATRIXTEST_H_
36 #define _BLAZETEST_MATHTEST_ADAPTORS_DIAGONALMATRIX_SUBMATRIXTEST_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/DiagonalMatrix.h>
49 #include <blaze/math/Submatrix.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 diagonalmatrix {
61
62 //=================================================================================================
63 //
64 // CLASS DEFINITION
65 //
66 //=================================================================================================
67
68 //*************************************************************************************************
69 /*!\brief Auxiliary class for assignment tests to a submatrix of a DiagonalMatrix.
70 //
71 // This class performs assignment tests to a submatrix of a DiagonalMatrix. It performs a series
72 // of both compile time as well as runtime tests.
73 */
74 class SubmatrixTest
75 {
76 private:
77 //**Type definitions****************************************************************************
78 //! Type of the dense diagonal matrix.
79 using DDT = blaze::DiagonalMatrix< blaze::DynamicMatrix<int,blaze::rowMajor> >;
80
81 //! Opposite dense diagonal matrix type.
82 using DODT = DDT::OppositeType;
83
84 //! Type of the sparse diagonal matrix.
85 using SDT = blaze::DiagonalMatrix< blaze::CompressedMatrix<int,blaze::rowMajor> >;
86
87 //! Opposite sparse diagonal matrix type.
88 using SODT = SDT::OppositeType;
89 //**********************************************************************************************
90
91 public:
92 //**Constructors********************************************************************************
93 /*!\name Constructors */
94 //@{
95 explicit SubmatrixTest();
96 // No explicitly declared copy constructor.
97 //@}
98 //**********************************************************************************************
99
100 //**Destructor**********************************************************************************
101 // No explicitly declared destructor.
102 //**********************************************************************************************
103
104 private:
105 //**Test functions******************************************************************************
106 /*!\name Test functions */
107 //@{
108 template< typename DT > void testAssignment ();
109 template< typename DT > void testAddAssign ();
110 template< typename DT > void testSubAssign ();
111 template< typename DT > void testSchurAssign();
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 DT > void init( DT& diag );
128 //@}
129 //**********************************************************************************************
130
131 //**Member variables****************************************************************************
132 /*!\name Member variables */
133 //@{
134 std::string test_; //!< Label of the currently performed test.
135 //@}
136 //**********************************************************************************************
137 };
138 //*************************************************************************************************
139
140
141
142
143 //=================================================================================================
144 //
145 // TEST FUNCTIONS
146 //
147 //=================================================================================================
148
149 //*************************************************************************************************
150 /*!\brief Test of the assignment to a submatrix of a DiagonalMatrix.
151 //
152 // \return void
153 // \exception std::runtime_error Error detected.
154 //
155 // This function performs a test of the assignment to a submatrix of a DiagonalMatrix. In case an
156 // error is detected, a \a std::runtime_error exception is thrown.
157 */
158 template< typename DT > // Type of the diagonal matrix
testAssignment()159 void SubmatrixTest::testAssignment()
160 {
161 //=====================================================================================
162 // Dense matrix assignment
163 //=====================================================================================
164
165 // ( 1 0 0 0 ) ( 1 0 0 0 )
166 // ( 0 2 0 0 ) => ( 0 18 0 0 )
167 // ( 0 0 3 0 ) ( 0 0 11 0 )
168 // ( 0 0 0 4 ) ( 0 0 0 4 )
169 {
170 test_ = "Row-major dense matrix assignment test 1";
171
172 blaze::DynamicMatrix<int,blaze::rowMajor> mat( 4UL, 2UL, 0 );
173 mat(1,0) = 18;
174 mat(2,1) = 11;
175
176 DT diag;
177 init( diag );
178
179 auto sm = submatrix( diag, 0UL, 1UL, 4UL, 2UL );
180 sm = mat;
181
182 checkRows ( diag, 4UL );
183 checkColumns ( diag, 4UL );
184 checkNonZeros( diag, 4UL );
185
186 if( sm(0,0) != 0 || sm(0,1) != 0 ||
187 sm(1,0) != 18 || sm(1,1) != 0 ||
188 sm(2,0) != 0 || sm(2,1) != 11 ||
189 sm(3,0) != 0 || sm(3,1) != 0 ) {
190 std::ostringstream oss;
191 oss << " Test: " << test_ << "\n"
192 << " Error: Assignment to submatrix failed\n"
193 << " Details:\n"
194 << " Result:\n" << sm << "\n"
195 << " Expected result:\n( 0 0 )\n( 18 0 )\n( 0 11 )\n( 0 0 )\n";
196 throw std::runtime_error( oss.str() );
197 }
198
199 if( diag(0,0) != 1 || diag(0,1) != 0 || diag(0,2) != 0 || diag(0,3) != 0 ||
200 diag(1,0) != 0 || diag(1,1) != 18 || diag(1,2) != 0 || diag(1,3) != 0 ||
201 diag(2,0) != 0 || diag(2,1) != 0 || diag(2,2) != 11 || diag(2,3) != 0 ||
202 diag(3,0) != 0 || diag(3,1) != 0 || diag(3,2) != 0 || diag(3,3) != 4 ) {
203 std::ostringstream oss;
204 oss << " Test: " << test_ << "\n"
205 << " Error: Assignment to submatrix failed\n"
206 << " Details:\n"
207 << " Result:\n" << diag << "\n"
208 << " Expected result:\n( 1 0 0 0 )\n"
209 "( 0 18 0 0 )\n"
210 "( 0 0 11 0 )\n"
211 "( 0 0 0 4 )\n";
212 throw std::runtime_error( oss.str() );
213 }
214 }
215
216 // ( 1 0 0 0 ) ( 1 0 0 0 )
217 // ( 0 2 0 0 ) => ( 0 18 0 0 )
218 // ( 0 0 3 0 ) ( 0 0 11 0 )
219 // ( 0 0 0 4 ) ( 0 0 0 4 )
220 {
221 test_ = "Row-major dense matrix assignment test 2";
222
223 blaze::DynamicMatrix<int,blaze::rowMajor> mat( 2UL, 4UL, 0 );
224 mat(0,1) = 18;
225 mat(1,2) = 11;
226
227 DT diag;
228 init( diag );
229
230 auto sm = submatrix( diag, 1UL, 0UL, 2UL, 4UL );
231 sm = mat;
232
233 checkRows ( diag, 4UL );
234 checkColumns ( diag, 4UL );
235 checkNonZeros( diag, 4UL );
236
237 if( sm(0,0) != 0 || sm(0,1) != 18 || sm(0,2) != 0 || sm(0,3) != 0 ||
238 sm(1,0) != 0 || sm(1,1) != 0 || sm(1,2) != 11 || sm(1,3) != 0 ) {
239 std::ostringstream oss;
240 oss << " Test: " << test_ << "\n"
241 << " Error: Assignment to submatrix failed\n"
242 << " Details:\n"
243 << " Result:\n" << sm << "\n"
244 << " Expected result:\n( 0 18 0 0 )\n( 0 0 11 0 )\n";
245 throw std::runtime_error( oss.str() );
246 }
247
248 if( diag(0,0) != 1 || diag(0,1) != 0 || diag(0,2) != 0 || diag(0,3) != 0 ||
249 diag(1,0) != 0 || diag(1,1) != 18 || diag(1,2) != 0 || diag(1,3) != 0 ||
250 diag(2,0) != 0 || diag(2,1) != 0 || diag(2,2) != 11 || diag(2,3) != 0 ||
251 diag(3,0) != 0 || diag(3,1) != 0 || diag(3,2) != 0 || diag(3,3) != 4 ) {
252 std::ostringstream oss;
253 oss << " Test: " << test_ << "\n"
254 << " Error: Assignment to submatrix failed\n"
255 << " Details:\n"
256 << " Result:\n" << diag << "\n"
257 << " Expected result:\n( 1 0 0 0 )\n"
258 "( 0 18 0 0 )\n"
259 "( 0 0 11 0 )\n"
260 "( 0 0 0 4 )\n";
261 throw std::runtime_error( oss.str() );
262 }
263 }
264
265 // ( 1 0 0 0 ) ( 1 0 0 0 )
266 // ( 0 2 0 0 ) => ( 0 11 12 0 )
267 // ( 0 0 3 0 ) ( 0 0 14 0 )
268 // ( 0 0 1 5 ) ( 0 0 0 5 )
269 {
270 test_ = "Row-major dense matrix assignment test 3";
271
272 blaze::DynamicMatrix<int,blaze::rowMajor> mat( 2UL, 2UL, 0 );
273 mat(0,0) = 11;
274 mat(0,1) = 12;
275 mat(1,1) = 14;
276
277 DT diag;
278 init( diag );
279
280 auto sm = submatrix( diag, 1UL, 1UL, 2UL, 2UL );
281
282 try {
283 sm = mat;
284
285 std::ostringstream oss;
286 oss << " Test: " << test_ << "\n"
287 << " Error: Assignment of invalid matrix succeeded\n"
288 << " Details:\n"
289 << " Result:\n" << diag << "\n";
290 throw std::runtime_error( oss.str() );
291 }
292 catch( std::invalid_argument& ) {}
293 }
294
295 // ( 1 0 0 0 ) ( 1 0 0 0 )
296 // ( 0 2 0 0 ) => ( 0 11 0 0 )
297 // ( 0 0 3 0 ) ( 0 13 14 0 )
298 // ( 0 0 1 5 ) ( 0 0 0 5 )
299 {
300 test_ = "Row-major dense matrix assignment test 4";
301
302 blaze::DynamicMatrix<int,blaze::rowMajor> mat( 2UL, 2UL, 0 );
303 mat(0,0) = 11;
304 mat(1,0) = 13;
305 mat(1,1) = 14;
306
307 DT diag;
308 init( diag );
309
310 auto sm = submatrix( diag, 1UL, 1UL, 2UL, 2UL );
311
312 try {
313 sm = mat;
314
315 std::ostringstream oss;
316 oss << " Test: " << test_ << "\n"
317 << " Error: Assignment of invalid matrix succeeded\n"
318 << " Details:\n"
319 << " Result:\n" << diag << "\n";
320 throw std::runtime_error( oss.str() );
321 }
322 catch( std::invalid_argument& ) {}
323 }
324
325 // ( 1 0 0 0 ) ( 1 0 0 0 )
326 // ( 0 2 0 0 ) => ( 0 18 0 0 )
327 // ( 0 0 3 0 ) ( 0 0 11 0 )
328 // ( 0 0 0 4 ) ( 0 0 0 4 )
329 {
330 test_ = "Column-major dense matrix assignment test 1";
331
332 blaze::DynamicMatrix<int,blaze::columnMajor> mat( 4UL, 2UL, 0 );
333 mat(1,0) = 18;
334 mat(2,1) = 11;
335
336 DT diag;
337 init( diag );
338
339 auto sm = submatrix( diag, 0UL, 1UL, 4UL, 2UL );
340 sm = mat;
341
342 checkRows ( diag, 4UL );
343 checkColumns ( diag, 4UL );
344 checkNonZeros( diag, 4UL );
345
346 if( sm(0,0) != 0 || sm(0,1) != 0 ||
347 sm(1,0) != 18 || sm(1,1) != 0 ||
348 sm(2,0) != 0 || sm(2,1) != 11 ||
349 sm(3,0) != 0 || sm(3,1) != 0 ) {
350 std::ostringstream oss;
351 oss << " Test: " << test_ << "\n"
352 << " Error: Assignment to submatrix failed\n"
353 << " Details:\n"
354 << " Result:\n" << sm << "\n"
355 << " Expected result:\n( 0 0 )\n( 18 0 )\n( 0 11 )\n( 0 0 )\n";
356 throw std::runtime_error( oss.str() );
357 }
358
359 if( diag(0,0) != 1 || diag(0,1) != 0 || diag(0,2) != 0 || diag(0,3) != 0 ||
360 diag(1,0) != 0 || diag(1,1) != 18 || diag(1,2) != 0 || diag(1,3) != 0 ||
361 diag(2,0) != 0 || diag(2,1) != 0 || diag(2,2) != 11 || diag(2,3) != 0 ||
362 diag(3,0) != 0 || diag(3,1) != 0 || diag(3,2) != 0 || diag(3,3) != 4 ) {
363 std::ostringstream oss;
364 oss << " Test: " << test_ << "\n"
365 << " Error: Assignment to submatrix failed\n"
366 << " Details:\n"
367 << " Result:\n" << diag << "\n"
368 << " Expected result:\n( 1 0 0 0 )\n"
369 "( 0 18 0 0 )\n"
370 "( 0 0 11 0 )\n"
371 "( 0 0 0 5 )\n";
372 throw std::runtime_error( oss.str() );
373 }
374 }
375
376 // ( 1 0 0 0 ) ( 1 0 0 0 )
377 // ( 0 2 0 0 ) => ( 0 18 0 0 )
378 // ( 0 0 3 0 ) ( 0 0 11 0 )
379 // ( 0 0 0 4 ) ( 0 0 0 4 )
380 {
381 test_ = "Column-major dense matrix assignment test 2";
382
383 blaze::DynamicMatrix<int,blaze::columnMajor> mat( 2UL, 4UL, 0 );
384 mat(0,1) = 18;
385 mat(1,2) = 11;
386
387 DT diag;
388 init( diag );
389
390 auto sm = submatrix( diag, 1UL, 0UL, 2UL, 4UL );
391 sm = mat;
392
393 checkRows ( diag, 4UL );
394 checkColumns ( diag, 4UL );
395 checkNonZeros( diag, 4UL );
396
397 if( sm(0,0) != 0 || sm(0,1) != 18 || sm(0,2) != 0 || sm(0,3) != 0 ||
398 sm(1,0) != 0 || sm(1,1) != 0 || sm(1,2) != 11 || sm(1,3) != 0 ) {
399 std::ostringstream oss;
400 oss << " Test: " << test_ << "\n"
401 << " Error: Assignment to submatrix failed\n"
402 << " Details:\n"
403 << " Result:\n" << sm << "\n"
404 << " Expected result:\n( 0 18 0 0 )\n( 0 0 11 0 )\n";
405 throw std::runtime_error( oss.str() );
406 }
407
408 if( diag(0,0) != 1 || diag(0,1) != 0 || diag(0,2) != 0 || diag(0,3) != 0 ||
409 diag(1,0) != 0 || diag(1,1) != 18 || diag(1,2) != 0 || diag(1,3) != 0 ||
410 diag(2,0) != 0 || diag(2,1) != 0 || diag(2,2) != 11 || diag(2,3) != 0 ||
411 diag(3,0) != 0 || diag(3,1) != 0 || diag(3,2) != 0 || diag(3,3) != 4 ) {
412 std::ostringstream oss;
413 oss << " Test: " << test_ << "\n"
414 << " Error: Assignment to submatrix failed\n"
415 << " Details:\n"
416 << " Result:\n" << diag << "\n"
417 << " Expected result:\n( 1 0 0 0 )\n"
418 "( 0 18 0 0 )\n"
419 "( 0 0 11 0 )\n"
420 "( 0 0 0 4 )\n";
421 throw std::runtime_error( oss.str() );
422 }
423 }
424
425 // ( 1 0 0 0 ) ( 1 0 0 0 )
426 // ( 0 2 0 0 ) => ( 0 11 12 0 )
427 // ( 0 0 3 0 ) ( 0 0 14 0 )
428 // ( 0 0 0 4 ) ( 0 0 0 4 )
429 {
430 test_ = "Column-major dense matrix assignment test 3";
431
432 blaze::DynamicMatrix<int,blaze::columnMajor> mat( 2UL, 2UL, 0 );
433 mat(0,0) = 11;
434 mat(0,1) = 12;
435 mat(1,1) = 14;
436
437 DT diag;
438 init( diag );
439
440 auto sm = submatrix( diag, 1UL, 1UL, 2UL, 2UL );
441
442 try {
443 sm = mat;
444
445 std::ostringstream oss;
446 oss << " Test: " << test_ << "\n"
447 << " Error: Assignment of invalid matrix succeeded\n"
448 << " Details:\n"
449 << " Result:\n" << diag << "\n";
450 throw std::runtime_error( oss.str() );
451 }
452 catch( std::invalid_argument& ) {}
453 }
454
455 // ( 1 0 0 0 ) ( 1 0 0 0 )
456 // ( 0 2 0 0 ) => ( 0 11 0 0 )
457 // ( 0 0 3 0 ) ( 0 13 14 0 )
458 // ( 0 0 0 4 ) ( 0 0 0 4 )
459 {
460 test_ = "Column-major dense matrix assignment test 4";
461
462 blaze::DynamicMatrix<int,blaze::columnMajor> mat( 2UL, 2UL, 0 );
463 mat(0,0) = 11;
464 mat(1,0) = 13;
465 mat(1,1) = 14;
466
467 DT diag;
468 init( diag );
469
470 auto sm = submatrix( diag, 1UL, 1UL, 2UL, 2UL );
471
472 try {
473 sm = mat;
474
475 std::ostringstream oss;
476 oss << " Test: " << test_ << "\n"
477 << " Error: Assignment of invalid matrix succeeded\n"
478 << " Details:\n"
479 << " Result:\n" << diag << "\n";
480 throw std::runtime_error( oss.str() );
481 }
482 catch( std::invalid_argument& ) {}
483 }
484
485
486 //=====================================================================================
487 // Sparse matrix assignment
488 //=====================================================================================
489
490 // ( 1 0 0 0 ) ( 1 0 0 0 )
491 // ( 0 2 0 0 ) => ( 0 18 0 0 )
492 // ( 0 0 3 0 ) ( 0 0 11 0 )
493 // ( 0 0 0 4 ) ( 0 0 0 4 )
494 {
495 test_ = "Row-major sparse matrix assignment test 1";
496
497 blaze::CompressedMatrix<int,blaze::rowMajor> mat( 4UL, 2UL, 4UL );
498 mat(1,0) = 18;
499 mat(2,1) = 11;
500 mat.insert( 1UL, 1UL, 0 );
501 mat.insert( 2UL, 0UL, 0 );
502
503 DT diag;
504 init( diag );
505
506 auto sm = submatrix( diag, 0UL, 1UL, 4UL, 2UL );
507 sm = mat;
508
509 checkRows ( diag, 4UL );
510 checkColumns ( diag, 4UL );
511 checkNonZeros( diag, 4UL );
512
513 if( sm(0,0) != 0 || sm(0,1) != 0 ||
514 sm(1,0) != 18 || sm(1,1) != 0 ||
515 sm(2,0) != 0 || sm(2,1) != 11 ||
516 sm(3,0) != 0 || sm(3,1) != 0 ) {
517 std::ostringstream oss;
518 oss << " Test: " << test_ << "\n"
519 << " Error: Assignment to submatrix failed\n"
520 << " Details:\n"
521 << " Result:\n" << sm << "\n"
522 << " Expected result:\n( 0 0 )\n( 18 0 )\n( 0 11 )\n( 0 0 )\n";
523 throw std::runtime_error( oss.str() );
524 }
525
526 if( diag(0,0) != 1 || diag(0,1) != 0 || diag(0,2) != 0 || diag(0,3) != 0 ||
527 diag(1,0) != 0 || diag(1,1) != 18 || diag(1,2) != 0 || diag(1,3) != 0 ||
528 diag(2,0) != 0 || diag(2,1) != 0 || diag(2,2) != 11 || diag(2,3) != 0 ||
529 diag(3,0) != 0 || diag(3,1) != 0 || diag(3,2) != 0 || diag(3,3) != 4 ) {
530 std::ostringstream oss;
531 oss << " Test: " << test_ << "\n"
532 << " Error: Assignment to submatrix failed\n"
533 << " Details:\n"
534 << " Result:\n" << diag << "\n"
535 << " Expected result:\n( 1 0 0 0 )\n"
536 "( 0 18 0 0 )\n"
537 "( 0 0 11 0 )\n"
538 "( 0 0 0 4 )\n";
539 throw std::runtime_error( oss.str() );
540 }
541 }
542
543 // ( 1 0 0 0 ) ( 1 0 0 0 )
544 // ( 0 2 0 0 ) => ( 0 18 0 0 )
545 // ( 0 0 3 0 ) ( 0 0 11 0 )
546 // ( 0 0 0 4 ) ( 0 0 0 4 )
547 {
548 test_ = "Row-major sparse matrix assignment test 2";
549
550 blaze::CompressedMatrix<int,blaze::rowMajor> mat( 2UL, 4UL, 4UL );
551 mat(0,1) = 18;
552 mat(1,2) = 11;
553 mat.insert( 0UL, 2UL, 0 );
554 mat.insert( 1UL, 1UL, 0 );
555
556 DT diag;
557 init( diag );
558
559 auto sm = submatrix( diag, 1UL, 0UL, 2UL, 4UL );
560 sm = mat;
561
562 checkRows ( diag, 4UL );
563 checkColumns ( diag, 4UL );
564 checkNonZeros( diag, 4UL );
565
566 if( sm(0,0) != 0 || sm(0,1) != 18 || sm(0,2) != 0 || sm(0,3) != 0 ||
567 sm(1,0) != 0 || sm(1,1) != 0 || sm(1,2) != 11 || sm(1,3) != 0 ) {
568 std::ostringstream oss;
569 oss << " Test: " << test_ << "\n"
570 << " Error: Assignment to submatrix failed\n"
571 << " Details:\n"
572 << " Result:\n" << sm << "\n"
573 << " Expected result:\n( 0 18 0 0 )\n( 0 0 11 0 )\n";
574 throw std::runtime_error( oss.str() );
575 }
576
577 if( diag(0,0) != 1 || diag(0,1) != 0 || diag(0,2) != 0 || diag(0,3) != 0 ||
578 diag(1,0) != 0 || diag(1,1) != 18 || diag(1,2) != 0 || diag(1,3) != 0 ||
579 diag(2,0) != 0 || diag(2,1) != 0 || diag(2,2) != 11 || diag(2,3) != 0 ||
580 diag(3,0) != 0 || diag(3,1) != 0 || diag(3,2) != 0 || diag(3,3) != 4 ) {
581 std::ostringstream oss;
582 oss << " Test: " << test_ << "\n"
583 << " Error: Assignment to submatrix failed\n"
584 << " Details:\n"
585 << " Result:\n" << diag << "\n"
586 << " Expected result:\n( 1 0 0 0 )\n"
587 "( 0 18 0 0 )\n"
588 "( 0 0 11 0 )\n"
589 "( 0 0 0 4 )\n";
590 throw std::runtime_error( oss.str() );
591 }
592 }
593
594 // ( 1 0 0 0 ) ( 1 0 0 0 )
595 // ( 0 2 0 0 ) => ( 0 11 12 0 )
596 // ( 0 0 3 0 ) ( 0 0 14 0 )
597 // ( 0 0 0 4 ) ( 0 0 0 4 )
598 {
599 test_ = "Row-major sparse matrix assignment test 3";
600
601 blaze::CompressedMatrix<int,blaze::rowMajor> mat( 2UL, 2UL, 4UL );
602 mat(0,0) = 11;
603 mat(0,1) = 12;
604 mat(1,1) = 14;
605 mat.insert( 1UL, 0UL, 0 );
606
607 DT diag;
608 init( diag );
609
610 auto sm = submatrix( diag, 1UL, 1UL, 2UL, 2UL );
611
612 try {
613 sm = mat;
614
615 std::ostringstream oss;
616 oss << " Test: " << test_ << "\n"
617 << " Error: Assignment of invalid matrix succeeded\n"
618 << " Details:\n"
619 << " Result:\n" << diag << "\n";
620 throw std::runtime_error( oss.str() );
621 }
622 catch( std::invalid_argument& ) {}
623 }
624
625 // ( 1 0 0 0 ) ( 1 0 0 0 )
626 // ( 0 2 0 0 ) => ( 0 11 0 0 )
627 // ( 0 0 3 0 ) ( 0 13 14 0 )
628 // ( 0 0 0 4 ) ( 0 0 0 4 )
629 {
630 test_ = "Row-major sparse matrix assignment test 4";
631
632 blaze::CompressedMatrix<int,blaze::rowMajor> mat( 2UL, 2UL, 4UL );
633 mat(0,0) = 11;
634 mat(1,0) = 13;
635 mat(1,1) = 14;
636 mat.insert( 0UL, 1UL, 0 );
637
638 DT diag;
639 init( diag );
640
641 auto sm = submatrix( diag, 1UL, 1UL, 2UL, 2UL );
642
643 try {
644 sm = mat;
645
646 std::ostringstream oss;
647 oss << " Test: " << test_ << "\n"
648 << " Error: Assignment of invalid matrix succeeded\n"
649 << " Details:\n"
650 << " Result:\n" << diag << "\n";
651 throw std::runtime_error( oss.str() );
652 }
653 catch( std::invalid_argument& ) {}
654 }
655
656 // ( 1 0 0 0 ) ( 1 0 0 0 )
657 // ( 0 2 0 0 ) => ( 0 18 0 0 )
658 // ( 0 0 3 0 ) ( 0 0 11 0 )
659 // ( 0 0 0 4 ) ( 0 0 0 4 )
660 {
661 test_ = "Column-major sparse matrix assignment test 1";
662
663 blaze::CompressedMatrix<int,blaze::columnMajor> mat( 4UL, 2UL, 4UL );
664 mat(1,0) = 18;
665 mat(2,1) = 11;
666 mat.insert( 1UL, 1UL, 0 );
667 mat.insert( 2UL, 0UL, 0 );
668
669 DT diag;
670 init( diag );
671
672 auto sm = submatrix( diag, 0UL, 1UL, 4UL, 2UL );
673 sm = mat;
674
675 checkRows ( diag, 4UL );
676 checkColumns ( diag, 4UL );
677 checkNonZeros( diag, 4UL );
678
679 if( sm(0,0) != 0 || sm(0,1) != 0 ||
680 sm(1,0) != 18 || sm(1,1) != 0 ||
681 sm(2,0) != 0 || sm(2,1) != 11 ||
682 sm(3,0) != 0 || sm(3,1) != 0 ) {
683 std::ostringstream oss;
684 oss << " Test: " << test_ << "\n"
685 << " Error: Assignment to submatrix failed\n"
686 << " Details:\n"
687 << " Result:\n" << sm << "\n"
688 << " Expected result:\n( 0 0 )\n( 18 0 )\n( 0 11 )\n( 0 0 )\n";
689 throw std::runtime_error( oss.str() );
690 }
691
692 if( diag(0,0) != 1 || diag(0,1) != 0 || diag(0,2) != 0 || diag(0,3) != 0 ||
693 diag(1,0) != 0 || diag(1,1) != 18 || diag(1,2) != 0 || diag(1,3) != 0 ||
694 diag(2,0) != 0 || diag(2,1) != 0 || diag(2,2) != 11 || diag(2,3) != 0 ||
695 diag(3,0) != 0 || diag(3,1) != 0 || diag(3,2) != 0 || diag(3,3) != 4 ) {
696 std::ostringstream oss;
697 oss << " Test: " << test_ << "\n"
698 << " Error: Assignment to submatrix failed\n"
699 << " Details:\n"
700 << " Result:\n" << diag << "\n"
701 << " Expected result:\n( 1 0 0 0 )\n"
702 "( 0 18 0 0 )\n"
703 "( 0 0 11 0 )\n"
704 "( 0 0 0 4 )\n";
705 throw std::runtime_error( oss.str() );
706 }
707 }
708
709 // ( 1 0 0 0 ) ( 1 0 0 0 )
710 // ( 0 2 0 0 ) => ( 0 18 0 0 )
711 // ( 0 0 3 0 ) ( 0 0 11 0 )
712 // ( 0 0 0 4 ) ( 0 0 0 4 )
713 {
714 test_ = "Column-major sparse matrix assignment test 2";
715
716 blaze::CompressedMatrix<int,blaze::columnMajor> mat( 2UL, 4UL, 4UL );
717 mat(0,1) = 18;
718 mat(1,2) = 11;
719 mat.insert( 0UL, 2UL, 0 );
720 mat.insert( 1UL, 1UL, 0 );
721
722 DT diag;
723 init( diag );
724
725 auto sm = submatrix( diag, 1UL, 0UL, 2UL, 4UL );
726 sm = mat;
727
728 checkRows ( diag, 4UL );
729 checkColumns ( diag, 4UL );
730 checkNonZeros( diag, 4UL );
731
732 if( sm(0,0) != 0 || sm(0,1) != 18 || sm(0,2) != 0 || sm(0,3) != 0 ||
733 sm(1,0) != 0 || sm(1,1) != 0 || sm(1,2) != 11 || sm(1,3) != 0 ) {
734 std::ostringstream oss;
735 oss << " Test: " << test_ << "\n"
736 << " Error: Assignment to submatrix failed\n"
737 << " Details:\n"
738 << " Result:\n" << sm << "\n"
739 << " Expected result:\n( 0 18 0 0 )\n( 0 0 11 0 )\n";
740 throw std::runtime_error( oss.str() );
741 }
742
743 if( diag(0,0) != 1 || diag(0,1) != 0 || diag(0,2) != 0 || diag(0,3) != 0 ||
744 diag(1,0) != 0 || diag(1,1) != 18 || diag(1,2) != 0 || diag(1,3) != 0 ||
745 diag(2,0) != 0 || diag(2,1) != 0 || diag(2,2) != 11 || diag(2,3) != 0 ||
746 diag(3,0) != 0 || diag(3,1) != 0 || diag(3,2) != 0 || diag(3,3) != 4 ) {
747 std::ostringstream oss;
748 oss << " Test: " << test_ << "\n"
749 << " Error: Assignment to submatrix failed\n"
750 << " Details:\n"
751 << " Result:\n" << diag << "\n"
752 << " Expected result:\n( 1 0 0 0 )\n"
753 "( 0 18 0 0 )\n"
754 "( 0 0 11 0 )\n"
755 "( 0 0 0 4 )\n";
756 throw std::runtime_error( oss.str() );
757 }
758 }
759
760 // ( 1 0 0 0 ) ( 1 0 0 0 )
761 // ( 0 2 0 0 ) => ( 0 11 12 0 )
762 // ( 0 0 3 0 ) ( 0 0 14 0 )
763 // ( 0 0 0 4 ) ( 0 0 0 4 )
764 {
765 test_ = "Column-major sparse matrix assignment test 3";
766
767 blaze::CompressedMatrix<int,blaze::columnMajor> mat( 2UL, 2UL, 4UL );
768 mat(0,0) = 11;
769 mat(0,1) = 12;
770 mat(1,1) = 14;
771 mat.insert( 1UL, 0UL, 0 );
772
773 DT diag;
774 init( diag );
775
776 auto sm = submatrix( diag, 1UL, 1UL, 2UL, 2UL );
777
778 try {
779 sm = mat;
780
781 std::ostringstream oss;
782 oss << " Test: " << test_ << "\n"
783 << " Error: Assignment of invalid matrix succeeded\n"
784 << " Details:\n"
785 << " Result:\n" << diag << "\n";
786 throw std::runtime_error( oss.str() );
787 }
788 catch( std::invalid_argument& ) {}
789 }
790
791 // ( 1 0 0 0 ) ( 1 0 0 0 )
792 // ( 0 2 0 0 ) => ( 0 11 0 0 )
793 // ( 0 0 3 0 ) ( 0 13 14 0 )
794 // ( 0 0 0 4 ) ( 0 0 0 4 )
795 {
796 test_ = "Column-major sparse matrix assignment test 4";
797
798 blaze::CompressedMatrix<int,blaze::columnMajor> mat( 2UL, 2UL, 4UL );
799 mat(0,0) = 11;
800 mat(1,0) = 13;
801 mat(1,1) = 14;
802 mat.insert( 0UL, 1UL, 0 );
803
804 DT diag;
805 init( diag );
806
807 auto sm = submatrix( diag, 1UL, 1UL, 2UL, 2UL );
808
809 try {
810 sm = mat;
811
812 std::ostringstream oss;
813 oss << " Test: " << test_ << "\n"
814 << " Error: Assignment of invalid matrix succeeded\n"
815 << " Details:\n"
816 << " Result:\n" << diag << "\n";
817 throw std::runtime_error( oss.str() );
818 }
819 catch( std::invalid_argument& ) {}
820 }
821 }
822 //*************************************************************************************************
823
824
825 //*************************************************************************************************
826 /*!\brief Test of the addition assignment to a submatrix of a DiagonalMatrix.
827 //
828 // \return void
829 // \exception std::runtime_error Error detected.
830 //
831 // This function performs a test of the addition assignment to a submatrix of a DiagonalMatrix. In
832 // case an error is detected, a \a std::runtime_error exception is thrown.
833 */
834 template< typename DT > // Type of the diagonal matrix
testAddAssign()835 void SubmatrixTest::testAddAssign()
836 {
837 //=====================================================================================
838 // Dense matrix addition assignment
839 //=====================================================================================
840
841 // ( 1 0 0 0 ) ( 1 0 0 0 )
842 // ( 0 2 0 0 ) => ( 0 18 0 0 )
843 // ( 0 0 3 0 ) ( 0 0 11 0 )
844 // ( 0 0 0 4 ) ( 0 0 0 4 )
845 {
846 test_ = "Row-major dense matrix addition assignment test 1";
847
848 blaze::DynamicMatrix<int,blaze::rowMajor> mat( 4UL, 2UL, 0 );
849 mat(1,0) = 16;
850 mat(2,1) = 8;
851
852 DT diag;
853 init( diag );
854
855 auto sm = submatrix( diag, 0UL, 1UL, 4UL, 2UL );
856 sm += mat;
857
858 checkRows ( diag, 4UL );
859 checkColumns ( diag, 4UL );
860 checkNonZeros( diag, 4UL );
861
862 if( sm(0,0) != 0 || sm(0,1) != 0 ||
863 sm(1,0) != 18 || sm(1,1) != 0 ||
864 sm(2,0) != 0 || sm(2,1) != 11 ||
865 sm(3,0) != 0 || sm(3,1) != 0 ) {
866 std::ostringstream oss;
867 oss << " Test: " << test_ << "\n"
868 << " Error: Assignment to submatrix failed\n"
869 << " Details:\n"
870 << " Result:\n" << sm << "\n"
871 << " Expected result:\n( 0 0 )\n( 18 0 )\n( 0 11 )\n( 0 0 )\n";
872 throw std::runtime_error( oss.str() );
873 }
874
875 if( diag(0,0) != 1 || diag(0,1) != 0 || diag(0,2) != 0 || diag(0,3) != 0 ||
876 diag(1,0) != 0 || diag(1,1) != 18 || diag(1,2) != 0 || diag(1,3) != 0 ||
877 diag(2,0) != 0 || diag(2,1) != 0 || diag(2,2) != 11 || diag(2,3) != 0 ||
878 diag(3,0) != 0 || diag(3,1) != 0 || diag(3,2) != 0 || diag(3,3) != 4 ) {
879 std::ostringstream oss;
880 oss << " Test: " << test_ << "\n"
881 << " Error: Assignment to submatrix failed\n"
882 << " Details:\n"
883 << " Result:\n" << diag << "\n"
884 << " Expected result:\n( 1 0 0 0 )\n"
885 "( 0 18 0 0 )\n"
886 "( 0 0 11 0 )\n"
887 "( 0 0 0 4 )\n";
888 throw std::runtime_error( oss.str() );
889 }
890 }
891
892 // ( 1 0 0 0 ) ( 1 0 0 0 )
893 // ( 0 2 0 0 ) => ( 0 18 0 0 )
894 // ( 0 0 3 0 ) ( 0 0 11 0 )
895 // ( 0 0 0 4 ) ( 0 0 0 4 )
896 {
897 test_ = "Row-major dense matrix addition assignment test 2";
898
899 blaze::DynamicMatrix<int,blaze::rowMajor> mat( 2UL, 4UL, 0 );
900 mat(0,1) = 16;
901 mat(1,2) = 8;
902
903 DT diag;
904 init( diag );
905
906 auto sm = submatrix( diag, 1UL, 0UL, 2UL, 4UL );
907 sm += mat;
908
909 checkRows ( diag, 4UL );
910 checkColumns ( diag, 4UL );
911 checkNonZeros( diag, 4UL );
912
913 if( sm(0,0) != 0 || sm(0,1) != 18 || sm(0,2) != 0 || sm(0,3) != 0 ||
914 sm(1,0) != 0 || sm(1,1) != 0 || sm(1,2) != 11 || sm(1,3) != 0 ) {
915 std::ostringstream oss;
916 oss << " Test: " << test_ << "\n"
917 << " Error: Assignment to submatrix failed\n"
918 << " Details:\n"
919 << " Result:\n" << sm << "\n"
920 << " Expected result:\n( 0 18 0 0 )\n( 0 0 11 0 )\n";
921 throw std::runtime_error( oss.str() );
922 }
923
924 if( diag(0,0) != 1 || diag(0,1) != 0 || diag(0,2) != 0 || diag(0,3) != 0 ||
925 diag(1,0) != 0 || diag(1,1) != 18 || diag(1,2) != 0 || diag(1,3) != 0 ||
926 diag(2,0) != 0 || diag(2,1) != 0 || diag(2,2) != 11 || diag(2,3) != 0 ||
927 diag(3,0) != 0 || diag(3,1) != 0 || diag(3,2) != 0 || diag(3,3) != 4 ) {
928 std::ostringstream oss;
929 oss << " Test: " << test_ << "\n"
930 << " Error: Assignment to submatrix failed\n"
931 << " Details:\n"
932 << " Result:\n" << diag << "\n"
933 << " Expected result:\n( 1 0 0 0 )\n"
934 "( 0 18 0 0 )\n"
935 "( 0 0 11 0 )\n"
936 "( 0 0 0 4 )\n";
937 throw std::runtime_error( oss.str() );
938 }
939 }
940
941 // ( 1 0 0 0 ) ( 1 0 0 0 )
942 // ( 0 2 0 0 ) => ( 0 11 12 0 )
943 // ( 0 0 3 0 ) ( 0 0 14 0 )
944 // ( 0 0 1 5 ) ( 0 0 0 5 )
945 {
946 test_ = "Row-major dense matrix addition assignment test 3";
947
948 blaze::DynamicMatrix<int,blaze::rowMajor> mat( 2UL, 2UL, 0 );
949 mat(0,0) = 9;
950 mat(0,1) = 12;
951 mat(1,1) = 11;
952
953 DT diag;
954 init( diag );
955
956 auto sm = submatrix( diag, 1UL, 1UL, 2UL, 2UL );
957
958 try {
959 sm += mat;
960
961 std::ostringstream oss;
962 oss << " Test: " << test_ << "\n"
963 << " Error: Assignment of invalid matrix succeeded\n"
964 << " Details:\n"
965 << " Result:\n" << diag << "\n";
966 throw std::runtime_error( oss.str() );
967 }
968 catch( std::invalid_argument& ) {}
969 }
970
971 // ( 1 0 0 0 ) ( 1 0 0 0 )
972 // ( 0 2 0 0 ) => ( 0 11 0 0 )
973 // ( 0 0 3 0 ) ( 0 13 14 0 )
974 // ( 0 0 1 5 ) ( 0 0 0 5 )
975 {
976 test_ = "Row-major dense matrix addition assignment test 4";
977
978 blaze::DynamicMatrix<int,blaze::rowMajor> mat( 2UL, 2UL, 0 );
979 mat(0,0) = 9;
980 mat(1,0) = 13;
981 mat(1,1) = 11;
982
983 DT diag;
984 init( diag );
985
986 auto sm = submatrix( diag, 1UL, 1UL, 2UL, 2UL );
987
988 try {
989 sm += mat;
990
991 std::ostringstream oss;
992 oss << " Test: " << test_ << "\n"
993 << " Error: Assignment of invalid matrix succeeded\n"
994 << " Details:\n"
995 << " Result:\n" << diag << "\n";
996 throw std::runtime_error( oss.str() );
997 }
998 catch( std::invalid_argument& ) {}
999 }
1000
1001 // ( 1 0 0 0 ) ( 1 0 0 0 )
1002 // ( 0 2 0 0 ) => ( 0 18 0 0 )
1003 // ( 0 0 3 0 ) ( 0 0 11 0 )
1004 // ( 0 0 0 4 ) ( 0 0 0 4 )
1005 {
1006 test_ = "Column-major dense matrix addition assignment test 1";
1007
1008 blaze::DynamicMatrix<int,blaze::columnMajor> mat( 4UL, 2UL, 0 );
1009 mat(1,0) = 16;
1010 mat(2,1) = 8;
1011
1012 DT diag;
1013 init( diag );
1014
1015 auto sm = submatrix( diag, 0UL, 1UL, 4UL, 2UL );
1016 sm += mat;
1017
1018 checkRows ( diag, 4UL );
1019 checkColumns ( diag, 4UL );
1020 checkNonZeros( diag, 4UL );
1021
1022 if( sm(0,0) != 0 || sm(0,1) != 0 ||
1023 sm(1,0) != 18 || sm(1,1) != 0 ||
1024 sm(2,0) != 0 || sm(2,1) != 11 ||
1025 sm(3,0) != 0 || sm(3,1) != 0 ) {
1026 std::ostringstream oss;
1027 oss << " Test: " << test_ << "\n"
1028 << " Error: Assignment to submatrix failed\n"
1029 << " Details:\n"
1030 << " Result:\n" << sm << "\n"
1031 << " Expected result:\n( 0 0 )\n( 18 0 )\n( 0 11 )\n( 0 0 )\n";
1032 throw std::runtime_error( oss.str() );
1033 }
1034
1035 if( diag(0,0) != 1 || diag(0,1) != 0 || diag(0,2) != 0 || diag(0,3) != 0 ||
1036 diag(1,0) != 0 || diag(1,1) != 18 || diag(1,2) != 0 || diag(1,3) != 0 ||
1037 diag(2,0) != 0 || diag(2,1) != 0 || diag(2,2) != 11 || diag(2,3) != 0 ||
1038 diag(3,0) != 0 || diag(3,1) != 0 || diag(3,2) != 0 || diag(3,3) != 4 ) {
1039 std::ostringstream oss;
1040 oss << " Test: " << test_ << "\n"
1041 << " Error: Assignment to submatrix failed\n"
1042 << " Details:\n"
1043 << " Result:\n" << diag << "\n"
1044 << " Expected result:\n( 1 0 0 0 )\n"
1045 "( 0 18 0 0 )\n"
1046 "( 0 0 11 0 )\n"
1047 "( 0 0 0 5 )\n";
1048 throw std::runtime_error( oss.str() );
1049 }
1050 }
1051
1052 // ( 1 0 0 0 ) ( 1 0 0 0 )
1053 // ( 0 2 0 0 ) => ( 0 18 0 0 )
1054 // ( 0 0 3 0 ) ( 0 0 11 0 )
1055 // ( 0 0 0 4 ) ( 0 0 0 4 )
1056 {
1057 test_ = "Column-major dense matrix addition assignment test 2";
1058
1059 blaze::DynamicMatrix<int,blaze::columnMajor> mat( 2UL, 4UL, 0 );
1060 mat(0,1) = 16;
1061 mat(1,2) = 8;
1062
1063 DT diag;
1064 init( diag );
1065
1066 auto sm = submatrix( diag, 1UL, 0UL, 2UL, 4UL );
1067 sm += mat;
1068
1069 checkRows ( diag, 4UL );
1070 checkColumns ( diag, 4UL );
1071 checkNonZeros( diag, 4UL );
1072
1073 if( sm(0,0) != 0 || sm(0,1) != 18 || sm(0,2) != 0 || sm(0,3) != 0 ||
1074 sm(1,0) != 0 || sm(1,1) != 0 || sm(1,2) != 11 || sm(1,3) != 0 ) {
1075 std::ostringstream oss;
1076 oss << " Test: " << test_ << "\n"
1077 << " Error: Assignment to submatrix failed\n"
1078 << " Details:\n"
1079 << " Result:\n" << sm << "\n"
1080 << " Expected result:\n( 0 18 0 0 )\n( 0 0 11 0 )\n";
1081 throw std::runtime_error( oss.str() );
1082 }
1083
1084 if( diag(0,0) != 1 || diag(0,1) != 0 || diag(0,2) != 0 || diag(0,3) != 0 ||
1085 diag(1,0) != 0 || diag(1,1) != 18 || diag(1,2) != 0 || diag(1,3) != 0 ||
1086 diag(2,0) != 0 || diag(2,1) != 0 || diag(2,2) != 11 || diag(2,3) != 0 ||
1087 diag(3,0) != 0 || diag(3,1) != 0 || diag(3,2) != 0 || diag(3,3) != 4 ) {
1088 std::ostringstream oss;
1089 oss << " Test: " << test_ << "\n"
1090 << " Error: Assignment to submatrix failed\n"
1091 << " Details:\n"
1092 << " Result:\n" << diag << "\n"
1093 << " Expected result:\n( 1 0 0 0 )\n"
1094 "( 0 18 0 0 )\n"
1095 "( 0 0 11 0 )\n"
1096 "( 0 0 0 4 )\n";
1097 throw std::runtime_error( oss.str() );
1098 }
1099 }
1100
1101 // ( 1 0 0 0 ) ( 1 0 0 0 )
1102 // ( 0 2 0 0 ) => ( 0 11 12 0 )
1103 // ( 0 0 3 0 ) ( 0 0 14 0 )
1104 // ( 0 0 0 4 ) ( 0 0 0 4 )
1105 {
1106 test_ = "Column-major dense matrix addition assignment test 3";
1107
1108 blaze::DynamicMatrix<int,blaze::columnMajor> mat( 2UL, 2UL, 0 );
1109 mat(0,0) = 9;
1110 mat(0,1) = 12;
1111 mat(1,1) = 11;
1112
1113 DT diag;
1114 init( diag );
1115
1116 auto sm = submatrix( diag, 1UL, 1UL, 2UL, 2UL );
1117
1118 try {
1119 sm += mat;
1120
1121 std::ostringstream oss;
1122 oss << " Test: " << test_ << "\n"
1123 << " Error: Assignment of invalid matrix succeeded\n"
1124 << " Details:\n"
1125 << " Result:\n" << diag << "\n";
1126 throw std::runtime_error( oss.str() );
1127 }
1128 catch( std::invalid_argument& ) {}
1129 }
1130
1131 // ( 1 0 0 0 ) ( 1 0 0 0 )
1132 // ( 0 2 0 0 ) => ( 0 11 0 0 )
1133 // ( 0 0 3 0 ) ( 0 13 14 0 )
1134 // ( 0 0 0 4 ) ( 0 0 0 4 )
1135 {
1136 test_ = "Column-major dense matrix addition assignment test 4";
1137
1138 blaze::DynamicMatrix<int,blaze::columnMajor> mat( 2UL, 2UL, 0 );
1139 mat(0,0) = 9;
1140 mat(1,0) = 13;
1141 mat(1,1) = 11;
1142
1143 DT diag;
1144 init( diag );
1145
1146 auto sm = submatrix( diag, 1UL, 1UL, 2UL, 2UL );
1147
1148 try {
1149 sm += mat;
1150
1151 std::ostringstream oss;
1152 oss << " Test: " << test_ << "\n"
1153 << " Error: Assignment of invalid matrix succeeded\n"
1154 << " Details:\n"
1155 << " Result:\n" << diag << "\n";
1156 throw std::runtime_error( oss.str() );
1157 }
1158 catch( std::invalid_argument& ) {}
1159 }
1160
1161
1162 //=====================================================================================
1163 // Sparse matrix addition assignment
1164 //=====================================================================================
1165
1166 // ( 1 0 0 0 ) ( 1 0 0 0 )
1167 // ( 0 2 0 0 ) => ( 0 18 0 0 )
1168 // ( 0 0 3 0 ) ( 0 0 11 0 )
1169 // ( 0 0 0 4 ) ( 0 0 0 4 )
1170 {
1171 test_ = "Row-major sparse matrix addition assignment test 1";
1172
1173 blaze::CompressedMatrix<int,blaze::rowMajor> mat( 4UL, 2UL, 4UL );
1174 mat(1,0) = 16;
1175 mat(2,1) = 8;
1176 mat.insert( 1UL, 1UL, 0 );
1177 mat.insert( 2UL, 0UL, 0 );
1178
1179 DT diag;
1180 init( diag );
1181
1182 auto sm = submatrix( diag, 0UL, 1UL, 4UL, 2UL );
1183 sm += mat;
1184
1185 checkRows ( diag, 4UL );
1186 checkColumns ( diag, 4UL );
1187 checkNonZeros( diag, 4UL );
1188
1189 if( sm(0,0) != 0 || sm(0,1) != 0 ||
1190 sm(1,0) != 18 || sm(1,1) != 0 ||
1191 sm(2,0) != 0 || sm(2,1) != 11 ||
1192 sm(3,0) != 0 || sm(3,1) != 0 ) {
1193 std::ostringstream oss;
1194 oss << " Test: " << test_ << "\n"
1195 << " Error: Assignment to submatrix failed\n"
1196 << " Details:\n"
1197 << " Result:\n" << sm << "\n"
1198 << " Expected result:\n( 0 0 )\n( 18 0 )\n( 0 11 )\n( 0 0 )\n";
1199 throw std::runtime_error( oss.str() );
1200 }
1201
1202 if( diag(0,0) != 1 || diag(0,1) != 0 || diag(0,2) != 0 || diag(0,3) != 0 ||
1203 diag(1,0) != 0 || diag(1,1) != 18 || diag(1,2) != 0 || diag(1,3) != 0 ||
1204 diag(2,0) != 0 || diag(2,1) != 0 || diag(2,2) != 11 || diag(2,3) != 0 ||
1205 diag(3,0) != 0 || diag(3,1) != 0 || diag(3,2) != 0 || diag(3,3) != 4 ) {
1206 std::ostringstream oss;
1207 oss << " Test: " << test_ << "\n"
1208 << " Error: Assignment to submatrix failed\n"
1209 << " Details:\n"
1210 << " Result:\n" << diag << "\n"
1211 << " Expected result:\n( 1 0 0 0 )\n"
1212 "( 0 18 0 0 )\n"
1213 "( 0 0 11 0 )\n"
1214 "( 0 0 0 4 )\n";
1215 throw std::runtime_error( oss.str() );
1216 }
1217 }
1218
1219 // ( 1 0 0 0 ) ( 1 0 0 0 )
1220 // ( 0 2 0 0 ) => ( 0 18 0 0 )
1221 // ( 0 0 3 0 ) ( 0 0 11 0 )
1222 // ( 0 0 0 4 ) ( 0 0 0 4 )
1223 {
1224 test_ = "Row-major sparse matrix addition assignment test 2";
1225
1226 blaze::CompressedMatrix<int,blaze::rowMajor> mat( 2UL, 4UL, 4UL );
1227 mat(0,1) = 16;
1228 mat(1,2) = 8;
1229 mat.insert( 0UL, 2UL, 0 );
1230 mat.insert( 1UL, 1UL, 0 );
1231
1232 DT diag;
1233 init( diag );
1234
1235 auto sm = submatrix( diag, 1UL, 0UL, 2UL, 4UL );
1236 sm += mat;
1237
1238 checkRows ( diag, 4UL );
1239 checkColumns ( diag, 4UL );
1240 checkNonZeros( diag, 4UL );
1241
1242 if( sm(0,0) != 0 || sm(0,1) != 18 || sm(0,2) != 0 || sm(0,3) != 0 ||
1243 sm(1,0) != 0 || sm(1,1) != 0 || sm(1,2) != 11 || sm(1,3) != 0 ) {
1244 std::ostringstream oss;
1245 oss << " Test: " << test_ << "\n"
1246 << " Error: Assignment to submatrix failed\n"
1247 << " Details:\n"
1248 << " Result:\n" << sm << "\n"
1249 << " Expected result:\n( 0 18 0 0 )\n( 0 0 11 0 )\n";
1250 throw std::runtime_error( oss.str() );
1251 }
1252
1253 if( diag(0,0) != 1 || diag(0,1) != 0 || diag(0,2) != 0 || diag(0,3) != 0 ||
1254 diag(1,0) != 0 || diag(1,1) != 18 || diag(1,2) != 0 || diag(1,3) != 0 ||
1255 diag(2,0) != 0 || diag(2,1) != 0 || diag(2,2) != 11 || diag(2,3) != 0 ||
1256 diag(3,0) != 0 || diag(3,1) != 0 || diag(3,2) != 0 || diag(3,3) != 4 ) {
1257 std::ostringstream oss;
1258 oss << " Test: " << test_ << "\n"
1259 << " Error: Assignment to submatrix failed\n"
1260 << " Details:\n"
1261 << " Result:\n" << diag << "\n"
1262 << " Expected result:\n( 1 0 0 0 )\n"
1263 "( 0 18 0 0 )\n"
1264 "( 0 0 11 0 )\n"
1265 "( 0 0 0 4 )\n";
1266 throw std::runtime_error( oss.str() );
1267 }
1268 }
1269
1270 // ( 1 0 0 0 ) ( 1 0 0 0 )
1271 // ( 0 2 0 0 ) => ( 0 11 12 0 )
1272 // ( 0 0 3 0 ) ( 0 0 14 0 )
1273 // ( 0 0 0 4 ) ( 0 0 0 4 )
1274 {
1275 test_ = "Row-major sparse matrix addition assignment test 3";
1276
1277 blaze::CompressedMatrix<int,blaze::rowMajor> mat( 2UL, 2UL, 4UL );
1278 mat(0,0) = 9;
1279 mat(0,1) = 12;
1280 mat(1,1) = 11;
1281 mat.insert( 1UL, 0UL, 0 );
1282
1283 DT diag;
1284 init( diag );
1285
1286 auto sm = submatrix( diag, 1UL, 1UL, 2UL, 2UL );
1287
1288 try {
1289 sm += mat;
1290
1291 std::ostringstream oss;
1292 oss << " Test: " << test_ << "\n"
1293 << " Error: Assignment of invalid matrix succeeded\n"
1294 << " Details:\n"
1295 << " Result:\n" << diag << "\n";
1296 throw std::runtime_error( oss.str() );
1297 }
1298 catch( std::invalid_argument& ) {}
1299 }
1300
1301 // ( 1 0 0 0 ) ( 1 0 0 0 )
1302 // ( 0 2 0 0 ) => ( 0 11 0 0 )
1303 // ( 0 0 3 0 ) ( 0 13 14 0 )
1304 // ( 0 0 0 4 ) ( 0 0 0 4 )
1305 {
1306 test_ = "Row-major sparse matrix addition assignment test 4";
1307
1308 blaze::CompressedMatrix<int,blaze::rowMajor> mat( 2UL, 2UL, 4UL );
1309 mat(0,0) = 9;
1310 mat(1,0) = 13;
1311 mat(1,1) = 11;
1312 mat.insert( 0UL, 1UL, 0 );
1313
1314 DT diag;
1315 init( diag );
1316
1317 auto sm = submatrix( diag, 1UL, 1UL, 2UL, 2UL );
1318
1319 try {
1320 sm += mat;
1321
1322 std::ostringstream oss;
1323 oss << " Test: " << test_ << "\n"
1324 << " Error: Assignment of invalid matrix succeeded\n"
1325 << " Details:\n"
1326 << " Result:\n" << diag << "\n";
1327 throw std::runtime_error( oss.str() );
1328 }
1329 catch( std::invalid_argument& ) {}
1330 }
1331
1332 // ( 1 0 0 0 ) ( 1 0 0 0 )
1333 // ( 0 2 0 0 ) => ( 0 18 0 0 )
1334 // ( 0 0 3 0 ) ( 0 0 11 0 )
1335 // ( 0 0 0 4 ) ( 0 0 0 4 )
1336 {
1337 test_ = "Column-major sparse matrix addition assignment test 1";
1338
1339 blaze::CompressedMatrix<int,blaze::columnMajor> mat( 4UL, 2UL, 4UL );
1340 mat(1,0) = 16;
1341 mat(2,1) = 8;
1342 mat.insert( 1UL, 1UL, 0 );
1343 mat.insert( 2UL, 0UL, 0 );
1344
1345 DT diag;
1346 init( diag );
1347
1348 auto sm = submatrix( diag, 0UL, 1UL, 4UL, 2UL );
1349 sm += mat;
1350
1351 checkRows ( diag, 4UL );
1352 checkColumns ( diag, 4UL );
1353 checkNonZeros( diag, 4UL );
1354
1355 if( sm(0,0) != 0 || sm(0,1) != 0 ||
1356 sm(1,0) != 18 || sm(1,1) != 0 ||
1357 sm(2,0) != 0 || sm(2,1) != 11 ||
1358 sm(3,0) != 0 || sm(3,1) != 0 ) {
1359 std::ostringstream oss;
1360 oss << " Test: " << test_ << "\n"
1361 << " Error: Assignment to submatrix failed\n"
1362 << " Details:\n"
1363 << " Result:\n" << sm << "\n"
1364 << " Expected result:\n( 0 0 )\n( 18 0 )\n( 0 11 )\n( 0 0 )\n";
1365 throw std::runtime_error( oss.str() );
1366 }
1367
1368 if( diag(0,0) != 1 || diag(0,1) != 0 || diag(0,2) != 0 || diag(0,3) != 0 ||
1369 diag(1,0) != 0 || diag(1,1) != 18 || diag(1,2) != 0 || diag(1,3) != 0 ||
1370 diag(2,0) != 0 || diag(2,1) != 0 || diag(2,2) != 11 || diag(2,3) != 0 ||
1371 diag(3,0) != 0 || diag(3,1) != 0 || diag(3,2) != 0 || diag(3,3) != 4 ) {
1372 std::ostringstream oss;
1373 oss << " Test: " << test_ << "\n"
1374 << " Error: Assignment to submatrix failed\n"
1375 << " Details:\n"
1376 << " Result:\n" << diag << "\n"
1377 << " Expected result:\n( 1 0 0 0 )\n"
1378 "( 0 18 0 0 )\n"
1379 "( 0 0 11 0 )\n"
1380 "( 0 0 0 4 )\n";
1381 throw std::runtime_error( oss.str() );
1382 }
1383 }
1384
1385 // ( 1 0 0 0 ) ( 1 0 0 0 )
1386 // ( 0 2 0 0 ) => ( 0 18 0 0 )
1387 // ( 0 0 3 0 ) ( 0 0 11 0 )
1388 // ( 0 0 0 4 ) ( 0 0 0 4 )
1389 {
1390 test_ = "Column-major sparse matrix addition assignment test 2";
1391
1392 blaze::CompressedMatrix<int,blaze::columnMajor> mat( 2UL, 4UL, 4UL );
1393 mat(0,1) = 16;
1394 mat(1,2) = 8;
1395 mat.insert( 0UL, 2UL, 0 );
1396 mat.insert( 1UL, 1UL, 0 );
1397
1398 DT diag;
1399 init( diag );
1400
1401 auto sm = submatrix( diag, 1UL, 0UL, 2UL, 4UL );
1402 sm += mat;
1403
1404 checkRows ( diag, 4UL );
1405 checkColumns ( diag, 4UL );
1406 checkNonZeros( diag, 4UL );
1407
1408 if( sm(0,0) != 0 || sm(0,1) != 18 || sm(0,2) != 0 || sm(0,3) != 0 ||
1409 sm(1,0) != 0 || sm(1,1) != 0 || sm(1,2) != 11 || sm(1,3) != 0 ) {
1410 std::ostringstream oss;
1411 oss << " Test: " << test_ << "\n"
1412 << " Error: Assignment to submatrix failed\n"
1413 << " Details:\n"
1414 << " Result:\n" << sm << "\n"
1415 << " Expected result:\n( 0 18 0 0 )\n( 0 0 11 0 )\n";
1416 throw std::runtime_error( oss.str() );
1417 }
1418
1419 if( diag(0,0) != 1 || diag(0,1) != 0 || diag(0,2) != 0 || diag(0,3) != 0 ||
1420 diag(1,0) != 0 || diag(1,1) != 18 || diag(1,2) != 0 || diag(1,3) != 0 ||
1421 diag(2,0) != 0 || diag(2,1) != 0 || diag(2,2) != 11 || diag(2,3) != 0 ||
1422 diag(3,0) != 0 || diag(3,1) != 0 || diag(3,2) != 0 || diag(3,3) != 4 ) {
1423 std::ostringstream oss;
1424 oss << " Test: " << test_ << "\n"
1425 << " Error: Assignment to submatrix failed\n"
1426 << " Details:\n"
1427 << " Result:\n" << diag << "\n"
1428 << " Expected result:\n( 1 0 0 0 )\n"
1429 "( 0 18 0 0 )\n"
1430 "( 0 0 11 0 )\n"
1431 "( 0 0 0 4 )\n";
1432 throw std::runtime_error( oss.str() );
1433 }
1434 }
1435
1436 // ( 1 0 0 0 ) ( 1 0 0 0 )
1437 // ( 0 2 0 0 ) => ( 0 11 12 0 )
1438 // ( 0 0 3 0 ) ( 0 0 14 0 )
1439 // ( 0 0 0 4 ) ( 0 0 0 4 )
1440 {
1441 test_ = "Column-major sparse matrix addition assignment test 3";
1442
1443 blaze::CompressedMatrix<int,blaze::columnMajor> mat( 2UL, 2UL, 4UL );
1444 mat(0,0) = 9;
1445 mat(0,1) = 12;
1446 mat(1,1) = 11;
1447 mat.insert( 1UL, 0UL, 0 );
1448
1449 DT diag;
1450 init( diag );
1451
1452 auto sm = submatrix( diag, 1UL, 1UL, 2UL, 2UL );
1453
1454 try {
1455 sm += mat;
1456
1457 std::ostringstream oss;
1458 oss << " Test: " << test_ << "\n"
1459 << " Error: Assignment of invalid matrix succeeded\n"
1460 << " Details:\n"
1461 << " Result:\n" << diag << "\n";
1462 throw std::runtime_error( oss.str() );
1463 }
1464 catch( std::invalid_argument& ) {}
1465 }
1466
1467 // ( 1 0 0 0 ) ( 1 0 0 0 )
1468 // ( 0 2 0 0 ) => ( 0 11 0 0 )
1469 // ( 0 0 3 0 ) ( 0 13 14 0 )
1470 // ( 0 0 0 4 ) ( 0 0 0 4 )
1471 {
1472 test_ = "Column-major sparse matrix addition assignment test 4";
1473
1474 blaze::CompressedMatrix<int,blaze::columnMajor> mat( 2UL, 2UL, 4UL );
1475 mat(0,0) = 9;
1476 mat(1,0) = 13;
1477 mat(1,1) = 11;
1478 mat.insert( 0UL, 1UL, 0 );
1479
1480 DT diag;
1481 init( diag );
1482
1483 auto sm = submatrix( diag, 1UL, 1UL, 2UL, 2UL );
1484
1485 try {
1486 sm += mat;
1487
1488 std::ostringstream oss;
1489 oss << " Test: " << test_ << "\n"
1490 << " Error: Assignment of invalid matrix succeeded\n"
1491 << " Details:\n"
1492 << " Result:\n" << diag << "\n";
1493 throw std::runtime_error( oss.str() );
1494 }
1495 catch( std::invalid_argument& ) {}
1496 }
1497 }
1498 //*************************************************************************************************
1499
1500
1501 //*************************************************************************************************
1502 /*!\brief Test of the subtraction assignment to a submatrix of a DiagonalMatrix.
1503 //
1504 // \return void
1505 // \exception std::runtime_error Error detected.
1506 //
1507 // This function performs a test of the subtraction assignment to a submatrix of a DiagonalMatrix.
1508 // In case an error is detected, a \a std::runtime_error exception is thrown.
1509 */
1510 template< typename DT > // Type of the diagonal matrix
testSubAssign()1511 void SubmatrixTest::testSubAssign()
1512 {
1513 //=====================================================================================
1514 // Dense matrix subtraction assignment
1515 //=====================================================================================
1516
1517 // ( 1 0 0 0 ) ( 1 0 0 0 )
1518 // ( 0 2 0 0 ) => ( 0 18 0 0 )
1519 // ( 0 0 3 0 ) ( 0 0 11 0 )
1520 // ( 0 0 0 4 ) ( 0 0 0 4 )
1521 {
1522 test_ = "Row-major dense matrix subtraction assignment test 1";
1523
1524 blaze::DynamicMatrix<int,blaze::rowMajor> mat( 4UL, 2UL, 0 );
1525 mat(1,0) = -16;
1526 mat(2,1) = -8;
1527
1528 DT diag;
1529 init( diag );
1530
1531 auto sm = submatrix( diag, 0UL, 1UL, 4UL, 2UL );
1532 sm -= mat;
1533
1534 checkRows ( diag, 4UL );
1535 checkColumns ( diag, 4UL );
1536 checkNonZeros( diag, 4UL );
1537
1538 if( sm(0,0) != 0 || sm(0,1) != 0 ||
1539 sm(1,0) != 18 || sm(1,1) != 0 ||
1540 sm(2,0) != 0 || sm(2,1) != 11 ||
1541 sm(3,0) != 0 || sm(3,1) != 0 ) {
1542 std::ostringstream oss;
1543 oss << " Test: " << test_ << "\n"
1544 << " Error: Assignment to submatrix failed\n"
1545 << " Details:\n"
1546 << " Result:\n" << sm << "\n"
1547 << " Expected result:\n( 0 0 )\n( 18 0 )\n( 0 11 )\n( 0 0 )\n";
1548 throw std::runtime_error( oss.str() );
1549 }
1550
1551 if( diag(0,0) != 1 || diag(0,1) != 0 || diag(0,2) != 0 || diag(0,3) != 0 ||
1552 diag(1,0) != 0 || diag(1,1) != 18 || diag(1,2) != 0 || diag(1,3) != 0 ||
1553 diag(2,0) != 0 || diag(2,1) != 0 || diag(2,2) != 11 || diag(2,3) != 0 ||
1554 diag(3,0) != 0 || diag(3,1) != 0 || diag(3,2) != 0 || diag(3,3) != 4 ) {
1555 std::ostringstream oss;
1556 oss << " Test: " << test_ << "\n"
1557 << " Error: Assignment to submatrix failed\n"
1558 << " Details:\n"
1559 << " Result:\n" << diag << "\n"
1560 << " Expected result:\n( 1 0 0 0 )\n"
1561 "( 0 18 0 0 )\n"
1562 "( 0 0 11 0 )\n"
1563 "( 0 0 0 4 )\n";
1564 throw std::runtime_error( oss.str() );
1565 }
1566 }
1567
1568 // ( 1 0 0 0 ) ( 1 0 0 0 )
1569 // ( 0 2 0 0 ) => ( 0 18 0 0 )
1570 // ( 0 0 3 0 ) ( 0 0 11 0 )
1571 // ( 0 0 0 4 ) ( 0 0 0 4 )
1572 {
1573 test_ = "Row-major dense matrix subtraction assignment test 2";
1574
1575 blaze::DynamicMatrix<int,blaze::rowMajor> mat( 2UL, 4UL, 0 );
1576 mat(0,1) = -16;
1577 mat(1,2) = -8;
1578
1579 DT diag;
1580 init( diag );
1581
1582 auto sm = submatrix( diag, 1UL, 0UL, 2UL, 4UL );
1583 sm -= mat;
1584
1585 checkRows ( diag, 4UL );
1586 checkColumns ( diag, 4UL );
1587 checkNonZeros( diag, 4UL );
1588
1589 if( sm(0,0) != 0 || sm(0,1) != 18 || sm(0,2) != 0 || sm(0,3) != 0 ||
1590 sm(1,0) != 0 || sm(1,1) != 0 || sm(1,2) != 11 || sm(1,3) != 0 ) {
1591 std::ostringstream oss;
1592 oss << " Test: " << test_ << "\n"
1593 << " Error: Assignment to submatrix failed\n"
1594 << " Details:\n"
1595 << " Result:\n" << sm << "\n"
1596 << " Expected result:\n( 0 18 0 0 )\n( 0 0 11 0 )\n";
1597 throw std::runtime_error( oss.str() );
1598 }
1599
1600 if( diag(0,0) != 1 || diag(0,1) != 0 || diag(0,2) != 0 || diag(0,3) != 0 ||
1601 diag(1,0) != 0 || diag(1,1) != 18 || diag(1,2) != 0 || diag(1,3) != 0 ||
1602 diag(2,0) != 0 || diag(2,1) != 0 || diag(2,2) != 11 || diag(2,3) != 0 ||
1603 diag(3,0) != 0 || diag(3,1) != 0 || diag(3,2) != 0 || diag(3,3) != 4 ) {
1604 std::ostringstream oss;
1605 oss << " Test: " << test_ << "\n"
1606 << " Error: Assignment to submatrix failed\n"
1607 << " Details:\n"
1608 << " Result:\n" << diag << "\n"
1609 << " Expected result:\n( 1 0 0 0 )\n"
1610 "( 0 18 0 0 )\n"
1611 "( 0 0 11 0 )\n"
1612 "( 0 0 0 4 )\n";
1613 throw std::runtime_error( oss.str() );
1614 }
1615 }
1616
1617 // ( 1 0 0 0 ) ( 1 0 0 0 )
1618 // ( 0 2 0 0 ) => ( 0 11 12 0 )
1619 // ( 0 0 3 0 ) ( 0 0 14 0 )
1620 // ( 0 0 1 5 ) ( 0 0 0 5 )
1621 {
1622 test_ = "Row-major dense matrix subtraction assignment test 3";
1623
1624 blaze::DynamicMatrix<int,blaze::rowMajor> mat( 2UL, 2UL, 0 );
1625 mat(0,0) = -9;
1626 mat(0,1) = -12;
1627 mat(1,1) = -11;
1628
1629 DT diag;
1630 init( diag );
1631
1632 auto sm = submatrix( diag, 1UL, 1UL, 2UL, 2UL );
1633
1634 try {
1635 sm -= mat;
1636
1637 std::ostringstream oss;
1638 oss << " Test: " << test_ << "\n"
1639 << " Error: Assignment of invalid matrix succeeded\n"
1640 << " Details:\n"
1641 << " Result:\n" << diag << "\n";
1642 throw std::runtime_error( oss.str() );
1643 }
1644 catch( std::invalid_argument& ) {}
1645 }
1646
1647 // ( 1 0 0 0 ) ( 1 0 0 0 )
1648 // ( 0 2 0 0 ) => ( 0 11 0 0 )
1649 // ( 0 0 3 0 ) ( 0 13 14 0 )
1650 // ( 0 0 1 5 ) ( 0 0 0 5 )
1651 {
1652 test_ = "Row-major dense matrix subtraction assignment test 4";
1653
1654 blaze::DynamicMatrix<int,blaze::rowMajor> mat( 2UL, 2UL, 0 );
1655 mat(0,0) = -9;
1656 mat(1,0) = -13;
1657 mat(1,1) = -11;
1658
1659 DT diag;
1660 init( diag );
1661
1662 auto sm = submatrix( diag, 1UL, 1UL, 2UL, 2UL );
1663
1664 try {
1665 sm -= mat;
1666
1667 std::ostringstream oss;
1668 oss << " Test: " << test_ << "\n"
1669 << " Error: Assignment of invalid matrix succeeded\n"
1670 << " Details:\n"
1671 << " Result:\n" << diag << "\n";
1672 throw std::runtime_error( oss.str() );
1673 }
1674 catch( std::invalid_argument& ) {}
1675 }
1676
1677 // ( 1 0 0 0 ) ( 1 0 0 0 )
1678 // ( 0 2 0 0 ) => ( 0 18 0 0 )
1679 // ( 0 0 3 0 ) ( 0 0 11 0 )
1680 // ( 0 0 0 4 ) ( 0 0 0 4 )
1681 {
1682 test_ = "Column-major dense matrix subtraction assignment test 1";
1683
1684 blaze::DynamicMatrix<int,blaze::columnMajor> mat( 4UL, 2UL, 0 );
1685 mat(1,0) = -16;
1686 mat(2,1) = -8;
1687
1688 DT diag;
1689 init( diag );
1690
1691 auto sm = submatrix( diag, 0UL, 1UL, 4UL, 2UL );
1692 sm -= mat;
1693
1694 checkRows ( diag, 4UL );
1695 checkColumns ( diag, 4UL );
1696 checkNonZeros( diag, 4UL );
1697
1698 if( sm(0,0) != 0 || sm(0,1) != 0 ||
1699 sm(1,0) != 18 || sm(1,1) != 0 ||
1700 sm(2,0) != 0 || sm(2,1) != 11 ||
1701 sm(3,0) != 0 || sm(3,1) != 0 ) {
1702 std::ostringstream oss;
1703 oss << " Test: " << test_ << "\n"
1704 << " Error: Assignment to submatrix failed\n"
1705 << " Details:\n"
1706 << " Result:\n" << sm << "\n"
1707 << " Expected result:\n( 0 0 )\n( 18 0 )\n( 0 11 )\n( 0 0 )\n";
1708 throw std::runtime_error( oss.str() );
1709 }
1710
1711 if( diag(0,0) != 1 || diag(0,1) != 0 || diag(0,2) != 0 || diag(0,3) != 0 ||
1712 diag(1,0) != 0 || diag(1,1) != 18 || diag(1,2) != 0 || diag(1,3) != 0 ||
1713 diag(2,0) != 0 || diag(2,1) != 0 || diag(2,2) != 11 || diag(2,3) != 0 ||
1714 diag(3,0) != 0 || diag(3,1) != 0 || diag(3,2) != 0 || diag(3,3) != 4 ) {
1715 std::ostringstream oss;
1716 oss << " Test: " << test_ << "\n"
1717 << " Error: Assignment to submatrix failed\n"
1718 << " Details:\n"
1719 << " Result:\n" << diag << "\n"
1720 << " Expected result:\n( 1 0 0 0 )\n"
1721 "( 0 18 0 0 )\n"
1722 "( 0 0 11 0 )\n"
1723 "( 0 0 0 5 )\n";
1724 throw std::runtime_error( oss.str() );
1725 }
1726 }
1727
1728 // ( 1 0 0 0 ) ( 1 0 0 0 )
1729 // ( 0 2 0 0 ) => ( 0 18 0 0 )
1730 // ( 0 0 3 0 ) ( 0 0 11 0 )
1731 // ( 0 0 0 4 ) ( 0 0 0 4 )
1732 {
1733 test_ = "Column-major dense matrix subtraction assignment test 2";
1734
1735 blaze::DynamicMatrix<int,blaze::columnMajor> mat( 2UL, 4UL, 0 );
1736 mat(0,1) = -16;
1737 mat(1,2) = -8;
1738
1739 DT diag;
1740 init( diag );
1741
1742 auto sm = submatrix( diag, 1UL, 0UL, 2UL, 4UL );
1743 sm -= mat;
1744
1745 checkRows ( diag, 4UL );
1746 checkColumns ( diag, 4UL );
1747 checkNonZeros( diag, 4UL );
1748
1749 if( sm(0,0) != 0 || sm(0,1) != 18 || sm(0,2) != 0 || sm(0,3) != 0 ||
1750 sm(1,0) != 0 || sm(1,1) != 0 || sm(1,2) != 11 || sm(1,3) != 0 ) {
1751 std::ostringstream oss;
1752 oss << " Test: " << test_ << "\n"
1753 << " Error: Assignment to submatrix failed\n"
1754 << " Details:\n"
1755 << " Result:\n" << sm << "\n"
1756 << " Expected result:\n( 0 18 0 0 )\n( 0 0 11 0 )\n";
1757 throw std::runtime_error( oss.str() );
1758 }
1759
1760 if( diag(0,0) != 1 || diag(0,1) != 0 || diag(0,2) != 0 || diag(0,3) != 0 ||
1761 diag(1,0) != 0 || diag(1,1) != 18 || diag(1,2) != 0 || diag(1,3) != 0 ||
1762 diag(2,0) != 0 || diag(2,1) != 0 || diag(2,2) != 11 || diag(2,3) != 0 ||
1763 diag(3,0) != 0 || diag(3,1) != 0 || diag(3,2) != 0 || diag(3,3) != 4 ) {
1764 std::ostringstream oss;
1765 oss << " Test: " << test_ << "\n"
1766 << " Error: Assignment to submatrix failed\n"
1767 << " Details:\n"
1768 << " Result:\n" << diag << "\n"
1769 << " Expected result:\n( 1 0 0 0 )\n"
1770 "( 0 18 0 0 )\n"
1771 "( 0 0 11 0 )\n"
1772 "( 0 0 0 4 )\n";
1773 throw std::runtime_error( oss.str() );
1774 }
1775 }
1776
1777 // ( 1 0 0 0 ) ( 1 0 0 0 )
1778 // ( 0 2 0 0 ) => ( 0 11 12 0 )
1779 // ( 0 0 3 0 ) ( 0 0 14 0 )
1780 // ( 0 0 0 4 ) ( 0 0 0 4 )
1781 {
1782 test_ = "Column-major dense matrix subtraction assignment test 3";
1783
1784 blaze::DynamicMatrix<int,blaze::columnMajor> mat( 2UL, 2UL, 0 );
1785 mat(0,0) = -9;
1786 mat(0,1) = -12;
1787 mat(1,1) = -11;
1788
1789 DT diag;
1790 init( diag );
1791
1792 auto sm = submatrix( diag, 1UL, 1UL, 2UL, 2UL );
1793
1794 try {
1795 sm -= mat;
1796
1797 std::ostringstream oss;
1798 oss << " Test: " << test_ << "\n"
1799 << " Error: Assignment of invalid matrix succeeded\n"
1800 << " Details:\n"
1801 << " Result:\n" << diag << "\n";
1802 throw std::runtime_error( oss.str() );
1803 }
1804 catch( std::invalid_argument& ) {}
1805 }
1806
1807 // ( 1 0 0 0 ) ( 1 0 0 0 )
1808 // ( 0 2 0 0 ) => ( 0 11 0 0 )
1809 // ( 0 0 3 0 ) ( 0 13 14 0 )
1810 // ( 0 0 0 4 ) ( 0 0 0 4 )
1811 {
1812 test_ = "Column-major dense matrix subtraction assignment test 4";
1813
1814 blaze::DynamicMatrix<int,blaze::columnMajor> mat( 2UL, 2UL, 0 );
1815 mat(0,0) = -9;
1816 mat(1,0) = -13;
1817 mat(1,1) = -11;
1818
1819 DT diag;
1820 init( diag );
1821
1822 auto sm = submatrix( diag, 1UL, 1UL, 2UL, 2UL );
1823
1824 try {
1825 sm -= mat;
1826
1827 std::ostringstream oss;
1828 oss << " Test: " << test_ << "\n"
1829 << " Error: Assignment of invalid matrix succeeded\n"
1830 << " Details:\n"
1831 << " Result:\n" << diag << "\n";
1832 throw std::runtime_error( oss.str() );
1833 }
1834 catch( std::invalid_argument& ) {}
1835 }
1836
1837
1838 //=====================================================================================
1839 // Sparse matrix subtraction assignment
1840 //=====================================================================================
1841
1842 // ( 1 0 0 0 ) ( 1 0 0 0 )
1843 // ( 0 2 0 0 ) => ( 0 18 0 0 )
1844 // ( 0 0 3 0 ) ( 0 0 11 0 )
1845 // ( 0 0 0 4 ) ( 0 0 0 4 )
1846 {
1847 test_ = "Row-major sparse matrix subtraction assignment test 1";
1848
1849 blaze::CompressedMatrix<int,blaze::rowMajor> mat( 4UL, 2UL, 4UL );
1850 mat(1,0) = -16;
1851 mat(2,1) = -8;
1852 mat.insert( 1UL, 1UL, 0 );
1853 mat.insert( 2UL, 0UL, 0 );
1854
1855 DT diag;
1856 init( diag );
1857
1858 auto sm = submatrix( diag, 0UL, 1UL, 4UL, 2UL );
1859 sm -= mat;
1860
1861 checkRows ( diag, 4UL );
1862 checkColumns ( diag, 4UL );
1863 checkNonZeros( diag, 4UL );
1864
1865 if( sm(0,0) != 0 || sm(0,1) != 0 ||
1866 sm(1,0) != 18 || sm(1,1) != 0 ||
1867 sm(2,0) != 0 || sm(2,1) != 11 ||
1868 sm(3,0) != 0 || sm(3,1) != 0 ) {
1869 std::ostringstream oss;
1870 oss << " Test: " << test_ << "\n"
1871 << " Error: Assignment to submatrix failed\n"
1872 << " Details:\n"
1873 << " Result:\n" << sm << "\n"
1874 << " Expected result:\n( 0 0 )\n( 18 0 )\n( 0 11 )\n( 0 0 )\n";
1875 throw std::runtime_error( oss.str() );
1876 }
1877
1878 if( diag(0,0) != 1 || diag(0,1) != 0 || diag(0,2) != 0 || diag(0,3) != 0 ||
1879 diag(1,0) != 0 || diag(1,1) != 18 || diag(1,2) != 0 || diag(1,3) != 0 ||
1880 diag(2,0) != 0 || diag(2,1) != 0 || diag(2,2) != 11 || diag(2,3) != 0 ||
1881 diag(3,0) != 0 || diag(3,1) != 0 || diag(3,2) != 0 || diag(3,3) != 4 ) {
1882 std::ostringstream oss;
1883 oss << " Test: " << test_ << "\n"
1884 << " Error: Assignment to submatrix failed\n"
1885 << " Details:\n"
1886 << " Result:\n" << diag << "\n"
1887 << " Expected result:\n( 1 0 0 0 )\n"
1888 "( 0 18 0 0 )\n"
1889 "( 0 0 11 0 )\n"
1890 "( 0 0 0 4 )\n";
1891 throw std::runtime_error( oss.str() );
1892 }
1893 }
1894
1895 // ( 1 0 0 0 ) ( 1 0 0 0 )
1896 // ( 0 2 0 0 ) => ( 0 18 0 0 )
1897 // ( 0 0 3 0 ) ( 0 0 11 0 )
1898 // ( 0 0 0 4 ) ( 0 0 0 4 )
1899 {
1900 test_ = "Row-major sparse matrix subtraction assignment test 2";
1901
1902 blaze::CompressedMatrix<int,blaze::rowMajor> mat( 2UL, 4UL, 4UL );
1903 mat(0,1) = -16;
1904 mat(1,2) = -8;
1905 mat.insert( 0UL, 2UL, 0 );
1906 mat.insert( 1UL, 1UL, 0 );
1907
1908 DT diag;
1909 init( diag );
1910
1911 auto sm = submatrix( diag, 1UL, 0UL, 2UL, 4UL );
1912 sm -= mat;
1913
1914 checkRows ( diag, 4UL );
1915 checkColumns ( diag, 4UL );
1916 checkNonZeros( diag, 4UL );
1917
1918 if( sm(0,0) != 0 || sm(0,1) != 18 || sm(0,2) != 0 || sm(0,3) != 0 ||
1919 sm(1,0) != 0 || sm(1,1) != 0 || sm(1,2) != 11 || sm(1,3) != 0 ) {
1920 std::ostringstream oss;
1921 oss << " Test: " << test_ << "\n"
1922 << " Error: Assignment to submatrix failed\n"
1923 << " Details:\n"
1924 << " Result:\n" << sm << "\n"
1925 << " Expected result:\n( 0 18 0 0 )\n( 0 0 11 0 )\n";
1926 throw std::runtime_error( oss.str() );
1927 }
1928
1929 if( diag(0,0) != 1 || diag(0,1) != 0 || diag(0,2) != 0 || diag(0,3) != 0 ||
1930 diag(1,0) != 0 || diag(1,1) != 18 || diag(1,2) != 0 || diag(1,3) != 0 ||
1931 diag(2,0) != 0 || diag(2,1) != 0 || diag(2,2) != 11 || diag(2,3) != 0 ||
1932 diag(3,0) != 0 || diag(3,1) != 0 || diag(3,2) != 0 || diag(3,3) != 4 ) {
1933 std::ostringstream oss;
1934 oss << " Test: " << test_ << "\n"
1935 << " Error: Assignment to submatrix failed\n"
1936 << " Details:\n"
1937 << " Result:\n" << diag << "\n"
1938 << " Expected result:\n( 1 0 0 0 )\n"
1939 "( 0 18 0 0 )\n"
1940 "( 0 0 11 0 )\n"
1941 "( 0 0 0 4 )\n";
1942 throw std::runtime_error( oss.str() );
1943 }
1944 }
1945
1946 // ( 1 0 0 0 ) ( 1 0 0 0 )
1947 // ( 0 2 0 0 ) => ( 0 11 12 0 )
1948 // ( 0 0 3 0 ) ( 0 0 14 0 )
1949 // ( 0 0 0 4 ) ( 0 0 0 4 )
1950 {
1951 test_ = "Row-major sparse matrix subtraction assignment test 3";
1952
1953 blaze::CompressedMatrix<int,blaze::rowMajor> mat( 2UL, 2UL, 4UL );
1954 mat(0,0) = -9;
1955 mat(0,1) = -12;
1956 mat(1,1) = -11;
1957 mat.insert( 1UL, 0UL, 0 );
1958
1959 DT diag;
1960 init( diag );
1961
1962 auto sm = submatrix( diag, 1UL, 1UL, 2UL, 2UL );
1963
1964 try {
1965 sm -= mat;
1966
1967 std::ostringstream oss;
1968 oss << " Test: " << test_ << "\n"
1969 << " Error: Assignment of invalid matrix succeeded\n"
1970 << " Details:\n"
1971 << " Result:\n" << diag << "\n";
1972 throw std::runtime_error( oss.str() );
1973 }
1974 catch( std::invalid_argument& ) {}
1975 }
1976
1977 // ( 1 0 0 0 ) ( 1 0 0 0 )
1978 // ( 0 2 0 0 ) => ( 0 11 0 0 )
1979 // ( 0 0 3 0 ) ( 0 13 14 0 )
1980 // ( 0 0 0 4 ) ( 0 0 0 4 )
1981 {
1982 test_ = "Row-major sparse matrix subtraction assignment test 4";
1983
1984 blaze::CompressedMatrix<int,blaze::rowMajor> mat( 2UL, 2UL, 4UL );
1985 mat(0,0) = -9;
1986 mat(1,0) = -13;
1987 mat(1,1) = -11;
1988 mat.insert( 0UL, 1UL, 0 );
1989
1990 DT diag;
1991 init( diag );
1992
1993 auto sm = submatrix( diag, 1UL, 1UL, 2UL, 2UL );
1994
1995 try {
1996 sm -= mat;
1997
1998 std::ostringstream oss;
1999 oss << " Test: " << test_ << "\n"
2000 << " Error: Assignment of invalid matrix succeeded\n"
2001 << " Details:\n"
2002 << " Result:\n" << diag << "\n";
2003 throw std::runtime_error( oss.str() );
2004 }
2005 catch( std::invalid_argument& ) {}
2006 }
2007
2008 // ( 1 0 0 0 ) ( 1 0 0 0 )
2009 // ( 0 2 0 0 ) => ( 0 18 0 0 )
2010 // ( 0 0 3 0 ) ( 0 0 11 0 )
2011 // ( 0 0 0 4 ) ( 0 0 0 4 )
2012 {
2013 test_ = "Column-major sparse matrix subtraction assignment test 1";
2014
2015 blaze::CompressedMatrix<int,blaze::columnMajor> mat( 4UL, 2UL, 4UL );
2016 mat(1,0) = -16;
2017 mat(2,1) = -8;
2018 mat.insert( 1UL, 1UL, 0 );
2019 mat.insert( 2UL, 0UL, 0 );
2020
2021 DT diag;
2022 init( diag );
2023
2024 auto sm = submatrix( diag, 0UL, 1UL, 4UL, 2UL );
2025 sm -= mat;
2026
2027 checkRows ( diag, 4UL );
2028 checkColumns ( diag, 4UL );
2029 checkNonZeros( diag, 4UL );
2030
2031 if( sm(0,0) != 0 || sm(0,1) != 0 ||
2032 sm(1,0) != 18 || sm(1,1) != 0 ||
2033 sm(2,0) != 0 || sm(2,1) != 11 ||
2034 sm(3,0) != 0 || sm(3,1) != 0 ) {
2035 std::ostringstream oss;
2036 oss << " Test: " << test_ << "\n"
2037 << " Error: Assignment to submatrix failed\n"
2038 << " Details:\n"
2039 << " Result:\n" << sm << "\n"
2040 << " Expected result:\n( 0 0 )\n( 18 0 )\n( 0 11 )\n( 0 0 )\n";
2041 throw std::runtime_error( oss.str() );
2042 }
2043
2044 if( diag(0,0) != 1 || diag(0,1) != 0 || diag(0,2) != 0 || diag(0,3) != 0 ||
2045 diag(1,0) != 0 || diag(1,1) != 18 || diag(1,2) != 0 || diag(1,3) != 0 ||
2046 diag(2,0) != 0 || diag(2,1) != 0 || diag(2,2) != 11 || diag(2,3) != 0 ||
2047 diag(3,0) != 0 || diag(3,1) != 0 || diag(3,2) != 0 || diag(3,3) != 4 ) {
2048 std::ostringstream oss;
2049 oss << " Test: " << test_ << "\n"
2050 << " Error: Assignment to submatrix failed\n"
2051 << " Details:\n"
2052 << " Result:\n" << diag << "\n"
2053 << " Expected result:\n( 1 0 0 0 )\n"
2054 "( 0 18 0 0 )\n"
2055 "( 0 0 11 0 )\n"
2056 "( 0 0 0 4 )\n";
2057 throw std::runtime_error( oss.str() );
2058 }
2059 }
2060
2061 // ( 1 0 0 0 ) ( 1 0 0 0 )
2062 // ( 0 2 0 0 ) => ( 0 18 0 0 )
2063 // ( 0 0 3 0 ) ( 0 0 11 0 )
2064 // ( 0 0 0 4 ) ( 0 0 0 4 )
2065 {
2066 test_ = "Column-major sparse matrix subtraction assignment test 2";
2067
2068 blaze::CompressedMatrix<int,blaze::columnMajor> mat( 2UL, 4UL, 4UL );
2069 mat(0,1) = -16;
2070 mat(1,2) = -8;
2071 mat.insert( 0UL, 2UL, 0 );
2072 mat.insert( 1UL, 1UL, 0 );
2073
2074 DT diag;
2075 init( diag );
2076
2077 auto sm = submatrix( diag, 1UL, 0UL, 2UL, 4UL );
2078 sm -= mat;
2079
2080 checkRows ( diag, 4UL );
2081 checkColumns ( diag, 4UL );
2082 checkNonZeros( diag, 4UL );
2083
2084 if( sm(0,0) != 0 || sm(0,1) != 18 || sm(0,2) != 0 || sm(0,3) != 0 ||
2085 sm(1,0) != 0 || sm(1,1) != 0 || sm(1,2) != 11 || sm(1,3) != 0 ) {
2086 std::ostringstream oss;
2087 oss << " Test: " << test_ << "\n"
2088 << " Error: Assignment to submatrix failed\n"
2089 << " Details:\n"
2090 << " Result:\n" << sm << "\n"
2091 << " Expected result:\n( 0 18 0 0 )\n( 0 0 11 0 )\n";
2092 throw std::runtime_error( oss.str() );
2093 }
2094
2095 if( diag(0,0) != 1 || diag(0,1) != 0 || diag(0,2) != 0 || diag(0,3) != 0 ||
2096 diag(1,0) != 0 || diag(1,1) != 18 || diag(1,2) != 0 || diag(1,3) != 0 ||
2097 diag(2,0) != 0 || diag(2,1) != 0 || diag(2,2) != 11 || diag(2,3) != 0 ||
2098 diag(3,0) != 0 || diag(3,1) != 0 || diag(3,2) != 0 || diag(3,3) != 4 ) {
2099 std::ostringstream oss;
2100 oss << " Test: " << test_ << "\n"
2101 << " Error: Assignment to submatrix failed\n"
2102 << " Details:\n"
2103 << " Result:\n" << diag << "\n"
2104 << " Expected result:\n( 1 0 0 0 )\n"
2105 "( 0 18 0 0 )\n"
2106 "( 0 0 11 0 )\n"
2107 "( 0 0 0 4 )\n";
2108 throw std::runtime_error( oss.str() );
2109 }
2110 }
2111
2112 // ( 1 0 0 0 ) ( 1 0 0 0 )
2113 // ( 0 2 0 0 ) => ( 0 11 12 0 )
2114 // ( 0 0 3 0 ) ( 0 0 14 0 )
2115 // ( 0 0 0 4 ) ( 0 0 0 4 )
2116 {
2117 test_ = "Column-major sparse matrix subtraction assignment test 3";
2118
2119 blaze::CompressedMatrix<int,blaze::columnMajor> mat( 2UL, 2UL, 4UL );
2120 mat(0,0) = -9;
2121 mat(0,1) = -12;
2122 mat(1,1) = -11;
2123 mat.insert( 1UL, 0UL, 0 );
2124
2125 DT diag;
2126 init( diag );
2127
2128 auto sm = submatrix( diag, 1UL, 1UL, 2UL, 2UL );
2129
2130 try {
2131 sm -= mat;
2132
2133 std::ostringstream oss;
2134 oss << " Test: " << test_ << "\n"
2135 << " Error: Assignment of invalid matrix succeeded\n"
2136 << " Details:\n"
2137 << " Result:\n" << diag << "\n";
2138 throw std::runtime_error( oss.str() );
2139 }
2140 catch( std::invalid_argument& ) {}
2141 }
2142
2143 // ( 1 0 0 0 ) ( 1 0 0 0 )
2144 // ( 0 2 0 0 ) => ( 0 11 0 0 )
2145 // ( 0 0 3 0 ) ( 0 13 14 0 )
2146 // ( 0 0 0 4 ) ( 0 0 0 4 )
2147 {
2148 test_ = "Column-major sparse matrix subtraction assignment test 4";
2149
2150 blaze::CompressedMatrix<int,blaze::columnMajor> mat( 2UL, 2UL, 4UL );
2151 mat(0,0) = -9;
2152 mat(1,0) = -13;
2153 mat(1,1) = -11;
2154 mat.insert( 0UL, 1UL, 0 );
2155
2156 DT diag;
2157 init( diag );
2158
2159 auto sm = submatrix( diag, 1UL, 1UL, 2UL, 2UL );
2160
2161 try {
2162 sm -= mat;
2163
2164 std::ostringstream oss;
2165 oss << " Test: " << test_ << "\n"
2166 << " Error: Assignment of invalid matrix succeeded\n"
2167 << " Details:\n"
2168 << " Result:\n" << diag << "\n";
2169 throw std::runtime_error( oss.str() );
2170 }
2171 catch( std::invalid_argument& ) {}
2172 }
2173 }
2174 //*************************************************************************************************
2175
2176
2177 //*************************************************************************************************
2178 /*!\brief Test of the Schur product assignment to a submatrix of a DiagonalMatrix.
2179 //
2180 // \return void
2181 // \exception std::runtime_error Error detected.
2182 //
2183 // This function performs a test of the Schur product assignment to a submatrix of a
2184 // DiagonalMatrix. In case an error is detected, a \a std::runtime_error exception is thrown.
2185 */
2186 template< typename DT > // Type of the diagonal matrix
testSchurAssign()2187 void SubmatrixTest::testSchurAssign()
2188 {
2189 //=====================================================================================
2190 // Dense matrix Schur product assignment
2191 //=====================================================================================
2192
2193 // ( 1 0 0 0 ) ( 1 0 0 0 )
2194 // ( 0 2 0 0 ) => ( 0 12 0 0 )
2195 // ( 0 0 3 0 ) ( 0 0 12 0 )
2196 // ( 0 0 0 4 ) ( 0 0 0 4 )
2197 {
2198 test_ = "Row-major dense matrix Schur product assignment test 1";
2199
2200 blaze::DynamicMatrix<int,blaze::rowMajor> mat( 4UL, 2UL, 0 );
2201 mat(0,1) = 9;
2202 mat(1,0) = 6;
2203 mat(2,1) = 4;
2204 mat(3,0) = 9;
2205
2206 DT diag;
2207 init( diag );
2208
2209 auto sm = submatrix( diag, 0UL, 1UL, 4UL, 2UL );
2210 sm %= mat;
2211
2212 checkRows ( diag, 4UL );
2213 checkColumns ( diag, 4UL );
2214 checkNonZeros( diag, 4UL );
2215
2216 if( sm(0,0) != 0 || sm(0,1) != 0 ||
2217 sm(1,0) != 12 || sm(1,1) != 0 ||
2218 sm(2,0) != 0 || sm(2,1) != 12 ||
2219 sm(3,0) != 0 || sm(3,1) != 0 ) {
2220 std::ostringstream oss;
2221 oss << " Test: " << test_ << "\n"
2222 << " Error: Assignment to submatrix failed\n"
2223 << " Details:\n"
2224 << " Result:\n" << sm << "\n"
2225 << " Expected result:\n( 0 0 )\n( 12 0 )\n( 0 12 )\n( 0 0 )\n";
2226 throw std::runtime_error( oss.str() );
2227 }
2228
2229 if( diag(0,0) != 1 || diag(0,1) != 0 || diag(0,2) != 0 || diag(0,3) != 0 ||
2230 diag(1,0) != 0 || diag(1,1) != 12 || diag(1,2) != 0 || diag(1,3) != 0 ||
2231 diag(2,0) != 0 || diag(2,1) != 0 || diag(2,2) != 12 || diag(2,3) != 0 ||
2232 diag(3,0) != 0 || diag(3,1) != 0 || diag(3,2) != 0 || diag(3,3) != 4 ) {
2233 std::ostringstream oss;
2234 oss << " Test: " << test_ << "\n"
2235 << " Error: Assignment to submatrix failed\n"
2236 << " Details:\n"
2237 << " Result:\n" << diag << "\n"
2238 << " Expected result:\n( 1 0 0 0 )\n"
2239 "( 0 12 0 0 )\n"
2240 "( 0 0 12 0 )\n"
2241 "( 0 0 0 4 )\n";
2242 throw std::runtime_error( oss.str() );
2243 }
2244 }
2245
2246 // ( 1 0 0 0 ) ( 1 0 0 0 )
2247 // ( 0 2 0 0 ) => ( 0 12 0 0 )
2248 // ( 0 0 3 0 ) ( 0 0 12 0 )
2249 // ( 0 0 0 4 ) ( 0 0 0 4 )
2250 {
2251 test_ = "Row-major dense matrix Schur product assignment test 2";
2252
2253 blaze::DynamicMatrix<int,blaze::rowMajor> mat( 2UL, 4UL, 0 );
2254 mat(0,1) = 6;
2255 mat(0,3) = 9;
2256 mat(1,0) = 9;
2257 mat(1,2) = 4;
2258
2259 DT diag;
2260 init( diag );
2261
2262 auto sm = submatrix( diag, 1UL, 0UL, 2UL, 4UL );
2263 sm %= mat;
2264
2265 checkRows ( diag, 4UL );
2266 checkColumns ( diag, 4UL );
2267 checkNonZeros( diag, 4UL );
2268
2269 if( sm(0,0) != 0 || sm(0,1) != 12 || sm(0,2) != 0 || sm(0,3) != 0 ||
2270 sm(1,0) != 0 || sm(1,1) != 0 || sm(1,2) != 12 || sm(1,3) != 0 ) {
2271 std::ostringstream oss;
2272 oss << " Test: " << test_ << "\n"
2273 << " Error: Assignment to submatrix failed\n"
2274 << " Details:\n"
2275 << " Result:\n" << sm << "\n"
2276 << " Expected result:\n( 0 12 0 0 )\n( 0 0 12 0 )\n";
2277 throw std::runtime_error( oss.str() );
2278 }
2279
2280 if( diag(0,0) != 1 || diag(0,1) != 0 || diag(0,2) != 0 || diag(0,3) != 0 ||
2281 diag(1,0) != 0 || diag(1,1) != 12 || diag(1,2) != 0 || diag(1,3) != 0 ||
2282 diag(2,0) != 0 || diag(2,1) != 0 || diag(2,2) != 12 || diag(2,3) != 0 ||
2283 diag(3,0) != 0 || diag(3,1) != 0 || diag(3,2) != 0 || diag(3,3) != 4 ) {
2284 std::ostringstream oss;
2285 oss << " Test: " << test_ << "\n"
2286 << " Error: Assignment to submatrix failed\n"
2287 << " Details:\n"
2288 << " Result:\n" << diag << "\n"
2289 << " Expected result:\n( 1 0 0 0 )\n"
2290 "( 0 12 0 0 )\n"
2291 "( 0 0 12 0 )\n"
2292 "( 0 0 0 4 )\n";
2293 throw std::runtime_error( oss.str() );
2294 }
2295 }
2296
2297 // ( 1 0 0 0 ) ( 1 0 0 0 )
2298 // ( 0 2 0 0 ) => ( 0 12 0 0 )
2299 // ( 0 0 3 0 ) ( 0 0 12 0 )
2300 // ( 0 0 0 4 ) ( 0 0 0 4 )
2301 {
2302 test_ = "Column-major dense matrix Schur product assignment test 1";
2303
2304 blaze::DynamicMatrix<int,blaze::columnMajor> mat( 4UL, 2UL, 0 );
2305 mat(0,1) = 9;
2306 mat(1,0) = 6;
2307 mat(2,1) = 4;
2308 mat(3,0) = 9;
2309
2310 DT diag;
2311 init( diag );
2312
2313 auto sm = submatrix( diag, 0UL, 1UL, 4UL, 2UL );
2314 sm %= mat;
2315
2316 checkRows ( diag, 4UL );
2317 checkColumns ( diag, 4UL );
2318 checkNonZeros( diag, 4UL );
2319
2320 if( sm(0,0) != 0 || sm(0,1) != 0 ||
2321 sm(1,0) != 12 || sm(1,1) != 0 ||
2322 sm(2,0) != 0 || sm(2,1) != 12 ||
2323 sm(3,0) != 0 || sm(3,1) != 0 ) {
2324 std::ostringstream oss;
2325 oss << " Test: " << test_ << "\n"
2326 << " Error: Assignment to submatrix failed\n"
2327 << " Details:\n"
2328 << " Result:\n" << sm << "\n"
2329 << " Expected result:\n( 0 0 )\n( 12 0 )\n( 0 12 )\n( 0 0 )\n";
2330 throw std::runtime_error( oss.str() );
2331 }
2332
2333 if( diag(0,0) != 1 || diag(0,1) != 0 || diag(0,2) != 0 || diag(0,3) != 0 ||
2334 diag(1,0) != 0 || diag(1,1) != 12 || diag(1,2) != 0 || diag(1,3) != 0 ||
2335 diag(2,0) != 0 || diag(2,1) != 0 || diag(2,2) != 12 || diag(2,3) != 0 ||
2336 diag(3,0) != 0 || diag(3,1) != 0 || diag(3,2) != 0 || diag(3,3) != 4 ) {
2337 std::ostringstream oss;
2338 oss << " Test: " << test_ << "\n"
2339 << " Error: Assignment to submatrix failed\n"
2340 << " Details:\n"
2341 << " Result:\n" << diag << "\n"
2342 << " Expected result:\n( 1 0 0 0 )\n"
2343 "( 0 12 0 0 )\n"
2344 "( 0 0 12 0 )\n"
2345 "( 0 0 0 5 )\n";
2346 throw std::runtime_error( oss.str() );
2347 }
2348 }
2349
2350 // ( 1 0 0 0 ) ( 1 0 0 0 )
2351 // ( 0 2 0 0 ) => ( 0 12 0 0 )
2352 // ( 0 0 3 0 ) ( 0 0 12 0 )
2353 // ( 0 0 0 4 ) ( 0 0 0 4 )
2354 {
2355 test_ = "Column-major dense matrix Schur product assignment test 2";
2356
2357 blaze::DynamicMatrix<int,blaze::columnMajor> mat( 2UL, 4UL, 0 );
2358 mat(0,1) = 6;
2359 mat(0,3) = 9;
2360 mat(1,0) = 9;
2361 mat(1,2) = 4;
2362
2363 DT diag;
2364 init( diag );
2365
2366 auto sm = submatrix( diag, 1UL, 0UL, 2UL, 4UL );
2367 sm %= mat;
2368
2369 checkRows ( diag, 4UL );
2370 checkColumns ( diag, 4UL );
2371 checkNonZeros( diag, 4UL );
2372
2373 if( sm(0,0) != 0 || sm(0,1) != 12 || sm(0,2) != 0 || sm(0,3) != 0 ||
2374 sm(1,0) != 0 || sm(1,1) != 0 || sm(1,2) != 12 || sm(1,3) != 0 ) {
2375 std::ostringstream oss;
2376 oss << " Test: " << test_ << "\n"
2377 << " Error: Assignment to submatrix failed\n"
2378 << " Details:\n"
2379 << " Result:\n" << sm << "\n"
2380 << " Expected result:\n( 0 12 0 0 )\n( 0 0 12 0 )\n";
2381 throw std::runtime_error( oss.str() );
2382 }
2383
2384 if( diag(0,0) != 1 || diag(0,1) != 0 || diag(0,2) != 0 || diag(0,3) != 0 ||
2385 diag(1,0) != 0 || diag(1,1) != 12 || diag(1,2) != 0 || diag(1,3) != 0 ||
2386 diag(2,0) != 0 || diag(2,1) != 0 || diag(2,2) != 12 || diag(2,3) != 0 ||
2387 diag(3,0) != 0 || diag(3,1) != 0 || diag(3,2) != 0 || diag(3,3) != 4 ) {
2388 std::ostringstream oss;
2389 oss << " Test: " << test_ << "\n"
2390 << " Error: Assignment to submatrix failed\n"
2391 << " Details:\n"
2392 << " Result:\n" << diag << "\n"
2393 << " Expected result:\n( 1 0 0 0 )\n"
2394 "( 0 12 0 0 )\n"
2395 "( 0 0 12 0 )\n"
2396 "( 0 0 0 4 )\n";
2397 throw std::runtime_error( oss.str() );
2398 }
2399 }
2400
2401
2402 //=====================================================================================
2403 // Sparse matrix Schur product assignment
2404 //=====================================================================================
2405
2406 // ( 1 0 0 0 ) ( 1 0 0 0 )
2407 // ( 0 2 0 0 ) => ( 0 12 0 0 )
2408 // ( 0 0 3 0 ) ( 0 0 12 0 )
2409 // ( 0 0 0 4 ) ( 0 0 0 4 )
2410 {
2411 test_ = "Row-major sparse matrix Schur product assignment test 1";
2412
2413 blaze::CompressedMatrix<int,blaze::rowMajor> mat( 4UL, 2UL, 4UL );
2414 mat(0,1) = 9;
2415 mat(1,0) = 6;
2416 mat(2,1) = 4;
2417 mat(3,0) = 9;
2418
2419 DT diag;
2420 init( diag );
2421
2422 auto sm = submatrix( diag, 0UL, 1UL, 4UL, 2UL );
2423 sm %= mat;
2424
2425 checkRows ( diag, 4UL );
2426 checkColumns ( diag, 4UL );
2427 checkNonZeros( diag, 4UL );
2428
2429 if( sm(0,0) != 0 || sm(0,1) != 0 ||
2430 sm(1,0) != 12 || sm(1,1) != 0 ||
2431 sm(2,0) != 0 || sm(2,1) != 12 ||
2432 sm(3,0) != 0 || sm(3,1) != 0 ) {
2433 std::ostringstream oss;
2434 oss << " Test: " << test_ << "\n"
2435 << " Error: Assignment to submatrix failed\n"
2436 << " Details:\n"
2437 << " Result:\n" << sm << "\n"
2438 << " Expected result:\n( 0 0 )\n( 12 0 )\n( 0 12 )\n( 0 0 )\n";
2439 throw std::runtime_error( oss.str() );
2440 }
2441
2442 if( diag(0,0) != 1 || diag(0,1) != 0 || diag(0,2) != 0 || diag(0,3) != 0 ||
2443 diag(1,0) != 0 || diag(1,1) != 12 || diag(1,2) != 0 || diag(1,3) != 0 ||
2444 diag(2,0) != 0 || diag(2,1) != 0 || diag(2,2) != 12 || diag(2,3) != 0 ||
2445 diag(3,0) != 0 || diag(3,1) != 0 || diag(3,2) != 0 || diag(3,3) != 4 ) {
2446 std::ostringstream oss;
2447 oss << " Test: " << test_ << "\n"
2448 << " Error: Assignment to submatrix failed\n"
2449 << " Details:\n"
2450 << " Result:\n" << diag << "\n"
2451 << " Expected result:\n( 1 0 0 0 )\n"
2452 "( 0 12 0 0 )\n"
2453 "( 0 0 12 0 )\n"
2454 "( 0 0 0 4 )\n";
2455 throw std::runtime_error( oss.str() );
2456 }
2457 }
2458
2459 // ( 1 0 0 0 ) ( 1 0 0 0 )
2460 // ( 0 2 0 0 ) => ( 0 12 0 0 )
2461 // ( 0 0 3 0 ) ( 0 0 12 0 )
2462 // ( 0 0 0 4 ) ( 0 0 0 4 )
2463 {
2464 test_ = "Row-major sparse matrix Schur product assignment test 2";
2465
2466 blaze::CompressedMatrix<int,blaze::rowMajor> mat( 2UL, 4UL, 4UL );
2467 mat(0,1) = 6;
2468 mat(0,3) = 9;
2469 mat(1,0) = 9;
2470 mat(1,2) = 4;
2471
2472 DT diag;
2473 init( diag );
2474
2475 auto sm = submatrix( diag, 1UL, 0UL, 2UL, 4UL );
2476 sm %= mat;
2477
2478 checkRows ( diag, 4UL );
2479 checkColumns ( diag, 4UL );
2480 checkNonZeros( diag, 4UL );
2481
2482 if( sm(0,0) != 0 || sm(0,1) != 12 || sm(0,2) != 0 || sm(0,3) != 0 ||
2483 sm(1,0) != 0 || sm(1,1) != 0 || sm(1,2) != 12 || sm(1,3) != 0 ) {
2484 std::ostringstream oss;
2485 oss << " Test: " << test_ << "\n"
2486 << " Error: Assignment to submatrix failed\n"
2487 << " Details:\n"
2488 << " Result:\n" << sm << "\n"
2489 << " Expected result:\n( 0 12 0 0 )\n( 0 0 12 0 )\n";
2490 throw std::runtime_error( oss.str() );
2491 }
2492
2493 if( diag(0,0) != 1 || diag(0,1) != 0 || diag(0,2) != 0 || diag(0,3) != 0 ||
2494 diag(1,0) != 0 || diag(1,1) != 12 || diag(1,2) != 0 || diag(1,3) != 0 ||
2495 diag(2,0) != 0 || diag(2,1) != 0 || diag(2,2) != 12 || diag(2,3) != 0 ||
2496 diag(3,0) != 0 || diag(3,1) != 0 || diag(3,2) != 0 || diag(3,3) != 4 ) {
2497 std::ostringstream oss;
2498 oss << " Test: " << test_ << "\n"
2499 << " Error: Assignment to submatrix failed\n"
2500 << " Details:\n"
2501 << " Result:\n" << diag << "\n"
2502 << " Expected result:\n( 1 0 0 0 )\n"
2503 "( 0 12 0 0 )\n"
2504 "( 0 0 12 0 )\n"
2505 "( 0 0 0 4 )\n";
2506 throw std::runtime_error( oss.str() );
2507 }
2508 }
2509
2510 // ( 1 0 0 0 ) ( 1 0 0 0 )
2511 // ( 0 2 0 0 ) => ( 0 12 0 0 )
2512 // ( 0 0 3 0 ) ( 0 0 12 0 )
2513 // ( 0 0 0 4 ) ( 0 0 0 4 )
2514 {
2515 test_ = "Column-major sparse matrix Schur product assignment test 1";
2516
2517 blaze::CompressedMatrix<int,blaze::columnMajor> mat( 4UL, 2UL, 4UL );
2518 mat(0,1) = 9;
2519 mat(1,0) = 6;
2520 mat(2,1) = 4;
2521 mat(3,0) = 9;
2522
2523 DT diag;
2524 init( diag );
2525
2526 auto sm = submatrix( diag, 0UL, 1UL, 4UL, 2UL );
2527 sm %= mat;
2528
2529 checkRows ( diag, 4UL );
2530 checkColumns ( diag, 4UL );
2531 checkNonZeros( diag, 4UL );
2532
2533 if( sm(0,0) != 0 || sm(0,1) != 0 ||
2534 sm(1,0) != 12 || sm(1,1) != 0 ||
2535 sm(2,0) != 0 || sm(2,1) != 12 ||
2536 sm(3,0) != 0 || sm(3,1) != 0 ) {
2537 std::ostringstream oss;
2538 oss << " Test: " << test_ << "\n"
2539 << " Error: Assignment to submatrix failed\n"
2540 << " Details:\n"
2541 << " Result:\n" << sm << "\n"
2542 << " Expected result:\n( 0 0 )\n( 12 0 )\n( 0 12 )\n( 0 0 )\n";
2543 throw std::runtime_error( oss.str() );
2544 }
2545
2546 if( diag(0,0) != 1 || diag(0,1) != 0 || diag(0,2) != 0 || diag(0,3) != 0 ||
2547 diag(1,0) != 0 || diag(1,1) != 12 || diag(1,2) != 0 || diag(1,3) != 0 ||
2548 diag(2,0) != 0 || diag(2,1) != 0 || diag(2,2) != 12 || diag(2,3) != 0 ||
2549 diag(3,0) != 0 || diag(3,1) != 0 || diag(3,2) != 0 || diag(3,3) != 4 ) {
2550 std::ostringstream oss;
2551 oss << " Test: " << test_ << "\n"
2552 << " Error: Assignment to submatrix failed\n"
2553 << " Details:\n"
2554 << " Result:\n" << diag << "\n"
2555 << " Expected result:\n( 1 0 0 0 )\n"
2556 "( 0 12 0 0 )\n"
2557 "( 0 0 12 0 )\n"
2558 "( 0 0 0 4 )\n";
2559 throw std::runtime_error( oss.str() );
2560 }
2561 }
2562
2563 // ( 1 0 0 0 ) ( 1 0 0 0 )
2564 // ( 0 2 0 0 ) => ( 0 12 0 0 )
2565 // ( 0 0 3 0 ) ( 0 0 12 0 )
2566 // ( 0 0 0 4 ) ( 0 0 0 4 )
2567 {
2568 test_ = "Column-major sparse matrix Schur product assignment test 2";
2569
2570 blaze::CompressedMatrix<int,blaze::columnMajor> mat( 2UL, 4UL, 4UL );
2571 mat(0,1) = 6;
2572 mat(0,3) = 9;
2573 mat(1,0) = 9;
2574 mat(1,2) = 4;
2575
2576 DT diag;
2577 init( diag );
2578
2579 auto sm = submatrix( diag, 1UL, 0UL, 2UL, 4UL );
2580 sm %= mat;
2581
2582 checkRows ( diag, 4UL );
2583 checkColumns ( diag, 4UL );
2584 checkNonZeros( diag, 4UL );
2585
2586 if( sm(0,0) != 0 || sm(0,1) != 12 || sm(0,2) != 0 || sm(0,3) != 0 ||
2587 sm(1,0) != 0 || sm(1,1) != 0 || sm(1,2) != 12 || sm(1,3) != 0 ) {
2588 std::ostringstream oss;
2589 oss << " Test: " << test_ << "\n"
2590 << " Error: Assignment to submatrix failed\n"
2591 << " Details:\n"
2592 << " Result:\n" << sm << "\n"
2593 << " Expected result:\n( 0 12 0 0 )\n( 0 0 12 0 )\n";
2594 throw std::runtime_error( oss.str() );
2595 }
2596
2597 if( diag(0,0) != 1 || diag(0,1) != 0 || diag(0,2) != 0 || diag(0,3) != 0 ||
2598 diag(1,0) != 0 || diag(1,1) != 12 || diag(1,2) != 0 || diag(1,3) != 0 ||
2599 diag(2,0) != 0 || diag(2,1) != 0 || diag(2,2) != 12 || diag(2,3) != 0 ||
2600 diag(3,0) != 0 || diag(3,1) != 0 || diag(3,2) != 0 || diag(3,3) != 4 ) {
2601 std::ostringstream oss;
2602 oss << " Test: " << test_ << "\n"
2603 << " Error: Assignment to submatrix failed\n"
2604 << " Details:\n"
2605 << " Result:\n" << diag << "\n"
2606 << " Expected result:\n( 1 0 0 0 )\n"
2607 "( 0 12 0 0 )\n"
2608 "( 0 0 12 0 )\n"
2609 "( 0 0 0 4 )\n";
2610 throw std::runtime_error( oss.str() );
2611 }
2612 }
2613 }
2614 //*************************************************************************************************
2615
2616
2617 //*************************************************************************************************
2618 /*!\brief Checking the number of rows of the given matrix.
2619 //
2620 // \param matrix The matrix to be checked.
2621 // \param expectedRows The expected number of rows of the matrix.
2622 // \return void
2623 // \exception std::runtime_error Error detected.
2624 //
2625 // This function checks the number of rows of the given matrix. In case the actual number of
2626 // rows does not correspond to the given expected number of rows, a \a std::runtime_error
2627 // exception is thrown.
2628 */
2629 template< typename Type > // Type of the matrix
checkRows(const Type & matrix,size_t expectedRows)2630 void SubmatrixTest::checkRows( const Type& matrix, size_t expectedRows ) const
2631 {
2632 if( matrix.rows() != expectedRows ) {
2633 std::ostringstream oss;
2634 oss << " Test: " << test_ << "\n"
2635 << " Error: Invalid number of rows detected\n"
2636 << " Details:\n"
2637 << " Number of rows : " << matrix.rows() << "\n"
2638 << " Expected number of rows: " << expectedRows << "\n";
2639 throw std::runtime_error( oss.str() );
2640 }
2641 }
2642 //*************************************************************************************************
2643
2644
2645 //*************************************************************************************************
2646 /*!\brief Checking the number of columns of the given matrix.
2647 //
2648 // \param matrix The matrix to be checked.
2649 // \param expectedColumns The expected number of columns of the matrix.
2650 // \return void
2651 // \exception std::runtime_error Error detected.
2652 //
2653 // This function checks the number of columns of the given matrix. In case the actual number of
2654 // columns does not correspond to the given expected number of columns, a \a std::runtime_error
2655 // exception is thrown.
2656 */
2657 template< typename Type > // Type of the matrix
checkColumns(const Type & matrix,size_t expectedColumns)2658 void SubmatrixTest::checkColumns( const Type& matrix, size_t expectedColumns ) const
2659 {
2660 if( matrix.columns() != expectedColumns ) {
2661 std::ostringstream oss;
2662 oss << " Test: " << test_ << "\n"
2663 << " Error: Invalid number of columns detected\n"
2664 << " Details:\n"
2665 << " Number of columns : " << matrix.columns() << "\n"
2666 << " Expected number of columns: " << expectedColumns << "\n";
2667 throw std::runtime_error( oss.str() );
2668 }
2669 }
2670 //*************************************************************************************************
2671
2672
2673 //*************************************************************************************************
2674 /*!\brief Checking the number of non-zero elements of the given matrix.
2675 //
2676 // \param matrix The matrix to be checked.
2677 // \param expectedNonZeros The expected number of non-zero elements of the matrix.
2678 // \return void
2679 // \exception std::runtime_error Error detected.
2680 //
2681 // This function checks the number of non-zero elements of the given matrix. In case the
2682 // actual number of non-zero elements does not correspond to the given expected number,
2683 // a \a std::runtime_error exception is thrown.
2684 */
2685 template< typename Type > // Type of the matrix
checkNonZeros(const Type & matrix,size_t expectedNonZeros)2686 void SubmatrixTest::checkNonZeros( const Type& matrix, size_t expectedNonZeros ) const
2687 {
2688 if( nonZeros( matrix ) != expectedNonZeros ) {
2689 std::ostringstream oss;
2690 oss << " Test: " << test_ << "\n"
2691 << " Error: Invalid number of non-zero elements\n"
2692 << " Details:\n"
2693 << " Number of non-zeros : " << nonZeros( matrix ) << "\n"
2694 << " Expected number of non-zeros: " << expectedNonZeros << "\n";
2695 throw std::runtime_error( oss.str() );
2696 }
2697
2698 if( capacity( matrix ) < nonZeros( matrix ) ) {
2699 std::ostringstream oss;
2700 oss << " Test: " << test_ << "\n"
2701 << " Error: Invalid capacity detected\n"
2702 << " Details:\n"
2703 << " Number of non-zeros: " << nonZeros( matrix ) << "\n"
2704 << " Capacity : " << capacity( matrix ) << "\n";
2705 throw std::runtime_error( oss.str() );
2706 }
2707 }
2708 //*************************************************************************************************
2709
2710
2711
2712
2713 //=================================================================================================
2714 //
2715 // UTILITY FUNCTIONS
2716 //
2717 //=================================================================================================
2718
2719 //*************************************************************************************************
2720 /*!\brief Initializing the given diagonal matrix.
2721 //
2722 // \return void
2723 //
2724 // This function is called before each test case to initialize the given diagonal matrix.
2725 */
2726 template< typename DT >
init(DT & diag)2727 void SubmatrixTest::init( DT& diag )
2728 {
2729 diag.resize( 4UL );
2730 diag(0,0) = 1;
2731 diag(1,1) = 2;
2732 diag(2,2) = 3;
2733 diag(3,3) = 4;
2734 }
2735 //*************************************************************************************************
2736
2737
2738
2739
2740 //=================================================================================================
2741 //
2742 // GLOBAL TEST FUNCTIONS
2743 //
2744 //=================================================================================================
2745
2746 //*************************************************************************************************
2747 /*!\brief Testing the assignment to a submatrix of a DiagonalMatrix.
2748 //
2749 // \return void
2750 */
runTest()2751 void runTest()
2752 {
2753 SubmatrixTest();
2754 }
2755 //*************************************************************************************************
2756
2757
2758
2759
2760 //=================================================================================================
2761 //
2762 // MACRO DEFINITIONS
2763 //
2764 //=================================================================================================
2765
2766 //*************************************************************************************************
2767 /*! \cond BLAZE_INTERNAL */
2768 /*!\brief Macro for the execution of the DiagonalMatrix submatrix test.
2769 */
2770 #define RUN_DIAGONALMATRIX_SUBMATRIX_TEST \
2771 blazetest::mathtest::adaptors::diagonalmatrix::runTest()
2772 /*! \endcond */
2773 //*************************************************************************************************
2774
2775 } // namespace diagonalmatrix
2776
2777 } // namespace adaptors
2778
2779 } // namespace mathtest
2780
2781 } // namespace blazetest
2782
2783 #endif
2784