GCC Code Coverage Report
Directory: ./ Exec Total Coverage
File: TESTS/TEST_TENSOR_BLOCK_10/main.cpp Lines: 69 69 100.0 %
Date: 2026-03-27 22:08:32 Branches: 108 108 100.0 %

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