21 cout <<
"==========================" << endl;
22 cout <<
"Unit test of CbmStsAddress" << endl;
23 cout <<
"==========================" << endl;
28 cout <<
"Number of STS levels ( " << nLevels <<
" ) is larger than 10." << endl;
29 cout <<
"Please adjust size of static arrays in this macro." << endl;
40 Int_t elementId[10], newElementId[10];
41 UInt_t address, newAddress;
44 for (
Int_t level = 0; level < nLevels; level++)
54 cout <<
"Test 1: elementId -> address, number of tests " << nTests << endl;
60 for (
Int_t iTest = 0; iTest < nTests; iTest++) {
63 for (
Int_t level = 1; level < nLevels; level++) {
64 Int_t range = (1 << bitField[level]) - 1;
65 elementId[level] =
gRandom->Integer(range + 1);
71 elementId[6], elementId[7]);
78 cout <<
"\rTest " << setw(6) << iTest + 1 <<
", address 1 " << setw(10) << address <<
", address 2 " << setw(10)
79 << newAddress << std::flush;
80 if (newAddress == address)
89 cout <<
"Tests passed: " << pass <<
", failed " << fail << endl;
90 cout <<
"Total time per test: CPU " << 1.e6 * watch1.
CpuTime() /
Double_t(nTests) <<
" mus, Real "
92 cout <<
"Core time per test: CPU " << 1.e6 * watch2.
CpuTime() /
Double_t(nTests) <<
" mus, Real "
101 cout << endl << endl;
102 cout <<
"Test 2: elementId -> address -> elementId, number of tests " << nTests << endl;
108 for (
Int_t iTest = 0; iTest < nTests; iTest++) {
111 for (
Int_t level = 1; level < nLevels; level++) {
112 Int_t range = (1 << bitField[level]) - 1;
113 elementId[level] =
gRandom->Integer(range + 1);
119 elementId[6], elementId[7]);
122 for (
Int_t level = 0; level < nLevels; level++)
128 for (
Int_t level = 1; level < nLevels; level++)
129 if (newElementId[level] != elementId[level]) {
130 cout <<
"Failure: level " << level <<
", generated Id " << elementId[level] <<
", converted Id "
131 << newElementId[level] << endl;
138 cout <<
"\rTest " << setw(6) << iTest + 1 <<
", old Ids: ";
139 for (
Int_t level = 1; level < nLevels; level++)
140 cout << elementId[level] <<
" ";
141 cout <<
", new Ids: ";
142 for (
Int_t level = 1; level < nLevels; level++)
143 cout << newElementId[level] <<
" ";
144 cout <<
" " << flush;
150 cout <<
"Tests passed: " << pass <<
", failed " << fail << endl;
151 cout <<
"Total time per test: CPU " << 1.e6 * watch1.
CpuTime() /
Double_t(nTests) <<
" mus, Real "
153 cout <<
"Core time per test: CPU " << 1.e6 * watch2.
CpuTime() /
Double_t(nTests) <<
" mus, Real "
162 cout << endl << endl;
163 cout <<
"Test 3: address-> elementId -> address, number of tests " << nTests << endl;
169 for (
Int_t iTest = 0; iTest < nTests; iTest++) {
172 Int_t nBits = 32 - bitField[0];
173 address = (
gRandom->Integer(1 << nBits) << bitField[0]) | 2;
177 for (
Int_t level = 0; level < nLevels; level++)
182 elementId[6], elementId[7]);
186 cout <<
"\rTest " << setw(6) << iTest + 1 <<
", old address " << setw(10) << address <<
", new address "
187 << setw(10) << newAddress << std::flush;
188 if (newAddress == address)
197 cout <<
"Tests passed: " << pass <<
", failed " << fail << endl;
198 cout <<
"Total time per test: CPU " << 1.e6 * watch1.
CpuTime() /
Double_t(nTests) <<
" mus, Real "
200 cout <<
"Core time per test: CPU " << 1.e6 * watch2.
CpuTime() /
Double_t(nTests) <<
" mus, Real "
209 cout << endl << endl;
210 cout <<
"Test 4: elementId -> address -> SetElementId, number of tests " << nTests << endl;
216 for (
Int_t iTest = 0; iTest < nTests; iTest++) {
219 for (
Int_t level = 1; level < nLevels; level++) {
220 Int_t range = (1 << bitField[level]) - 1;
221 elementId[level] =
gRandom->Integer(range + 1);
226 Int_t range = (1 << bitField[changeLevel]) - 1;
232 elementId[6], elementId[7]);
238 for (
Int_t level = 0; level < nLevels; level++)
244 for (
Int_t level = 1; level < nLevels; level++) {
246 if (level == changeLevel)
249 testId = elementId[level];
250 if (newElementId[level] != testId) {
251 cout <<
"Failure: level " << level <<
", generated Id " << testId <<
", converted Id "
252 << newElementId[level] << endl;
260 cout <<
"\rTest " << setw(6) << iTest + 1 <<
", old Ids: ";
261 for (
Int_t level = 1; level < nLevels; level++)
262 cout << elementId[level] <<
" ";
263 cout <<
", change level " << changeLevel <<
" to id " << newId;
264 cout <<
", new Ids: ";
265 for (
Int_t level = 1; level < nLevels; level++)
266 cout << newElementId[level] <<
" ";
267 cout <<
" " << flush;
273 cout <<
"Tests passed: " << pass <<
", failed " << fail << endl;
274 cout <<
"Total time per test: CPU " << 1.e6 * watch1.
CpuTime() /
Double_t(nTests) <<
" mus, Real "
276 cout <<
"Core time per test: CPU " << 1.e6 * watch2.
CpuTime() /
Double_t(nTests) <<
" mus, Real "
285 cout << endl << endl;
286 cout <<
"Test 5: overflow in GetAddress" << endl;
289 for (
Int_t level = 1; level < nLevels; level++) {
290 Int_t range = (1 << bitField[level]) - 1;
291 elementId[level] =
gRandom->Integer(range + 1);
296 Int_t range = (1 << bitField[checkLevel]) - 1;
297 elementId[checkLevel] = range + 1;
301 elementId[6], elementId[7]);
307 cout <<
"Addresses are " << address <<
" " << newAddress;
308 if (address + newAddress) {
310 cout <<
" : FAILED" << endl;
312 cout <<
" : OK" << endl;
318 cout << endl << endl;
319 cout <<
"Test 6: overflow in SetElementId" << endl;
322 Int_t nBits = 32 - bitField[0];
323 address = (
gRandom->Integer(1 << nBits) << bitField[0]) | 2;
327 Int_t range = (1 << bitField[checkLevel]) - 1;
328 Int_t newId = range + 1;
334 cout <<
"New address is " << newAddress;
337 cout <<
" : FAILED" << endl;
339 cout <<
" : OK" << endl;
344 cout << endl << endl;
345 cout <<
"Time consumed: CPU " << timer.
CpuTime() <<
" s, real " << timer.
RealTime() <<
" s" << endl;
346 cout <<
"Test status: ";
348 cout <<
" PASSED" << endl << endl;
351 cout <<
" FAILED" << endl << endl;