2014-03-31 21:28:09 +00:00
|
|
|
//============================================================================
|
|
|
|
// Copyright (c) Kitware, Inc.
|
|
|
|
// All rights reserved.
|
|
|
|
// See LICENSE.txt for details.
|
|
|
|
// This software is distributed WITHOUT ANY WARRANTY; without even
|
|
|
|
// the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
|
|
// PURPOSE. See the above copyright notice for more information.
|
|
|
|
//
|
|
|
|
// Copyright 2014 Sandia Corporation.
|
|
|
|
// Copyright 2014 UT-Battelle, LLC.
|
2015-05-21 12:09:22 +00:00
|
|
|
// Copyright 2014 Los Alamos National Security.
|
2014-03-31 21:28:09 +00:00
|
|
|
//
|
|
|
|
// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
|
|
|
|
// the U.S. Government retains certain rights in this software.
|
|
|
|
//
|
|
|
|
// Under the terms of Contract DE-AC52-06NA25396 with Los Alamos National
|
|
|
|
// Laboratory (LANL), the U.S. Government retains certain rights in
|
|
|
|
// this software.
|
|
|
|
//============================================================================
|
|
|
|
|
|
|
|
#include <vtkm/TypeListTag.h>
|
|
|
|
|
|
|
|
#include <vtkm/Types.h>
|
|
|
|
|
|
|
|
#include <vtkm/testing/Testing.h>
|
|
|
|
|
2014-10-08 21:40:20 +00:00
|
|
|
#include <set>
|
|
|
|
#include <string>
|
2014-03-31 21:28:09 +00:00
|
|
|
|
|
|
|
namespace {
|
|
|
|
|
2014-10-08 21:40:20 +00:00
|
|
|
class TypeSet
|
|
|
|
{
|
|
|
|
typedef std::set<std::string> NameSetType;
|
|
|
|
NameSetType NameSet;
|
|
|
|
public:
|
|
|
|
template<typename T>
|
|
|
|
void AddExpected(T) {
|
|
|
|
this->NameSet.insert(vtkm::testing::TypeName<T>::Name());
|
|
|
|
}
|
2014-03-31 21:28:09 +00:00
|
|
|
|
2014-10-08 21:40:20 +00:00
|
|
|
template<typename T>
|
|
|
|
void Found(T) {
|
|
|
|
std::string name = vtkm::testing::TypeName<T>::Name();
|
|
|
|
//std::cout << " found " << name << std::endl;
|
|
|
|
NameSetType::iterator typeLocation = this->NameSet.find(name);
|
|
|
|
if (typeLocation != this->NameSet.end())
|
|
|
|
{
|
|
|
|
// This type is expected. Remove it to mark it found.
|
|
|
|
this->NameSet.erase(typeLocation);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
std::cout << "**** Did not expect to get type " << name << std::endl;
|
|
|
|
VTKM_TEST_FAIL("Got unexpected type.");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void CheckFound() {
|
|
|
|
for (NameSetType::iterator typeP = this->NameSet.begin();
|
|
|
|
typeP != this->NameSet.end();
|
|
|
|
typeP++)
|
|
|
|
{
|
|
|
|
std::cout << "**** Failed to find " << *typeP << std::endl;
|
|
|
|
}
|
|
|
|
VTKM_TEST_ASSERT(this->NameSet.empty(),
|
|
|
|
"List did not call functor on all expected types.");
|
|
|
|
}
|
|
|
|
};
|
2014-03-31 21:28:09 +00:00
|
|
|
|
|
|
|
struct TestFunctor
|
|
|
|
{
|
2014-10-08 21:40:20 +00:00
|
|
|
TypeSet ExpectedTypes;
|
|
|
|
|
|
|
|
TestFunctor(const TypeSet &expectedTypes) : ExpectedTypes(expectedTypes) { }
|
2014-03-31 21:28:09 +00:00
|
|
|
|
|
|
|
template<typename T>
|
|
|
|
VTKM_CONT_EXPORT
|
|
|
|
void operator()(T) {
|
2014-10-08 21:40:20 +00:00
|
|
|
this->ExpectedTypes.Found(T());
|
2014-03-31 21:28:09 +00:00
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2014-10-08 21:40:20 +00:00
|
|
|
template<typename ListTag>
|
|
|
|
void TryList(const TypeSet &expected, ListTag)
|
2014-03-31 21:28:09 +00:00
|
|
|
{
|
2014-10-08 21:40:20 +00:00
|
|
|
TestFunctor functor(expected);
|
2014-03-31 21:28:09 +00:00
|
|
|
vtkm::ListForEach(functor, ListTag());
|
2014-10-08 21:40:20 +00:00
|
|
|
functor.ExpectedTypes.CheckFound();
|
2014-03-31 21:28:09 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void TestLists()
|
|
|
|
{
|
|
|
|
std::cout << "TypeListTagId" << std::endl;
|
2014-10-08 21:40:20 +00:00
|
|
|
TypeSet id;
|
|
|
|
id.AddExpected(vtkm::Id());
|
|
|
|
TryList(id, vtkm::TypeListTagId());
|
2014-03-31 21:28:09 +00:00
|
|
|
|
|
|
|
std::cout << "TypeListTagId2" << std::endl;
|
2014-10-08 21:40:20 +00:00
|
|
|
TypeSet id2;
|
|
|
|
id2.AddExpected(vtkm::Id2());
|
|
|
|
TryList(id2, vtkm::TypeListTagId2());
|
2014-03-31 21:28:09 +00:00
|
|
|
|
|
|
|
std::cout << "TypeListTagId3" << std::endl;
|
2014-10-08 21:40:20 +00:00
|
|
|
TypeSet id3;
|
|
|
|
id3.AddExpected(vtkm::Id3());
|
|
|
|
TryList(id3, vtkm::TypeListTagId3());
|
2014-03-31 21:28:09 +00:00
|
|
|
|
|
|
|
std::cout << "TypeListTagIndex" << std::endl;
|
2014-10-08 21:40:20 +00:00
|
|
|
TypeSet index;
|
|
|
|
index.AddExpected(vtkm::Id());
|
|
|
|
index.AddExpected(vtkm::Id2());
|
|
|
|
index.AddExpected(vtkm::Id3());
|
|
|
|
TryList(index, vtkm::TypeListTagIndex());
|
2014-03-31 21:28:09 +00:00
|
|
|
|
2014-10-10 15:53:13 +00:00
|
|
|
std::cout << "TypeListTagFieldScalar" << std::endl;
|
2014-10-08 21:40:20 +00:00
|
|
|
TypeSet scalar;
|
|
|
|
scalar.AddExpected(vtkm::Float32());
|
|
|
|
scalar.AddExpected(vtkm::Float64());
|
2014-10-10 15:53:13 +00:00
|
|
|
TryList(scalar, vtkm::TypeListTagFieldScalar());
|
2014-10-08 21:40:20 +00:00
|
|
|
|
2014-10-10 15:53:13 +00:00
|
|
|
std::cout << "TypeListTagFieldVec2" << std::endl;
|
2014-10-08 21:40:20 +00:00
|
|
|
TypeSet vec2;
|
|
|
|
vec2.AddExpected(vtkm::Vec<vtkm::Float32,2>());
|
|
|
|
vec2.AddExpected(vtkm::Vec<vtkm::Float64,2>());
|
2014-10-10 15:53:13 +00:00
|
|
|
TryList(vec2, vtkm::TypeListTagFieldVec2());
|
2014-10-08 21:40:20 +00:00
|
|
|
|
2014-10-10 15:53:13 +00:00
|
|
|
std::cout << "TypeListTagFieldVec3" << std::endl;
|
2014-10-08 21:40:20 +00:00
|
|
|
TypeSet vec3;
|
|
|
|
vec3.AddExpected(vtkm::Vec<vtkm::Float32,3>());
|
|
|
|
vec3.AddExpected(vtkm::Vec<vtkm::Float64,3>());
|
2014-10-10 15:53:13 +00:00
|
|
|
TryList(vec3, vtkm::TypeListTagFieldVec3());
|
2014-10-08 21:40:20 +00:00
|
|
|
|
2014-10-10 15:53:13 +00:00
|
|
|
std::cout << "TypeListTagFieldVec4" << std::endl;
|
2014-10-08 21:40:20 +00:00
|
|
|
TypeSet vec4;
|
|
|
|
vec4.AddExpected(vtkm::Vec<vtkm::Float32,4>());
|
|
|
|
vec4.AddExpected(vtkm::Vec<vtkm::Float64,4>());
|
2014-10-10 15:53:13 +00:00
|
|
|
TryList(vec4, vtkm::TypeListTagFieldVec4());
|
2014-10-08 21:40:20 +00:00
|
|
|
|
|
|
|
std::cout << "TypeListTagField" << std::endl;
|
|
|
|
TypeSet field;
|
|
|
|
field.AddExpected(vtkm::Float32());
|
|
|
|
field.AddExpected(vtkm::Float64());
|
|
|
|
field.AddExpected(vtkm::Vec<vtkm::Float32,2>());
|
|
|
|
field.AddExpected(vtkm::Vec<vtkm::Float64,2>());
|
|
|
|
field.AddExpected(vtkm::Vec<vtkm::Float32,3>());
|
|
|
|
field.AddExpected(vtkm::Vec<vtkm::Float64,3>());
|
|
|
|
field.AddExpected(vtkm::Vec<vtkm::Float32,4>());
|
|
|
|
field.AddExpected(vtkm::Vec<vtkm::Float64,4>());
|
|
|
|
TryList(field, vtkm::TypeListTagField());
|
2014-03-31 21:28:09 +00:00
|
|
|
|
|
|
|
std::cout << "TypeListTagCommon" << std::endl;
|
2014-10-08 21:40:20 +00:00
|
|
|
TypeSet common;
|
|
|
|
common.AddExpected(vtkm::Float32());
|
|
|
|
common.AddExpected(vtkm::Float64());
|
|
|
|
common.AddExpected(vtkm::Int32());
|
|
|
|
common.AddExpected(vtkm::Int64());
|
|
|
|
common.AddExpected(vtkm::Vec<vtkm::Float32,3>());
|
|
|
|
common.AddExpected(vtkm::Vec<vtkm::Float64,3>());
|
|
|
|
TryList(common, vtkm::TypeListTagCommon());
|
2014-03-31 21:28:09 +00:00
|
|
|
|
2014-10-09 21:04:52 +00:00
|
|
|
std::cout << "TypeListTagScalarAll" << std::endl;
|
|
|
|
TypeSet scalarsAll;
|
|
|
|
scalarsAll.AddExpected(vtkm::Float32());
|
|
|
|
scalarsAll.AddExpected(vtkm::Float64());
|
|
|
|
scalarsAll.AddExpected(vtkm::Int8());
|
|
|
|
scalarsAll.AddExpected(vtkm::UInt8());
|
|
|
|
scalarsAll.AddExpected(vtkm::Int16());
|
|
|
|
scalarsAll.AddExpected(vtkm::UInt16());
|
|
|
|
scalarsAll.AddExpected(vtkm::Int32());
|
|
|
|
scalarsAll.AddExpected(vtkm::UInt32());
|
|
|
|
scalarsAll.AddExpected(vtkm::Int64());
|
|
|
|
scalarsAll.AddExpected(vtkm::UInt64());
|
|
|
|
TryList(scalarsAll, vtkm::TypeListTagScalarAll());
|
|
|
|
|
|
|
|
std::cout << "TypeListTagVecCommon" << std::endl;
|
|
|
|
TypeSet vecCommon;
|
|
|
|
vecCommon.AddExpected(vtkm::Vec<vtkm::Float32,2>());
|
|
|
|
vecCommon.AddExpected(vtkm::Vec<vtkm::Float64,2>());
|
|
|
|
vecCommon.AddExpected(vtkm::Vec<vtkm::UInt8,2>());
|
|
|
|
vecCommon.AddExpected(vtkm::Vec<vtkm::Int32,2>());
|
|
|
|
vecCommon.AddExpected(vtkm::Vec<vtkm::Int64,2>());
|
|
|
|
vecCommon.AddExpected(vtkm::Vec<vtkm::Float32,3>());
|
|
|
|
vecCommon.AddExpected(vtkm::Vec<vtkm::Float64,3>());
|
|
|
|
vecCommon.AddExpected(vtkm::Vec<vtkm::UInt8,3>());
|
|
|
|
vecCommon.AddExpected(vtkm::Vec<vtkm::Int32,3>());
|
|
|
|
vecCommon.AddExpected(vtkm::Vec<vtkm::Int64,3>());
|
|
|
|
vecCommon.AddExpected(vtkm::Vec<vtkm::Float32,4>());
|
|
|
|
vecCommon.AddExpected(vtkm::Vec<vtkm::Float64,4>());
|
|
|
|
vecCommon.AddExpected(vtkm::Vec<vtkm::UInt8,4>());
|
|
|
|
vecCommon.AddExpected(vtkm::Vec<vtkm::Int32,4>());
|
|
|
|
vecCommon.AddExpected(vtkm::Vec<vtkm::Int64,4>());
|
|
|
|
TryList(vecCommon, vtkm::TypeListTagVecCommon());
|
|
|
|
|
|
|
|
std::cout << "TypeListTagVecAll" << std::endl;
|
|
|
|
TypeSet vecAll;
|
|
|
|
vecAll.AddExpected(vtkm::Vec<vtkm::Float32,2>());
|
|
|
|
vecAll.AddExpected(vtkm::Vec<vtkm::Float64,2>());
|
|
|
|
vecAll.AddExpected(vtkm::Vec<vtkm::Int8,2>());
|
|
|
|
vecAll.AddExpected(vtkm::Vec<vtkm::Int16,2>());
|
|
|
|
vecAll.AddExpected(vtkm::Vec<vtkm::Int32,2>());
|
|
|
|
vecAll.AddExpected(vtkm::Vec<vtkm::Int64,2>());
|
|
|
|
vecAll.AddExpected(vtkm::Vec<vtkm::UInt8,2>());
|
|
|
|
vecAll.AddExpected(vtkm::Vec<vtkm::UInt16,2>());
|
|
|
|
vecAll.AddExpected(vtkm::Vec<vtkm::UInt32,2>());
|
|
|
|
vecAll.AddExpected(vtkm::Vec<vtkm::UInt64,2>());
|
|
|
|
vecAll.AddExpected(vtkm::Vec<vtkm::Float32,3>());
|
|
|
|
vecAll.AddExpected(vtkm::Vec<vtkm::Float64,3>());
|
|
|
|
vecAll.AddExpected(vtkm::Vec<vtkm::Int8,3>());
|
|
|
|
vecAll.AddExpected(vtkm::Vec<vtkm::Int16,3>());
|
|
|
|
vecAll.AddExpected(vtkm::Vec<vtkm::Int32,3>());
|
|
|
|
vecAll.AddExpected(vtkm::Vec<vtkm::Int64,3>());
|
|
|
|
vecAll.AddExpected(vtkm::Vec<vtkm::UInt8,3>());
|
|
|
|
vecAll.AddExpected(vtkm::Vec<vtkm::UInt16,3>());
|
|
|
|
vecAll.AddExpected(vtkm::Vec<vtkm::UInt32,3>());
|
|
|
|
vecAll.AddExpected(vtkm::Vec<vtkm::UInt64,3>());
|
|
|
|
vecAll.AddExpected(vtkm::Vec<vtkm::Float32,4>());
|
|
|
|
vecAll.AddExpected(vtkm::Vec<vtkm::Float64,4>());
|
|
|
|
vecAll.AddExpected(vtkm::Vec<vtkm::Int8,4>());
|
|
|
|
vecAll.AddExpected(vtkm::Vec<vtkm::Int16,4>());
|
|
|
|
vecAll.AddExpected(vtkm::Vec<vtkm::Int32,4>());
|
|
|
|
vecAll.AddExpected(vtkm::Vec<vtkm::Int64,4>());
|
|
|
|
vecAll.AddExpected(vtkm::Vec<vtkm::UInt8,4>());
|
|
|
|
vecAll.AddExpected(vtkm::Vec<vtkm::UInt16,4>());
|
|
|
|
vecAll.AddExpected(vtkm::Vec<vtkm::UInt32,4>());
|
|
|
|
vecAll.AddExpected(vtkm::Vec<vtkm::UInt64,4>());
|
|
|
|
TryList(vecAll, vtkm::TypeListTagVecAll());
|
|
|
|
|
2014-03-31 21:28:09 +00:00
|
|
|
std::cout << "TypeListTagAll" << std::endl;
|
2014-10-08 21:40:20 +00:00
|
|
|
TypeSet all;
|
|
|
|
all.AddExpected(vtkm::Float32());
|
|
|
|
all.AddExpected(vtkm::Float64());
|
|
|
|
all.AddExpected(vtkm::Int8());
|
|
|
|
all.AddExpected(vtkm::UInt8());
|
|
|
|
all.AddExpected(vtkm::Int16());
|
|
|
|
all.AddExpected(vtkm::UInt16());
|
|
|
|
all.AddExpected(vtkm::Int32());
|
|
|
|
all.AddExpected(vtkm::UInt32());
|
|
|
|
all.AddExpected(vtkm::Int64());
|
|
|
|
all.AddExpected(vtkm::UInt64());
|
|
|
|
all.AddExpected(vtkm::Vec<vtkm::Float32,2>());
|
|
|
|
all.AddExpected(vtkm::Vec<vtkm::Float64,2>());
|
|
|
|
all.AddExpected(vtkm::Vec<vtkm::Int8,2>());
|
2014-10-09 21:04:52 +00:00
|
|
|
all.AddExpected(vtkm::Vec<vtkm::Int16,2>());
|
2014-10-08 21:40:20 +00:00
|
|
|
all.AddExpected(vtkm::Vec<vtkm::Int32,2>());
|
|
|
|
all.AddExpected(vtkm::Vec<vtkm::Int64,2>());
|
2014-10-09 21:04:52 +00:00
|
|
|
all.AddExpected(vtkm::Vec<vtkm::UInt8,2>());
|
|
|
|
all.AddExpected(vtkm::Vec<vtkm::UInt16,2>());
|
|
|
|
all.AddExpected(vtkm::Vec<vtkm::UInt32,2>());
|
|
|
|
all.AddExpected(vtkm::Vec<vtkm::UInt64,2>());
|
2014-10-08 21:40:20 +00:00
|
|
|
all.AddExpected(vtkm::Vec<vtkm::Float32,3>());
|
|
|
|
all.AddExpected(vtkm::Vec<vtkm::Float64,3>());
|
|
|
|
all.AddExpected(vtkm::Vec<vtkm::Int8,3>());
|
2014-10-09 21:04:52 +00:00
|
|
|
all.AddExpected(vtkm::Vec<vtkm::Int16,3>());
|
2014-10-08 21:40:20 +00:00
|
|
|
all.AddExpected(vtkm::Vec<vtkm::Int32,3>());
|
|
|
|
all.AddExpected(vtkm::Vec<vtkm::Int64,3>());
|
2014-10-09 21:04:52 +00:00
|
|
|
all.AddExpected(vtkm::Vec<vtkm::UInt8,3>());
|
|
|
|
all.AddExpected(vtkm::Vec<vtkm::UInt16,3>());
|
|
|
|
all.AddExpected(vtkm::Vec<vtkm::UInt32,3>());
|
|
|
|
all.AddExpected(vtkm::Vec<vtkm::UInt64,3>());
|
2014-10-08 21:40:20 +00:00
|
|
|
all.AddExpected(vtkm::Vec<vtkm::Float32,4>());
|
|
|
|
all.AddExpected(vtkm::Vec<vtkm::Float64,4>());
|
|
|
|
all.AddExpected(vtkm::Vec<vtkm::Int8,4>());
|
2014-10-09 21:04:52 +00:00
|
|
|
all.AddExpected(vtkm::Vec<vtkm::Int16,4>());
|
2014-10-08 21:40:20 +00:00
|
|
|
all.AddExpected(vtkm::Vec<vtkm::Int32,4>());
|
|
|
|
all.AddExpected(vtkm::Vec<vtkm::Int64,4>());
|
2014-10-09 21:04:52 +00:00
|
|
|
all.AddExpected(vtkm::Vec<vtkm::UInt8,4>());
|
|
|
|
all.AddExpected(vtkm::Vec<vtkm::UInt16,4>());
|
|
|
|
all.AddExpected(vtkm::Vec<vtkm::UInt32,4>());
|
|
|
|
all.AddExpected(vtkm::Vec<vtkm::UInt64,4>());
|
2014-10-08 21:40:20 +00:00
|
|
|
TryList(all, vtkm::TypeListTagAll());
|
2014-03-31 21:28:09 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
} // anonymous namespace
|
|
|
|
|
|
|
|
int UnitTestTypeListTag(int, char *[])
|
|
|
|
{
|
|
|
|
return vtkm::testing::Testing::Run(TestLists);
|
|
|
|
}
|