// $Id$
/**************************************************************************
* This file is property of and copyright by the ALICE HLT Project *
* ALICE Experiment at CERN, All rights reserved. *
* *
* Primary Authors: Matthias Richter <Matthias.Richter@ift.uib.no> *
* for The ALICE HLT Project. *
* *
* Permission to use, copy, modify and distribute this software and its *
* documentation strictly for non-commercial purposes is hereby granted *
* without fee, provided that the above copyright notice appears in all *
* copies and that both the copyright notice and this permission notice *
* appear in the supporting documentation. The authors make no claims *
* about the suitability of this software for any purpose. It is *
* provided "as is" without express or implied warranty. *
**************************************************************************/
/** @file testAliHLTBlockDataCollection.C
@author Matthias Richter
@date
@brief Test macro/program for the AliHLTBlockDataCollection
*/
#ifndef __CINT__
#include <ostream>
#include <vector>
#include "AliHLTBlockDataCollection.h"
#include "AliHLTComponent.h"
#else
#define EINVAL 22
#define EPROTO 71
#endif //__CINT__
typedef struct init_t {
const char* arguments;
int result;
} init_t;
typedef struct select_t {
const char* id;
const char* origin;
UInt_t specification;
int result;
} select_t;
init_t gInits[]={
{"-datatype 'ESD_TREE' 'TPC ' ", 3},
{"-datatype 'ESD_TREE' 'TPC ' "
"-origin PHOS "
"-verbosity "
"-origin 'TRD ' "
"-dataspec 0xdeadbeef ", 9},
{"-datatype 'ESD_TREE'", -EPROTO},
{NULL, 0}
};
select_t gSelections[]={
{"ESD_TREE", "TPC ", 0, 1},
{"DDL_RAW ", "TPC ", 0xaffe, 0},
{"ESD_TREE", "TRD ", 0xaffe, 0},
{"ESD_TREE", "TRD ", 0xdeadbeef, 1},
{NULL, NULL, 0, 0}
};
int gVerbosity=0;
int InitCollection(AliHLTBlockDataCollection& collection, const char* init)
{
// build argument vector
int iResult=0;
char* arguments=new char[strlen(init)+1];
strcpy(arguments, init);
vector<int> positions;
bool bQuote=false;
int i=0;
int iStart=0;
for (;arguments[i]!=0; i++) {
if (arguments[i]=='\'') {
if ((bQuote=(!bQuote))) {
// opening quote, set start
} else {
// closing quote, add argument
arguments[i]=0;
if (i-iStart>0) positions.push_back(iStart);
}
iStart=i+1;
} else if ((arguments[i]==' ' && !bQuote) ||
arguments[i]==0) {
arguments[i]=0;
if (i-iStart>0) positions.push_back(iStart);
iStart=i+1;
}
}
if (i-iStart>0) positions.push_back(iStart);
int argc=positions.size();
const char** argv=new const char*[argc];
for (int j=0; j<argc ; j++) {
argv[j]=&arguments[positions[j]];
}
// test argument scan
for (i=0; i<argc; i++) {
if (gVerbosity>1) cout << "scanning " << argc-i << " arguments: " << argv[i] << endl;
int result=collection.ScanArgument(argc-i, &argv[i]);
if (result>0) {
iResult+=result;
i+=result-1;
} else if (result<0) {
iResult=result;
break;
}
}
// cleanup
delete [] argv;
delete [] arguments;
return iResult;
}
int testAliHLTBlockDataCollection(int verbosity=0)
{
gVerbosity=verbosity;
AliHLTBlockDataCollection collection;
for (int initNo=0; gInits[initNo].arguments!=NULL; initNo++) {
if (gVerbosity>0) cout << "checking: " << gInits[initNo].arguments << endl;
int result=InitCollection(collection, gInits[initNo].arguments);
if (result!=gInits[initNo].result) {
cerr << "failed: " << initNo << " (" << gInits[initNo].arguments << ") " << ": result " << result << ", expected " << gInits[initNo].result << endl;
return -1;
} else {
if (gVerbosity>1) cout << "init " << initNo << " (" << gInits[initNo].arguments << ") " << "succeeded: result " << result << endl;
}
}
AliHLTComponentBlockData bd;
AliHLTComponent::FillBlockData(bd);
for (int selectNo=0; gSelections[selectNo].id!=NULL; selectNo++) {
AliHLTComponent::SetDataType(bd.fDataType, gSelections[selectNo].id, gSelections[selectNo].origin );
bd.fSpecification=gSelections[selectNo].specification;
int result=collection.IsSelected(bd);
if (result!=gSelections[selectNo].result) {
cerr << "failed: block " << gSelections[selectNo].id << ":" << gSelections[selectNo].origin << " 0x" << hex << gSelections[selectNo].specification << ": result " << result << ", expected " << gSelections[selectNo].result << endl;
return -1;
} else {
if (gVerbosity>0) cout << "checking: block " << gSelections[selectNo].id << ":" << gSelections[selectNo].origin << " 0x" << hex << gSelections[selectNo].specification << (result==1?" selected":" not selected") << " (correctly)" << endl;
}
}
return 0;
}
int main(int /*argc*/, const char** /*argv*/)
{
int iResult=0;
if ((iResult=testAliHLTBlockDataCollection(1))<0) {
cerr << "<<<<< re-run with higher verbosity >>>>>>>" << endl;
testAliHLTBlockDataCollection(2);
}
return iResult;
}
testAliHLTBlockDataCollection.C:1 testAliHLTBlockDataCollection.C:2 testAliHLTBlockDataCollection.C:3 testAliHLTBlockDataCollection.C:4 testAliHLTBlockDataCollection.C:5 testAliHLTBlockDataCollection.C:6 testAliHLTBlockDataCollection.C:7 testAliHLTBlockDataCollection.C:8 testAliHLTBlockDataCollection.C:9 testAliHLTBlockDataCollection.C:10 testAliHLTBlockDataCollection.C:11 testAliHLTBlockDataCollection.C:12 testAliHLTBlockDataCollection.C:13 testAliHLTBlockDataCollection.C:14 testAliHLTBlockDataCollection.C:15 testAliHLTBlockDataCollection.C:16 testAliHLTBlockDataCollection.C:17 testAliHLTBlockDataCollection.C:18 testAliHLTBlockDataCollection.C:19 testAliHLTBlockDataCollection.C:20 testAliHLTBlockDataCollection.C:21 testAliHLTBlockDataCollection.C:22 testAliHLTBlockDataCollection.C:23 testAliHLTBlockDataCollection.C:24 testAliHLTBlockDataCollection.C:25 testAliHLTBlockDataCollection.C:26 testAliHLTBlockDataCollection.C:27 testAliHLTBlockDataCollection.C:28 testAliHLTBlockDataCollection.C:29 testAliHLTBlockDataCollection.C:30 testAliHLTBlockDataCollection.C:31 testAliHLTBlockDataCollection.C:32 testAliHLTBlockDataCollection.C:33 testAliHLTBlockDataCollection.C:34 testAliHLTBlockDataCollection.C:35 testAliHLTBlockDataCollection.C:36 testAliHLTBlockDataCollection.C:37 testAliHLTBlockDataCollection.C:38 testAliHLTBlockDataCollection.C:39 testAliHLTBlockDataCollection.C:40 testAliHLTBlockDataCollection.C:41 testAliHLTBlockDataCollection.C:42 testAliHLTBlockDataCollection.C:43 testAliHLTBlockDataCollection.C:44 testAliHLTBlockDataCollection.C:45 testAliHLTBlockDataCollection.C:46 testAliHLTBlockDataCollection.C:47 testAliHLTBlockDataCollection.C:48 testAliHLTBlockDataCollection.C:49 testAliHLTBlockDataCollection.C:50 testAliHLTBlockDataCollection.C:51 testAliHLTBlockDataCollection.C:52 testAliHLTBlockDataCollection.C:53 testAliHLTBlockDataCollection.C:54 testAliHLTBlockDataCollection.C:55 testAliHLTBlockDataCollection.C:56 testAliHLTBlockDataCollection.C:57 testAliHLTBlockDataCollection.C:58 testAliHLTBlockDataCollection.C:59 testAliHLTBlockDataCollection.C:60 testAliHLTBlockDataCollection.C:61 testAliHLTBlockDataCollection.C:62 testAliHLTBlockDataCollection.C:63 testAliHLTBlockDataCollection.C:64 testAliHLTBlockDataCollection.C:65 testAliHLTBlockDataCollection.C:66 testAliHLTBlockDataCollection.C:67 testAliHLTBlockDataCollection.C:68 testAliHLTBlockDataCollection.C:69 testAliHLTBlockDataCollection.C:70 testAliHLTBlockDataCollection.C:71 testAliHLTBlockDataCollection.C:72 testAliHLTBlockDataCollection.C:73 testAliHLTBlockDataCollection.C:74 testAliHLTBlockDataCollection.C:75 testAliHLTBlockDataCollection.C:76 testAliHLTBlockDataCollection.C:77 testAliHLTBlockDataCollection.C:78 testAliHLTBlockDataCollection.C:79 testAliHLTBlockDataCollection.C:80 testAliHLTBlockDataCollection.C:81 testAliHLTBlockDataCollection.C:82 testAliHLTBlockDataCollection.C:83 testAliHLTBlockDataCollection.C:84 testAliHLTBlockDataCollection.C:85 testAliHLTBlockDataCollection.C:86 testAliHLTBlockDataCollection.C:87 testAliHLTBlockDataCollection.C:88 testAliHLTBlockDataCollection.C:89 testAliHLTBlockDataCollection.C:90 testAliHLTBlockDataCollection.C:91 testAliHLTBlockDataCollection.C:92 testAliHLTBlockDataCollection.C:93 testAliHLTBlockDataCollection.C:94 testAliHLTBlockDataCollection.C:95 testAliHLTBlockDataCollection.C:96 testAliHLTBlockDataCollection.C:97 testAliHLTBlockDataCollection.C:98 testAliHLTBlockDataCollection.C:99 testAliHLTBlockDataCollection.C:100 testAliHLTBlockDataCollection.C:101 testAliHLTBlockDataCollection.C:102 testAliHLTBlockDataCollection.C:103 testAliHLTBlockDataCollection.C:104 testAliHLTBlockDataCollection.C:105 testAliHLTBlockDataCollection.C:106 testAliHLTBlockDataCollection.C:107 testAliHLTBlockDataCollection.C:108 testAliHLTBlockDataCollection.C:109 testAliHLTBlockDataCollection.C:110 testAliHLTBlockDataCollection.C:111 testAliHLTBlockDataCollection.C:112 testAliHLTBlockDataCollection.C:113 testAliHLTBlockDataCollection.C:114 testAliHLTBlockDataCollection.C:115 testAliHLTBlockDataCollection.C:116 testAliHLTBlockDataCollection.C:117 testAliHLTBlockDataCollection.C:118 testAliHLTBlockDataCollection.C:119 testAliHLTBlockDataCollection.C:120 testAliHLTBlockDataCollection.C:121 testAliHLTBlockDataCollection.C:122 testAliHLTBlockDataCollection.C:123 testAliHLTBlockDataCollection.C:124 testAliHLTBlockDataCollection.C:125 testAliHLTBlockDataCollection.C:126 testAliHLTBlockDataCollection.C:127 testAliHLTBlockDataCollection.C:128 testAliHLTBlockDataCollection.C:129 testAliHLTBlockDataCollection.C:130 testAliHLTBlockDataCollection.C:131 testAliHLTBlockDataCollection.C:132 testAliHLTBlockDataCollection.C:133 testAliHLTBlockDataCollection.C:134 testAliHLTBlockDataCollection.C:135 testAliHLTBlockDataCollection.C:136 testAliHLTBlockDataCollection.C:137 testAliHLTBlockDataCollection.C:138 testAliHLTBlockDataCollection.C:139 testAliHLTBlockDataCollection.C:140 testAliHLTBlockDataCollection.C:141 testAliHLTBlockDataCollection.C:142 testAliHLTBlockDataCollection.C:143 testAliHLTBlockDataCollection.C:144 testAliHLTBlockDataCollection.C:145 testAliHLTBlockDataCollection.C:146 testAliHLTBlockDataCollection.C:147 testAliHLTBlockDataCollection.C:148 testAliHLTBlockDataCollection.C:149 testAliHLTBlockDataCollection.C:150 testAliHLTBlockDataCollection.C:151 testAliHLTBlockDataCollection.C:152 testAliHLTBlockDataCollection.C:153 testAliHLTBlockDataCollection.C:154 testAliHLTBlockDataCollection.C:155 testAliHLTBlockDataCollection.C:156 testAliHLTBlockDataCollection.C:157 testAliHLTBlockDataCollection.C:158 testAliHLTBlockDataCollection.C:159 testAliHLTBlockDataCollection.C:160 testAliHLTBlockDataCollection.C:161 testAliHLTBlockDataCollection.C:162 testAliHLTBlockDataCollection.C:163 testAliHLTBlockDataCollection.C:164 testAliHLTBlockDataCollection.C:165