| GCC Code Coverage Report | |||||||||||||||||||||
|
|||||||||||||||||||||
| Line | Branch | Exec | Source |
1 |
/*************************************** |
||
2 |
Auteur : Pierre Aubert |
||
3 |
Mail : pierre.aubert@lapp.in2p3.fr |
||
4 |
Licence : CeCILL-C |
||
5 |
****************************************/ |
||
6 |
|||
7 |
#include "PTensor.h" |
||
8 |
|||
9 |
#define USE_VECTOR_SIZE 2lu |
||
10 |
|||
11 |
///Test the PTensor |
||
12 |
/** @return true on success, false otherwise |
||
13 |
*/ |
||
14 |
1 |
bool testPTensorBlockLink(){ |
|
15 |
1 |
size_t nbRow(6lu), nbCol(14lu); |
|
16 |
✓ | 2 |
PTensor<int> tensor; |
17 |
✓ | 1 |
tensor.resize(AllocMode::NONE, nbRow, nbCol); |
18 |
1 |
tensor.setNbVecNeighbour(USE_VECTOR_SIZE); |
|
19 |
✓✓ | 7 |
for(size_t i(0lu); i < nbRow; ++i){ |
20 |
✓✓ | 90 |
for(size_t j(0lu); j < nbCol; ++j){ |
21 |
✓ | 84 |
tensor.setValue(i, j, (int)(i*nbCol + j)); |
22 |
} |
||
23 |
} |
||
24 |
✓✓✓✓ |
1 |
std::cout << "testPTensorBlockLink : input tensor : " << std::endl << tensor << std::endl; |
25 |
1 |
size_t blockSizeRow(2lu), blockSizeCol(6lu); //The final block will have 2 columns because it has to be a multiple of 2 |
|
26 |
1 |
std::vector<PBlock<int> > vecBlock; |
|
27 |
✓ | 1 |
tensor.splitBlockLink(vecBlock, blockSizeRow, blockSizeCol, 0lu); |
28 |
|||
29 |
✓✓✓✓ |
1 |
std::cout << "testPTensorBlockLink : create " << vecBlock.size() << " blocks" << std::endl; |
30 |
1 |
bool b(true); |
|
31 |
1 |
b &= vecBlock.size() == 9lu; |
|
32 |
|||
33 |
1 |
size_t blockIndex(0lu); |
|
34 |
✓✓ | 10 |
for(std::vector<PBlock<int> >::iterator it(vecBlock.begin()); it != vecBlock.end(); ++it){ |
35 |
9 |
PBlock<int> & block = *it; |
|
36 |
✓✓✓✓ ✓✓✓✓ ✓✓✓ |
9 |
std::cout << "Block " << blockIndex << " ("<<block.getLocationRow()<<", "<<block.getLocationCol()<<") :" << std::endl << block << std::endl; |
37 |
|||
38 |
✓✓ | 27 |
for(size_t i(0lu); i < block.getFullNbRow(); ++i){ |
39 |
✓✓ | 102 |
for(size_t j(0lu); j < block.getNbCol(); ++j){ |
40 |
✓✓ | 84 |
b &= block.getValue(i, j) == (int)((i + block.getLocationRow())*nbCol + (j + block.getLocationCol())); |
41 |
} |
||
42 |
} |
||
43 |
✓✓✓✓ ✓ |
9 |
std::cout << "testPTensorBlockLink : Block " << blockIndex << ", b = " << b << std::endl; |
44 |
9 |
++blockIndex; |
|
45 |
} |
||
46 |
✓✓✓ | 1 |
std::cout << "testPTensorBlockLink : create block b = " << b << std::endl; |
47 |
|||
48 |
1 |
tensor.fill(0); //Let's clear the tensor and put the block back into it |
|
49 |
✓✓✓✓ |
1 |
std::cout << "testPTensorBlockLink : merged tensor : " << std::endl << tensor << std::endl; |
50 |
✓✓ | 7 |
for(size_t i(0lu); i < nbRow; ++i){ |
51 |
✓✓ | 90 |
for(size_t j(0lu); j < nbCol; ++j){ |
52 |
✓ | 84 |
b &= tensor.getValue(i, j) == 0; |
53 |
} |
||
54 |
} |
||
55 |
✓✓✓ | 1 |
std::cout << "testPTensorBlockLink : merge block b = " << b << std::endl; |
56 |
2 |
return b; |
|
57 |
} |
||
58 |
|||
59 |
///Test the PTensor |
||
60 |
/** @return true on success, false otherwise |
||
61 |
*/ |
||
62 |
1 |
bool testPTensorBlockLinkNeighbourRing(){ |
|
63 |
✓✓ | 1 |
std::cout << "testPTensorBlockLinkNeighbourRing =================== START ====================" << std::endl; |
64 |
1 |
size_t nbRow(6lu), nbCol(14lu); |
|
65 |
✓ | 2 |
PTensor<int> tensor; |
66 |
✓ | 1 |
tensor.resize(AllocMode::NONE, nbRow, nbCol); |
67 |
1 |
tensor.setNbVecNeighbour(USE_VECTOR_SIZE); |
|
68 |
✓✓ | 7 |
for(size_t i(0lu); i < nbRow; ++i){ |
69 |
✓✓ | 90 |
for(size_t j(0lu); j < nbCol; ++j){ |
70 |
✓ | 84 |
tensor.setValue(i, j, (int)(i*nbCol + j)); |
71 |
} |
||
72 |
} |
||
73 |
✓✓✓✓ |
1 |
std::cout << "testPTensorBlockLinkNeighbourRing : input tensor : " << std::endl << tensor << std::endl; |
74 |
1 |
size_t blockSizeRow(4lu), blockSizeCol(6lu); |
|
75 |
1 |
std::vector<PBlock<int> > vecBlock; |
|
76 |
✓ | 1 |
tensor.splitBlockLink(vecBlock, blockSizeRow, blockSizeCol, 1lu); |
77 |
|||
78 |
✓✓✓✓ |
1 |
std::cout << "testPTensorBlockLinkNeighbourRing : create " << vecBlock.size() << " blocks" << std::endl; |
79 |
1 |
bool b(true); |
|
80 |
1 |
b &= vecBlock.size() == 10lu; //This is 2 rows of 5 blocs inside 2x2 (outside 4x6) |
|
81 |
|||
82 |
1 |
size_t blockIndex(0lu); |
|
83 |
✓✓ | 11 |
for(std::vector<PBlock<int> >::iterator it(vecBlock.begin()); it != vecBlock.end(); ++it){ |
84 |
10 |
PBlock<int> & block = *it; |
|
85 |
✓✓✓✓ ✓✓✓✓ ✓✓✓ |
10 |
std::cout << "Block " << blockIndex << " ("<<block.getLocationRow()<<", "<<block.getLocationCol()<<") :" << std::endl << block << std::endl; |
86 |
|||
87 |
✓✓ | 50 |
for(size_t i(0lu); i < block.getFullNbRow(); ++i){ |
88 |
✓✓ | 280 |
for(size_t j(0lu); j < block.getNbCol(); ++j){ |
89 |
✓✓ | 240 |
b &= block.getValue(i, j) == (int)((i + block.getLocationRow())*nbCol + (j + block.getLocationCol())); |
90 |
} |
||
91 |
} |
||
92 |
✓✓✓✓ ✓ |
10 |
std::cout << "testPTensorBlockLinkNeighbourRing : Block " << blockIndex << ", b = " << b << std::endl; |
93 |
10 |
++blockIndex; |
|
94 |
} |
||
95 |
✓✓✓ | 1 |
std::cout << "testPTensorBlockLinkNeighbourRing : split block b = " << b << std::endl; |
96 |
1 |
tensor.fill(0); //Let's reset the tensor to clearly see the padding of 0 |
|
97 |
✓✓✓✓ |
1 |
std::cout << "testPTensorBlockLinkNeighbourRing : merged tensor : " << std::endl << tensor << std::endl; |
98 |
✓✓ | 5 |
for(size_t i(1lu); i < nbRow - 1lu; ++i){ |
99 |
✓✓ | 44 |
for(size_t j(USE_VECTOR_SIZE); j < nbCol - USE_VECTOR_SIZE; ++j){ |
100 |
✓ | 40 |
b &= tensor.getValue(i, j) == 0; |
101 |
} |
||
102 |
} |
||
103 |
✓✓✓ | 1 |
std::cout << "testPTensorBlockLinkNeighbourRing : merge block b = " << b << std::endl; |
104 |
2 |
return b; |
|
105 |
} |
||
106 |
|||
107 |
1 |
int main(int argc, char** argv){ |
|
108 |
1 |
bool b(testPTensorBlockLink()); |
|
109 |
1 |
b &= testPTensorBlockLinkNeighbourRing(); |
|
110 |
1 |
return b - 1; |
|
111 |
} |
||
112 |
|||
113 |
| Generated by: GCOVR (Version 4.2) |