1 //=================================================================================================
2 /*!
3 // \file src/mathtest/traits/reducetrait/ClassTest.cpp
4 // \brief Source file for the ReduceTrait class 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
36 //*************************************************************************************************
37 // Includes
38 //*************************************************************************************************
39
40 #include <cstdlib>
41 #include <iostream>
42 #include <utility>
43 #include <blaze/math/CompressedMatrix.h>
44 #include <blaze/math/CompressedVector.h>
45 #include <blaze/math/CustomMatrix.h>
46 #include <blaze/math/CustomVector.h>
47 #include <blaze/math/DiagonalMatrix.h>
48 #include <blaze/math/DynamicMatrix.h>
49 #include <blaze/math/DynamicVector.h>
50 #include <blaze/math/HermitianMatrix.h>
51 #include <blaze/math/HybridMatrix.h>
52 #include <blaze/math/HybridVector.h>
53 #include <blaze/math/InitializerMatrix.h>
54 #include <blaze/math/InitializerVector.h>
55 #include <blaze/math/LowerMatrix.h>
56 #include <blaze/math/StaticMatrix.h>
57 #include <blaze/math/StaticVector.h>
58 #include <blaze/math/StrictlyLowerMatrix.h>
59 #include <blaze/math/StrictlyUpperMatrix.h>
60 #include <blaze/math/SymmetricMatrix.h>
61 #include <blaze/math/traits/ReduceTrait.h>
62 #include <blaze/math/typetraits/StorageOrder.h>
63 #include <blaze/math/UniformMatrix.h>
64 #include <blaze/math/UniformVector.h>
65 #include <blaze/math/UniLowerMatrix.h>
66 #include <blaze/math/UniUpperMatrix.h>
67 #include <blaze/math/UpperMatrix.h>
68 #include <blaze/math/ZeroMatrix.h>
69 #include <blaze/math/ZeroVector.h>
70 #include <blaze/util/Complex.h>
71 #include <blaze/util/typetraits/IsSame.h>
72 #include <blaze/util/typetraits/RemoveCVRef.h>
73 #include <blazetest/mathtest/traits/reducetrait/ClassTest.h>
74
75
76 namespace blazetest {
77
78 namespace mathtest {
79
80 namespace traits {
81
82 namespace reducetrait {
83
84 //=================================================================================================
85 //
86 // CONSTRUCTORS
87 //
88 //=================================================================================================
89
90 //*************************************************************************************************
91 /*!\brief Constructor for the ReduceTrait class test.
92 //
93 // \exception std::runtime_error Error detected.
94 */
ClassTest()95 ClassTest::ClassTest()
96 {
97 testTotalVectorReduction();
98 testTotalMatrixReduction();
99 testRowwiseMatrixReduction();
100 testColumnwiseMatrixReduction();
101 }
102 //*************************************************************************************************
103
104
105
106
107 //=================================================================================================
108 //
109 // TEST FUNCTIONS
110 //
111 //=================================================================================================
112
113 //*************************************************************************************************
114 /*!\brief Test of the 'ReduceTrait' class template for total vector reductions.
115 //
116 // \return void
117 // \exception std::runtime_error Error detected.
118 //
119 // This function performs a compile time test of the 'ReduceTrait' class template for total
120 // vector reductions. In case an error is detected, a compilation error is created.
121 */
testTotalVectorReduction()122 void ClassTest::testTotalVectorReduction()
123 {
124 using namespace blaze;
125 using OP = Add;
126
127
128 // StaticVector
129 {
130 {
131 using VT = StaticVector<int,3UL,columnVector>;
132 using RT = int;
133 static_assert( IsSame_v< ReduceTrait_t<VT,OP>, RT >, "Non-matching type detected" );
134 }
135 {
136 using VT = StaticVector<int,3UL,rowVector>;
137 using RT = int;
138 static_assert( IsSame_v< ReduceTrait_t<VT,OP>, RT >, "Non-matching type detected" );
139 }
140 }
141
142 // HybridVector
143 {
144 {
145 using VT = HybridVector<int,3UL,columnVector>;
146 using RT = int;
147 static_assert( IsSame_v< ReduceTrait_t<VT,OP>, RT >, "Non-matching type detected" );
148 }
149 {
150 using VT = HybridVector<int,3UL,rowVector>;
151 using RT = int;
152 static_assert( IsSame_v< ReduceTrait_t<VT,OP>, RT >, "Non-matching type detected" );
153 }
154 }
155
156 // DynamicVector
157 {
158 {
159 using VT = DynamicVector<int,columnVector>;
160 using RT = int;
161 static_assert( IsSame_v< ReduceTrait_t<VT,OP>, RT >, "Non-matching type detected" );
162 }
163 {
164 using VT = DynamicVector<int,rowVector>;
165 using RT = int;
166 static_assert( IsSame_v< ReduceTrait_t<VT,OP>, RT >, "Non-matching type detected" );
167 }
168 }
169
170 // CustomVector
171 {
172 {
173 using VT = CustomVector<int,unaligned,unpadded,columnVector>;
174 using RT = int;
175 static_assert( IsSame_v< ReduceTrait_t<VT,OP>, RT >, "Non-matching type detected" );
176 }
177 {
178 using VT = CustomVector<int,unaligned,unpadded,rowVector>;
179 using RT = int;
180 static_assert( IsSame_v< ReduceTrait_t<VT,OP>, RT >, "Non-matching type detected" );
181 }
182 }
183
184 // UniformVector
185 {
186 {
187 using VT = UniformVector<int,columnVector>;
188 using RT = int;
189 static_assert( IsSame_v< ReduceTrait_t<VT,OP>, RT >, "Non-matching type detected" );
190 }
191 {
192 using VT = UniformVector<int,rowVector>;
193 using RT = int;
194 static_assert( IsSame_v< ReduceTrait_t<VT,OP>, RT >, "Non-matching type detected" );
195 }
196 }
197
198 // InitializerVector
199 {
200 {
201 using VT = InitializerVector<int,columnVector>;
202 using RT = int;
203 static_assert( IsSame_v< ReduceTrait_t<VT,OP>, RT >, "Non-matching type detected" );
204 }
205 {
206 using VT = InitializerVector<int,rowVector>;
207 using RT = int;
208 static_assert( IsSame_v< ReduceTrait_t<VT,OP>, RT >, "Non-matching type detected" );
209 }
210 }
211
212 // CompressedVector
213 {
214 {
215 using VT = CompressedVector<int,columnVector>;
216 using RT = int;
217 static_assert( IsSame_v< ReduceTrait_t<VT,OP>, RT >, "Non-matching type detected" );
218 }
219 {
220 using VT = CompressedVector<int,rowVector>;
221 using RT = int;
222 static_assert( IsSame_v< ReduceTrait_t<VT,OP>, RT >, "Non-matching type detected" );
223 }
224 }
225
226 // ZeroVector
227 {
228 {
229 using VT = ZeroVector<int,columnVector>;
230 using RT = int;
231 static_assert( IsSame_v< ReduceTrait_t<VT,OP>, RT >, "Non-matching type detected" );
232 }
233 {
234 using VT = ZeroVector<int,rowVector>;
235 using RT = int;
236 static_assert( IsSame_v< ReduceTrait_t<VT,OP>, RT >, "Non-matching type detected" );
237 }
238 }
239 }
240 //*************************************************************************************************
241
242
243 //*************************************************************************************************
244 /*!\brief Test of the 'ReduceTrait' class template for total matrix reductions.
245 //
246 // \return void
247 // \exception std::runtime_error Error detected.
248 //
249 // This function performs a compile time test of the 'ReduceTrait' class template for total
250 // matrix reductions. In case an error is detected, a compilation error is created.
251 */
testTotalMatrixReduction()252 void ClassTest::testTotalMatrixReduction()
253 {
254 using namespace blaze;
255 using OP = Add;
256
257
258 // StaticMatrix
259 {
260 {
261 using MT = StaticMatrix<int,3UL,5UL,rowMajor>;
262 using RT = int;
263 static_assert( IsSame_v< ReduceTrait_t<MT,OP>, RT >, "Non-matching type detected" );
264 }
265 {
266 using MT = StaticMatrix<int,3UL,5UL,columnMajor>;
267 using RT = int;
268 static_assert( IsSame_v< ReduceTrait_t<MT,OP>, RT >, "Non-matching type detected" );
269 }
270 }
271
272 // HybridMatrix
273 {
274 {
275 using MT = HybridMatrix<int,3UL,5UL,rowMajor>;
276 using RT = int;
277 static_assert( IsSame_v< ReduceTrait_t<MT,OP>, RT >, "Non-matching type detected" );
278 }
279 {
280 using MT = HybridMatrix<int,3UL,5UL,columnMajor>;
281 using RT = int;
282 static_assert( IsSame_v< ReduceTrait_t<MT,OP>, RT >, "Non-matching type detected" );
283 }
284 }
285
286 // DynamicMatrix
287 {
288 {
289 using MT = DynamicMatrix<int,rowMajor>;
290 using RT = int;
291 static_assert( IsSame_v< ReduceTrait_t<MT,OP>, RT >, "Non-matching type detected" );
292 }
293 {
294 using MT = DynamicMatrix<int,columnMajor>;
295 using RT = int;
296 static_assert( IsSame_v< ReduceTrait_t<MT,OP>, RT >, "Non-matching type detected" );
297 }
298 }
299
300 // CustomMatrix
301 {
302 {
303 using MT = CustomMatrix<int,unaligned,unpadded,rowMajor>;
304 using RT = int;
305 static_assert( IsSame_v< ReduceTrait_t<MT,OP>, RT >, "Non-matching type detected" );
306 }
307 {
308 using MT = CustomMatrix<int,unaligned,unpadded,columnMajor>;
309 using RT = int;
310 static_assert( IsSame_v< ReduceTrait_t<MT,OP>, RT >, "Non-matching type detected" );
311 }
312 }
313
314 // UniformMatrix
315 {
316 {
317 using MT = UniformMatrix<int,rowMajor>;
318 using RT = int;
319 static_assert( IsSame_v< ReduceTrait_t<MT,OP>, RT >, "Non-matching type detected" );
320 }
321 {
322 using MT = UniformMatrix<int,columnMajor>;
323 using RT = int;
324 static_assert( IsSame_v< ReduceTrait_t<MT,OP>, RT >, "Non-matching type detected" );
325 }
326 }
327
328 // InitializerMatrix
329 {
330 {
331 using MT = InitializerMatrix<int>;
332 using RT = int;
333 static_assert( IsSame_v< ReduceTrait_t<MT,OP>, RT >, "Non-matching type detected" );
334 }
335 }
336
337 // CompressedMatrix
338 {
339 {
340 using MT = CompressedMatrix<int,rowMajor>;
341 using RT = int;
342 static_assert( IsSame_v< ReduceTrait_t<MT,OP>, RT >, "Non-matching type detected" );
343 }
344 {
345 using MT = CompressedMatrix<int,columnMajor>;
346 using RT = int;
347 static_assert( IsSame_v< ReduceTrait_t<MT,OP>, RT >, "Non-matching type detected" );
348 }
349 }
350
351 // IdentityMatrix
352 {
353 {
354 using MT = IdentityMatrix<int,rowMajor>;
355 using RT = int;
356 static_assert( IsSame_v< ReduceTrait_t<MT,OP>, RT >, "Non-matching type detected" );
357 }
358 {
359 using MT = IdentityMatrix<int,columnMajor>;
360 using RT = int;
361 static_assert( IsSame_v< ReduceTrait_t<MT,OP>, RT >, "Non-matching type detected" );
362 }
363 }
364
365 // ZeroMatrix
366 {
367 {
368 using MT = ZeroMatrix<int,rowMajor>;
369 using RT = int;
370 static_assert( IsSame_v< ReduceTrait_t<MT,OP>, RT >, "Non-matching type detected" );
371 }
372 {
373 using MT = ZeroMatrix<int,columnMajor>;
374 using RT = int;
375 static_assert( IsSame_v< ReduceTrait_t<MT,OP>, RT >, "Non-matching type detected" );
376 }
377 }
378
379 // SymmetricMatrix<DynamicMatrix> (real)
380 {
381 {
382 using MT = SymmetricMatrix< DynamicMatrix<int,rowMajor> >;
383 using RT = int;
384 static_assert( IsSame_v< ReduceTrait_t<MT,OP>, RT >, "Non-matching type detected" );
385 }
386 {
387 using MT = SymmetricMatrix< DynamicMatrix<int,columnMajor> >;
388 using RT = int;
389 static_assert( IsSame_v< ReduceTrait_t<MT,OP>, RT >, "Non-matching type detected" );
390 }
391 }
392
393 // SymmetricMatrix<DynamicMatrix> (complex)
394 {
395 {
396 using MT = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
397 using RT = complex<int>;
398 static_assert( IsSame_v< ReduceTrait_t<MT,OP>, RT >, "Non-matching type detected" );
399 }
400 {
401 using MT = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
402 using RT = complex<int>;
403 static_assert( IsSame_v< ReduceTrait_t<MT,OP>, RT >, "Non-matching type detected" );
404 }
405 }
406
407 // SymmetricMatrix<UniformMatrix> (real)
408 {
409 {
410 using MT = SymmetricMatrix< UniformMatrix<int,rowMajor> >;
411 using RT = int;
412 static_assert( IsSame_v< ReduceTrait_t<MT,OP>, RT >, "Non-matching type detected" );
413 }
414 {
415 using MT = SymmetricMatrix< UniformMatrix<int,columnMajor> >;
416 using RT = int;
417 static_assert( IsSame_v< ReduceTrait_t<MT,OP>, RT >, "Non-matching type detected" );
418 }
419 }
420
421 // SymmetricMatrix<ZeroMatrix> (real)
422 {
423 {
424 using MT = SymmetricMatrix< ZeroMatrix<int,rowMajor> >;
425 using RT = int;
426 static_assert( IsSame_v< ReduceTrait_t<MT,OP>, RT >, "Non-matching type detected" );
427 }
428 {
429 using MT = SymmetricMatrix< ZeroMatrix<int,columnMajor> >;
430 using RT = int;
431 static_assert( IsSame_v< ReduceTrait_t<MT,OP>, RT >, "Non-matching type detected" );
432 }
433 }
434
435 // HermitianMatrix<DynamicMatrix> (symmetric)
436 {
437 {
438 using MT = HermitianMatrix< DynamicMatrix<int,rowMajor> >;
439 using RT = int;
440 static_assert( IsSame_v< ReduceTrait_t<MT,OP>, RT >, "Non-matching type detected" );
441 }
442 {
443 using MT = HermitianMatrix< DynamicMatrix<int,columnMajor> >;
444 using RT = int;
445 static_assert( IsSame_v< ReduceTrait_t<MT,OP>, RT >, "Non-matching type detected" );
446 }
447 }
448
449 // HermitianMatrix<DynamicMatrix> (Hermitian)
450 {
451 {
452 using MT = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
453 using RT = complex<int>;
454 static_assert( IsSame_v< ReduceTrait_t<MT,OP>, RT >, "Non-matching type detected" );
455 }
456 {
457 using MT = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
458 using RT = complex<int>;
459 static_assert( IsSame_v< ReduceTrait_t<MT,OP>, RT >, "Non-matching type detected" );
460 }
461 }
462
463 // LowerMatrix<DynamicMatrix>
464 {
465 {
466 using MT = LowerMatrix< DynamicMatrix<int,rowMajor> >;
467 using RT = int;
468 static_assert( IsSame_v< ReduceTrait_t<MT,OP>, RT >, "Non-matching type detected" );
469 }
470 {
471 using MT = LowerMatrix< DynamicMatrix<int,columnMajor> >;
472 using RT = int;
473 static_assert( IsSame_v< ReduceTrait_t<MT,OP>, RT >, "Non-matching type detected" );
474 }
475 }
476
477 // UniLowerMatrix<DynamicMatrix>
478 {
479 {
480 using MT = UniLowerMatrix< DynamicMatrix<int,rowMajor> >;
481 using RT = int;
482 static_assert( IsSame_v< ReduceTrait_t<MT,OP>, RT >, "Non-matching type detected" );
483 }
484 {
485 using MT = UniLowerMatrix< DynamicMatrix<int,columnMajor> >;
486 using RT = int;
487 static_assert( IsSame_v< ReduceTrait_t<MT,OP>, RT >, "Non-matching type detected" );
488 }
489 }
490
491 // StrictlyLowerMatrix<DynamicMatrix>
492 {
493 {
494 using MT = StrictlyLowerMatrix< DynamicMatrix<int,rowMajor> >;
495 using RT = int;
496 static_assert( IsSame_v< ReduceTrait_t<MT,OP>, RT >, "Non-matching type detected" );
497 }
498 {
499 using MT = StrictlyLowerMatrix< DynamicMatrix<int,columnMajor> >;
500 using RT = int;
501 static_assert( IsSame_v< ReduceTrait_t<MT,OP>, RT >, "Non-matching type detected" );
502 }
503 }
504
505 // UpperMatrix<DynamicMatrix>
506 {
507 {
508 using MT = UpperMatrix< DynamicMatrix<int,rowMajor> >;
509 using RT = int;
510 static_assert( IsSame_v< ReduceTrait_t<MT,OP>, RT >, "Non-matching type detected" );
511 }
512 {
513 using MT = UpperMatrix< DynamicMatrix<int,columnMajor> >;
514 using RT = int;
515 static_assert( IsSame_v< ReduceTrait_t<MT,OP>, RT >, "Non-matching type detected" );
516 }
517 }
518
519 // UniUpperMatrix<DynamicMatrix>
520 {
521 {
522 using MT = UniUpperMatrix< DynamicMatrix<int,rowMajor> >;
523 using RT = int;
524 static_assert( IsSame_v< ReduceTrait_t<MT,OP>, RT >, "Non-matching type detected" );
525 }
526 {
527 using MT = UniUpperMatrix< DynamicMatrix<int,columnMajor> >;
528 using RT = int;
529 static_assert( IsSame_v< ReduceTrait_t<MT,OP>, RT >, "Non-matching type detected" );
530 }
531 }
532
533 // StrictlyUpperMatrix<DynamicMatrix>
534 {
535 {
536 using MT = StrictlyUpperMatrix< DynamicMatrix<int,rowMajor> >;
537 using RT = int;
538 static_assert( IsSame_v< ReduceTrait_t<MT,OP>, RT >, "Non-matching type detected" );
539 }
540 {
541 using MT = StrictlyUpperMatrix< DynamicMatrix<int,columnMajor> >;
542 using RT = int;
543 static_assert( IsSame_v< ReduceTrait_t<MT,OP>, RT >, "Non-matching type detected" );
544 }
545 }
546
547 // DiagonalMatrix<DynamicMatrix>
548 {
549 {
550 using MT = DiagonalMatrix< DynamicMatrix<int,rowMajor> >;
551 using RT = int;
552 static_assert( IsSame_v< ReduceTrait_t<MT,OP>, RT >, "Non-matching type detected" );
553 }
554 {
555 using MT = DiagonalMatrix< DynamicMatrix<int,columnMajor> >;
556 using RT = int;
557 static_assert( IsSame_v< ReduceTrait_t<MT,OP>, RT >, "Non-matching type detected" );
558 }
559 }
560 }
561 //*************************************************************************************************
562
563
564 //*************************************************************************************************
565 /*!\brief Test of the 'ReduceTrait' class template for rowwise matrix reductions.
566 //
567 // \return void
568 // \exception std::runtime_error Error detected.
569 //
570 // This function performs a compile time test of the 'ReduceTrait' class template for rowwise
571 // matrix reductions. In case an error is detected, a compilation error is created.
572 */
testRowwiseMatrixReduction()573 void ClassTest::testRowwiseMatrixReduction()
574 {
575 using namespace blaze;
576 using OP = Add;
577
578
579 // StaticMatrix
580 {
581 {
582 using MT = StaticMatrix<int,3UL,5UL,rowMajor>;
583 using RT = StaticVector<int,3UL,columnVector>;
584 static_assert( IsSame_v< ReduceTrait_t<MT,OP,rowwise>, RT >, "Non-matching type detected" );
585
586 using Expr = RemoveCVRef_t< decltype( reduce<rowwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
587 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
588 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
589 }
590 {
591 using MT = StaticMatrix<int,3UL,5UL,columnMajor>;
592 using RT = StaticVector<int,3UL,columnVector>;
593 static_assert( IsSame_v< ReduceTrait_t<MT,OP,rowwise>, RT >, "Non-matching type detected" );
594
595 using Expr = RemoveCVRef_t< decltype( reduce<rowwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
596 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
597 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
598 }
599 }
600
601 // HybridMatrix
602 {
603 {
604 using MT = HybridMatrix<int,3UL,5UL,rowMajor>;
605 using RT = HybridVector<int,3UL,columnVector>;
606 static_assert( IsSame_v< ReduceTrait_t<MT,OP,rowwise>, RT >, "Non-matching type detected" );
607
608 using Expr = RemoveCVRef_t< decltype( reduce<rowwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
609 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
610 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
611 }
612 {
613 using MT = HybridMatrix<int,3UL,5UL,columnMajor>;
614 using RT = HybridVector<int,3UL,columnVector>;
615 static_assert( IsSame_v< ReduceTrait_t<MT,OP,rowwise>, RT >, "Non-matching type detected" );
616
617 using Expr = RemoveCVRef_t< decltype( reduce<rowwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
618 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
619 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
620 }
621 }
622
623 // DynamicMatrix
624 {
625 {
626 using MT = DynamicMatrix<int,rowMajor>;
627 using RT = DynamicVector<int,columnVector>;
628 static_assert( IsSame_v< ReduceTrait_t<MT,OP,rowwise>, RT >, "Non-matching type detected" );
629
630 using Expr = RemoveCVRef_t< decltype( reduce<rowwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
631 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
632 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
633 }
634 {
635 using MT = DynamicMatrix<int,columnMajor>;
636 using RT = DynamicVector<int,columnVector>;
637 static_assert( IsSame_v< ReduceTrait_t<MT,OP,rowwise>, RT >, "Non-matching type detected" );
638
639 using Expr = RemoveCVRef_t< decltype( reduce<rowwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
640 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
641 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
642 }
643 }
644
645 // CustomMatrix
646 {
647 {
648 using MT = CustomMatrix<int,unaligned,unpadded,rowMajor>;
649 using RT = DynamicVector<int,columnVector>;
650 static_assert( IsSame_v< ReduceTrait_t<MT,OP,rowwise>, RT >, "Non-matching type detected" );
651
652 using Expr = RemoveCVRef_t< decltype( reduce<rowwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
653 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
654 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
655 }
656 {
657 using MT = CustomMatrix<int,unaligned,unpadded,columnMajor>;
658 using RT = DynamicVector<int,columnVector>;
659 static_assert( IsSame_v< ReduceTrait_t<MT,OP,rowwise>, RT >, "Non-matching type detected" );
660
661 using Expr = RemoveCVRef_t< decltype( reduce<rowwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
662 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
663 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
664 }
665 }
666
667 // UniformMatrix
668 {
669 {
670 using MT = UniformMatrix<int,rowMajor>;
671 using RT = UniformVector<int,columnVector>;
672 static_assert( IsSame_v< ReduceTrait_t<MT,OP,rowwise>, RT >, "Non-matching type detected" );
673
674 using Expr = RemoveCVRef_t< decltype( reduce<rowwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
675 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
676 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
677 }
678 {
679 using MT = UniformMatrix<int,columnMajor>;
680 using RT = UniformVector<int,columnVector>;
681 static_assert( IsSame_v< ReduceTrait_t<MT,OP,rowwise>, RT >, "Non-matching type detected" );
682
683 using Expr = RemoveCVRef_t< decltype( reduce<rowwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
684 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
685 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
686 }
687 }
688
689 // InitializerMatrix
690 {
691 {
692 using MT = InitializerMatrix<int>;
693 using RT = DynamicVector<int,columnVector>;
694 static_assert( IsSame_v< ReduceTrait_t<MT,OP,rowwise>, RT >, "Non-matching type detected" );
695
696 using Expr = RemoveCVRef_t< decltype( reduce<rowwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
697 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
698 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
699 }
700 }
701
702 // CompressedMatrix
703 {
704 {
705 using MT = CompressedMatrix<int,rowMajor>;
706 using RT = DynamicVector<int,columnVector>;
707 static_assert( IsSame_v< ReduceTrait_t<MT,OP,rowwise>, RT >, "Non-matching type detected" );
708
709 using Expr = RemoveCVRef_t< decltype( reduce<rowwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
710 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
711 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
712 }
713 {
714 using MT = CompressedMatrix<int,columnMajor>;
715 using RT = DynamicVector<int,columnVector>;
716 static_assert( IsSame_v< ReduceTrait_t<MT,OP,rowwise>, RT >, "Non-matching type detected" );
717
718 using Expr = RemoveCVRef_t< decltype( reduce<rowwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
719 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
720 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
721 }
722 }
723
724 // IdentityMatrix
725 {
726 {
727 using MT = IdentityMatrix<int,rowMajor>;
728 using RT = UniformVector<int,columnVector>;
729 static_assert( IsSame_v< ReduceTrait_t<MT,OP,rowwise>, RT >, "Non-matching type detected" );
730
731 using Expr = RemoveCVRef_t< decltype( reduce<rowwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
732 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
733 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
734 }
735 {
736 using MT = IdentityMatrix<int,columnMajor>;
737 using RT = UniformVector<int,columnVector>;
738 static_assert( IsSame_v< ReduceTrait_t<MT,OP,rowwise>, RT >, "Non-matching type detected" );
739
740 using Expr = RemoveCVRef_t< decltype( reduce<rowwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
741 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
742 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
743 }
744 }
745
746 // ZeroMatrix
747 {
748 {
749 using MT = ZeroMatrix<int,rowMajor>;
750 using RT = UniformVector<int,columnVector>;
751 static_assert( IsSame_v< ReduceTrait_t<MT,OP,rowwise>, RT >, "Non-matching type detected" );
752
753 using Expr = RemoveCVRef_t< decltype( reduce<rowwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
754 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
755 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
756 }
757 {
758 using MT = ZeroMatrix<int,columnMajor>;
759 using RT = UniformVector<int,columnVector>;
760 static_assert( IsSame_v< ReduceTrait_t<MT,OP,rowwise>, RT >, "Non-matching type detected" );
761
762 using Expr = RemoveCVRef_t< decltype( reduce<rowwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
763 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
764 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
765 }
766 }
767
768 // SymmetricMatrix<DynamicMatrix> (real)
769 {
770 {
771 using MT = SymmetricMatrix< DynamicMatrix<int,rowMajor> >;
772 using RT = DynamicVector<int,columnVector>;
773 static_assert( IsSame_v< ReduceTrait_t<MT,OP,rowwise>, RT >, "Non-matching type detected" );
774
775 using Expr = RemoveCVRef_t< decltype( reduce<rowwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
776 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
777 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
778 }
779 {
780 using MT = SymmetricMatrix< DynamicMatrix<int,columnMajor> >;
781 using RT = DynamicVector<int,columnVector>;
782 static_assert( IsSame_v< ReduceTrait_t<MT,OP,rowwise>, RT >, "Non-matching type detected" );
783
784 using Expr = RemoveCVRef_t< decltype( reduce<rowwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
785 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
786 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
787 }
788 }
789
790 // SymmetricMatrix<DynamicMatrix> (complex)
791 {
792 {
793 using MT = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
794 using RT = DynamicVector<complex<int>,columnVector>;
795 static_assert( IsSame_v< ReduceTrait_t<MT,OP,rowwise>, RT >, "Non-matching type detected" );
796
797 using Expr = RemoveCVRef_t< decltype( reduce<rowwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
798 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
799 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
800 }
801 {
802 using MT = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
803 using RT = DynamicVector<complex<int>,columnVector>;
804 static_assert( IsSame_v< ReduceTrait_t<MT,OP,rowwise>, RT >, "Non-matching type detected" );
805
806 using Expr = RemoveCVRef_t< decltype( reduce<rowwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
807 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
808 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
809 }
810 }
811
812 // SymmetricMatrix<UniformMatrix> (real)
813 {
814 {
815 using MT = SymmetricMatrix< UniformMatrix<int,rowMajor> >;
816 using RT = UniformVector<int,columnVector>;
817 static_assert( IsSame_v< ReduceTrait_t<MT,OP,rowwise>, RT >, "Non-matching type detected" );
818
819 using Expr = RemoveCVRef_t< decltype( reduce<rowwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
820 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
821 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
822 }
823 {
824 using MT = SymmetricMatrix< UniformMatrix<int,columnMajor> >;
825 using RT = UniformVector<int,columnVector>;
826 static_assert( IsSame_v< ReduceTrait_t<MT,OP,rowwise>, RT >, "Non-matching type detected" );
827
828 using Expr = RemoveCVRef_t< decltype( reduce<rowwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
829 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
830 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
831 }
832 }
833
834 // SymmetricMatrix<ZeroMatrix> (real)
835 {
836 {
837 using MT = SymmetricMatrix< ZeroMatrix<int,rowMajor> >;
838 using RT = UniformVector<int,columnVector>;
839 static_assert( IsSame_v< ReduceTrait_t<MT,OP,rowwise>, RT >, "Non-matching type detected" );
840
841 using Expr = RemoveCVRef_t< decltype( reduce<rowwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
842 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
843 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
844 }
845 {
846 using MT = SymmetricMatrix< ZeroMatrix<int,columnMajor> >;
847 using RT = UniformVector<int,columnVector>;
848 static_assert( IsSame_v< ReduceTrait_t<MT,OP,rowwise>, RT >, "Non-matching type detected" );
849
850 using Expr = RemoveCVRef_t< decltype( reduce<rowwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
851 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
852 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
853 }
854 }
855
856 // HermitianMatrix<DynamicMatrix> (symmetric)
857 {
858 {
859 using MT = HermitianMatrix< DynamicMatrix<int,rowMajor> >;
860 using RT = DynamicVector<int,columnVector>;
861 static_assert( IsSame_v< ReduceTrait_t<MT,OP,rowwise>, RT >, "Non-matching type detected" );
862
863 using Expr = RemoveCVRef_t< decltype( reduce<rowwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
864 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
865 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
866 }
867 {
868 using MT = HermitianMatrix< DynamicMatrix<int,columnMajor> >;
869 using RT = DynamicVector<int,columnVector>;
870 static_assert( IsSame_v< ReduceTrait_t<MT,OP,rowwise>, RT >, "Non-matching type detected" );
871
872 using Expr = RemoveCVRef_t< decltype( reduce<rowwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
873 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
874 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
875 }
876 }
877
878 // HermitianMatrix<DynamicMatrix> (Hermitian)
879 {
880 {
881 using MT = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
882 using RT = DynamicVector<complex<int>,columnVector>;
883 static_assert( IsSame_v< ReduceTrait_t<MT,OP,rowwise>, RT >, "Non-matching type detected" );
884
885 using Expr = RemoveCVRef_t< decltype( reduce<rowwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
886 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
887 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
888 }
889 {
890 using MT = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
891 using RT = DynamicVector<complex<int>,columnVector>;
892 static_assert( IsSame_v< ReduceTrait_t<MT,OP,rowwise>, RT >, "Non-matching type detected" );
893
894 using Expr = RemoveCVRef_t< decltype( reduce<rowwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
895 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
896 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
897 }
898 }
899
900 // LowerMatrix<DynamicMatrix>
901 {
902 {
903 using MT = LowerMatrix< DynamicMatrix<int,rowMajor> >;
904 using RT = DynamicVector<int,columnVector>;
905 static_assert( IsSame_v< ReduceTrait_t<MT,OP,rowwise>, RT >, "Non-matching type detected" );
906
907 using Expr = RemoveCVRef_t< decltype( reduce<rowwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
908 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
909 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
910 }
911 {
912 using MT = LowerMatrix< DynamicMatrix<int,columnMajor> >;
913 using RT = DynamicVector<int,columnVector>;
914 static_assert( IsSame_v< ReduceTrait_t<MT,OP,rowwise>, RT >, "Non-matching type detected" );
915
916 using Expr = RemoveCVRef_t< decltype( reduce<rowwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
917 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
918 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
919 }
920 }
921
922 // UniLowerMatrix<DynamicMatrix>
923 {
924 {
925 using MT = UniLowerMatrix< DynamicMatrix<int,rowMajor> >;
926 using RT = DynamicVector<int,columnVector>;
927 static_assert( IsSame_v< ReduceTrait_t<MT,OP,rowwise>, RT >, "Non-matching type detected" );
928
929 using Expr = RemoveCVRef_t< decltype( reduce<rowwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
930 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
931 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
932 }
933 {
934 using MT = UniLowerMatrix< DynamicMatrix<int,columnMajor> >;
935 using RT = DynamicVector<int,columnVector>;
936 static_assert( IsSame_v< ReduceTrait_t<MT,OP,rowwise>, RT >, "Non-matching type detected" );
937
938 using Expr = RemoveCVRef_t< decltype( reduce<rowwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
939 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
940 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
941 }
942 }
943
944 // StrictlyLowerMatrix<DynamicMatrix>
945 {
946 {
947 using MT = StrictlyLowerMatrix< DynamicMatrix<int,rowMajor> >;
948 using RT = DynamicVector<int,columnVector>;
949 static_assert( IsSame_v< ReduceTrait_t<MT,OP,rowwise>, RT >, "Non-matching type detected" );
950
951 using Expr = RemoveCVRef_t< decltype( reduce<rowwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
952 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
953 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
954 }
955 {
956 using MT = StrictlyLowerMatrix< DynamicMatrix<int,columnMajor> >;
957 using RT = DynamicVector<int,columnVector>;
958 static_assert( IsSame_v< ReduceTrait_t<MT,OP,rowwise>, RT >, "Non-matching type detected" );
959
960 using Expr = RemoveCVRef_t< decltype( reduce<rowwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
961 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
962 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
963 }
964 }
965
966 // UpperMatrix<DynamicMatrix>
967 {
968 {
969 using MT = UpperMatrix< DynamicMatrix<int,rowMajor> >;
970 using RT = DynamicVector<int,columnVector>;
971 static_assert( IsSame_v< ReduceTrait_t<MT,OP,rowwise>, RT >, "Non-matching type detected" );
972
973 using Expr = RemoveCVRef_t< decltype( reduce<rowwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
974 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
975 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
976 }
977 {
978 using MT = UpperMatrix< DynamicMatrix<int,columnMajor> >;
979 using RT = DynamicVector<int,columnVector>;
980 static_assert( IsSame_v< ReduceTrait_t<MT,OP,rowwise>, RT >, "Non-matching type detected" );
981
982 using Expr = RemoveCVRef_t< decltype( reduce<rowwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
983 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
984 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
985 }
986 }
987
988 // UniUpperMatrix<DynamicMatrix>
989 {
990 {
991 using MT = UniUpperMatrix< DynamicMatrix<int,rowMajor> >;
992 using RT = DynamicVector<int,columnVector>;
993 static_assert( IsSame_v< ReduceTrait_t<MT,OP,rowwise>, RT >, "Non-matching type detected" );
994
995 using Expr = RemoveCVRef_t< decltype( reduce<rowwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
996 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
997 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
998 }
999 {
1000 using MT = UniUpperMatrix< DynamicMatrix<int,columnMajor> >;
1001 using RT = DynamicVector<int,columnVector>;
1002 static_assert( IsSame_v< ReduceTrait_t<MT,OP,rowwise>, RT >, "Non-matching type detected" );
1003
1004 using Expr = RemoveCVRef_t< decltype( reduce<rowwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
1005 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1006 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1007 }
1008 }
1009
1010 // StrictlyUpperMatrix<DynamicMatrix>
1011 {
1012 {
1013 using MT = StrictlyUpperMatrix< DynamicMatrix<int,rowMajor> >;
1014 using RT = DynamicVector<int,columnVector>;
1015 static_assert( IsSame_v< ReduceTrait_t<MT,OP,rowwise>, RT >, "Non-matching type detected" );
1016
1017 using Expr = RemoveCVRef_t< decltype( reduce<rowwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
1018 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1019 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1020 }
1021 {
1022 using MT = StrictlyUpperMatrix< DynamicMatrix<int,columnMajor> >;
1023 using RT = DynamicVector<int,columnVector>;
1024 static_assert( IsSame_v< ReduceTrait_t<MT,OP,rowwise>, RT >, "Non-matching type detected" );
1025
1026 using Expr = RemoveCVRef_t< decltype( reduce<rowwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
1027 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1028 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1029 }
1030 }
1031
1032 // DiagonalMatrix<DynamicMatrix>
1033 {
1034 {
1035 using MT = DiagonalMatrix< DynamicMatrix<int,rowMajor> >;
1036 using RT = DynamicVector<int,columnVector>;
1037 static_assert( IsSame_v< ReduceTrait_t<MT,OP,rowwise>, RT >, "Non-matching type detected" );
1038
1039 using Expr = RemoveCVRef_t< decltype( reduce<rowwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
1040 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1041 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1042 }
1043 {
1044 using MT = DiagonalMatrix< DynamicMatrix<int,columnMajor> >;
1045 using RT = DynamicVector<int,columnVector>;
1046 static_assert( IsSame_v< ReduceTrait_t<MT,OP,rowwise>, RT >, "Non-matching type detected" );
1047
1048 using Expr = RemoveCVRef_t< decltype( reduce<rowwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
1049 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1050 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1051 }
1052 }
1053 }
1054 //*************************************************************************************************
1055
1056
1057 //*************************************************************************************************
1058 /*!\brief Test of the 'ReduceTrait' class template for columnwise matrix reductions.
1059 //
1060 // \return void
1061 // \exception std::runtime_error Error detected.
1062 //
1063 // This function performs a compile time test of the 'ReduceTrait' class template for columnwise
1064 // matrix reductions. In case an error is detected, a compilation error is created.
1065 */
testColumnwiseMatrixReduction()1066 void ClassTest::testColumnwiseMatrixReduction()
1067 {
1068 using namespace blaze;
1069 using OP = Add;
1070
1071
1072 // StaticMatrix
1073 {
1074 {
1075 using MT = StaticMatrix<int,3UL,5UL,rowMajor>;
1076 using RT = StaticVector<int,5UL,rowVector>;
1077 static_assert( IsSame_v< ReduceTrait_t<MT,OP,columnwise>, RT >, "Non-matching type detected" );
1078
1079 using Expr = RemoveCVRef_t< decltype( reduce<columnwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
1080 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1081 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1082 }
1083 {
1084 using MT = StaticMatrix<int,3UL,5UL,columnMajor>;
1085 using RT = StaticVector<int,5UL,rowVector>;
1086 static_assert( IsSame_v< ReduceTrait_t<MT,OP,columnwise>, RT >, "Non-matching type detected" );
1087
1088 using Expr = RemoveCVRef_t< decltype( reduce<columnwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
1089 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1090 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1091 }
1092 }
1093
1094 // HybridMatrix
1095 {
1096 {
1097 using MT = HybridMatrix<int,3UL,5UL,rowMajor>;
1098 using RT = HybridVector<int,5UL,rowVector>;
1099 static_assert( IsSame_v< ReduceTrait_t<MT,OP,columnwise>, RT >, "Non-matching type detected" );
1100
1101 using Expr = RemoveCVRef_t< decltype( reduce<columnwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
1102 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1103 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1104 }
1105 {
1106 using MT = HybridMatrix<int,3UL,5UL,columnMajor>;
1107 using RT = HybridVector<int,5UL,rowVector>;
1108 static_assert( IsSame_v< ReduceTrait_t<MT,OP,columnwise>, RT >, "Non-matching type detected" );
1109
1110 using Expr = RemoveCVRef_t< decltype( reduce<columnwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
1111 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1112 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1113 }
1114 }
1115
1116 // DynamicMatrix
1117 {
1118 {
1119 using MT = DynamicMatrix<int,rowMajor>;
1120 using RT = DynamicVector<int,rowVector>;
1121 static_assert( IsSame_v< ReduceTrait_t<MT,OP,columnwise>, RT >, "Non-matching type detected" );
1122
1123 using Expr = RemoveCVRef_t< decltype( reduce<columnwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
1124 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1125 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1126 }
1127 {
1128 using MT = DynamicMatrix<int,columnMajor>;
1129 using RT = DynamicVector<int,rowVector>;
1130 static_assert( IsSame_v< ReduceTrait_t<MT,OP,columnwise>, RT >, "Non-matching type detected" );
1131
1132 using Expr = RemoveCVRef_t< decltype( reduce<columnwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
1133 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1134 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1135 }
1136 }
1137
1138 // CustomMatrix
1139 {
1140 {
1141 using MT = CustomMatrix<int,unaligned,unpadded,rowMajor>;
1142 using RT = DynamicVector<int,rowVector>;
1143 static_assert( IsSame_v< ReduceTrait_t<MT,OP,columnwise>, RT >, "Non-matching type detected" );
1144
1145 using Expr = RemoveCVRef_t< decltype( reduce<columnwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
1146 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1147 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1148 }
1149 {
1150 using MT = CustomMatrix<int,unaligned,unpadded,columnMajor>;
1151 using RT = DynamicVector<int,rowVector>;
1152 static_assert( IsSame_v< ReduceTrait_t<MT,OP,columnwise>, RT >, "Non-matching type detected" );
1153
1154 using Expr = RemoveCVRef_t< decltype( reduce<columnwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
1155 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1156 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1157 }
1158 }
1159
1160 // UniformMatrix
1161 {
1162 {
1163 using MT = UniformMatrix<int,rowMajor>;
1164 using RT = UniformVector<int,rowVector>;
1165 static_assert( IsSame_v< ReduceTrait_t<MT,OP,columnwise>, RT >, "Non-matching type detected" );
1166
1167 using Expr = RemoveCVRef_t< decltype( reduce<columnwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
1168 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1169 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1170 }
1171 {
1172 using MT = UniformMatrix<int,columnMajor>;
1173 using RT = UniformVector<int,rowVector>;
1174 static_assert( IsSame_v< ReduceTrait_t<MT,OP,columnwise>, RT >, "Non-matching type detected" );
1175
1176 using Expr = RemoveCVRef_t< decltype( reduce<columnwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
1177 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1178 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1179 }
1180 }
1181
1182 // InitializerMatrix
1183 {
1184 {
1185 using MT = DynamicMatrix<int>;
1186 using RT = DynamicVector<int,rowVector>;
1187 static_assert( IsSame_v< ReduceTrait_t<MT,OP,columnwise>, RT >, "Non-matching type detected" );
1188
1189 using Expr = RemoveCVRef_t< decltype( reduce<columnwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
1190 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1191 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1192 }
1193 }
1194
1195 // CompressedMatrix
1196 {
1197 {
1198 using MT = CompressedMatrix<int,rowMajor>;
1199 using RT = DynamicVector<int,rowVector>;
1200 static_assert( IsSame_v< ReduceTrait_t<MT,OP,columnwise>, RT >, "Non-matching type detected" );
1201
1202 using Expr = RemoveCVRef_t< decltype( reduce<columnwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
1203 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1204 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1205 }
1206 {
1207 using MT = CompressedMatrix<int,columnMajor>;
1208 using RT = DynamicVector<int,rowVector>;
1209 static_assert( IsSame_v< ReduceTrait_t<MT,OP,columnwise>, RT >, "Non-matching type detected" );
1210
1211 using Expr = RemoveCVRef_t< decltype( reduce<columnwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
1212 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1213 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1214 }
1215 }
1216
1217 // IdentityMatrix
1218 {
1219 {
1220 using MT = IdentityMatrix<int,rowMajor>;
1221 using RT = UniformVector<int,rowVector>;
1222 static_assert( IsSame_v< ReduceTrait_t<MT,OP,columnwise>, RT >, "Non-matching type detected" );
1223
1224 using Expr = RemoveCVRef_t< decltype( reduce<columnwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
1225 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1226 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1227 }
1228 {
1229 using MT = IdentityMatrix<int,columnMajor>;
1230 using RT = UniformVector<int,rowVector>;
1231 static_assert( IsSame_v< ReduceTrait_t<MT,OP,columnwise>, RT >, "Non-matching type detected" );
1232
1233 using Expr = RemoveCVRef_t< decltype( reduce<columnwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
1234 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1235 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1236 }
1237 }
1238
1239 // ZeroMatrix
1240 {
1241 {
1242 using MT = ZeroMatrix<int,rowMajor>;
1243 using RT = UniformVector<int,rowVector>;
1244 static_assert( IsSame_v< ReduceTrait_t<MT,OP,columnwise>, RT >, "Non-matching type detected" );
1245
1246 using Expr = RemoveCVRef_t< decltype( reduce<columnwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
1247 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1248 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1249 }
1250 {
1251 using MT = ZeroMatrix<int,columnMajor>;
1252 using RT = UniformVector<int,rowVector>;
1253 static_assert( IsSame_v< ReduceTrait_t<MT,OP,columnwise>, RT >, "Non-matching type detected" );
1254
1255 using Expr = RemoveCVRef_t< decltype( reduce<columnwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
1256 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1257 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1258 }
1259 }
1260
1261 // SymmetricMatrix<DynamicMatrix> (real)
1262 {
1263 {
1264 using MT = SymmetricMatrix< DynamicMatrix<int,rowMajor> >;
1265 using RT = DynamicVector<int,rowVector>;
1266 static_assert( IsSame_v< ReduceTrait_t<MT,OP,columnwise>, RT >, "Non-matching type detected" );
1267
1268 using Expr = RemoveCVRef_t< decltype( reduce<columnwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
1269 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1270 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1271 }
1272 {
1273 using MT = SymmetricMatrix< DynamicMatrix<int,columnMajor> >;
1274 using RT = DynamicVector<int,rowVector>;
1275 static_assert( IsSame_v< ReduceTrait_t<MT,OP,columnwise>, RT >, "Non-matching type detected" );
1276
1277 using Expr = RemoveCVRef_t< decltype( reduce<columnwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
1278 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1279 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1280 }
1281 }
1282
1283 // SymmetricMatrix<DynamicMatrix> (complex)
1284 {
1285 {
1286 using MT = SymmetricMatrix< DynamicMatrix<complex<int>,rowMajor> >;
1287 using RT = DynamicVector<complex<int>,rowVector>;
1288 static_assert( IsSame_v< ReduceTrait_t<MT,OP,columnwise>, RT >, "Non-matching type detected" );
1289
1290 using Expr = RemoveCVRef_t< decltype( reduce<columnwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
1291 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1292 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1293 }
1294 {
1295 using MT = SymmetricMatrix< DynamicMatrix<complex<int>,columnMajor> >;
1296 using RT = DynamicVector<complex<int>,rowVector>;
1297 static_assert( IsSame_v< ReduceTrait_t<MT,OP,columnwise>, RT >, "Non-matching type detected" );
1298
1299 using Expr = RemoveCVRef_t< decltype( reduce<columnwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
1300 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1301 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1302 }
1303 }
1304
1305 // SymmetricMatrix<UniformMatrix> (real)
1306 {
1307 {
1308 using MT = SymmetricMatrix< UniformMatrix<int,rowMajor> >;
1309 using RT = UniformVector<int,rowVector>;
1310 static_assert( IsSame_v< ReduceTrait_t<MT,OP,columnwise>, RT >, "Non-matching type detected" );
1311
1312 using Expr = RemoveCVRef_t< decltype( reduce<columnwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
1313 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1314 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1315 }
1316 {
1317 using MT = SymmetricMatrix< UniformMatrix<int,columnMajor> >;
1318 using RT = UniformVector<int,rowVector>;
1319 static_assert( IsSame_v< ReduceTrait_t<MT,OP,columnwise>, RT >, "Non-matching type detected" );
1320
1321 using Expr = RemoveCVRef_t< decltype( reduce<columnwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
1322 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1323 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1324 }
1325 }
1326
1327 // SymmetricMatrix<ZeroMatrix> (real)
1328 {
1329 {
1330 using MT = SymmetricMatrix< ZeroMatrix<int,rowMajor> >;
1331 using RT = UniformVector<int,rowVector>;
1332 static_assert( IsSame_v< ReduceTrait_t<MT,OP,columnwise>, RT >, "Non-matching type detected" );
1333
1334 using Expr = RemoveCVRef_t< decltype( reduce<columnwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
1335 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1336 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1337 }
1338 {
1339 using MT = SymmetricMatrix< ZeroMatrix<int,columnMajor> >;
1340 using RT = UniformVector<int,rowVector>;
1341 static_assert( IsSame_v< ReduceTrait_t<MT,OP,columnwise>, RT >, "Non-matching type detected" );
1342
1343 using Expr = RemoveCVRef_t< decltype( reduce<columnwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
1344 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1345 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1346 }
1347 }
1348
1349 // HermitianMatrix<DynamicMatrix> (symmetric)
1350 {
1351 {
1352 using MT = HermitianMatrix< DynamicMatrix<int,rowMajor> >;
1353 using RT = DynamicVector<int,rowVector>;
1354 static_assert( IsSame_v< ReduceTrait_t<MT,OP,columnwise>, RT >, "Non-matching type detected" );
1355
1356 using Expr = RemoveCVRef_t< decltype( reduce<columnwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
1357 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1358 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1359 }
1360 {
1361 using MT = HermitianMatrix< DynamicMatrix<int,columnMajor> >;
1362 using RT = DynamicVector<int,rowVector>;
1363 static_assert( IsSame_v< ReduceTrait_t<MT,OP,columnwise>, RT >, "Non-matching type detected" );
1364
1365 using Expr = RemoveCVRef_t< decltype( reduce<columnwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
1366 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1367 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1368 }
1369 }
1370
1371 // HermitianMatrix<DynamicMatrix> (Hermitian)
1372 {
1373 {
1374 using MT = HermitianMatrix< DynamicMatrix<complex<int>,rowMajor> >;
1375 using RT = DynamicVector<complex<int>,rowVector>;
1376 static_assert( IsSame_v< ReduceTrait_t<MT,OP,columnwise>, RT >, "Non-matching type detected" );
1377
1378 using Expr = RemoveCVRef_t< decltype( reduce<columnwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
1379 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1380 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1381 }
1382 {
1383 using MT = HermitianMatrix< DynamicMatrix<complex<int>,columnMajor> >;
1384 using RT = DynamicVector<complex<int>,rowVector>;
1385 static_assert( IsSame_v< ReduceTrait_t<MT,OP,columnwise>, RT >, "Non-matching type detected" );
1386
1387 using Expr = RemoveCVRef_t< decltype( reduce<columnwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
1388 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1389 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1390 }
1391 }
1392
1393 // LowerMatrix<DynamicMatrix>
1394 {
1395 {
1396 using MT = LowerMatrix< DynamicMatrix<int,rowMajor> >;
1397 using RT = DynamicVector<int,rowVector>;
1398 static_assert( IsSame_v< ReduceTrait_t<MT,OP,columnwise>, RT >, "Non-matching type detected" );
1399
1400 using Expr = RemoveCVRef_t< decltype( reduce<columnwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
1401 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1402 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1403 }
1404 {
1405 using MT = LowerMatrix< DynamicMatrix<int,columnMajor> >;
1406 using RT = DynamicVector<int,rowVector>;
1407 static_assert( IsSame_v< ReduceTrait_t<MT,OP,columnwise>, RT >, "Non-matching type detected" );
1408
1409 using Expr = RemoveCVRef_t< decltype( reduce<columnwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
1410 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1411 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1412 }
1413 }
1414
1415 // UniLowerMatrix<DynamicMatrix>
1416 {
1417 {
1418 using MT = UniLowerMatrix< DynamicMatrix<int,rowMajor> >;
1419 using RT = DynamicVector<int,rowVector>;
1420 static_assert( IsSame_v< ReduceTrait_t<MT,OP,columnwise>, RT >, "Non-matching type detected" );
1421
1422 using Expr = RemoveCVRef_t< decltype( reduce<columnwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
1423 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1424 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1425 }
1426 {
1427 using MT = UniLowerMatrix< DynamicMatrix<int,columnMajor> >;
1428 using RT = DynamicVector<int,rowVector>;
1429 static_assert( IsSame_v< ReduceTrait_t<MT,OP,columnwise>, RT >, "Non-matching type detected" );
1430
1431 using Expr = RemoveCVRef_t< decltype( reduce<columnwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
1432 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1433 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1434 }
1435 }
1436
1437 // StrictlyLowerMatrix<DynamicMatrix>
1438 {
1439 {
1440 using MT = StrictlyLowerMatrix< DynamicMatrix<int,rowMajor> >;
1441 using RT = DynamicVector<int,rowVector>;
1442 static_assert( IsSame_v< ReduceTrait_t<MT,OP,columnwise>, RT >, "Non-matching type detected" );
1443
1444 using Expr = RemoveCVRef_t< decltype( reduce<columnwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
1445 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1446 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1447 }
1448 {
1449 using MT = StrictlyLowerMatrix< DynamicMatrix<int,columnMajor> >;
1450 using RT = DynamicVector<int,rowVector>;
1451 static_assert( IsSame_v< ReduceTrait_t<MT,OP,columnwise>, RT >, "Non-matching type detected" );
1452
1453 using Expr = RemoveCVRef_t< decltype( reduce<columnwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
1454 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1455 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1456 }
1457 }
1458
1459 // UpperMatrix<DynamicMatrix>
1460 {
1461 {
1462 using MT = UpperMatrix< DynamicMatrix<int,rowMajor> >;
1463 using RT = DynamicVector<int,rowVector>;
1464 static_assert( IsSame_v< ReduceTrait_t<MT,OP,columnwise>, RT >, "Non-matching type detected" );
1465
1466 using Expr = RemoveCVRef_t< decltype( reduce<columnwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
1467 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1468 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1469 }
1470 {
1471 using MT = UpperMatrix< DynamicMatrix<int,columnMajor> >;
1472 using RT = DynamicVector<int,rowVector>;
1473 static_assert( IsSame_v< ReduceTrait_t<MT,OP,columnwise>, RT >, "Non-matching type detected" );
1474
1475 using Expr = RemoveCVRef_t< decltype( reduce<columnwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
1476 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1477 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1478 }
1479 }
1480
1481 // UniUpperMatrix<DynamicMatrix>
1482 {
1483 {
1484 using MT = UniUpperMatrix< DynamicMatrix<int,rowMajor> >;
1485 using RT = DynamicVector<int,rowVector>;
1486 static_assert( IsSame_v< ReduceTrait_t<MT,OP,columnwise>, RT >, "Non-matching type detected" );
1487
1488 using Expr = RemoveCVRef_t< decltype( reduce<columnwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
1489 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1490 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1491 }
1492 {
1493 using MT = UniUpperMatrix< DynamicMatrix<int,columnMajor> >;
1494 using RT = DynamicVector<int,rowVector>;
1495 static_assert( IsSame_v< ReduceTrait_t<MT,OP,columnwise>, RT >, "Non-matching type detected" );
1496
1497 using Expr = RemoveCVRef_t< decltype( reduce<columnwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
1498 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1499 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1500 }
1501 }
1502
1503 // StrictlyUpperMatrix<DynamicMatrix>
1504 {
1505 {
1506 using MT = StrictlyUpperMatrix< DynamicMatrix<int,rowMajor> >;
1507 using RT = DynamicVector<int,rowVector>;
1508 static_assert( IsSame_v< ReduceTrait_t<MT,OP,columnwise>, RT >, "Non-matching type detected" );
1509
1510 using Expr = RemoveCVRef_t< decltype( reduce<columnwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
1511 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1512 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1513 }
1514 {
1515 using MT = StrictlyUpperMatrix< DynamicMatrix<int,columnMajor> >;
1516 using RT = DynamicVector<int,rowVector>;
1517 static_assert( IsSame_v< ReduceTrait_t<MT,OP,columnwise>, RT >, "Non-matching type detected" );
1518
1519 using Expr = RemoveCVRef_t< decltype( reduce<columnwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
1520 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1521 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1522 }
1523 }
1524
1525 // DiagonalMatrix<DynamicMatrix>
1526 {
1527 {
1528 using MT = DiagonalMatrix< DynamicMatrix<int,rowMajor> >;
1529 using RT = DynamicVector<int,rowVector>;
1530 static_assert( IsSame_v< ReduceTrait_t<MT,OP,columnwise>, RT >, "Non-matching type detected" );
1531
1532 using Expr = RemoveCVRef_t< decltype( reduce<columnwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
1533 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1534 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1535 }
1536 {
1537 using MT = DiagonalMatrix< DynamicMatrix<int,columnMajor> >;
1538 using RT = DynamicVector<int,rowVector>;
1539 static_assert( IsSame_v< ReduceTrait_t<MT,OP,columnwise>, RT >, "Non-matching type detected" );
1540
1541 using Expr = RemoveCVRef_t< decltype( reduce<columnwise>( std::declval<MT>(), std::declval<OP>() ) ) >;
1542 static_assert( IsSame_v< ResultType_t<Expr>, RT >, "Non-matching type detected" );
1543 static_assert( TransposeFlag_v<Expr> == TransposeFlag_v<RT>, "Non-matching transpose flag detected" );
1544 }
1545 }
1546 }
1547 //*************************************************************************************************
1548
1549 } // namespace reducetrait
1550
1551 } // namespace traits
1552
1553 } // namespace mathtest
1554
1555 } // namespace blazetest
1556
1557
1558
1559
1560 //=================================================================================================
1561 //
1562 // MAIN FUNCTION
1563 //
1564 //=================================================================================================
1565
1566 //*************************************************************************************************
main()1567 int main()
1568 {
1569 std::cout << " Running ReduceTrait class test..." << std::endl;
1570
1571 try
1572 {
1573 RUN_REDUCETRAIT_CLASS_TEST;
1574 }
1575 catch( std::exception& ex ) {
1576 std::cerr << "\n\n ERROR DETECTED during ReduceTrait class test:\n"
1577 << ex.what() << "\n";
1578 return EXIT_FAILURE;
1579 }
1580
1581 return EXIT_SUCCESS;
1582 }
1583 //*************************************************************************************************
1584