20 #include "ns3/object.h" 21 #include "ns3/boolean.h" 22 #include "ns3/integer.h" 23 #include "ns3/uinteger.h" 24 #include "ns3/config.h" 26 #include "ns3/string.h" 27 #include "ns3/random-variable-stream.h" 28 #include "ns3/double.h" 29 #include "ns3/object-vector.h" 30 #include "ns3/object-map.h" 31 #include "ns3/traced-value.h" 32 #include "ns3/callback.h" 33 #include "ns3/trace-source-accessor.h" 34 #include "ns3/pointer.h" 35 #include "ns3/object-factory.h" 36 #include "ns3/nstime.h" 106 .SetParent<Object> ()
107 .HideFromDocumentation ()
108 .AddAttribute (
"TestBoolName",
"help text",
112 .AddAttribute (
"TestBoolA",
"help text",
117 .AddAttribute (
"TestInt16",
"help text",
120 MakeIntegerChecker<int16_t> ())
121 .AddAttribute (
"TestInt16WithBounds",
"help text",
124 MakeIntegerChecker<int16_t> (-5, 10))
125 .AddAttribute (
"TestInt16SetGet",
"help text",
129 MakeIntegerChecker<int16_t> ())
130 .AddAttribute (
"TestUint8",
"help text",
133 MakeUintegerChecker<uint8_t> ())
134 .AddAttribute (
"TestEnum",
"help text",
140 .AddAttribute (
"TestEnumSetGet",
"help text",
147 .AddAttribute (
"TestRandom",
"help text",
148 StringValue (
"ns3::ConstantRandomVariable[Constant=1.0]"),
150 MakePointerChecker <RandomVariableStream>())
151 .AddAttribute (
"TestFloat",
"help text",
154 MakeDoubleChecker<float> ())
155 .AddAttribute (
"TestVector1",
"help text",
158 MakeObjectVectorChecker<Derived> ())
159 .AddAttribute (
"TestVector2",
"help text",
163 MakeObjectVectorChecker<Derived> ())
164 .AddAttribute (
"TestMap1",
"help text",
167 MakeObjectMapChecker<Derived> ())
168 .AddAttribute (
"IntegerTraceSource1",
"help text",
171 MakeIntegerChecker<int8_t> ())
172 .AddAttribute (
"IntegerTraceSource2",
"help text",
176 MakeIntegerChecker<int8_t> ())
177 .AddAttribute (
"UIntegerTraceSource",
"help text",
180 MakeIntegerChecker<uint8_t> ())
181 .AddAttribute (
"DoubleTraceSource",
"help text",
184 MakeDoubleChecker<double> ())
185 .AddAttribute (
"BoolTraceSource",
"help text",
189 .AddAttribute (
"EnumTraceSource",
"help text",
193 .AddAttribute (
"ValueClassSource",
"help text",
197 .AddTraceSource (
"Source1",
"help test",
199 "ns3::TracedValueCallback::Int8")
200 .AddTraceSource (
"Source2",
"help text",
202 "ns3::AttributeObjectTest::NumericTracedCallback")
203 .AddTraceSource (
"ValueSource",
"help text",
205 "ns3::ValueClassTest::TracedValueCallback")
206 .AddAttribute (
"Pointer",
"help text",
209 MakePointerChecker<Derived> ())
210 .AddAttribute (
"PointerInitialized",
"help text",
213 MakePointerChecker<Derived> ())
214 .AddAttribute (
"PointerInitialized2",
"help text",
217 MakePointerChecker<Derived> ())
218 .AddAttribute (
"Callback",
"help text",
222 .AddAttribute (
"TestTimeWithBounds",
"help text",
244 void AddToVector1 (
void) { m_vector1.push_back (CreateObject<Derived> ()); }
245 void AddToVector2 (
void) { m_vector2.push_back (CreateObject<Derived> ()); }
249 void InvokeCb (
double a,
int b,
float c) { m_cb (a,b,c); }
253 if (!m_cbValue.IsNull ()) {
282 std::map <uint32_t, Ptr<Derived> >
m_map1;
287 typedef void (* NumericTracedCallback) (double, int, float);
306 template <
typename T>
314 virtual void DoRun (
void);
316 bool CheckGetCodePaths (
Ptr<Object> p, std::string attributeName, std::string expectedString, T expectedValue);
319 template <
typename T>
325 template <
typename T>
330 template <
typename T>
bool 333 std::string attributeName,
334 std::string expectedString,
344 bool ok2 = stringValue.
Get () == expectedString;
350 bool ok4 = expectedValue.Get () == actualValue.Get ();
352 return ok1 && ok2 && ok3 && ok4;
364 p = CreateObject<AttributeObjectTest> ();
372 p = CreateObject<AttributeObjectTest> ();
375 ok = CheckGetCodePaths (p,
"TestBoolName",
"true",
BooleanValue (
true));
384 p = CreateObject<AttributeObjectTest> ();
387 ok = CheckGetCodePaths (p,
"TestBoolName",
"false",
BooleanValue (
false));
396 ok = CheckGetCodePaths (p,
"TestBoolName",
"true",
BooleanValue (
true));
397 NS_TEST_ASSERT_MSG_EQ (ok,
true,
"Attribute not set properly by SetAttributeFailSafe() via StringValue");
405 ok = CheckGetCodePaths (p,
"TestBoolName",
"false",
BooleanValue (
false));
406 NS_TEST_ASSERT_MSG_EQ (ok,
true,
"Attribute not set properly by SetAttributeFailSafe() via StringValue");
411 p = CreateObject<AttributeObjectTest> ();
423 ok = CheckGetCodePaths (p,
"TestBoolA",
"true",
BooleanValue (
true));
424 NS_TEST_ASSERT_MSG_EQ (ok,
true,
"Attribute not set properly by SetAttributeFailSafe() (getter/setter) via StringValue");
432 ok = CheckGetCodePaths (p,
"TestBoolA",
"false",
BooleanValue (
false));
433 NS_TEST_ASSERT_MSG_EQ (ok,
true,
"Attribute not set properly by SetAttributeFailSafe() (getter/setter) via StringValue");
442 p = CreateObject<AttributeObjectTest> ();
449 ok = CheckGetCodePaths (p,
"TestInt16",
"-2",
IntegerValue (-2));
458 ok = CheckGetCodePaths (p,
"TestInt16",
"-5",
IntegerValue (-5));
459 NS_TEST_ASSERT_MSG_EQ (ok,
true,
"Attribute not set properly by SetAttributeFailSafe() via StringValue");
467 ok = CheckGetCodePaths (p,
"TestInt16",
"2",
IntegerValue (2));
468 NS_TEST_ASSERT_MSG_EQ (ok,
true,
"Attribute not set properly by SetAttributeFailSafe() via StringValue");
476 ok = CheckGetCodePaths (p,
"TestInt16",
"-32768",
IntegerValue (-32768));
477 NS_TEST_ASSERT_MSG_EQ (ok,
true,
"Attribute not set properly by SetAttributeFailSafe() (most negative) via StringValue");
484 NS_TEST_ASSERT_MSG_EQ (ok,
false,
"Unexpectedly could SetAttributeFailSafe() via StringValue to -32769");
486 ok = CheckGetCodePaths (p,
"TestInt16",
"-32768",
IntegerValue (-32768));
495 ok = CheckGetCodePaths (p,
"TestInt16",
"32767",
IntegerValue (32767));
496 NS_TEST_ASSERT_MSG_EQ (ok,
true,
"Attribute not set properly by SetAttributeFailSafe() (most positive) via StringValue");
503 NS_TEST_ASSERT_MSG_EQ (ok,
false,
"Unexpectedly could SetAttributeFailSafe() via StringValue to 32768");
505 ok = CheckGetCodePaths (p,
"TestInt16",
"32767",
IntegerValue (32767));
515 ok = CheckGetCodePaths (p,
"TestInt16WithBounds",
"10",
IntegerValue (10));
516 NS_TEST_ASSERT_MSG_EQ (ok,
true,
"Attribute not set properly by SetAttributeFailSafe() (positive limit) via StringValue");
522 NS_TEST_ASSERT_MSG_EQ (ok,
false,
"Unexpectedly could SetAttributeFailSafe() via IntegerValue to 11");
524 ok = CheckGetCodePaths (p,
"TestInt16WithBounds",
"10",
IntegerValue (10));
533 ok = CheckGetCodePaths (p,
"TestInt16WithBounds",
"-5",
IntegerValue (-5));
534 NS_TEST_ASSERT_MSG_EQ (ok,
true,
"Attribute not set properly by SetAttributeFailSafe() (negative limit) via StringValue");
540 NS_TEST_ASSERT_MSG_EQ (ok,
false,
"Unexpectedly could SetAttributeFailSafe() via IntegerValue to -6");
542 ok = CheckGetCodePaths (p,
"TestInt16WithBounds",
"-5",
IntegerValue (-5));
552 p = CreateObject<AttributeObjectTest> ();
559 ok = CheckGetCodePaths (p,
"TestUint8",
"1",
UintegerValue (1));
568 ok = CheckGetCodePaths (p,
"TestUint8",
"0",
UintegerValue (0));
569 NS_TEST_ASSERT_MSG_EQ (ok,
true,
"Attribute not set properly by SetAttributeFailSafe() via StringValue");
577 ok = CheckGetCodePaths (p,
"TestUint8",
"255",
UintegerValue (255));
578 NS_TEST_ASSERT_MSG_EQ (ok,
true,
"Attribute not set properly by SetAttributeFailSafe() (positive limit) via UintegerValue");
587 ok = CheckGetCodePaths (p,
"TestUint8",
"255",
UintegerValue (255));
597 ok = CheckGetCodePaths (p,
"TestUint8",
"255",
UintegerValue (255));
598 NS_TEST_ASSERT_MSG_EQ (ok,
true,
"Attribute not set properly by SetAttributeFailSafe() via StringValue");
605 NS_TEST_ASSERT_MSG_EQ (ok,
false,
"Unexpectedly could SetAttributeFailSafe() via StringValue to 256");
607 ok = CheckGetCodePaths (p,
"TestUint8",
"255",
UintegerValue (255));
614 NS_TEST_ASSERT_MSG_EQ (ok,
false,
"Unexpectedly could SetAttributeFailSafe() via StringValue to -1");
623 p = CreateObject<AttributeObjectTest> ();
630 ok = CheckGetCodePaths (p,
"TestFloat",
"-1.1",
DoubleValue ((
float)-1.1));
639 ok = CheckGetCodePaths (p,
"TestFloat",
"2.3",
DoubleValue ((
float)2.3));
640 NS_TEST_ASSERT_MSG_EQ (ok,
true,
"Attribute not set properly by SetAttributeFailSafe() via DoubleValue");
649 p = CreateObject<AttributeObjectTest> ();
666 NS_TEST_ASSERT_MSG_EQ (ok,
true,
"Attribute not set properly by SetAttributeFailSafe() via EnumValue");
682 NS_TEST_ASSERT_MSG_EQ (ok,
true,
"Attribute not set properly by SetAttributeFailSafe() via EnumValue");
691 NS_TEST_ASSERT_MSG_EQ (ok,
true,
"Attribute not set properly by SetAttributeFailSafe() via StringValue");
720 p = CreateObject<AttributeObjectTest> ();
724 Time::SetResolution (Time::NS);
732 ok = CheckGetCodePaths (p,
"TestTimeWithBounds",
"+5000000000.0ns",
TimeValue (
Seconds (5)));
733 NS_TEST_ASSERT_MSG_EQ (ok,
true,
"Attribute not set properly by SetAttributeFailSafe(5s) via TimeValue");
738 ok = CheckGetCodePaths (p,
"TestTimeWithBounds",
"+3000000000.0ns",
TimeValue (
Seconds (3)));
739 NS_TEST_ASSERT_MSG_EQ (ok,
true,
"Attribute not set properly by SetAttributeFailSafe(3s) via StringValue");
753 ok = CheckGetCodePaths (p,
"TestTimeWithBounds",
"+10000000000.0ns",
TimeValue (
Seconds (10)));
754 NS_TEST_ASSERT_MSG_EQ (ok,
true,
"Attribute not set properly by SetAttributeFailSafe(10s [positive limit]) via StringValue");
760 NS_TEST_ASSERT_MSG_EQ (ok,
false,
"Unexpectedly could SetAttributeFailSafe() via TimeValue to 11s [greater than positive limit]");
762 ok = CheckGetCodePaths (p,
"TestTimeWithBounds",
"+10000000000.0ns",
TimeValue (
Seconds (10)));
771 ok = CheckGetCodePaths (p,
"TestTimeWithBounds",
"-5000000000.0ns",
TimeValue (
Seconds (-5)));
772 NS_TEST_ASSERT_MSG_EQ (ok,
true,
"Attribute not set properly by SetAttributeFailSafe(-5s [negative limit]) via StringValue");
780 ok = CheckGetCodePaths (p,
"TestTimeWithBounds",
"-5000000000.0ns",
TimeValue (
Seconds (-5)));
801 virtual void DoRun (
void);
821 p = CreateObject<AttributeObjectTest> ();
848 virtual void DoRun (
void);
862 p = CreateObject<AttributeObjectTest> ();
913 virtual void DoRun (
void);
927 p = CreateObject<AttributeObjectTest> ();
979 virtual void DoRun (
void);
994 p = CreateObject<AttributeObjectTest> ();
1020 NS_TEST_ASSERT_MSG_EQ (ok,
false,
"Unexpectedly could SetAttributeFailSafe() via IntegerValue to 128");
1026 NS_TEST_ASSERT_MSG_EQ (ok,
false,
"Unexpectedly could SetAttributeFailSafe() via IntegerValue to -129");
1051 NS_TEST_ASSERT_MSG_EQ (ok,
false,
"Unexpectedly could SetAttributeFailSafe() via IntegerValue to 128");
1057 NS_TEST_ASSERT_MSG_EQ (ok,
false,
"Unexpectedly could SetAttributeFailSafe() via IntegerValue to -129");
1071 virtual void DoRun (
void);
1092 p = CreateObject<AttributeObjectTest> ();
1111 NS_TEST_ASSERT_MSG_EQ (ok,
true,
"Could not TraceConnectWithoutContext() \"Source1\" to NodifySource1()");
1128 NS_TEST_ASSERT_MSG_EQ (ok,
true,
"Could not TraceConnectWithoutContext() \"Source1\" to NodifySource1()");
1147 virtual void DoRun (
void);
1170 p = CreateObject<AttributeObjectTest> ();
1226 virtual void DoRun (
void);
1249 p = CreateObject<AttributeObjectTest> ();
1260 NS_TEST_ASSERT_MSG_EQ (derived, 0,
"Unexpectedly found non-null pointer in newly initialized PointerValue Attribute");
1266 derived = Create<Derived> ();
1268 NS_TEST_ASSERT_MSG_EQ (ok,
true,
"Could not SetAttributeFailSafe() a PointerValue of the correct type");
1286 NS_TEST_ASSERT_MSG_EQ (storedBase, stored,
"Retrieved Ptr<Object> does not match stored Ptr<Derived>");
1304 p2->GetAttribute (
"PointerInitialized", ptr2);
1306 NS_TEST_ASSERT_MSG_NE (storedPtr, storedPtr2,
"ptr and ptr2 both have PointerInitialized pointing to the same object");
1308 p2->GetAttribute (
"PointerInitialized", ptr3);
1310 NS_TEST_ASSERT_MSG_NE (storedPtr, storedPtr3,
"ptr and ptr3 both have PointerInitialized pointing to the same object");
1316 factory.
SetTypeId (
"ns3::AttributeObjectTest");
1317 factory.
Set (
"PointerInitialized",
StringValue (
"ns3::Derived"));
1329 NS_TEST_ASSERT_MSG_NE (storedPtr4, storedPtr5,
"aotPtr and aotPtr2 are unique, but their Derived member is not");
1349 virtual void DoRun (
void);
1369 p = CreateObject<AttributeObjectTest> ();
void InvokeCbValue(int8_t a)
int16_t m_int16WithBounds
TracedValue< enum Test_e > m_enumSrc
std::istream & operator>>(std::istream &is, Angles &a)
initialize a struct Angles from input
Simulation virtual time values and global simulation resolution.
virtual ~RandomVariableStreamAttributeTestCase()
bool SetDefaultFailSafe(std::string fullName, const AttributeValue &value)
Ptr< Derived > m_ptrInitialized2
Ptr< const AttributeAccessor > MakeValueClassTestAccessor(T1 a1)
TypeId AddConstructor(void)
Record in this TypeId the fact that the default constructor is accessible.
AttributeValue implementation for Boolean.
TracedValue< uint8_t > m_uintSrc
#define NS_OBJECT_ENSURE_REGISTERED(type)
Register an Object subclass with the TypeId system.
bool CheckGetCodePaths(Ptr< Object > p, std::string attributeName, std::string expectedString, T expectedValue)
virtual ~AttributeObjectTest(void)
Ptr< Derived > m_ptrInitialized
int16_t DoGetInt16(void) const
Ptr< Derived > DoGetVector(std::size_t i) const
Hold variables of type string.
virtual void DoRun(void)
Implementation to actually run this TestCase.
void NotifySource2(double a, int b, float c)
bool DoGetTestB(void) const
#define ATTRIBUTE_HELPER_CPP(type)
Define the attribute value, accessor and checkers for class type.
virtual void DoRun(void)
Implementation to actually run this TestCase.
Ptr< const AttributeAccessor > MakeEnumAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
Ptr< const AttributeAccessor > MakeBooleanAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
std::vector< Ptr< Derived > > m_vector2
Ptr< const AttributeAccessor > MakeObjectVectorAccessor(U T::*memberVariable)
MakeAccessorHelper implementation for ObjectVector.
Hold a signed integer type.
void SetTypeId(TypeId tid)
Set the TypeId of the Objects to be created by this factory.
#define NS_UNUSED(x)
Mark a local variable as unused.
bool SetAttributeFailSafe(std::string name, const AttributeValue &value)
Set a single attribute without raising errors.
Callback< void, int8_t > m_cbValue
ObjectMapAttributeTestCase(std::string description)
RandomVariableStreamAttributeTestCase(std::string description)
std::map< uint32_t, Ptr< Derived > > m_map1
bool GetAttributeFailSafe(std::string name, AttributeValue &value) const
Get the value of an attribute without raising erros.
IntegerTraceSourceAttributeTestCase(std::string description)
void NotifyCallbackValue(int8_t a)
virtual ~CallbackValueTestCase()
AttributeValue implementation for Callback.
Ptr< const TraceSourceAccessor > MakeTraceSourceAccessor(T a)
Create a TraceSourceAccessor which will control access to the underlying trace source.
Ptr< const AttributeChecker > MakeTimeChecker(const Time min, const Time max)
Helper to make a Time checker with bounded range.
Ptr< const AttributeAccessor > MakeIntegerAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
virtual void DoRun(void)
Implementation to actually run this TestCase.
std::vector< Ptr< Derived > > m_vector1
TracedCallbackTestCase(std::string description)
Ptr< const AttributeAccessor > MakePointerAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
std::string Get(void) const
Hold variables of type enum.
TracedValue< int8_t > m_intSrc2
AttributeValue implementation for Time.
Ptr< Object > Create(void) const
Create an Object instance of the configured TypeId.
void AddTestCase(TestCase *testCase, TestDuration duration=QUICK)
Add an individual child TestCase to this test suite.
Hold an unsigned integer type.
void NotifySource2(double a, int b, float c)
virtual void DoRun(void)
Implementation to actually run this TestCase.
#define NS_TEST_ASSERT_MSG_EQ(actual, limit, msg)
Test that an actual and expected (limit) value are equal and report and abort if not.
IntegerTraceSourceTestCase(std::string description)
Ptr< const AttributeAccessor > MakeCallbackAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
virtual void DoRun(void)
Implementation to actually run this TestCase.
void NotifySource1(int8_t old, int8_t n)
bool TraceDisconnectWithoutContext(std::string name, const CallbackBase &cb)
Disconnect from a TraceSource a Callback previously connected without a context.
Callback< R > MakeCallback(R(T::*memPtr)(void), OBJ objPtr)
TracedValue< int8_t > m_intSrc1
std::size_t GetN(void) const
Get the number of Objects.
virtual ~PointerAttributeTestCase()
void AddToMap1(uint32_t i)
TracedCallback< double, int, float > m_cb
void DoSetInt16(int16_t v)
AttributeObjectTest(void)
std::ostream & operator<<(std::ostream &os, const Angles &a)
print a struct Angles to output
Ptr< T > GetObject(void) const
Get a pointer to the requested aggregated Object.
bool TraceConnectWithoutContext(std::string name, const CallbackBase &cb)
Connect a TraceSource to a Callback without a context.
TracedValue< ValueClassTest > m_valueSrc
bool operator!=(Callback< R, T1, T2, T3, T4, T5, T6, T7, T8, T9 > a, Callback< R, T1, T2, T3, T4, T5, T6, T7, T8, T9 > b)
Inequality test.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
std::size_t DoGetVectorN(void) const
Callback< void, int8_t > m_cbValue
Hold objects of type Ptr<T>.
Ptr< const AttributeChecker > MakeBooleanChecker(void)
virtual ~AttributeTestCase()
int8_t DoGetIntSrc(void) const
ObjectVectorAttributeTestCase(std::string description)
virtual void DoRun(void)
Implementation to actually run this TestCase.
void Set(std::string name, const AttributeValue &value)
Set an attribute to be set during construction.
Ptr< const AttributeAccessor > MakeTimeAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
virtual ~ObjectMapAttributeTestCase()
static AttributesTestSuite attributesTestSuite
Ptr< const AttributeChecker > MakeCallbackChecker(void)
void InvokeCb(double a, int b, float c)
TracedValue< double > m_doubleSrc
Ptr< const AttributeAccessor > MakeDoubleAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
Ptr< const AttributeChecker > MakeEnumChecker(int v1, std::string n1, int v2, std::string n2, int v3, std::string n3, int v4, std::string n4, int v5, std::string n5, int v6, std::string n6, int v7, std::string n7, int v8, std::string n8, int v9, std::string n9, int v10, std::string n10, int v11, std::string n11, int v12, std::string n12, int v13, std::string n13, int v14, std::string n14, int v15, std::string n15, int v16, std::string n16, int v17, std::string n17, int v18, std::string n18, int v19, std::string n19, int v20, std::string n20, int v21, std::string n21, int v22, std::string n22)
Make an EnumChecker pre-configured with a set of allowed values by name.
Instantiate subclasses of ns3::Object.
AttributeTestCase(std::string description)
virtual void DoRun(void)
Implementation to actually run this TestCase.
static TypeId GetTypeId(void)
#define NS_TEST_ASSERT_MSG_NE(actual, limit, msg)
Test that an actual and expected (limit) value are not equal and report and abort if not...
bool DoSetIntSrc(int8_t v)
Time Seconds(double value)
Construct a Time in the indicated unit.
void SetDefault(std::string name, const AttributeValue &value)
void NotifyCallbackValue(int8_t a)
virtual ~ObjectVectorAttributeTestCase()
virtual ~TracedCallbackTestCase()
static TypeId GetTypeId(void)
Ptr< const AttributeAccessor > MakeObjectMapAccessor(U T::*memberVariable)
MakeAccessorHelper implementation for ObjectVector.
Test_e DoGetEnum(void) const
Ptr< RandomVariableStream > m_random
Test class for TracedValue callbacks.
A base class which provides memory management and object aggregation.
void InvokeCbValue(int8_t a)
Container for a set of ns3::Object pointers.
TracedValue< bool > m_boolSrc
Ptr< Object > Get(std::size_t i) const
Get a specific Object.
bool IsNull(void) const
Check for null implementation.
PointerAttributeTestCase(std::string description)
This class can be used to hold variables of floating point type such as 'double' or 'float'...
Ptr< const AttributeAccessor > MakeUintegerAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
a unique identifier for an interface.
Ptr< const AttributeChecker > MakeValueClassTestChecker(void)
CallbackValueTestCase(std::string description)
#define ATTRIBUTE_HELPER_HEADER(type)
Declare the attribute value, accessor and checkers for class type.
void GetAttribute(std::string name, AttributeValue &value) const
Get the value of an attribute, raising fatal errors if unsuccessful.
virtual ~IntegerTraceSourceAttributeTestCase()
virtual ~IntegerTraceSourceTestCase()
Callback< void, int8_t > m_cbValue
virtual void DoRun(void)
Implementation to actually run this TestCase.
void InvokeCbValue(int8_t a)
virtual void DoRun(void)
Implementation to actually run this TestCase.