| 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 |
///Test the PTensor |
||
10 |
/** @return true on success, false otherwise |
||
11 |
*/ |
||
12 |
1 |
bool testPTensorBlock(){ |
|
13 |
1 |
size_t nbRow(60lu), nbCol(120lu); |
|
14 |
✓ | 2 |
PTensor<int> tensor; |
15 |
✓ | 1 |
tensor.resize(AllocMode::NONE, nbRow, nbCol); |
16 |
✓✓ | 61 |
for(size_t i(0lu); i < nbRow; ++i){ |
17 |
✓✓ | 7260 |
for(size_t j(0lu); j < nbCol; ++j){ |
18 |
✓ | 7200 |
tensor.setValue(i, j, (int)(i*nbCol + j)); |
19 |
} |
||
20 |
} |
||
21 |
✓✓ | 1 |
std::cout << "testPTensorBlock : input tensor : " << std::endl; |
22 |
1 |
size_t blockSizeRow(20lu), blockSizeCol(30lu); |
|
23 |
1 |
std::vector<PBlock<int> > vecBlock; |
|
24 |
✓ | 1 |
tensor.splitBlock(vecBlock, blockSizeRow, blockSizeCol, 0lu); |
25 |
|||
26 |
✓✓✓✓ |
1 |
std::cout << "testPTensorBlock : create " << vecBlock.size() << " blocks" << std::endl; |
27 |
1 |
bool b(true); |
|
28 |
1 |
b &= vecBlock.size() == 12lu; |
|
29 |
|||
30 |
1 |
size_t blockIndex(0lu); |
|
31 |
✓✓ | 13 |
for(std::vector<PBlock<int> >::iterator it(vecBlock.begin()); it != vecBlock.end(); ++it){ |
32 |
12 |
PBlock<int> & block = *it; |
|
33 |
✓✓✓✓ ✓✓✓✓ ✓ |
12 |
std::cout << "Block " << blockIndex << " ("<<block.getLocationRow()<<", "<<block.getLocationCol()<<") :" << std::endl; |
34 |
|||
35 |
✓✓ | 252 |
for(size_t i(0lu); i < block.getFullNbRow(); ++i){ |
36 |
✓✓ | 7440 |
for(size_t j(0lu); j < block.getNbCol(); ++j){ |
37 |
✓✓ | 7200 |
b &= block.getValue(i, j) == (int)((i + block.getLocationRow())*nbCol + (j + block.getLocationCol())); |
38 |
} |
||
39 |
} |
||
40 |
✓✓✓✓ ✓ |
12 |
std::cout << "testPTensorBlock : Block " << blockIndex << ", b = " << b << std::endl; |
41 |
12 |
++blockIndex; |
|
42 |
} |
||
43 |
✓✓✓ | 1 |
std::cout << "testPTensorBlock : create block b = " << b << std::endl; |
44 |
|||
45 |
1 |
tensor.fill(0); //Let's clear the tensor and put the block back into it |
|
46 |
✓ | 1 |
tensor.mergeBlock(vecBlock, 0lu); |
47 |
✓✓ | 1 |
std::cout << "testPTensorBlock : merged tensor : " << std::endl; |
48 |
✓✓ | 61 |
for(size_t i(0lu); i < nbRow; ++i){ |
49 |
✓✓ | 7260 |
for(size_t j(0lu); j < nbCol; ++j){ |
50 |
✓ | 7200 |
b &= tensor.getValue(i, j) == (int)(i*nbCol + j); |
51 |
} |
||
52 |
} |
||
53 |
✓✓✓ | 1 |
std::cout << "testPTensorBlock : merge block b = " << b << std::endl; |
54 |
2 |
return b; |
|
55 |
} |
||
56 |
|||
57 |
///Test the PTensor |
||
58 |
/** @return true on success, false otherwise |
||
59 |
*/ |
||
60 |
1 |
bool testPTensorBlockNeighbourRing(){ |
|
61 |
✓✓ | 1 |
std::cout << "testPTensorBlockNeighbourRing =================== START ====================" << std::endl; |
62 |
1 |
size_t nbRow(60lu), nbCol(100lu); |
|
63 |
✓ | 2 |
PTensor<int> tensor; |
64 |
✓ | 1 |
tensor.resize(AllocMode::NONE, nbRow, nbCol); |
65 |
✓✓ | 61 |
for(size_t i(0lu); i < nbRow; ++i){ |
66 |
✓✓ | 6060 |
for(size_t j(0lu); j < nbCol; ++j){ |
67 |
✓ | 6000 |
tensor.setValue(i, j, (int)(i*nbCol + j)); |
68 |
} |
||
69 |
} |
||
70 |
✓✓ | 1 |
std::cout << "testPTensorBlockNeighbourRing : input tensor : " << std::endl; |
71 |
1 |
size_t blockSizeRow(32lu), blockSizeCol(40lu); |
|
72 |
1 |
std::vector<PBlock<int> > vecBlock; |
|
73 |
✓ | 1 |
tensor.splitBlock(vecBlock, blockSizeRow, blockSizeCol, 1lu); |
74 |
|||
75 |
✓✓✓✓ |
1 |
std::cout << "testPTensorBlockNeighbourRing : create " << vecBlock.size() << " blocks" << std::endl; |
76 |
1 |
bool b(true); |
|
77 |
1 |
b &= vecBlock.size() == 6lu; |
|
78 |
|||
79 |
1 |
size_t blockIndex(0lu); |
|
80 |
✓✓ | 7 |
for(std::vector<PBlock<int> >::iterator it(vecBlock.begin()); it != vecBlock.end(); ++it){ |
81 |
6 |
PBlock<int> & block = *it; |
|
82 |
✓✓✓✓ ✓✓✓✓ ✓✓✓✓ ✓ |
6 |
std::cout << "Block " << blockIndex << " ("<<block.getLocationRow()<<", "<<block.getLocationCol()<<") size ("<<block.getFullNbRow()<<", "<<block.getNbCol()<<"):" << std::endl; |
83 |
|||
84 |
✓✓ | 192 |
for(size_t i(0lu); i < block.getFullNbRow(); ++i){ |
85 |
✓✓ | 6634 |
for(size_t j(0lu); j < block.getNbCol(); ++j){ |
86 |
✓✓ | 6448 |
b &= block.getValue(i, j) == (int)((i + block.getLocationRow())*nbCol + (j + block.getLocationCol())); |
87 |
} |
||
88 |
} |
||
89 |
✓✓✓✓ ✓ |
6 |
std::cout << "testPTensorBlockNeighbourRing : Block " << blockIndex << ", b = " << b << std::endl; |
90 |
6 |
++blockIndex; |
|
91 |
} |
||
92 |
✓✓✓ | 1 |
std::cout << "testPTensorBlockNeighbourRing : split block b = " << b << std::endl; |
93 |
1 |
tensor.fill(0); //Let's reset the tensor to clearly see the padding of 0 |
|
94 |
✓ | 1 |
tensor.mergeBlock(vecBlock, 1lu); |
95 |
✓✓✓✓ |
1 |
std::cout << "testPTensorBlock : merged tensor : " << std::endl << tensor << std::endl; |
96 |
✓✓ | 59 |
for(size_t i(1lu); i < nbRow - 1lu; ++i){ |
97 |
✓✓ | 5742 |
for(size_t j(1lu); j < nbCol - 1lu; ++j){ |
98 |
✓ | 5684 |
b &= tensor.getValue(i, j) == (int)(i*nbCol + j); |
99 |
} |
||
100 |
} |
||
101 |
✓✓✓ | 1 |
std::cout << "testPTensorBlockNeighbourRing : merge block b = " << b << std::endl; |
102 |
2 |
return b; |
|
103 |
} |
||
104 |
|||
105 |
1 |
int main(int argc, char** argv){ |
|
106 |
1 |
bool b(testPTensorBlock()); |
|
107 |
1 |
b &= testPTensorBlockNeighbourRing(); |
|
108 |
1 |
return b - 1; |
|
109 |
} |
||
110 |
|||
111 |
| Generated by: GCOVR (Version 4.2) |