GCC Code Coverage Report
Directory: ./ Exec Total Coverage
File: TESTS/TEST_TENSOR_RESHUFFLE/main.cpp Lines: 84 84 100.0 %
Date: 2026-03-27 22:08:32 Branches: 110 110 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 vector reshuffle
10
/**	@return true on success, false otherwise
11
*/
12
1
bool testTensorVectorReshuffle(){
13
1
	size_t vectorSize(4lu);
14
1
	std::cout << "testTensorVectorReshuffle : vectorSize = " << vectorSize << std::endl;
15
1
	size_t nbRow(12lu), nbCol(12lu);
16
2
	PTensor<float> scalTensor(AllocMode::NONE, nbRow, nbCol);
17
2
	PTensor<float> vecTensor;
18
1
	vecTensor.setNbVecNeighbour(vectorSize);
19
20
1
	PTensor<float> outScalTensor(AllocMode::NONE, nbRow, nbCol);
21
13
	for(size_t i(0lu); i < nbRow; ++i){
22
156
		for(size_t j(0lu); j < nbCol; ++j){
23
144
			scalTensor.setValue(i, j, i*nbCol + j);
24
		}
25
	}
26
1
	outScalTensor.fill(0.0f);
27

1
	std::cout << "testTensorVectorReshuffle : scalTensor =" << std::endl << scalTensor << std::endl;
28
29
1
	vecTensor.fromScalToVecNeigbhour(scalTensor);
30

1
	std::cout << "testTensorVectorReshuffle : vecTensor =" << std::endl << vecTensor << std::endl;
31
32
1
	outScalTensor.fromVecToScalNeigbhour(vecTensor);
33

1
	std::cout << "testTensorVectorReshuffle : outScalTensor =" << std::endl << outScalTensor << std::endl;
34
35
1
	float expectedVec[] = {0, 24, 60, 96, 0, 25, 61, 97, 0, 26, 62, 98, 0, 27, 63, 99, 0, 28, 64, 100, 0, 29, 65, 101, 0, 30, 66, 102, 0, 31, 67, 103, 0, 32, 68, 104, 0, 33, 69, 105, 0, 34, 70, 106, 0, 35, 71, 107,
36
	0, 36, 72, 108, 1, 37, 73, 109, 2, 38, 74, 110, 3, 39, 75, 111, 4, 40, 76, 112, 5, 41, 77, 113, 6, 42, 78, 114, 7, 43, 79, 115, 8, 44, 80, 116, 9, 45, 81, 117, 10, 46, 82, 118, 11, 47, 83, 119,
37
	12, 48, 84, 120, 13, 49, 85, 121, 14, 50, 86, 122, 15, 51, 87, 123, 16, 52, 88, 124, 17, 53, 89, 125, 18, 54, 90, 126, 19, 55, 91, 127, 20, 56, 92, 128, 21, 57, 93, 129, 22, 58, 94, 130, 23, 59, 95, 131,
38
	24, 60, 96, 132, 25, 61, 97, 133, 26, 62, 98, 134, 27, 63, 99, 135, 28, 64, 100, 136, 29, 65, 101, 137, 30, 66, 102, 138, 31, 67, 103, 139, 32, 68, 104, 140, 33, 69, 105, 141, 34, 70, 106, 142, 35, 71, 107, 143,
39
	36, 72, 108, 0, 37, 73, 109, 0, 38, 74, 110, 0, 39, 75, 111, 0, 40, 76, 112, 0, 41, 77, 113, 0, 42, 78, 114, 0, 43, 79, 115, 0, 44, 80, 116, 0, 45, 81, 117, 0, 46, 82, 118, 0, 47, 83, 119, 0};
40
1
	bool b(true);
41
1
	size_t nbVecRow(vecTensor.getFullNbRow()), nbVecCol(vecTensor.getNbCol());
42
6
	for(size_t i(0lu); i < nbVecRow; ++i){
43
245
		for(size_t j(0lu); j < nbVecCol; ++j){
44
240
			b &= vecTensor.getValue(i, j) == expectedVec[i*nbVecCol + j];
45
		}
46
	}
47
1
	std::cout << "Check vecTensor = " << b <<std::endl;
48
49
13
	for(size_t i(0lu); i < nbRow; ++i){
50
156
		for(size_t j(0lu); j < nbCol; ++j){
51
144
			b &= scalTensor.getValue(i, j) == outScalTensor.getValue(i, j);
52
		}
53
	}
54
1
	std::cout << "Check scalTensor = " << b <<std::endl;
55
56
2
	return b;
57
}
58
59
///Test the PTensor vector reshuffle
60
/**	@return true on success, false otherwise
61
*/
62
1
bool testTensorVectorReshuffle2(){
63
1
	size_t vectorSize(3lu);
64
1
	std::cout << "testTensorVectorReshuffle2 : vectorSize = " << vectorSize << std::endl;
65
1
	size_t nbRow(8lu), nbCol(5lu);
66
2
	PTensor<float> scalTensor(AllocMode::NONE, nbRow, nbCol);
67
2
	PTensor<float> vecTensor;
68
1
	vecTensor.setNbVecNeighbour(vectorSize);
69
70
1
	PTensor<float> outScalTensor(AllocMode::NONE, nbRow, nbCol);
71
9
	for(size_t i(0lu); i < nbRow; ++i){
72
48
		for(size_t j(0lu); j < nbCol; ++j){
73
40
			scalTensor.setValue(i, j, i*nbCol + j);
74
		}
75
	}
76
1
	outScalTensor.fill(0.0f);
77

1
	std::cout << "testTensorVectorReshuffle2 : scalTensor =" << std::endl << scalTensor << std::endl;
78
79
1
	vecTensor.fromScalToVecNeigbhour(scalTensor);
80

1
	std::cout << "testTensorVectorReshuffle2 : vecTensor =" << std::endl << vecTensor << std::endl;
81
82
1
	outScalTensor.fromVecToScalNeigbhour(vecTensor);
83

1
	std::cout << "testTensorVectorReshuffle2 : outScalTensor =" << std::endl << outScalTensor << std::endl;
84
85
1
	float expectedVec[] = {0, 10, 25, 0, 11, 26, 0, 12, 27, 0, 13, 28, 0, 14, 29,
86
				0, 15, 30, 1, 16, 31, 2, 17, 32, 3, 18, 33, 4, 19, 34,
87
				5, 20, 35, 6, 21, 36, 7, 22, 37, 8, 23, 38, 9, 24, 39,
88
				10, 25, 0, 11, 26, 0, 12, 27, 0, 13, 28, 0, 14, 29, 0,
89
				15, 30, 0, 16, 31, 0, 17, 32, 0, 18, 33, 0, 19, 34, 0};
90
1
	bool b(true);
91
1
	size_t nbVecRow(vecTensor.getFullNbRow()), nbVecCol(vecTensor.getNbCol());
92
6
	for(size_t i(0lu); i < nbVecRow; ++i){
93
80
		for(size_t j(0lu); j < nbVecCol; ++j){
94
75
			b &= vecTensor.getValue(i, j) == expectedVec[i*nbVecCol + j];
95
		}
96
	}
97
1
	std::cout << "Check vecTensor = " << b <<std::endl;
98
99
9
	for(size_t i(0lu); i < nbRow; ++i){
100
48
		for(size_t j(0lu); j < nbCol; ++j){
101
40
			b &= scalTensor.getValue(i, j) == outScalTensor.getValue(i, j);
102
		}
103
	}
104
1
	std::cout << "Check scalTensor = " << b <<std::endl;
105
106
2
	return b;
107
}
108
109
///Test the PTensor broadcast reshuffle
110
/**	@return true on success, false otherwise
111
*/
112
1
bool testTensorBroadCastReshuffle(){
113
1
	size_t vectorSize(4lu);
114
1
	std::cout << "testTensorBroadCastReshuffle : vectorSize = " << vectorSize << std::endl;
115
1
	size_t nbRow(4lu), nbCol(3lu);
116
2
	PTensor<float> scalTensor(AllocMode::NONE, nbRow, nbCol);
117
1
	PTensor<float> vecBroadcast(AllocMode::NONE, nbRow, nbCol*vectorSize);
118
119
5
	for(size_t i(0lu); i < nbRow; ++i){
120
16
		for(size_t j(0lu); j < nbCol; ++j){
121
12
			scalTensor.setValue(i, j, i*nbCol + j);
122
		}
123
	}
124

1
	std::cout << "testTensorVectorReshuffle : scalTensor =" << std::endl << scalTensor << std::endl;
125
126
1
	reshuffle_broadcastTensor(vecBroadcast.getData(), scalTensor.getData(), nbRow, nbCol, scalTensor.getPadding(), vectorSize);
127
128

1
	std::cout << "testTensorVectorReshuffle : vecBroadcast =" << std::endl << vecBroadcast << std::endl;
129
130
1
	float expectedVec[] = 	{0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2,
131
				3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5,
132
				6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8,
133
				9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11};
134
1
	bool b(true);
135
1
	size_t nbVecRow(vecBroadcast.getFullNbRow()), nbVecCol(vecBroadcast.getNbCol());
136
5
	for(size_t i(0lu); i < nbVecRow; ++i){
137
52
		for(size_t j(0lu); j < nbVecCol; ++j){
138
48
			b &= vecBroadcast.getValue(i, j) == expectedVec[i*nbVecCol + j];
139
		}
140
	}
141
1
	std::cout << "Check vecBroadcast = " << b <<std::endl;
142
143
2
	return b;
144
}
145
146
1
int main(int argc, char** argv){
147
1
	bool b(true);
148
1
	b &= testTensorVectorReshuffle();
149
1
	b &= testTensorVectorReshuffle2();
150
1
	b &= testTensorBroadCastReshuffle();
151
1
	return b - 1;
152
}
153
154