// $Id: $
/**************************************************************************
* This file is property of and copyright by the ALICE HLT Project *
* ALICE Experiment at CERN, All rights reserved. *
* *
* Primary Authors: Artur Szostak <artursz@iafrica.com> *
* 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 testAliHLTTriggerCounters.C
/// @author Artur Szostak <artursz@iafrica.com>
/// @date 28 Oct 2010
/// @brief Test program for the AliHLTTriggerCounters class.
///
#if !defined(__CINT__) || defined(__MAKECINT__)
#include "AliHLTTriggerCounters.h"
#include "TObjArray.h"
#include "TString.h"
#include "Riostream.h"
#endif
/**
* Tests basic functionality of the AliHLTTriggerCounters::AliCounter class.
*/
bool CheckCounterItemClass()
{
AliHLTTriggerCounters::AliCounter s1("s1", "counter one", 1, 0.1);
AliHLTTriggerCounters::AliCounter s2("s2", "counter two", 2, 0.2);
AliHLTTriggerCounters::AliCounter s3("s2", "counter two", 3, 0.2);
if (TString(s1.GetName()) != s1.Name())
{
cerr << "ERROR: AliHLTTriggerCounters::AliCounter::GetName() returns a different value than AliHLTTriggerCounters::AliCounter::Name()." << endl;
return false;
}
if (TString(s1.GetTitle()) != s1.Description())
{
cerr << "ERROR: AliHLTTriggerCounters::AliCounter::GetTitle() returns a different value than AliHLTTriggerCounters::AliCounter::Description()." << endl;
return false;
}
if (s2 == s3)
{
cerr << "ERROR: equals operator for AliHLTTriggerCounters::AliCounter returns the wrong value." << endl;
return false;
}
if (! s2.IsEqual(&s3))
{
cerr << "ERROR: AliHLTTriggerCounters::AliCounter::IsEqual returns the wrong value." << endl;
return false;
}
s2.Increment();
if (! (s2 == s3))
{
cerr << "ERROR: equals operator for AliHLTTriggerCounters::AliCounter returns the wrong value." << endl;
return false;
}
TObjArray list;
list.Add(&s2);
list.Add(&s1);
list.Sort();
if (TString(list.At(0)->GetName()) != "s1")
{
cerr << "ERROR: Sorting objects of type AliHLTTriggerCounters::AliCounter is not working correctly." << endl;
return false;
}
return true;
}
/**
* Tests functionality of the AliHLTTriggerCounters class.
*/
bool CheckCountersListClass()
{
AliHLTTriggerCounters s;
s.Add("a", "one", 1);
s.Add("b", "two", 2, 5);
if (s.NumberOfScalars() != 2)
{
cerr << "ERROR: The number of added counters is wrong for class AliHLTTriggerCounters." << endl;
return false;
}
if (! s.Exists("a"))
{
cerr << "ERROR: AliHLTTriggerCounters claims counter 'a' does not exist event though it was added." << endl;
return false;
}
if (! s.Exists("b"))
{
cerr << "ERROR: AliHLTTriggerCounters claims counter 'b' does not exist event though it was added." << endl;
return false;
}
s.Remove("a");
if (s.Exists("a"))
{
cerr << "ERROR: AliHLTTriggerCounters claims counter 'a' does not exist event though it was removed." << endl;
return false;
}
s.Add("a", "one", 1);
const AliHLTTriggerCounters& p = s;
if (p.GetCounter("a").Rate() != 1)
{
cerr << "ERROR: Constant version of AliHLTTriggerCounters::GetCounter(\"a\") returns the wrong counter object." << endl;
return false;
}
if (TString(p.GetCounter("c").Name()) != "" || TString(p.GetCounter("c").Description()) != "" || p.GetCounter("c").Rate() != 0 || p.GetCounter("c").Counter() != 0)
{
cerr << "ERROR: Constant version of AliHLTTriggerCounters::GetCounter(\"c\") does not return a sentinel object." << endl;
return false;
}
if (s.GetCounter("a").Rate() != 1)
{
cerr << "ERROR: AliHLTTriggerCounters::GetCounter(\"a\") returns the wrong counter object." << endl;
return false;
}
s.GetCounter("c").Value(3);
if (TString(s.GetCounter("c").Name()) != "c" || TString(s.GetCounter("c").Description()) != "")
{
cerr << "ERROR: AliHLTTriggerCounters::GetCounter(\"c\") does not create a new object." << endl;
return false;
}
s.Add("c", "three", 33, 7);
if (s.GetCounter("c").Rate() != 33 || s.GetCounter("c").Counter() != 7 || TString(s.GetCounter("c").Description()) != "")
{
cerr << "ERROR: AliHLTTriggerCounters::Add did not update an exisiting counter correctly." << endl;
return false;
}
if (TString(p.GetCounterN(0).Name()) != "b" || TString(p.GetCounterN(1).Name()) != "a" || TString(p.GetCounterN(2).Name()) != "c")
{
cerr << "ERROR: Constant version of AliHLTTriggerCounters::GetCounterN(0) returns the wrong counter object." << endl;
return false;
}
if (TString(s.GetCounterN(0).Name()) != "b" || TString(s.GetCounterN(1).Name()) != "a" || TString(s.GetCounterN(2).Name()) != "c")
{
cerr << "ERROR: AliHLTTriggerCounters::GetCounterN(0) returns the wrong counter object." << endl;
return false;
}
if (TString(p.GetCounterN(4).Name()) != "" || TString(p.GetCounterN(4).Description()) != "" || p.GetCounterN(4).Rate() != 0)
{
cerr << "ERROR: Constant version of AliHLTTriggerCounters::GetCounterN(4) returns the wrong counter object." << endl;
return false;
}
s.GetCounterN(4).Value(5);
if (TString(s.GetCounterN(4).Name()) != "Scalar4" || TString(s.GetCounterN(4).Description()) != "" || s.GetCounterN(4).Rate() != 5)
{
cerr << "ERROR: AliHLTTriggerCounters::GetCounterN(4) does not create a new counter object correctly." << endl;
return false;
}
if (TString(p.GetCounterN(3).Name()) != "Scalar3" || TString(p.GetCounterN(3).Description()) != "" || p.GetCounterN(3).Rate() != 0)
{
cerr << "ERROR: AliHLTTriggerCounters::GetCounterN(4) did not initialise the third counter as expected." << endl;
return false;
}
// The following is a special check to check for compilation ambiguity
// rather than runtime behaviour.
if (s[4].Rate() != s["Scalar4"].Rate())
{
cerr << "ERROR: AliHLTTriggerCounters::operator[](UInt_t) did not return the same value as AliHLTTriggerCounters::operator[](const char*)." << endl;
return false;
}
// Here we check to see that the AliHLTTriggerCounters::GetCounterN class correctly
// checks and finds an unused name.
s.Add("Scalar7", "six", 6, 2);
s.Add("Scalar7_0", "seven", 7, 3);
s.GetCounterN(7).Value(8);
if (! s.Exists("Scalar7_1") || s.GetCounterN(7).Rate() != 8 || s.GetCounter("Scalar7_1").Rate() != 8)
{
cerr << "ERROR: AliHLTTriggerCounters::GetCounterN is not creating a counter object with a unique name as expected." << endl;
return false;
}
// Check the copying of the object.
AliHLTTriggerCounters* c1 = (AliHLTTriggerCounters*) s.Clone();
AliHLTTriggerCounters c2;
c2 = s;
AliHLTTriggerCounters c3;
s.Copy(c3);
if (! (*c1 == s) || *c1 != s)
{
cerr << "ERROR: The equals operator of AliHLTTriggerCounters is not working as expected." << endl;
return false;
}
if (c2 != s)
{
cerr << "ERROR: The assignment operator of AliHLTTriggerCounters is not working as expected." << endl;
return false;
}
if (c3 != s)
{
cerr << "ERROR: The method AliHLTTriggerCounters::Copy is not working as expected." << endl;
return false;
}
c1->UpdateTimeStamp();
if (*c1 == s)
{
cerr << "ERROR: Modification of the time stamp for AliHLTTriggerCounters did not work as expected or comparison operator is not working." << endl;
return false;
}
delete c1;
// Now check the IsEqual and Reset methods:
if (! c2.IsEqual(&c3))
{
cerr << "ERROR: The AliHLTTriggerCounters::IsEqual method is not working as expected." << endl;
return false;
}
c3.Reset();
for (UInt_t i = 0; i < c3.NumberOfScalars(); ++i)
{
if (c3[i].Rate() != 0 || c3[i].Counter() != 0)
{
cerr << "ERROR: AliHLTTriggerCounters::Reset did not reset all counter values to zero." << endl;
return false;
}
if (TString(c3[i].Name()) != c2[i].Name())
{
cerr << "ERROR: AliHLTTriggerCounters::Reset modified the name by mistake." << endl;
return false;
}
if (TString(c3[i].Description()) != c2[i].Description())
{
cerr << "ERROR: AliHLTTriggerCounters::Reset modified the description by mistake." << endl;
return false;
}
}
if (! c2.IsEqual(&c3))
{
cerr << "ERROR: The AliHLTTriggerCounters::IsEqual method is not working as expected after call to Reset." << endl;
return false;
}
if (c2 == c3)
{
cerr << "ERROR: The equals operator for AliHLTTriggerCounters is not working as expected after call to Reset." << endl;
return false;
}
c2.Remove("c");
if (c2.IsEqual(&c3))
{
cerr << "ERROR: The AliHLTTriggerCounters::IsEqual method is not working as expected after call to Remove." << endl;
return false;
}
if (c2 == c3)
{
cerr << "ERROR: The equals operator for AliHLTTriggerCounters is not working as expected after call to Remove." << endl;
return false;
}
return true;
}
/**
* Runs the unit test for the AliHLTTriggerCounters class.
* \returns true if the class passed the test and false otherwise.
*/
bool testAliHLTTriggerCounters()
{
if (! CheckCounterItemClass()) return false;
if (! CheckCountersListClass()) return false;
return true;
}
#ifndef __MAKECINT__
int main(int /*argc*/, const char** /*argv*/)
{
bool resultOk = testAliHLTTriggerCounters();
if (not resultOk) return 1;
return 0;
}
#endif // __MAKECINT__
testAliHLTTriggerCounters.C:1 testAliHLTTriggerCounters.C:2 testAliHLTTriggerCounters.C:3 testAliHLTTriggerCounters.C:4 testAliHLTTriggerCounters.C:5 testAliHLTTriggerCounters.C:6 testAliHLTTriggerCounters.C:7 testAliHLTTriggerCounters.C:8 testAliHLTTriggerCounters.C:9 testAliHLTTriggerCounters.C:10 testAliHLTTriggerCounters.C:11 testAliHLTTriggerCounters.C:12 testAliHLTTriggerCounters.C:13 testAliHLTTriggerCounters.C:14 testAliHLTTriggerCounters.C:15 testAliHLTTriggerCounters.C:16 testAliHLTTriggerCounters.C:17 testAliHLTTriggerCounters.C:18 testAliHLTTriggerCounters.C:19 testAliHLTTriggerCounters.C:20 testAliHLTTriggerCounters.C:21 testAliHLTTriggerCounters.C:22 testAliHLTTriggerCounters.C:23 testAliHLTTriggerCounters.C:24 testAliHLTTriggerCounters.C:25 testAliHLTTriggerCounters.C:26 testAliHLTTriggerCounters.C:27 testAliHLTTriggerCounters.C:28 testAliHLTTriggerCounters.C:29 testAliHLTTriggerCounters.C:30 testAliHLTTriggerCounters.C:31 testAliHLTTriggerCounters.C:32 testAliHLTTriggerCounters.C:33 testAliHLTTriggerCounters.C:34 testAliHLTTriggerCounters.C:35 testAliHLTTriggerCounters.C:36 testAliHLTTriggerCounters.C:37 testAliHLTTriggerCounters.C:38 testAliHLTTriggerCounters.C:39 testAliHLTTriggerCounters.C:40 testAliHLTTriggerCounters.C:41 testAliHLTTriggerCounters.C:42 testAliHLTTriggerCounters.C:43 testAliHLTTriggerCounters.C:44 testAliHLTTriggerCounters.C:45 testAliHLTTriggerCounters.C:46 testAliHLTTriggerCounters.C:47 testAliHLTTriggerCounters.C:48 testAliHLTTriggerCounters.C:49 testAliHLTTriggerCounters.C:50 testAliHLTTriggerCounters.C:51 testAliHLTTriggerCounters.C:52 testAliHLTTriggerCounters.C:53 testAliHLTTriggerCounters.C:54 testAliHLTTriggerCounters.C:55 testAliHLTTriggerCounters.C:56 testAliHLTTriggerCounters.C:57 testAliHLTTriggerCounters.C:58 testAliHLTTriggerCounters.C:59 testAliHLTTriggerCounters.C:60 testAliHLTTriggerCounters.C:61 testAliHLTTriggerCounters.C:62 testAliHLTTriggerCounters.C:63 testAliHLTTriggerCounters.C:64 testAliHLTTriggerCounters.C:65 testAliHLTTriggerCounters.C:66 testAliHLTTriggerCounters.C:67 testAliHLTTriggerCounters.C:68 testAliHLTTriggerCounters.C:69 testAliHLTTriggerCounters.C:70 testAliHLTTriggerCounters.C:71 testAliHLTTriggerCounters.C:72 testAliHLTTriggerCounters.C:73 testAliHLTTriggerCounters.C:74 testAliHLTTriggerCounters.C:75 testAliHLTTriggerCounters.C:76 testAliHLTTriggerCounters.C:77 testAliHLTTriggerCounters.C:78 testAliHLTTriggerCounters.C:79 testAliHLTTriggerCounters.C:80 testAliHLTTriggerCounters.C:81 testAliHLTTriggerCounters.C:82 testAliHLTTriggerCounters.C:83 testAliHLTTriggerCounters.C:84 testAliHLTTriggerCounters.C:85 testAliHLTTriggerCounters.C:86 testAliHLTTriggerCounters.C:87 testAliHLTTriggerCounters.C:88 testAliHLTTriggerCounters.C:89 testAliHLTTriggerCounters.C:90 testAliHLTTriggerCounters.C:91 testAliHLTTriggerCounters.C:92 testAliHLTTriggerCounters.C:93 testAliHLTTriggerCounters.C:94 testAliHLTTriggerCounters.C:95 testAliHLTTriggerCounters.C:96 testAliHLTTriggerCounters.C:97 testAliHLTTriggerCounters.C:98 testAliHLTTriggerCounters.C:99 testAliHLTTriggerCounters.C:100 testAliHLTTriggerCounters.C:101 testAliHLTTriggerCounters.C:102 testAliHLTTriggerCounters.C:103 testAliHLTTriggerCounters.C:104 testAliHLTTriggerCounters.C:105 testAliHLTTriggerCounters.C:106 testAliHLTTriggerCounters.C:107 testAliHLTTriggerCounters.C:108 testAliHLTTriggerCounters.C:109 testAliHLTTriggerCounters.C:110 testAliHLTTriggerCounters.C:111 testAliHLTTriggerCounters.C:112 testAliHLTTriggerCounters.C:113 testAliHLTTriggerCounters.C:114 testAliHLTTriggerCounters.C:115 testAliHLTTriggerCounters.C:116 testAliHLTTriggerCounters.C:117 testAliHLTTriggerCounters.C:118 testAliHLTTriggerCounters.C:119 testAliHLTTriggerCounters.C:120 testAliHLTTriggerCounters.C:121 testAliHLTTriggerCounters.C:122 testAliHLTTriggerCounters.C:123 testAliHLTTriggerCounters.C:124 testAliHLTTriggerCounters.C:125 testAliHLTTriggerCounters.C:126 testAliHLTTriggerCounters.C:127 testAliHLTTriggerCounters.C:128 testAliHLTTriggerCounters.C:129 testAliHLTTriggerCounters.C:130 testAliHLTTriggerCounters.C:131 testAliHLTTriggerCounters.C:132 testAliHLTTriggerCounters.C:133 testAliHLTTriggerCounters.C:134 testAliHLTTriggerCounters.C:135 testAliHLTTriggerCounters.C:136 testAliHLTTriggerCounters.C:137 testAliHLTTriggerCounters.C:138 testAliHLTTriggerCounters.C:139 testAliHLTTriggerCounters.C:140 testAliHLTTriggerCounters.C:141 testAliHLTTriggerCounters.C:142 testAliHLTTriggerCounters.C:143 testAliHLTTriggerCounters.C:144 testAliHLTTriggerCounters.C:145 testAliHLTTriggerCounters.C:146 testAliHLTTriggerCounters.C:147 testAliHLTTriggerCounters.C:148 testAliHLTTriggerCounters.C:149 testAliHLTTriggerCounters.C:150 testAliHLTTriggerCounters.C:151 testAliHLTTriggerCounters.C:152 testAliHLTTriggerCounters.C:153 testAliHLTTriggerCounters.C:154 testAliHLTTriggerCounters.C:155 testAliHLTTriggerCounters.C:156 testAliHLTTriggerCounters.C:157 testAliHLTTriggerCounters.C:158 testAliHLTTriggerCounters.C:159 testAliHLTTriggerCounters.C:160 testAliHLTTriggerCounters.C:161 testAliHLTTriggerCounters.C:162 testAliHLTTriggerCounters.C:163 testAliHLTTriggerCounters.C:164 testAliHLTTriggerCounters.C:165 testAliHLTTriggerCounters.C:166 testAliHLTTriggerCounters.C:167 testAliHLTTriggerCounters.C:168 testAliHLTTriggerCounters.C:169 testAliHLTTriggerCounters.C:170 testAliHLTTriggerCounters.C:171 testAliHLTTriggerCounters.C:172 testAliHLTTriggerCounters.C:173 testAliHLTTriggerCounters.C:174 testAliHLTTriggerCounters.C:175 testAliHLTTriggerCounters.C:176 testAliHLTTriggerCounters.C:177 testAliHLTTriggerCounters.C:178 testAliHLTTriggerCounters.C:179 testAliHLTTriggerCounters.C:180 testAliHLTTriggerCounters.C:181 testAliHLTTriggerCounters.C:182 testAliHLTTriggerCounters.C:183 testAliHLTTriggerCounters.C:184 testAliHLTTriggerCounters.C:185 testAliHLTTriggerCounters.C:186 testAliHLTTriggerCounters.C:187 testAliHLTTriggerCounters.C:188 testAliHLTTriggerCounters.C:189 testAliHLTTriggerCounters.C:190 testAliHLTTriggerCounters.C:191 testAliHLTTriggerCounters.C:192 testAliHLTTriggerCounters.C:193 testAliHLTTriggerCounters.C:194 testAliHLTTriggerCounters.C:195 testAliHLTTriggerCounters.C:196 testAliHLTTriggerCounters.C:197 testAliHLTTriggerCounters.C:198 testAliHLTTriggerCounters.C:199 testAliHLTTriggerCounters.C:200 testAliHLTTriggerCounters.C:201 testAliHLTTriggerCounters.C:202 testAliHLTTriggerCounters.C:203 testAliHLTTriggerCounters.C:204 testAliHLTTriggerCounters.C:205 testAliHLTTriggerCounters.C:206 testAliHLTTriggerCounters.C:207 testAliHLTTriggerCounters.C:208 testAliHLTTriggerCounters.C:209 testAliHLTTriggerCounters.C:210 testAliHLTTriggerCounters.C:211 testAliHLTTriggerCounters.C:212 testAliHLTTriggerCounters.C:213 testAliHLTTriggerCounters.C:214 testAliHLTTriggerCounters.C:215 testAliHLTTriggerCounters.C:216 testAliHLTTriggerCounters.C:217 testAliHLTTriggerCounters.C:218 testAliHLTTriggerCounters.C:219 testAliHLTTriggerCounters.C:220 testAliHLTTriggerCounters.C:221 testAliHLTTriggerCounters.C:222 testAliHLTTriggerCounters.C:223 testAliHLTTriggerCounters.C:224 testAliHLTTriggerCounters.C:225 testAliHLTTriggerCounters.C:226 testAliHLTTriggerCounters.C:227 testAliHLTTriggerCounters.C:228 testAliHLTTriggerCounters.C:229 testAliHLTTriggerCounters.C:230 testAliHLTTriggerCounters.C:231 testAliHLTTriggerCounters.C:232 testAliHLTTriggerCounters.C:233 testAliHLTTriggerCounters.C:234 testAliHLTTriggerCounters.C:235 testAliHLTTriggerCounters.C:236 testAliHLTTriggerCounters.C:237 testAliHLTTriggerCounters.C:238 testAliHLTTriggerCounters.C:239 testAliHLTTriggerCounters.C:240 testAliHLTTriggerCounters.C:241 testAliHLTTriggerCounters.C:242 testAliHLTTriggerCounters.C:243 testAliHLTTriggerCounters.C:244 testAliHLTTriggerCounters.C:245 testAliHLTTriggerCounters.C:246 testAliHLTTriggerCounters.C:247 testAliHLTTriggerCounters.C:248 testAliHLTTriggerCounters.C:249 testAliHLTTriggerCounters.C:250 testAliHLTTriggerCounters.C:251 testAliHLTTriggerCounters.C:252 testAliHLTTriggerCounters.C:253 testAliHLTTriggerCounters.C:254 testAliHLTTriggerCounters.C:255 testAliHLTTriggerCounters.C:256 testAliHLTTriggerCounters.C:257 testAliHLTTriggerCounters.C:258 testAliHLTTriggerCounters.C:259 testAliHLTTriggerCounters.C:260 testAliHLTTriggerCounters.C:261 testAliHLTTriggerCounters.C:262 testAliHLTTriggerCounters.C:263 testAliHLTTriggerCounters.C:264 testAliHLTTriggerCounters.C:265 testAliHLTTriggerCounters.C:266 testAliHLTTriggerCounters.C:267 testAliHLTTriggerCounters.C:268 testAliHLTTriggerCounters.C:269 testAliHLTTriggerCounters.C:270 testAliHLTTriggerCounters.C:271 testAliHLTTriggerCounters.C:272 testAliHLTTriggerCounters.C:273 testAliHLTTriggerCounters.C:274 testAliHLTTriggerCounters.C:275 testAliHLTTriggerCounters.C:276 testAliHLTTriggerCounters.C:277 testAliHLTTriggerCounters.C:278 testAliHLTTriggerCounters.C:279 testAliHLTTriggerCounters.C:280 testAliHLTTriggerCounters.C:281 testAliHLTTriggerCounters.C:282 testAliHLTTriggerCounters.C:283 testAliHLTTriggerCounters.C:284