ROOT logo
// $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