Commit b7fd2a71 authored by David Thompson's avatar David Thompson
Browse files

Unit test new `vtkVariant` information key classes.

... and unit test the double and string information key
classes while we're at it.

Change-Id: I886973eda75bfe7d080e1f1446d4a6124e72c823
parent 1df5d6a2
......@@ -38,6 +38,7 @@ create_test_sourcelist(Tests ${vtk-module}CxxTests.cxx
TestVariantComparison.cxx
TestWeakPointer.cxx
TestXMLFileOutputWindow.cxx
UnitTestInformationKeys.cxx
otherArrays.cxx
otherByteSwap.cxx
# These two need vtkLookupTableWithEnabling/vtkLogLookupTable - move
......
#include "vtkInformation.h"
#include "vtkInformationDoubleKey.h"
#include "vtkInformationDoubleVectorKey.h"
#include "vtkInformationStringKey.h"
#include "vtkInformationStringVectorKey.h"
#include "vtkInformationVariantKey.h"
#include "vtkInformationVariantVectorKey.h"
#include "vtkNew.h"
#include "vtkStdString.h"
#include "vtkVariant.h"
template<typename T, typename V>
int UnitTestScalarValueKey(vtkInformation* info, T* key, const V& val)
{
key->Set(info, val);
int ok_setget = (val == key->Get(info));
if (!ok_setget)
{
cerr << "Set + Get not reflexive.\n";
}
vtkNew<vtkInformation> shinyNew;
key->ShallowCopy(info, shinyNew.GetPointer());
int ok_copyget = (val == key->Get(shinyNew.GetPointer()));
if (!ok_copyget)
{
cerr << "Copy + Get not reflexive.\n";
}
return ok_setget & ok_copyget;
}
template<typename T, typename V>
int UnitTestVectorValueKey(vtkInformation* info, T* key, const V& val)
{
key->Set(info, const_cast<V*>(&val), 1);
int ok_setget = (val == key->Get(info, 0));
if (!ok_setget)
{
cerr << "Set + get not reflexive.\n";
}
int ok_setgetcomp = (val == *key->Get(info));
if (!ok_setgetcomp)
{
cerr << "Set + component-wise-get not reflexive.\n";
}
vtkNew<vtkInformation> shinyNew;
key->ShallowCopy(info, shinyNew.GetPointer());
int ok_copyget = (val == *key->Get(shinyNew.GetPointer()));
if (!ok_copyget)
{
cerr << "Copy + get not reflexive.\n";
}
int ok_length = (key->Length(info) == 1);
if (!ok_length)
{
cerr << "Length was " << key->Length(info) << " not 1.\n";
}
key->Append(info, val);
int ok_appendedlength = (key->Length(info) == 2);
if (!ok_appendedlength)
{
cerr << "Appended length was " << key->Length(info) << " not 2.\n";
}
return
ok_setget && ok_setgetcomp && ok_copyget &&
ok_length && ok_appendedlength;
}
// === String adaptations of tests above ===
// Note these are not specializations.
int UnitTestScalarValueKey(
vtkInformation* info, vtkInformationStringKey* key,
const vtkStdString& val)
{
key->Set(info, val.c_str());
int ok_setget = (val == key->Get(info));
if (!ok_setget)
{
cerr << "Set + Get not reflexive.\n";
}
vtkNew<vtkInformation> shinyNew;
key->ShallowCopy(info, shinyNew.GetPointer());
int ok_copyget = (val == key->Get(shinyNew.GetPointer()));
if (!ok_copyget)
{
cerr << "Copy + Get not reflexive.\n";
}
return ok_setget & ok_copyget;
}
int UnitTestVectorValueKey(
vtkInformation* info, vtkInformationStringVectorKey* key,
const vtkStdString& val)
{
key->Set(info, val.c_str(), 0);
int ok_setgetcomp = (val == key->Get(info, 0));
if (!ok_setgetcomp)
{
cerr << "Set + get not reflexive.\n";
}
vtkNew<vtkInformation> shinyNew;
key->ShallowCopy(info, shinyNew.GetPointer());
int ok_copyget = (val == key->Get(shinyNew.GetPointer(), 0));
if (!ok_copyget)
{
cerr << "Copy + get not reflexive.\n";
}
int ok_length = (key->Length(info) == 1);
if (!ok_length)
{
cerr << "Length was " << key->Length(info) << " not 1.\n";
}
key->Append(info, val.c_str());
int ok_appendedlength = (key->Length(info) == 2);
if (!ok_appendedlength)
{
cerr << "Appended length was " << key->Length(info) << " not 2.\n";
}
return ok_setgetcomp && ok_copyget && ok_length && ok_appendedlength;
}
int UnitTestInformationKeys(int vtkNotUsed(argc), char* vtkNotUsed(argv)[])
{
int ok = 1;
vtkNew<vtkInformation> info;
vtkVariant tvval("foo");
double tdval = 3.14159;
vtkStdString tsval = "bar";
vtkInformationVariantKey* tvskey =
new vtkInformationVariantKey("Test", "vtkTest");
ok &= UnitTestScalarValueKey(info.GetPointer(), tvskey, tvval);
vtkInformationVariantVectorKey* tvvkey =
new vtkInformationVariantVectorKey("Test", "vtkTest");
ok &= UnitTestVectorValueKey(info.GetPointer(), tvvkey, tvval);
vtkInformationDoubleKey* tdskey =
new vtkInformationDoubleKey("Test", "vtkTest");
ok &= UnitTestScalarValueKey(info.GetPointer(), tdskey, tdval);
vtkInformationDoubleVectorKey* tdvkey =
new vtkInformationDoubleVectorKey("Test", "vtkTest");
ok &= UnitTestVectorValueKey(info.GetPointer(), tdvkey, tdval);
vtkInformationStringKey* tsskey =
new vtkInformationStringKey("Test", "vtkTest");
ok &= UnitTestScalarValueKey(info.GetPointer(), tsskey, tsval);
vtkInformationStringVectorKey* tsvkey =
new vtkInformationStringVectorKey("Test", "vtkTest");
ok &= UnitTestVectorValueKey(info.GetPointer(), tsvkey, tsval);
return ! ok;
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment