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