1 //=================================================================================================
2 /*!
3 // \file blazetest/mathtest/adaptors/strictlylowermatrix/SubmatrixTest.h
4 // \brief Header file for the StrictlyLowerMatrix 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_STRICTLYLOWERMATRIX_SUBMATRIXTEST_H_
36 #define _BLAZETEST_MATHTEST_ADAPTORS_STRICTLYLOWERMATRIX_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/StrictlyLowerMatrix.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 strictlylowermatrix {
61
62 //=================================================================================================
63 //
64 // CLASS DEFINITION
65 //
66 //=================================================================================================
67
68 //*************************************************************************************************
69 /*!\brief Auxiliary class for assignment tests to a submatrix of a StrictlyLowerMatrix.
70 //
71 // This class performs assignment tests to a submatrix of a StrictlyLowerMatrix. 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 lower triangular matrix.
79 using DLT = blaze::StrictlyLowerMatrix< blaze::DynamicMatrix<int,blaze::rowMajor> >;
80
81 //! Opposite dense strictly lower triangular matrix type.
82 using DOLT = DLT::OppositeType;
83
84 //! Type of the sparse strictly lower triangular matrix.
85 using SLT = blaze::StrictlyLowerMatrix< blaze::CompressedMatrix<int,blaze::rowMajor> >;
86
87 //! Opposite sparse strictly lower triangular matrix type.
88 using SOLT = SLT::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 LT > void testAssignment ();
109 template< typename LT > void testAddAssign ();
110 template< typename LT > void testSubAssign ();
111 template< typename LT > 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 LT > void init( LT& lower );
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 StrictlyLowerMatrix.
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 StrictlyLowerMatrix. In case an
156 // error is detected, a \a std::runtime_error exception is thrown.
157 */
158 template< typename LT > // Type of the strictly lower matrix
testAssignment()159 void SubmatrixTest::testAssignment()
160 {
161 //=====================================================================================
162 // Dense matrix assignment
163 //=====================================================================================
164
165 // ( 0 0 0 0 ) ( 0 0 0 0 )
166 // ( -4 0 0 0 ) => ( -4 0 0 0 )
167 // ( 7 0 0 0 ) ( 7 14 0 0 )
168 // ( -2 0 1 0 ) ( -2 15 19 0 )
169 {
170 test_ = "Row-major dense matrix assignment test 1";
171
172 blaze::DynamicMatrix<int,blaze::rowMajor> mat( 4UL, 2UL, 0 );
173 mat(2,0) = 14;
174 mat(3,0) = 15;
175 mat(3,1) = 19;
176
177 LT lower;
178 init( lower );
179
180 auto sm = submatrix( lower, 0UL, 1UL, 4UL, 2UL );
181 sm = mat;
182
183 checkRows ( lower, 4UL );
184 checkColumns ( lower, 4UL );
185 checkNonZeros( lower, 6UL );
186
187 if( sm(0,0) != 0 || sm(0,1) != 0 ||
188 sm(1,0) != 0 || sm(1,1) != 0 ||
189 sm(2,0) != 14 || sm(2,1) != 0 ||
190 sm(3,0) != 15 || sm(3,1) != 19 ) {
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( 0 0 )\n( 0 0 )\n( 14 0 )\n( 15 19 )\n";
197 throw std::runtime_error( oss.str() );
198 }
199
200 if( lower(0,0) != 0 || lower(0,1) != 0 || lower(0,2) != 0 || lower(0,3) != 0 ||
201 lower(1,0) != -4 || lower(1,1) != 0 || lower(1,2) != 0 || lower(1,3) != 0 ||
202 lower(2,0) != 7 || lower(2,1) != 14 || lower(2,2) != 0 || lower(2,3) != 0 ||
203 lower(3,0) != -2 || lower(3,1) != 15 || lower(3,2) != 19 || lower(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" << lower << "\n"
209 << " Expected result:\n( 0 0 0 0 )\n"
210 "( -4 0 0 0 )\n"
211 "( 7 14 0 0 )\n"
212 "( -2 15 19 0 )\n";
213 throw std::runtime_error( oss.str() );
214 }
215 }
216
217 // ( 0 0 0 0 ) ( 0 0 0 0 )
218 // ( -4 0 0 0 ) => ( 12 0 0 0 )
219 // ( 7 0 0 0 ) ( 15 17 0 0 )
220 // ( -2 0 1 0 ) ( -2 0 1 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,0) = 12;
226 mat(1,0) = 15;
227 mat(1,1) = 17;
228
229 LT lower;
230 init( lower );
231
232 auto sm = submatrix( lower, 1UL, 0UL, 2UL, 4UL );
233 sm = mat;
234
235 checkRows ( lower, 4UL );
236 checkColumns ( lower, 4UL );
237 checkNonZeros( lower, 5UL );
238
239 if( sm(0,0) != 12 || sm(0,1) != 0 || sm(0,2) != 0 || sm(0,3) != 0 ||
240 sm(1,0) != 15 || sm(1,1) != 17 || sm(1,2) != 0 || sm(1,3) != 0 ) {
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( 12 0 0 0 )\n( 15 17 0 0 )\n";
247 throw std::runtime_error( oss.str() );
248 }
249
250 if( lower(0,0) != 0 || lower(0,1) != 0 || lower(0,2) != 0 || lower(0,3) != 0 ||
251 lower(1,0) != 12 || lower(1,1) != 0 || lower(1,2) != 0 || lower(1,3) != 0 ||
252 lower(2,0) != 15 || lower(2,1) != 17 || lower(2,2) != 0 || lower(2,3) != 0 ||
253 lower(3,0) != -2 || lower(3,1) != 0 || lower(3,2) != 1 || lower(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" << lower << "\n"
259 << " Expected result:\n( 0 0 0 0 )\n"
260 "( 12 0 0 0 )\n"
261 "( 15 17 0 0 )\n"
262 "( -2 0 1 0 )\n";
263 throw std::runtime_error( oss.str() );
264 }
265 }
266
267 // ( 0 0 0 0 ) ( 0 0 0 0 )
268 // ( -4 0 0 0 ) => ( -4 1 0 0 )
269 // ( 7 0 0 0 ) ( 7 13 0 0 )
270 // ( -2 0 1 0 ) ( -2 0 1 0 )
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) = 0;
277 mat(1,0) = 13;
278 mat(1,1) = 0;
279
280 LT lower;
281 init( lower );
282
283 auto sm = submatrix( lower, 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" << lower << "\n";
293 throw std::runtime_error( oss.str() );
294 }
295 catch( std::invalid_argument& ) {}
296 }
297
298 // ( 0 0 0 0 ) ( 1 0 0 0 )
299 // ( -4 0 0 0 ) => ( -4 0 12 0 )
300 // ( 7 0 0 0 ) ( 7 13 0 0 )
301 // ( -2 0 1 0 ) ( -2 0 1 1 )
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 LT lower;
312 init( lower );
313
314 auto sm = submatrix( lower, 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" << lower << "\n";
324 throw std::runtime_error( oss.str() );
325 }
326 catch( std::invalid_argument& ) {}
327 }
328
329 // ( 0 0 0 0 ) ( 0 0 0 0 )
330 // ( -4 0 0 0 ) => ( -4 0 0 0 )
331 // ( 7 0 0 0 ) ( 7 14 0 0 )
332 // ( -2 0 1 0 ) ( -2 15 19 0 )
333 {
334 test_ = "Column-major dense matrix assignment test 1";
335
336 blaze::DynamicMatrix<int,blaze::columnMajor> mat( 4UL, 2UL, 0 );
337 mat(2,0) = 14;
338 mat(3,0) = 15;
339 mat(3,1) = 19;
340
341 LT lower;
342 init( lower );
343
344 auto sm = submatrix( lower, 0UL, 1UL, 4UL, 2UL );
345 sm = mat;
346
347 checkRows ( lower, 4UL );
348 checkColumns ( lower, 4UL );
349 checkNonZeros( lower, 6UL );
350
351 if( sm(0,0) != 0 || sm(0,1) != 0 ||
352 sm(1,0) != 0 || sm(1,1) != 0 ||
353 sm(2,0) != 14 || sm(2,1) != 0 ||
354 sm(3,0) != 15 || sm(3,1) != 19 ) {
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( 0 0 )\n( 0 0 )\n( 14 0 )\n( 15 19 )\n";
361 throw std::runtime_error( oss.str() );
362 }
363
364 if( lower(0,0) != 0 || lower(0,1) != 0 || lower(0,2) != 0 || lower(0,3) != 0 ||
365 lower(1,0) != -4 || lower(1,1) != 0 || lower(1,2) != 0 || lower(1,3) != 0 ||
366 lower(2,0) != 7 || lower(2,1) != 14 || lower(2,2) != 0 || lower(2,3) != 0 ||
367 lower(3,0) != -2 || lower(3,1) != 15 || lower(3,2) != 19 || lower(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" << lower << "\n"
373 << " Expected result:\n( 0 0 0 0 )\n"
374 "( -4 0 0 0 )\n"
375 "( 7 14 0 0 )\n"
376 "( -2 15 19 0 )\n";
377 throw std::runtime_error( oss.str() );
378 }
379 }
380
381 // ( 0 0 0 0 ) ( 0 0 0 0 )
382 // ( -4 0 0 0 ) => ( 12 0 0 0 )
383 // ( 7 0 0 0 ) ( 15 17 0 0 )
384 // ( -2 0 1 0 ) ( -2 0 1 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,0) = 12;
390 mat(1,0) = 15;
391 mat(1,1) = 17;
392
393 LT lower;
394 init( lower );
395
396 auto sm = submatrix( lower, 1UL, 0UL, 2UL, 4UL );
397 sm = mat;
398
399 checkRows ( lower, 4UL );
400 checkColumns ( lower, 4UL );
401 checkNonZeros( lower, 5UL );
402
403 if( sm(0,0) != 12 || sm(0,1) != 0 || sm(0,2) != 0 || sm(0,3) != 0 ||
404 sm(1,0) != 15 || sm(1,1) != 17 || sm(1,2) != 0 || sm(1,3) != 0 ) {
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( 12 0 0 0 )\n( 15 17 0 0 )\n";
411 throw std::runtime_error( oss.str() );
412 }
413
414 if( lower(0,0) != 0 || lower(0,1) != 0 || lower(0,2) != 0 || lower(0,3) != 0 ||
415 lower(1,0) != 12 || lower(1,1) != 0 || lower(1,2) != 0 || lower(1,3) != 0 ||
416 lower(2,0) != 15 || lower(2,1) != 17 || lower(2,2) != 0 || lower(2,3) != 0 ||
417 lower(3,0) != -2 || lower(3,1) != 0 || lower(3,2) != 1 || lower(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" << lower << "\n"
423 << " Expected result:\n( 0 0 0 0 )\n"
424 "( 12 0 0 0 )\n"
425 "( 15 17 0 0 )\n"
426 "( -2 0 1 0 )\n";
427 throw std::runtime_error( oss.str() );
428 }
429 }
430
431 // ( 0 0 0 0 ) ( 0 0 0 0 )
432 // ( -4 0 0 0 ) => ( -4 1 0 0 )
433 // ( 7 0 0 0 ) ( 7 13 0 0 )
434 // ( -2 0 1 0 ) ( -2 0 1 0 )
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) = 0;
441 mat(1,0) = 13;
442 mat(1,1) = 0;
443
444 LT lower;
445 init( lower );
446
447 auto sm = submatrix( lower, 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" << lower << "\n";
457 throw std::runtime_error( oss.str() );
458 }
459 catch( std::invalid_argument& ) {}
460 }
461
462 // ( 0 0 0 0 ) ( 1 0 0 0 )
463 // ( -4 0 0 0 ) => ( -4 0 12 0 )
464 // ( 7 0 0 0 ) ( 7 13 0 0 )
465 // ( -2 0 1 0 ) ( -2 0 1 1 )
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 LT lower;
476 init( lower );
477
478 auto sm = submatrix( lower, 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" << lower << "\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 0 0 0 ) ( 0 0 0 0 )
499 // ( -4 0 0 0 ) => ( -4 0 0 0 )
500 // ( 7 0 0 0 ) ( 7 14 0 0 )
501 // ( -2 0 1 0 ) ( -2 15 19 0 )
502 {
503 test_ = "Row-major sparse matrix assignment test 1";
504
505 blaze::CompressedMatrix<int,blaze::rowMajor> mat( 4UL, 2UL, 4UL );
506 mat(2,0) = 14;
507 mat(3,0) = 15;
508 mat(3,1) = 19;
509 mat.insert( 0UL, 1UL, 0 );
510
511 LT lower;
512 init( lower );
513
514 auto sm = submatrix( lower, 0UL, 1UL, 4UL, 2UL );
515 sm = mat;
516
517 checkRows ( lower, 4UL );
518 checkColumns ( lower, 4UL );
519 checkNonZeros( lower, 6UL );
520
521 if( sm(0,0) != 0 || sm(0,1) != 0 ||
522 sm(1,0) != 0 || sm(1,1) != 0 ||
523 sm(2,0) != 14 || sm(2,1) != 0 ||
524 sm(3,0) != 15 || sm(3,1) != 19 ) {
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( 0 0 )\n( 0 0 )\n( 14 0 )\n( 15 19 )\n";
531 throw std::runtime_error( oss.str() );
532 }
533
534 if( lower(0,0) != 0 || lower(0,1) != 0 || lower(0,2) != 0 || lower(0,3) != 0 ||
535 lower(1,0) != -4 || lower(1,1) != 0 || lower(1,2) != 0 || lower(1,3) != 0 ||
536 lower(2,0) != 7 || lower(2,1) != 14 || lower(2,2) != 0 || lower(2,3) != 0 ||
537 lower(3,0) != -2 || lower(3,1) != 15 || lower(3,2) != 19 || lower(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" << lower << "\n"
543 << " Expected result:\n( 0 0 0 0 )\n"
544 "( -4 0 0 0 )\n"
545 "( 7 14 0 0 )\n"
546 "( -2 15 19 0 )\n";
547 throw std::runtime_error( oss.str() );
548 }
549 }
550
551 // ( 0 0 0 0 ) ( 0 0 0 0 )
552 // ( -4 0 0 0 ) => ( 12 0 0 0 )
553 // ( 7 0 0 0 ) ( 15 17 0 0 )
554 // ( -2 0 1 0 ) ( -2 0 1 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,0) = 12;
560 mat(1,0) = 15;
561 mat(1,1) = 17;
562 mat.insert( 0UL, 3UL, 0 );
563
564 LT lower;
565 init( lower );
566
567 auto sm = submatrix( lower, 1UL, 0UL, 2UL, 4UL );
568 sm = mat;
569
570 checkRows ( lower, 4UL );
571 checkColumns ( lower, 4UL );
572 checkNonZeros( lower, 5UL );
573
574 if( sm(0,0) != 12 || sm(0,1) != 0 || sm(0,2) != 0 || sm(0,3) != 0 ||
575 sm(1,0) != 15 || sm(1,1) != 17 || sm(1,2) != 0 || sm(1,3) != 0 ) {
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( 12 0 0 0 )\n( 15 17 0 0 )\n";
582 throw std::runtime_error( oss.str() );
583 }
584
585 if( lower(0,0) != 0 || lower(0,1) != 0 || lower(0,2) != 0 || lower(0,3) != 0 ||
586 lower(1,0) != 12 || lower(1,1) != 0 || lower(1,2) != 0 || lower(1,3) != 0 ||
587 lower(2,0) != 15 || lower(2,1) != 17 || lower(2,2) != 0 || lower(2,3) != 0 ||
588 lower(3,0) != -2 || lower(3,1) != 0 || lower(3,2) != 1 || lower(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" << lower << "\n"
594 << " Expected result:\n( 0 0 0 0 )\n"
595 "( 12 0 0 0 )\n"
596 "( 15 17 0 0 )\n"
597 "( -2 0 1 0 )\n";
598 throw std::runtime_error( oss.str() );
599 }
600 }
601
602 // ( 0 0 0 0 ) ( 0 0 0 0 )
603 // ( -4 0 0 0 ) => ( -4 1 0 0 )
604 // ( 7 0 0 0 ) ( 7 13 0 0 )
605 // ( -2 0 1 0 ) ( -2 0 1 0 )
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(1,0) = 13;
612
613 LT lower;
614 init( lower );
615
616 auto sm = submatrix( lower, 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" << lower << "\n";
626 throw std::runtime_error( oss.str() );
627 }
628 catch( std::invalid_argument& ) {}
629 }
630
631 // ( 0 0 0 0 ) ( 1 0 0 0 )
632 // ( -4 0 0 0 ) => ( -4 0 12 0 )
633 // ( 7 0 0 0 ) ( 7 13 0 0 )
634 // ( -2 0 1 0 ) ( -2 0 1 1 )
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 LT lower;
643 init( lower );
644
645 auto sm = submatrix( lower, 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" << lower << "\n";
655 throw std::runtime_error( oss.str() );
656 }
657 catch( std::invalid_argument& ) {}
658 }
659
660 // ( 0 0 0 0 ) ( 0 0 0 0 )
661 // ( -4 0 0 0 ) => ( -4 0 0 0 )
662 // ( 7 0 0 0 ) ( 7 14 0 0 )
663 // ( -2 0 1 0 ) ( -2 15 19 0 )
664 {
665 test_ = "Column-major sparse matrix assignment test 1";
666
667 blaze::CompressedMatrix<int,blaze::columnMajor> mat( 4UL, 2UL, 4UL );
668 mat(2,0) = 14;
669 mat(3,0) = 15;
670 mat(3,1) = 19;
671 mat.insert( 0UL, 1UL, 0 );
672
673 LT lower;
674 init( lower );
675
676 auto sm = submatrix( lower, 0UL, 1UL, 4UL, 2UL );
677 sm = mat;
678
679 checkRows ( lower, 4UL );
680 checkColumns ( lower, 4UL );
681 checkNonZeros( lower, 6UL );
682
683 if( sm(0,0) != 0 || sm(0,1) != 0 ||
684 sm(1,0) != 0 || sm(1,1) != 0 ||
685 sm(2,0) != 14 || sm(2,1) != 0 ||
686 sm(3,0) != 15 || sm(3,1) != 19 ) {
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( 0 0 )\n( 0 0 )\n( 14 0 )\n( 15 19 )\n";
693 throw std::runtime_error( oss.str() );
694 }
695
696 if( lower(0,0) != 0 || lower(0,1) != 0 || lower(0,2) != 0 || lower(0,3) != 0 ||
697 lower(1,0) != -4 || lower(1,1) != 0 || lower(1,2) != 0 || lower(1,3) != 0 ||
698 lower(2,0) != 7 || lower(2,1) != 14 || lower(2,2) != 0 || lower(2,3) != 0 ||
699 lower(3,0) != -2 || lower(3,1) != 15 || lower(3,2) != 19 || lower(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" << lower << "\n"
705 << " Expected result:\n( 0 0 0 0 )\n"
706 "( -4 0 0 0 )\n"
707 "( 7 14 0 0 )\n"
708 "( -2 15 19 0 )\n";
709 throw std::runtime_error( oss.str() );
710 }
711 }
712
713 // ( 0 0 0 0 ) ( 0 0 0 0 )
714 // ( -4 0 0 0 ) => ( 12 0 0 0 )
715 // ( 7 0 0 0 ) ( 15 17 0 0 )
716 // ( -2 0 1 0 ) ( -2 0 1 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,0) = 12;
722 mat(1,0) = 15;
723 mat(1,1) = 17;
724 mat.insert( 0UL, 3UL, 0 );
725
726 LT lower;
727 init( lower );
728
729 auto sm = submatrix( lower, 1UL, 0UL, 2UL, 4UL );
730 sm = mat;
731
732 checkRows ( lower, 4UL );
733 checkColumns ( lower, 4UL );
734 checkNonZeros( lower, 5UL );
735
736 if( sm(0,0) != 12 || sm(0,1) != 0 || sm(0,2) != 0 || sm(0,3) != 0 ||
737 sm(1,0) != 15 || sm(1,1) != 17 || sm(1,2) != 0 || sm(1,3) != 0 ) {
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( 12 0 0 0 )\n( 15 17 0 0 )\n";
744 throw std::runtime_error( oss.str() );
745 }
746
747 if( lower(0,0) != 0 || lower(0,1) != 0 || lower(0,2) != 0 || lower(0,3) != 0 ||
748 lower(1,0) != 12 || lower(1,1) != 0 || lower(1,2) != 0 || lower(1,3) != 0 ||
749 lower(2,0) != 15 || lower(2,1) != 17 || lower(2,2) != 0 || lower(2,3) != 0 ||
750 lower(3,0) != -2 || lower(3,1) != 0 || lower(3,2) != 1 || lower(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" << lower << "\n"
756 << " Expected result:\n( 0 0 0 0 )\n"
757 "( 12 0 0 0 )\n"
758 "( 15 17 0 0 )\n"
759 "( -2 0 1 0 )\n";
760 throw std::runtime_error( oss.str() );
761 }
762 }
763
764 // ( 0 0 0 0 ) ( 0 0 0 0 )
765 // ( -4 0 0 0 ) => ( -4 1 0 0 )
766 // ( 7 0 0 0 ) ( 7 13 0 0 )
767 // ( -2 0 1 0 ) ( -2 0 1 0 )
768 {
769 test_ = "Column-major sparse matrix assignment test 3";
770
771 blaze::CompressedMatrix<int,blaze::columnMajor> mat( 2UL, 2UL );
772 mat(0,0) = 1;
773 mat(1,0) = 13;
774
775 LT lower;
776 init( lower );
777
778 auto sm = submatrix( lower, 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" << lower << "\n";
788 throw std::runtime_error( oss.str() );
789 }
790 catch( std::invalid_argument& ) {}
791 }
792
793 // ( 0 0 0 0 ) ( 1 0 0 0 )
794 // ( -4 0 0 0 ) => ( -4 0 12 0 )
795 // ( 7 0 0 0 ) ( 7 13 0 0 )
796 // ( -2 0 1 0 ) ( -2 0 1 1 )
797 {
798 test_ = "Column-major sparse matrix assignment test 4";
799
800 blaze::CompressedMatrix<int,blaze::columnMajor> mat( 2UL, 2UL );
801 mat(0,1) = 12;
802 mat(1,0) = 13;
803
804 LT lower;
805 init( lower );
806
807 auto sm = submatrix( lower, 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" << lower << "\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 StrictlyLowerMatrix.
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 StrictlyLowerMatrix.
832 // In case an error is detected, a \a std::runtime_error exception is thrown.
833 */
834 template< typename LT > // Type of the strictly lower matrix
testAddAssign()835 void SubmatrixTest::testAddAssign()
836 {
837 //=====================================================================================
838 // Dense matrix addition assignment
839 //=====================================================================================
840
841 // ( 0 0 0 0 ) ( 0 0 0 0 )
842 // ( -4 0 0 0 ) => ( -4 0 0 0 )
843 // ( 7 0 0 0 ) ( 7 14 0 0 )
844 // ( -2 0 1 0 ) ( -2 15 20 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(2,0) = 14;
850 mat(3,0) = 15;
851 mat(3,1) = 19;
852
853 LT lower;
854 init( lower );
855
856 auto sm = submatrix( lower, 0UL, 1UL, 4UL, 2UL );
857 sm += mat;
858
859 checkRows ( lower, 4UL );
860 checkColumns ( lower, 4UL );
861 checkNonZeros( lower, 6UL );
862
863 if( sm(0,0) != 0 || sm(0,1) != 0 ||
864 sm(1,0) != 0 || sm(1,1) != 0 ||
865 sm(2,0) != 14 || sm(2,1) != 0 ||
866 sm(3,0) != 15 || sm(3,1) != 20 ) {
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( 0 0 )\n( 0 0 )\n( 14 0 )\n( 15 20 )\n";
873 throw std::runtime_error( oss.str() );
874 }
875
876 if( lower(0,0) != 0 || lower(0,1) != 0 || lower(0,2) != 0 || lower(0,3) != 0 ||
877 lower(1,0) != -4 || lower(1,1) != 0 || lower(1,2) != 0 || lower(1,3) != 0 ||
878 lower(2,0) != 7 || lower(2,1) != 14 || lower(2,2) != 0 || lower(2,3) != 0 ||
879 lower(3,0) != -2 || lower(3,1) != 15 || lower(3,2) != 20 || lower(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" << lower << "\n"
885 << " Expected result:\n( 0 0 0 0 )\n"
886 "( -4 0 0 0 )\n"
887 "( 7 14 0 0 )\n"
888 "( -2 15 20 0 )\n";
889 throw std::runtime_error( oss.str() );
890 }
891 }
892
893 // ( 0 0 0 0 ) ( 0 0 0 0 )
894 // ( -4 0 0 0 ) => ( 8 0 0 0 )
895 // ( 7 0 0 0 ) ( 22 17 0 0 )
896 // ( -2 0 1 0 ) ( -2 0 1 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,0) = 12;
902 mat(1,0) = 15;
903 mat(1,1) = 17;
904
905 LT lower;
906 init( lower );
907
908 auto sm = submatrix( lower, 1UL, 0UL, 2UL, 4UL );
909 sm += mat;
910
911 checkRows ( lower, 4UL );
912 checkColumns ( lower, 4UL );
913 checkNonZeros( lower, 5UL );
914
915 if( sm(0,0) != 8 || sm(0,1) != 0 || sm(0,2) != 0 || sm(0,3) != 0 ||
916 sm(1,0) != 22 || sm(1,1) != 17 || sm(1,2) != 0 || sm(1,3) != 0 ) {
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( 8 0 0 0 )\n( 22 17 0 0 )\n";
923 throw std::runtime_error( oss.str() );
924 }
925
926 if( lower(0,0) != 0 || lower(0,1) != 0 || lower(0,2) != 0 || lower(0,3) != 0 ||
927 lower(1,0) != 8 || lower(1,1) != 0 || lower(1,2) != 0 || lower(1,3) != 0 ||
928 lower(2,0) != 22 || lower(2,1) != 17 || lower(2,2) != 0 || lower(2,3) != 0 ||
929 lower(3,0) != -2 || lower(3,1) != 0 || lower(3,2) != 1 || lower(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" << lower << "\n"
935 << " Expected result:\n( 0 0 0 0 )\n"
936 "( 8 0 0 0 )\n"
937 "( 22 17 0 0 )\n"
938 "( -2 0 1 0 )\n";
939 throw std::runtime_error( oss.str() );
940 }
941 }
942
943 // ( 0 0 0 0 ) ( 0 0 0 0 )
944 // ( -4 0 0 0 ) => ( -4 1 0 0 )
945 // ( 7 0 0 0 ) ( 7 13 0 0 )
946 // ( -2 0 1 0 ) ( -2 0 1 0 )
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) = 0;
953 mat(1,0) = 13;
954 mat(1,1) = 0;
955
956 LT lower;
957 init( lower );
958
959 auto sm = submatrix( lower, 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" << lower << "\n";
969 throw std::runtime_error( oss.str() );
970 }
971 catch( std::invalid_argument& ) {}
972 }
973
974 // ( 0 0 0 0 ) ( 1 0 0 0 )
975 // ( -4 0 0 0 ) => ( -4 0 12 0 )
976 // ( 7 0 0 0 ) ( 7 13 0 0 )
977 // ( -2 0 1 0 ) ( -2 0 1 1 )
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 LT lower;
988 init( lower );
989
990 auto sm = submatrix( lower, 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" << lower << "\n";
1000 throw std::runtime_error( oss.str() );
1001 }
1002 catch( std::invalid_argument& ) {}
1003 }
1004
1005 // ( 0 0 0 0 ) ( 0 0 0 0 )
1006 // ( -4 0 0 0 ) => ( -4 0 0 0 )
1007 // ( 7 0 0 0 ) ( 7 14 0 0 )
1008 // ( -2 0 1 0 ) ( -2 15 20 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(2,0) = 14;
1014 mat(3,0) = 15;
1015 mat(3,1) = 19;
1016
1017 LT lower;
1018 init( lower );
1019
1020 auto sm = submatrix( lower, 0UL, 1UL, 4UL, 2UL );
1021 sm += mat;
1022
1023 checkRows ( lower, 4UL );
1024 checkColumns ( lower, 4UL );
1025 checkNonZeros( lower, 6UL );
1026
1027 if( sm(0,0) != 0 || sm(0,1) != 0 ||
1028 sm(1,0) != 0 || sm(1,1) != 0 ||
1029 sm(2,0) != 14 || sm(2,1) != 0 ||
1030 sm(3,0) != 15 || sm(3,1) != 20 ) {
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( 0 0 )\n( 0 0 )\n( 14 0 )\n( 15 20 )\n";
1037 throw std::runtime_error( oss.str() );
1038 }
1039
1040 if( lower(0,0) != 0 || lower(0,1) != 0 || lower(0,2) != 0 || lower(0,3) != 0 ||
1041 lower(1,0) != -4 || lower(1,1) != 0 || lower(1,2) != 0 || lower(1,3) != 0 ||
1042 lower(2,0) != 7 || lower(2,1) != 14 || lower(2,2) != 0 || lower(2,3) != 0 ||
1043 lower(3,0) != -2 || lower(3,1) != 15 || lower(3,2) != 20 || lower(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" << lower << "\n"
1049 << " Expected result:\n( 0 0 0 0 )\n"
1050 "( -4 0 0 0 )\n"
1051 "( 7 14 0 0 )\n"
1052 "( -2 15 20 0 )\n";
1053 throw std::runtime_error( oss.str() );
1054 }
1055 }
1056
1057 // ( 0 0 0 0 ) ( 0 0 0 0 )
1058 // ( -4 0 0 0 ) => ( 8 0 0 0 )
1059 // ( 7 0 0 0 ) ( 22 17 0 0 )
1060 // ( -2 0 1 0 ) ( -2 0 1 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,0) = 12;
1066 mat(1,0) = 15;
1067 mat(1,1) = 17;
1068
1069 LT lower;
1070 init( lower );
1071
1072 auto sm = submatrix( lower, 1UL, 0UL, 2UL, 4UL );
1073 sm += mat;
1074
1075 checkRows ( lower, 4UL );
1076 checkColumns ( lower, 4UL );
1077 checkNonZeros( lower, 5UL );
1078
1079 if( sm(0,0) != 8 || sm(0,1) != 0 || sm(0,2) != 0 || sm(0,3) != 0 ||
1080 sm(1,0) != 22 || sm(1,1) != 17 || sm(1,2) != 0 || sm(1,3) != 0 ) {
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( 8 0 0 0 )\n( 22 17 0 0 )\n";
1087 throw std::runtime_error( oss.str() );
1088 }
1089
1090 if( lower(0,0) != 0 || lower(0,1) != 0 || lower(0,2) != 0 || lower(0,3) != 0 ||
1091 lower(1,0) != 8 || lower(1,1) != 0 || lower(1,2) != 0 || lower(1,3) != 0 ||
1092 lower(2,0) != 22 || lower(2,1) != 17 || lower(2,2) != 0 || lower(2,3) != 0 ||
1093 lower(3,0) != -2 || lower(3,1) != 0 || lower(3,2) != 1 || lower(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" << lower << "\n"
1099 << " Expected result:\n( 0 0 0 0 )\n"
1100 "( 8 0 0 0 )\n"
1101 "( 22 17 0 0 )\n"
1102 "( -2 0 1 0 )\n";
1103 throw std::runtime_error( oss.str() );
1104 }
1105 }
1106
1107 // ( 0 0 0 0 ) ( 0 0 0 0 )
1108 // ( -4 0 0 0 ) => ( -4 1 0 0 )
1109 // ( 7 0 0 0 ) ( 7 13 0 0 )
1110 // ( -2 0 1 0 ) ( -2 0 1 0 )
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) = 0;
1117 mat(1,0) = 13;
1118 mat(1,1) = 0;
1119
1120 LT lower;
1121 init( lower );
1122
1123 auto sm = submatrix( lower, 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" << lower << "\n";
1133 throw std::runtime_error( oss.str() );
1134 }
1135 catch( std::invalid_argument& ) {}
1136 }
1137
1138 // ( 0 0 0 0 ) ( 1 0 0 0 )
1139 // ( -4 0 0 0 ) => ( -4 0 12 0 )
1140 // ( 7 0 0 0 ) ( 7 13 0 0 )
1141 // ( -2 0 1 0 ) ( -2 0 1 1 )
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 LT lower;
1152 init( lower );
1153
1154 auto sm = submatrix( lower, 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" << lower << "\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 0 0 0 ) ( 0 0 0 0 )
1175 // ( -4 0 0 0 ) => ( -4 0 0 0 )
1176 // ( 7 0 0 0 ) ( 7 14 0 0 )
1177 // ( -2 0 1 0 ) ( -2 15 20 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(2,0) = 14;
1183 mat(3,0) = 15;
1184 mat(3,1) = 19;
1185 mat.insert( 0UL, 1UL, 0 );
1186
1187 LT lower;
1188 init( lower );
1189
1190 auto sm = submatrix( lower, 0UL, 1UL, 4UL, 2UL );
1191 sm += mat;
1192
1193 checkRows ( lower, 4UL );
1194 checkColumns ( lower, 4UL );
1195 checkNonZeros( lower, 6UL );
1196
1197 if( sm(0,0) != 0 || sm(0,1) != 0 ||
1198 sm(1,0) != 0 || sm(1,1) != 0 ||
1199 sm(2,0) != 14 || sm(2,1) != 0 ||
1200 sm(3,0) != 15 || sm(3,1) != 20 ) {
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( 0 0 )\n( 0 0 )\n( 14 0 )\n( 15 20 )\n";
1207 throw std::runtime_error( oss.str() );
1208 }
1209
1210 if( lower(0,0) != 0 || lower(0,1) != 0 || lower(0,2) != 0 || lower(0,3) != 0 ||
1211 lower(1,0) != -4 || lower(1,1) != 0 || lower(1,2) != 0 || lower(1,3) != 0 ||
1212 lower(2,0) != 7 || lower(2,1) != 14 || lower(2,2) != 0 || lower(2,3) != 0 ||
1213 lower(3,0) != -2 || lower(3,1) != 15 || lower(3,2) != 20 || lower(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" << lower << "\n"
1219 << " Expected result:\n( 0 0 0 0 )\n"
1220 "( -4 0 0 0 )\n"
1221 "( 7 14 0 0 )\n"
1222 "( -2 15 20 0 )\n";
1223 throw std::runtime_error( oss.str() );
1224 }
1225 }
1226
1227 // ( 0 0 0 0 ) ( 0 0 0 0 )
1228 // ( -4 0 0 0 ) => ( 8 0 0 0 )
1229 // ( 7 0 0 0 ) ( 22 17 0 0 )
1230 // ( -2 0 1 0 ) ( -2 0 1 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,0) = 12;
1236 mat(1,0) = 15;
1237 mat(1,1) = 17;
1238 mat.insert( 0UL, 3UL, 0 );
1239
1240 LT lower;
1241 init( lower );
1242
1243 auto sm = submatrix( lower, 1UL, 0UL, 2UL, 4UL );
1244 sm += mat;
1245
1246 checkRows ( lower, 4UL );
1247 checkColumns ( lower, 4UL );
1248 checkNonZeros( lower, 5UL );
1249
1250 if( sm(0,0) != 8 || sm(0,1) != 0 || sm(0,2) != 0 || sm(0,3) != 0 ||
1251 sm(1,0) != 22 || sm(1,1) != 17 || sm(1,2) != 0 || sm(1,3) != 0 ) {
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( 8 0 0 0 )\n( 22 17 0 0 )\n";
1258 throw std::runtime_error( oss.str() );
1259 }
1260
1261 if( lower(0,0) != 0 || lower(0,1) != 0 || lower(0,2) != 0 || lower(0,3) != 0 ||
1262 lower(1,0) != 8 || lower(1,1) != 0 || lower(1,2) != 0 || lower(1,3) != 0 ||
1263 lower(2,0) != 22 || lower(2,1) != 17 || lower(2,2) != 0 || lower(2,3) != 0 ||
1264 lower(3,0) != -2 || lower(3,1) != 0 || lower(3,2) != 1 || lower(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" << lower << "\n"
1270 << " Expected result:\n( 0 0 0 0 )\n"
1271 "( 8 0 0 0 )\n"
1272 "( 22 17 0 0 )\n"
1273 "( -2 0 1 0 )\n";
1274 throw std::runtime_error( oss.str() );
1275 }
1276 }
1277
1278 // ( 0 0 0 0 ) ( 0 0 0 0 )
1279 // ( -4 0 0 0 ) => ( -4 1 0 0 )
1280 // ( 7 0 0 0 ) ( 7 13 0 0 )
1281 // ( -2 0 1 0 ) ( -2 0 1 0 )
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(1,0) = 13;
1288
1289 LT lower;
1290 init( lower );
1291
1292 auto sm = submatrix( lower, 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" << lower << "\n";
1302 throw std::runtime_error( oss.str() );
1303 }
1304 catch( std::invalid_argument& ) {}
1305 }
1306
1307 // ( 0 0 0 0 ) ( 1 0 0 0 )
1308 // ( -4 0 0 0 ) => ( -4 0 12 0 )
1309 // ( 7 0 0 0 ) ( 7 13 0 0 )
1310 // ( -2 0 1 0 ) ( -2 0 1 1 )
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 LT lower;
1319 init( lower );
1320
1321 auto sm = submatrix( lower, 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" << lower << "\n";
1331 throw std::runtime_error( oss.str() );
1332 }
1333 catch( std::invalid_argument& ) {}
1334 }
1335
1336 // ( 0 0 0 0 ) ( 0 0 0 0 )
1337 // ( -4 0 0 0 ) => ( -4 0 0 0 )
1338 // ( 7 0 0 0 ) ( 7 14 0 0 )
1339 // ( -2 0 1 0 ) ( -2 15 20 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(2,0) = 14;
1345 mat(3,0) = 15;
1346 mat(3,1) = 19;
1347 mat.insert( 0UL, 1UL, 0 );
1348
1349 LT lower;
1350 init( lower );
1351
1352 auto sm = submatrix( lower, 0UL, 1UL, 4UL, 2UL );
1353 sm += mat;
1354
1355 checkRows ( lower, 4UL );
1356 checkColumns ( lower, 4UL );
1357 checkNonZeros( lower, 6UL );
1358
1359 if( sm(0,0) != 0 || sm(0,1) != 0 ||
1360 sm(1,0) != 0 || sm(1,1) != 0 ||
1361 sm(2,0) != 14 || sm(2,1) != 0 ||
1362 sm(3,0) != 15 || sm(3,1) != 20 ) {
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( 0 0 )\n( 0 0 )\n( 14 0 )\n( 15 20 )\n";
1369 throw std::runtime_error( oss.str() );
1370 }
1371
1372 if( lower(0,0) != 0 || lower(0,1) != 0 || lower(0,2) != 0 || lower(0,3) != 0 ||
1373 lower(1,0) != -4 || lower(1,1) != 0 || lower(1,2) != 0 || lower(1,3) != 0 ||
1374 lower(2,0) != 7 || lower(2,1) != 14 || lower(2,2) != 0 || lower(2,3) != 0 ||
1375 lower(3,0) != -2 || lower(3,1) != 15 || lower(3,2) != 20 || lower(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" << lower << "\n"
1381 << " Expected result:\n( 0 0 0 0 )\n"
1382 "( -4 0 0 0 )\n"
1383 "( 7 14 0 0 )\n"
1384 "( -2 15 20 0 )\n";
1385 throw std::runtime_error( oss.str() );
1386 }
1387 }
1388
1389 // ( 0 0 0 0 ) ( 0 0 0 0 )
1390 // ( -4 0 0 0 ) => ( 8 0 0 0 )
1391 // ( 7 0 0 0 ) ( 22 17 0 0 )
1392 // ( -2 0 1 0 ) ( -2 0 1 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,0) = 12;
1398 mat(1,0) = 15;
1399 mat(1,1) = 17;
1400 mat.insert( 0UL, 3UL, 0 );
1401
1402 LT lower;
1403 init( lower );
1404
1405 auto sm = submatrix( lower, 1UL, 0UL, 2UL, 4UL );
1406 sm += mat;
1407
1408 checkRows ( lower, 4UL );
1409 checkColumns ( lower, 4UL );
1410 checkNonZeros( lower, 5UL );
1411
1412 if( sm(0,0) != 8 || sm(0,1) != 0 || sm(0,2) != 0 || sm(0,3) != 0 ||
1413 sm(1,0) != 22 || sm(1,1) != 17 || sm(1,2) != 0 || sm(1,3) != 0 ) {
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( 8 0 0 0 )\n( 22 17 0 0 )\n";
1420 throw std::runtime_error( oss.str() );
1421 }
1422
1423 if( lower(0,0) != 0 || lower(0,1) != 0 || lower(0,2) != 0 || lower(0,3) != 0 ||
1424 lower(1,0) != 8 || lower(1,1) != 0 || lower(1,2) != 0 || lower(1,3) != 0 ||
1425 lower(2,0) != 22 || lower(2,1) != 17 || lower(2,2) != 0 || lower(2,3) != 0 ||
1426 lower(3,0) != -2 || lower(3,1) != 0 || lower(3,2) != 1 || lower(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" << lower << "\n"
1432 << " Expected result:\n( 0 0 0 0 )\n"
1433 "( 8 0 0 0 )\n"
1434 "( 22 17 0 0 )\n"
1435 "( -2 0 1 0 )\n";
1436 throw std::runtime_error( oss.str() );
1437 }
1438 }
1439
1440 // ( 0 0 0 0 ) ( 0 0 0 0 )
1441 // ( -4 0 0 0 ) => ( -4 1 0 0 )
1442 // ( 7 0 0 0 ) ( 7 13 0 0 )
1443 // ( -2 0 1 0 ) ( -2 0 1 0 )
1444 {
1445 test_ = "Column-major sparse matrix addition assignment test 3";
1446
1447 blaze::CompressedMatrix<int,blaze::columnMajor> mat( 2UL, 2UL );
1448 mat(0,0) = 1;
1449 mat(1,0) = 13;
1450
1451 LT lower;
1452 init( lower );
1453
1454 auto sm = submatrix( lower, 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" << lower << "\n";
1464 throw std::runtime_error( oss.str() );
1465 }
1466 catch( std::invalid_argument& ) {}
1467 }
1468
1469 // ( 0 0 0 0 ) ( 1 0 0 0 )
1470 // ( -4 0 0 0 ) => ( -4 0 12 0 )
1471 // ( 7 0 0 0 ) ( 7 13 0 0 )
1472 // ( -2 0 1 0 ) ( -2 0 1 1 )
1473 {
1474 test_ = "Column-major sparse matrix addition assignment test 4";
1475
1476 blaze::CompressedMatrix<int,blaze::columnMajor> mat( 2UL, 2UL );
1477 mat(0,1) = 12;
1478 mat(1,0) = 13;
1479
1480 LT lower;
1481 init( lower );
1482
1483 auto sm = submatrix( lower, 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" << lower << "\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 StrictlyLowerMatrix.
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 StrictlyLowerMatrix.
1508 // In case an error is detected, a \a std::runtime_error exception is thrown.
1509 */
1510 template< typename LT > // Type of the strictly lower matrix
testSubAssign()1511 void SubmatrixTest::testSubAssign()
1512 {
1513 //=====================================================================================
1514 // Dense matrix subtraction assignment
1515 //=====================================================================================
1516
1517 // ( 0 0 0 0 ) ( 0 0 0 0 )
1518 // ( -4 0 0 0 ) => ( -4 0 0 0 )
1519 // ( 7 0 0 0 ) ( 7 -14 0 0 )
1520 // ( -2 0 1 0 ) ( -2 -15 -18 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(2,0) = 14;
1526 mat(3,0) = 15;
1527 mat(3,1) = 19;
1528
1529 LT lower;
1530 init( lower );
1531
1532 auto sm = submatrix( lower, 0UL, 1UL, 4UL, 2UL );
1533 sm -= mat;
1534
1535 checkRows ( lower, 4UL );
1536 checkColumns ( lower, 4UL );
1537 checkNonZeros( lower, 6UL );
1538
1539 if( sm(0,0) != 0 || sm(0,1) != 0 ||
1540 sm(1,0) != 0 || sm(1,1) != 0 ||
1541 sm(2,0) != -14 || sm(2,1) != 0 ||
1542 sm(3,0) != -15 || sm(3,1) != -18 ) {
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( 0 0 )\n( 0 0 )\n( -14 0 )\n( -15 -18 )\n";
1549 throw std::runtime_error( oss.str() );
1550 }
1551
1552 if( lower(0,0) != 0 || lower(0,1) != 0 || lower(0,2) != 0 || lower(0,3) != 0 ||
1553 lower(1,0) != -4 || lower(1,1) != 0 || lower(1,2) != 0 || lower(1,3) != 0 ||
1554 lower(2,0) != 7 || lower(2,1) != -14 || lower(2,2) != 0 || lower(2,3) != 0 ||
1555 lower(3,0) != -2 || lower(3,1) != -15 || lower(3,2) != -18 || lower(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" << lower << "\n"
1561 << " Expected result:\n( 0 0 0 0 )\n"
1562 "( -4 0 0 0 )\n"
1563 "( 7 -14 0 0 )\n"
1564 "( -2 -15 -18 0 )\n";
1565 throw std::runtime_error( oss.str() );
1566 }
1567 }
1568
1569 // ( 0 0 0 0 ) ( 0 0 0 0 )
1570 // ( -4 0 0 0 ) => ( -16 0 0 0 )
1571 // ( 7 0 0 0 ) ( -8 -17 0 0 )
1572 // ( -2 0 1 0 ) ( -2 0 1 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,0) = 12;
1578 mat(1,0) = 15;
1579 mat(1,1) = 17;
1580
1581 LT lower;
1582 init( lower );
1583
1584 auto sm = submatrix( lower, 1UL, 0UL, 2UL, 4UL );
1585 sm -= mat;
1586
1587 checkRows ( lower, 4UL );
1588 checkColumns ( lower, 4UL );
1589 checkNonZeros( lower, 5UL );
1590
1591 if( sm(0,0) != -16 || sm(0,1) != 0 || sm(0,2) != 0 || sm(0,3) != 0 ||
1592 sm(1,0) != -8 || sm(1,1) != -17 || sm(1,2) != 0 || sm(1,3) != 0 ) {
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( -16 0 0 0 )\n( -8 -17 0 0 )\n";
1599 throw std::runtime_error( oss.str() );
1600 }
1601
1602 if( lower(0,0) != 0 || lower(0,1) != 0 || lower(0,2) != 0 || lower(0,3) != 0 ||
1603 lower(1,0) != -16 || lower(1,1) != 0 || lower(1,2) != 0 || lower(1,3) != 0 ||
1604 lower(2,0) != -8 || lower(2,1) != -17 || lower(2,2) != 0 || lower(2,3) != 0 ||
1605 lower(3,0) != -2 || lower(3,1) != 0 || lower(3,2) != 1 || lower(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" << lower << "\n"
1611 << " Expected result:\n( 0 0 0 0 )\n"
1612 "( -16 0 0 0 )\n"
1613 "( -8 -17 0 0 )\n"
1614 "( -2 0 1 0 )\n";
1615 throw std::runtime_error( oss.str() );
1616 }
1617 }
1618
1619 // ( 0 0 0 0 ) ( 0 0 0 0 )
1620 // ( -4 0 0 0 ) => ( -4 -1 0 0 )
1621 // ( 7 0 0 0 ) ( 7 -13 0 0 )
1622 // ( -2 0 1 0 ) ( -2 0 1 0 )
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) = 0;
1629 mat(1,0) = 13;
1630 mat(1,1) = 0;
1631
1632 LT lower;
1633 init( lower );
1634
1635 auto sm = submatrix( lower, 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" << lower << "\n";
1645 throw std::runtime_error( oss.str() );
1646 }
1647 catch( std::invalid_argument& ) {}
1648 }
1649
1650 // ( 0 0 0 0 ) ( 1 0 0 0 )
1651 // ( -4 0 0 0 ) => ( -4 0 -12 0 )
1652 // ( 7 0 0 0 ) ( 7 -13 0 0 )
1653 // ( -2 0 1 0 ) ( -2 0 1 1 )
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 LT lower;
1664 init( lower );
1665
1666 auto sm = submatrix( lower, 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" << lower << "\n";
1676 throw std::runtime_error( oss.str() );
1677 }
1678 catch( std::invalid_argument& ) {}
1679 }
1680
1681 // ( 0 0 0 0 ) ( 0 0 0 0 )
1682 // ( -4 0 0 0 ) => ( -4 0 0 0 )
1683 // ( 7 0 0 0 ) ( 7 -14 0 0 )
1684 // ( -2 0 1 0 ) ( -2 -15 -18 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(2,0) = 14;
1690 mat(3,0) = 15;
1691 mat(3,1) = 19;
1692
1693 LT lower;
1694 init( lower );
1695
1696 auto sm = submatrix( lower, 0UL, 1UL, 4UL, 2UL );
1697 sm -= mat;
1698
1699 checkRows ( lower, 4UL );
1700 checkColumns ( lower, 4UL );
1701 checkNonZeros( lower, 6UL );
1702
1703 if( sm(0,0) != 0 || sm(0,1) != 0 ||
1704 sm(1,0) != 0 || sm(1,1) != 0 ||
1705 sm(2,0) != -14 || sm(2,1) != 0 ||
1706 sm(3,0) != -15 || sm(3,1) != -18 ) {
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( 0 0 )\n( 0 0 )\n( -14 0 )\n( -15 -18 )\n";
1713 throw std::runtime_error( oss.str() );
1714 }
1715
1716 if( lower(0,0) != 0 || lower(0,1) != 0 || lower(0,2) != 0 || lower(0,3) != 0 ||
1717 lower(1,0) != -4 || lower(1,1) != 0 || lower(1,2) != 0 || lower(1,3) != 0 ||
1718 lower(2,0) != 7 || lower(2,1) != -14 || lower(2,2) != 0 || lower(2,3) != 0 ||
1719 lower(3,0) != -2 || lower(3,1) != -15 || lower(3,2) != -18 || lower(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" << lower << "\n"
1725 << " Expected result:\n( 0 0 0 0 )\n"
1726 "( -4 0 0 0 )\n"
1727 "( 7 -14 0 0 )\n"
1728 "( -2 -15 -18 0 )\n";
1729 throw std::runtime_error( oss.str() );
1730 }
1731 }
1732
1733 // ( 0 0 0 0 ) ( 0 0 0 0 )
1734 // ( -4 0 0 0 ) => ( -16 0 0 0 )
1735 // ( 7 0 0 0 ) ( -8 -17 0 0 )
1736 // ( -2 0 1 0 ) ( -2 0 1 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,0) = 12;
1742 mat(1,0) = 15;
1743 mat(1,1) = 17;
1744
1745 LT lower;
1746 init( lower );
1747
1748 auto sm = submatrix( lower, 1UL, 0UL, 2UL, 4UL );
1749 sm -= mat;
1750
1751 checkRows ( lower, 4UL );
1752 checkColumns ( lower, 4UL );
1753 checkNonZeros( lower, 5UL );
1754
1755 if( sm(0,0) != -16 || sm(0,1) != 0 || sm(0,2) != 0 || sm(0,3) != 0 ||
1756 sm(1,0) != -8 || sm(1,1) != -17 || sm(1,2) != 0 || sm(1,3) != 0 ) {
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( -16 0 0 0 )\n( -8 -17 0 0 )\n";
1763 throw std::runtime_error( oss.str() );
1764 }
1765
1766 if( lower(0,0) != 0 || lower(0,1) != 0 || lower(0,2) != 0 || lower(0,3) != 0 ||
1767 lower(1,0) != -16 || lower(1,1) != 0 || lower(1,2) != 0 || lower(1,3) != 0 ||
1768 lower(2,0) != -8 || lower(2,1) != -17 || lower(2,2) != 0 || lower(2,3) != 0 ||
1769 lower(3,0) != -2 || lower(3,1) != 0 || lower(3,2) != 1 || lower(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" << lower << "\n"
1775 << " Expected result:\n( 0 0 0 0 )\n"
1776 "( -16 0 0 0 )\n"
1777 "( -8 -17 0 0 )\n"
1778 "( -2 0 1 0 )\n";
1779 throw std::runtime_error( oss.str() );
1780 }
1781 }
1782
1783 // ( 0 0 0 0 ) ( 0 0 0 0 )
1784 // ( -4 0 0 0 ) => ( -4 -1 0 0 )
1785 // ( 7 0 0 0 ) ( 7 -13 0 0 )
1786 // ( -2 0 1 0 ) ( -2 0 1 0 )
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) = 0;
1793 mat(1,0) = 13;
1794 mat(1,1) = 0;
1795
1796 LT lower;
1797 init( lower );
1798
1799 auto sm = submatrix( lower, 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" << lower << "\n";
1809 throw std::runtime_error( oss.str() );
1810 }
1811 catch( std::invalid_argument& ) {}
1812 }
1813
1814 // ( 0 0 0 0 ) ( 1 0 0 0 )
1815 // ( -4 0 0 0 ) => ( -4 0 -12 0 )
1816 // ( 7 0 0 0 ) ( 7 -13 0 0 )
1817 // ( -2 0 1 0 ) ( -2 0 1 1 )
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 LT lower;
1828 init( lower );
1829
1830 auto sm = submatrix( lower, 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" << lower << "\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 0 0 0 ) ( 0 0 0 0 )
1851 // ( -4 0 0 0 ) => ( -4 0 0 0 )
1852 // ( 7 0 0 0 ) ( 7 -14 0 0 )
1853 // ( -2 0 1 0 ) ( -2 -15 -18 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(2,0) = 14;
1859 mat(3,0) = 15;
1860 mat(3,1) = 19;
1861 mat.insert( 0UL, 1UL, 0 );
1862
1863 LT lower;
1864 init( lower );
1865
1866 auto sm = submatrix( lower, 0UL, 1UL, 4UL, 2UL );
1867 sm -= mat;
1868
1869 checkRows ( lower, 4UL );
1870 checkColumns ( lower, 4UL );
1871 checkNonZeros( lower, 6UL );
1872
1873 if( sm(0,0) != 0 || sm(0,1) != 0 ||
1874 sm(1,0) != 0 || sm(1,1) != 0 ||
1875 sm(2,0) != -14 || sm(2,1) != 0 ||
1876 sm(3,0) != -15 || sm(3,1) != -18 ) {
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( 0 0 )\n( 0 0 )\n( -14 0 )\n( -15 -18 )\n";
1883 throw std::runtime_error( oss.str() );
1884 }
1885
1886 if( lower(0,0) != 0 || lower(0,1) != 0 || lower(0,2) != 0 || lower(0,3) != 0 ||
1887 lower(1,0) != -4 || lower(1,1) != 0 || lower(1,2) != 0 || lower(1,3) != 0 ||
1888 lower(2,0) != 7 || lower(2,1) != -14 || lower(2,2) != 0 || lower(2,3) != 0 ||
1889 lower(3,0) != -2 || lower(3,1) != -15 || lower(3,2) != -18 || lower(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" << lower << "\n"
1895 << " Expected result:\n( 0 0 0 0 )\n"
1896 "( -4 0 0 0 )\n"
1897 "( 7 -14 0 0 )\n"
1898 "( -2 -15 -18 0 )\n";
1899 throw std::runtime_error( oss.str() );
1900 }
1901 }
1902
1903 // ( 0 0 0 0 ) ( 0 0 0 0 )
1904 // ( -4 0 0 0 ) => ( -16 0 0 0 )
1905 // ( 7 0 0 0 ) ( -8 -17 0 0 )
1906 // ( -2 0 1 0 ) ( -2 0 1 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,0) = 12;
1912 mat(1,0) = 15;
1913 mat(1,1) = 17;
1914 mat.insert( 0UL, 3UL, 0 );
1915
1916 LT lower;
1917 init( lower );
1918
1919 auto sm = submatrix( lower, 1UL, 0UL, 2UL, 4UL );
1920 sm -= mat;
1921
1922 checkRows ( lower, 4UL );
1923 checkColumns ( lower, 4UL );
1924 checkNonZeros( lower, 5UL );
1925
1926 if( sm(0,0) != -16 || sm(0,1) != 0 || sm(0,2) != 0 || sm(0,3) != 0 ||
1927 sm(1,0) != -8 || sm(1,1) != -17 || sm(1,2) != 0 || sm(1,3) != 0 ) {
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( -16 0 0 0 )\n( -8 -17 0 0 )\n";
1934 throw std::runtime_error( oss.str() );
1935 }
1936
1937 if( lower(0,0) != 0 || lower(0,1) != 0 || lower(0,2) != 0 || lower(0,3) != 0 ||
1938 lower(1,0) != -16 || lower(1,1) != 0 || lower(1,2) != 0 || lower(1,3) != 0 ||
1939 lower(2,0) != -8 || lower(2,1) != -17 || lower(2,2) != 0 || lower(2,3) != 0 ||
1940 lower(3,0) != -2 || lower(3,1) != 0 || lower(3,2) != 1 || lower(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" << lower << "\n"
1946 << " Expected result:\n( 0 0 0 0 )\n"
1947 "( -16 0 0 0 )\n"
1948 "( -8 -17 0 0 )\n"
1949 "( -2 0 1 0 )\n";
1950 throw std::runtime_error( oss.str() );
1951 }
1952 }
1953
1954 // ( 0 0 0 0 ) ( 0 0 0 0 )
1955 // ( -4 0 0 0 ) => ( -4 -1 0 0 )
1956 // ( 7 0 0 0 ) ( 7 -13 0 0 )
1957 // ( -2 0 1 0 ) ( -2 0 1 0 )
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(1,0) = 13;
1964
1965 LT lower;
1966 init( lower );
1967
1968 auto sm = submatrix( lower, 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" << lower << "\n";
1978 throw std::runtime_error( oss.str() );
1979 }
1980 catch( std::invalid_argument& ) {}
1981 }
1982
1983 // ( 0 0 0 0 ) ( 1 0 0 0 )
1984 // ( -4 0 0 0 ) => ( -4 0 -12 0 )
1985 // ( 7 0 0 0 ) ( 7 -13 0 0 )
1986 // ( -2 0 1 0 ) ( -2 0 1 1 )
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 LT lower;
1995 init( lower );
1996
1997 auto sm = submatrix( lower, 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" << lower << "\n";
2007 throw std::runtime_error( oss.str() );
2008 }
2009 catch( std::invalid_argument& ) {}
2010 }
2011
2012 // ( 0 0 0 0 ) ( 0 0 0 0 )
2013 // ( -4 0 0 0 ) => ( -4 0 0 0 )
2014 // ( 7 0 0 0 ) ( 7 -14 0 0 )
2015 // ( -2 0 1 0 ) ( -2 -15 -18 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(2,0) = 14;
2021 mat(3,0) = 15;
2022 mat(3,1) = 19;
2023 mat.insert( 0UL, 1UL, 0 );
2024
2025 LT lower;
2026 init( lower );
2027
2028 auto sm = submatrix( lower, 0UL, 1UL, 4UL, 2UL );
2029 sm -= mat;
2030
2031 checkRows ( lower, 4UL );
2032 checkColumns ( lower, 4UL );
2033 checkNonZeros( lower, 6UL );
2034
2035 if( sm(0,0) != 0 || sm(0,1) != 0 ||
2036 sm(1,0) != 0 || sm(1,1) != 0 ||
2037 sm(2,0) != -14 || sm(2,1) != 0 ||
2038 sm(3,0) != -15 || sm(3,1) != -18 ) {
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( 0 0 )\n( 0 0 )\n( -14 0 )\n( -15 -18 )\n";
2045 throw std::runtime_error( oss.str() );
2046 }
2047
2048 if( lower(0,0) != 0 || lower(0,1) != 0 || lower(0,2) != 0 || lower(0,3) != 0 ||
2049 lower(1,0) != -4 || lower(1,1) != 0 || lower(1,2) != 0 || lower(1,3) != 0 ||
2050 lower(2,0) != 7 || lower(2,1) != -14 || lower(2,2) != 0 || lower(2,3) != 0 ||
2051 lower(3,0) != -2 || lower(3,1) != -15 || lower(3,2) != -18 || lower(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" << lower << "\n"
2057 << " Expected result:\n( 0 0 0 0 )\n"
2058 "( -4 0 0 0 )\n"
2059 "( 7 -14 0 0 )\n"
2060 "( -2 -15 -18 0 )\n";
2061 throw std::runtime_error( oss.str() );
2062 }
2063 }
2064
2065 // ( 0 0 0 0 ) ( 0 0 0 0 )
2066 // ( -4 0 0 0 ) => ( -16 0 0 0 )
2067 // ( 7 0 0 0 ) ( -8 -17 0 0 )
2068 // ( -2 0 1 0 ) ( -2 0 1 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,0) = 12;
2074 mat(1,0) = 15;
2075 mat(1,1) = 17;
2076 mat.insert( 0UL, 3UL, 0 );
2077
2078 LT lower;
2079 init( lower );
2080
2081 auto sm = submatrix( lower, 1UL, 0UL, 2UL, 4UL );
2082 sm -= mat;
2083
2084 checkRows ( lower, 4UL );
2085 checkColumns ( lower, 4UL );
2086 checkNonZeros( lower, 5UL );
2087
2088 if( sm(0,0) != -16 || sm(0,1) != 0 || sm(0,2) != 0 || sm(0,3) != 0 ||
2089 sm(1,0) != -8 || sm(1,1) != -17 || sm(1,2) != 0 || sm(1,3) != 0 ) {
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( -16 0 0 0 )\n( -8 -17 0 0 )\n";
2096 throw std::runtime_error( oss.str() );
2097 }
2098
2099 if( lower(0,0) != 0 || lower(0,1) != 0 || lower(0,2) != 0 || lower(0,3) != 0 ||
2100 lower(1,0) != -16 || lower(1,1) != 0 || lower(1,2) != 0 || lower(1,3) != 0 ||
2101 lower(2,0) != -8 || lower(2,1) != -17 || lower(2,2) != 0 || lower(2,3) != 0 ||
2102 lower(3,0) != -2 || lower(3,1) != 0 || lower(3,2) != 1 || lower(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" << lower << "\n"
2108 << " Expected result:\n( 0 0 0 0 )\n"
2109 "( -16 0 0 0 )\n"
2110 "( -8 -17 0 0 )\n"
2111 "( -2 0 1 0 )\n";
2112 throw std::runtime_error( oss.str() );
2113 }
2114 }
2115
2116 // ( 0 0 0 0 ) ( 0 0 0 0 )
2117 // ( -4 0 0 0 ) => ( -4 -1 0 0 )
2118 // ( 7 0 0 0 ) ( 7 -13 0 0 )
2119 // ( -2 0 1 0 ) ( -2 0 1 0 )
2120 {
2121 test_ = "Column-major sparse matrix subtraction assignment test 3";
2122
2123 blaze::CompressedMatrix<int,blaze::columnMajor> mat( 2UL, 2UL );
2124 mat(0,0) = 1;
2125 mat(1,0) = 13;
2126
2127 LT lower;
2128 init( lower );
2129
2130 auto sm = submatrix( lower, 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" << lower << "\n";
2140 throw std::runtime_error( oss.str() );
2141 }
2142 catch( std::invalid_argument& ) {}
2143 }
2144
2145 // ( 0 0 0 0 ) ( 1 0 0 0 )
2146 // ( -4 0 0 0 ) => ( -4 0 -12 0 )
2147 // ( 7 0 0 0 ) ( 7 -13 0 0 )
2148 // ( -2 0 1 0 ) ( -2 0 1 1 )
2149 {
2150 test_ = "Column-major sparse matrix subtraction assignment test 4";
2151
2152 blaze::CompressedMatrix<int,blaze::columnMajor> mat( 2UL, 2UL );
2153 mat(0,1) = 12;
2154 mat(1,0) = 13;
2155
2156 LT lower;
2157 init( lower );
2158
2159 auto sm = submatrix( lower, 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" << lower << "\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 StrictlyLowerMatrix.
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 // StrictlyLowerMatrix. In case an error is detected, a \a std::runtime_error exception is thrown.
2185 */
2186 template< typename LT > // Type of the strictly lower matrix
testSchurAssign()2187 void SubmatrixTest::testSchurAssign()
2188 {
2189 //=====================================================================================
2190 // Dense matrix Schur product assignment
2191 //=====================================================================================
2192
2193 // ( 0 0 0 0 ) ( 0 0 0 0 )
2194 // ( -4 0 0 0 ) => ( -4 0 0 0 )
2195 // ( 7 0 0 0 ) ( 7 0 0 0 )
2196 // ( -2 0 1 0 ) ( -2 0 4 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,0) = 9;
2202 mat(3,1) = 4;
2203
2204 LT lower;
2205 init( lower );
2206
2207 auto sm = submatrix( lower, 0UL, 1UL, 4UL, 2UL );
2208 sm %= mat;
2209
2210 checkRows ( lower, 4UL );
2211 checkColumns ( lower, 4UL );
2212 checkNonZeros( lower, 4UL );
2213
2214 if( sm(0,0) != 0 || sm(0,1) != 0 ||
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) != 4 ) {
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 0 )\n( 0 0 )\n( 0 0 )\n( 0 4 )\n";
2224 throw std::runtime_error( oss.str() );
2225 }
2226
2227 if( lower(0,0) != 0 || lower(0,1) != 0 || lower(0,2) != 0 || lower(0,3) != 0 ||
2228 lower(1,0) != -4 || lower(1,1) != 0 || lower(1,2) != 0 || lower(1,3) != 0 ||
2229 lower(2,0) != 7 || lower(2,1) != 0 || lower(2,2) != 0 || lower(2,3) != 0 ||
2230 lower(3,0) != -2 || lower(3,1) != 0 || lower(3,2) != 4 || lower(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" << lower << "\n"
2236 << " Expected result:\n( 0 0 0 0 )\n"
2237 "( -4 0 0 0 )\n"
2238 "( 7 0 0 0 )\n"
2239 "( -2 0 4 0 )\n";
2240 throw std::runtime_error( oss.str() );
2241 }
2242 }
2243
2244 // ( 0 0 0 0 ) ( 0 0 0 0 )
2245 // ( -4 0 0 0 ) => ( 0 0 0 0 )
2246 // ( 7 0 0 0 ) ( 21 0 0 0 )
2247 // ( -2 0 1 0 ) ( -2 0 1 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(1,0) = 3;
2253 mat(1,3) = 9;
2254
2255 LT lower;
2256 init( lower );
2257
2258 auto sm = submatrix( lower, 1UL, 0UL, 2UL, 4UL );
2259 sm %= mat;
2260
2261 checkRows ( lower, 4UL );
2262 checkColumns ( lower, 4UL );
2263 checkNonZeros( lower, 3UL );
2264
2265 if( sm(0,0) != 0 || sm(0,1) != 0 || sm(0,2) != 0 || sm(0,3) != 0 ||
2266 sm(1,0) != 21 || sm(1,1) != 0 || sm(1,2) != 0 || sm(1,3) != 0 ) {
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( 21 0 0 0 )\n";
2273 throw std::runtime_error( oss.str() );
2274 }
2275
2276 if( lower(0,0) != 0 || lower(0,1) != 0 || lower(0,2) != 0 || lower(0,3) != 0 ||
2277 lower(1,0) != 0 || lower(1,1) != 0 || lower(1,2) != 0 || lower(1,3) != 0 ||
2278 lower(2,0) != 21 || lower(2,1) != 0 || lower(2,2) != 0 || lower(2,3) != 0 ||
2279 lower(3,0) != -2 || lower(3,1) != 0 || lower(3,2) != 1 || lower(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" << lower << "\n"
2285 << " Expected result:\n( 0 0 0 0 )\n"
2286 "( 0 0 0 0 )\n"
2287 "( 21 0 0 0 )\n"
2288 "( -2 0 1 0 )\n";
2289 throw std::runtime_error( oss.str() );
2290 }
2291 }
2292
2293 // ( 0 0 0 0 ) ( 0 0 0 0 )
2294 // ( -4 0 0 0 ) => ( -4 0 0 0 )
2295 // ( 7 0 0 0 ) ( 7 14 0 0 )
2296 // ( -2 0 1 0 ) ( -2 15 20 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,0) = 9;
2302 mat(3,1) = 4;
2303
2304 LT lower;
2305 init( lower );
2306
2307 auto sm = submatrix( lower, 0UL, 1UL, 4UL, 2UL );
2308 sm %= mat;
2309
2310 checkRows ( lower, 4UL );
2311 checkColumns ( lower, 4UL );
2312 checkNonZeros( lower, 4UL );
2313
2314 if( sm(0,0) != 0 || sm(0,1) != 0 ||
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) != 4 ) {
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 0 )\n( 0 0 )\n( 0 0 )\n( 0 4 )\n";
2324 throw std::runtime_error( oss.str() );
2325 }
2326
2327 if( lower(0,0) != 0 || lower(0,1) != 0 || lower(0,2) != 0 || lower(0,3) != 0 ||
2328 lower(1,0) != -4 || lower(1,1) != 0 || lower(1,2) != 0 || lower(1,3) != 0 ||
2329 lower(2,0) != 7 || lower(2,1) != 0 || lower(2,2) != 0 || lower(2,3) != 0 ||
2330 lower(3,0) != -2 || lower(3,1) != 0 || lower(3,2) != 4 || lower(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" << lower << "\n"
2336 << " Expected result:\n( 0 0 0 0 )\n"
2337 "( -4 0 0 0 )\n"
2338 "( 7 0 0 0 )\n"
2339 "( -2 0 4 0 )\n";
2340 throw std::runtime_error( oss.str() );
2341 }
2342 }
2343
2344 // ( 0 0 0 0 ) ( 0 0 0 0 )
2345 // ( -4 0 0 0 ) => ( 8 0 0 0 )
2346 // ( 7 0 0 0 ) ( 22 17 0 0 )
2347 // ( -2 0 1 0 ) ( -2 0 1 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(1,0) = 3;
2353 mat(1,3) = 9;
2354
2355 LT lower;
2356 init( lower );
2357
2358 auto sm = submatrix( lower, 1UL, 0UL, 2UL, 4UL );
2359 sm %= mat;
2360
2361 checkRows ( lower, 4UL );
2362 checkColumns ( lower, 4UL );
2363 checkNonZeros( lower, 3UL );
2364
2365 if( sm(0,0) != 0 || sm(0,1) != 0 || sm(0,2) != 0 || sm(0,3) != 0 ||
2366 sm(1,0) != 21 || sm(1,1) != 0 || sm(1,2) != 0 || sm(1,3) != 0 ) {
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( 21 0 0 0 )\n";
2373 throw std::runtime_error( oss.str() );
2374 }
2375
2376 if( lower(0,0) != 0 || lower(0,1) != 0 || lower(0,2) != 0 || lower(0,3) != 0 ||
2377 lower(1,0) != 0 || lower(1,1) != 0 || lower(1,2) != 0 || lower(1,3) != 0 ||
2378 lower(2,0) != 21 || lower(2,1) != 0 || lower(2,2) != 0 || lower(2,3) != 0 ||
2379 lower(3,0) != -2 || lower(3,1) != 0 || lower(3,2) != 1 || lower(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" << lower << "\n"
2385 << " Expected result:\n( 0 0 0 0 )\n"
2386 "( 0 0 0 0 )\n"
2387 "( 21 0 0 0 )\n"
2388 "( -2 0 1 0 )\n";
2389 throw std::runtime_error( oss.str() );
2390 }
2391 }
2392
2393
2394 //=====================================================================================
2395 // Sparse matrix Schur product assignment
2396 //=====================================================================================
2397
2398 // ( 0 0 0 0 ) ( 0 0 0 0 )
2399 // ( -4 0 0 0 ) => ( -4 0 0 0 )
2400 // ( 7 0 0 0 ) ( 7 0 0 0 )
2401 // ( -2 0 1 0 ) ( -2 0 4 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,0) = 9;
2407 mat(3,1) = 4;
2408 mat.insert( 0UL, 1UL, 0 );
2409
2410 LT lower;
2411 init( lower );
2412
2413 auto sm = submatrix( lower, 0UL, 1UL, 4UL, 2UL );
2414 sm %= mat;
2415
2416 checkRows ( lower, 4UL );
2417 checkColumns ( lower, 4UL );
2418 checkNonZeros( lower, 4UL );
2419
2420 if( sm(0,0) != 0 || sm(0,1) != 0 ||
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) != 4 ) {
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 0 )\n( 0 0 )\n( 0 0 )\n( 0 4 )\n";
2430 throw std::runtime_error( oss.str() );
2431 }
2432
2433 if( lower(0,0) != 0 || lower(0,1) != 0 || lower(0,2) != 0 || lower(0,3) != 0 ||
2434 lower(1,0) != -4 || lower(1,1) != 0 || lower(1,2) != 0 || lower(1,3) != 0 ||
2435 lower(2,0) != 7 || lower(2,1) != 0 || lower(2,2) != 0 || lower(2,3) != 0 ||
2436 lower(3,0) != -2 || lower(3,1) != 0 || lower(3,2) != 4 || lower(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" << lower << "\n"
2442 << " Expected result:\n( 0 0 0 0 )\n"
2443 "( -4 0 0 0 )\n"
2444 "( 7 0 0 0 )\n"
2445 "( -2 0 4 0 )\n";
2446 throw std::runtime_error( oss.str() );
2447 }
2448 }
2449
2450 // ( 0 0 0 0 ) ( 0 0 0 0 )
2451 // ( -4 0 0 0 ) => ( 0 0 0 0 )
2452 // ( 7 0 0 0 ) ( 21 0 0 0 )
2453 // ( -2 0 1 0 ) ( -2 0 1 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(1,0) = 3;
2459 mat(1,3) = 9;
2460 mat.insert( 0UL, 3UL, 0 );
2461
2462 LT lower;
2463 init( lower );
2464
2465 auto sm = submatrix( lower, 1UL, 0UL, 2UL, 4UL );
2466 sm %= mat;
2467
2468 checkRows ( lower, 4UL );
2469 checkColumns ( lower, 4UL );
2470 checkNonZeros( lower, 3UL );
2471
2472 if( sm(0,0) != 0 || sm(0,1) != 0 || sm(0,2) != 0 || sm(0,3) != 0 ||
2473 sm(1,0) != 21 || sm(1,1) != 0 || sm(1,2) != 0 || sm(1,3) != 0 ) {
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( 21 0 0 0 )\n";
2480 throw std::runtime_error( oss.str() );
2481 }
2482
2483 if( lower(0,0) != 0 || lower(0,1) != 0 || lower(0,2) != 0 || lower(0,3) != 0 ||
2484 lower(1,0) != 0 || lower(1,1) != 0 || lower(1,2) != 0 || lower(1,3) != 0 ||
2485 lower(2,0) != 21 || lower(2,1) != 0 || lower(2,2) != 0 || lower(2,3) != 0 ||
2486 lower(3,0) != -2 || lower(3,1) != 0 || lower(3,2) != 1 || lower(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" << lower << "\n"
2492 << " Expected result:\n( 0 0 0 0 )\n"
2493 "( 0 0 0 0 )\n"
2494 "( 21 0 0 0 )\n"
2495 "( -2 0 1 0 )\n";
2496 throw std::runtime_error( oss.str() );
2497 }
2498 }
2499
2500 // ( 0 0 0 0 ) ( 0 0 0 0 )
2501 // ( -4 0 0 0 ) => ( -4 0 0 0 )
2502 // ( 7 0 0 0 ) ( 7 0 0 0 )
2503 // ( -2 0 1 0 ) ( -2 0 4 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,0) = 9;
2509 mat(3,1) = 4;
2510 mat.insert( 0UL, 1UL, 0 );
2511
2512 LT lower;
2513 init( lower );
2514
2515 auto sm = submatrix( lower, 0UL, 1UL, 4UL, 2UL );
2516 sm %= mat;
2517
2518 checkRows ( lower, 4UL );
2519 checkColumns ( lower, 4UL );
2520 checkNonZeros( lower, 4UL );
2521
2522 if( sm(0,0) != 0 || sm(0,1) != 0 ||
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) != 4 ) {
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 0 )\n( 0 0 )\n( 0 0 )\n( 0 4 )\n";
2532 throw std::runtime_error( oss.str() );
2533 }
2534
2535 if( lower(0,0) != 0 || lower(0,1) != 0 || lower(0,2) != 0 || lower(0,3) != 0 ||
2536 lower(1,0) != -4 || lower(1,1) != 0 || lower(1,2) != 0 || lower(1,3) != 0 ||
2537 lower(2,0) != 7 || lower(2,1) != 0 || lower(2,2) != 0 || lower(2,3) != 0 ||
2538 lower(3,0) != -2 || lower(3,1) != 0 || lower(3,2) != 4 || lower(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" << lower << "\n"
2544 << " Expected result:\n( 0 0 0 0 )\n"
2545 "( -4 0 0 0 )\n"
2546 "( 7 0 0 0 )\n"
2547 "( -2 0 4 0 )\n";
2548 throw std::runtime_error( oss.str() );
2549 }
2550 }
2551
2552 // ( 0 0 0 0 ) ( 0 0 0 0 )
2553 // ( -4 0 0 0 ) => ( 0 0 0 0 )
2554 // ( 7 0 0 0 ) ( 21 0 0 0 )
2555 // ( -2 0 1 0 ) ( -2 0 1 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(1,0) = 3;
2561 mat(1,3) = 9;
2562 mat.insert( 0UL, 3UL, 0 );
2563
2564 LT lower;
2565 init( lower );
2566
2567 auto sm = submatrix( lower, 1UL, 0UL, 2UL, 4UL );
2568 sm %= mat;
2569
2570 checkRows ( lower, 4UL );
2571 checkColumns ( lower, 4UL );
2572 checkNonZeros( lower, 3UL );
2573
2574 if( sm(0,0) != 0 || sm(0,1) != 0 || sm(0,2) != 0 || sm(0,3) != 0 ||
2575 sm(1,0) != 21 || sm(1,1) != 0 || sm(1,2) != 0 || sm(1,3) != 0 ) {
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( 21 0 0 0 )\n";
2582 throw std::runtime_error( oss.str() );
2583 }
2584
2585 if( lower(0,0) != 0 || lower(0,1) != 0 || lower(0,2) != 0 || lower(0,3) != 0 ||
2586 lower(1,0) != 0 || lower(1,1) != 0 || lower(1,2) != 0 || lower(1,3) != 0 ||
2587 lower(2,0) != 21 || lower(2,1) != 0 || lower(2,2) != 0 || lower(2,3) != 0 ||
2588 lower(3,0) != -2 || lower(3,1) != 0 || lower(3,2) != 1 || lower(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" << lower << "\n"
2594 << " Expected result:\n( 0 0 0 0 )\n"
2595 "( 0 0 0 0 )\n"
2596 "( 21 0 0 0 )\n"
2597 "( -2 0 1 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 lower triangular matrix.
2709 //
2710 // \return void
2711 //
2712 // This function is called before each test case to initialize the given strictly lower triangular
2713 // matrix.
2714 */
2715 template< typename LT >
init(LT & lower)2716 void SubmatrixTest::init( LT& lower )
2717 {
2718 lower.resize( 4UL );
2719 lower(1,0) = -4;
2720 lower(2,0) = 7;
2721 lower(2,1) = 0;
2722 lower(3,0) = -2;
2723 lower(3,1) = 0;
2724 lower(3,2) = 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 StrictlyLowerMatrix.
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 StrictlyLowerMatrix submatrix test.
2760 */
2761 #define RUN_STRICTLYLOWERMATRIX_SUBMATRIX_TEST \
2762 blazetest::mathtest::adaptors::strictlylowermatrix::runTest()
2763 /*! \endcond */
2764 //*************************************************************************************************
2765
2766 } // namespace strictlylowermatrix
2767
2768 } // namespace adaptors
2769
2770 } // namespace mathtest
2771
2772 } // namespace blazetest
2773
2774 #endif
2775