@@ -486,6 +486,7 @@ TEST_F(TestTypes, testTypeList)
486486
487487 // Unique
488488 STATIC_ASSERT ((std::is_same<IntTypes::Unique<>, IntTypes>::value));
489+ STATIC_ASSERT ((std::is_same<IntTypes::Unique<IntTypes>, IntTypes>::value));
489490 STATIC_ASSERT ((std::is_same<EmptyList::Unique<>, EmptyList>::value));
490491
491492 // Front/Back
@@ -526,11 +527,14 @@ TEST_F(TestTypes, testTypeList)
526527 // Test some methods on lists with duplicate types
527528 using DuplicateIntTypes = TypeList<Int32, Int16, Int64, Int16>;
528529 using DuplicateRealTypes = TypeList<float , float , float , float >;
530+
529531 STATIC_ASSERT ((DuplicateIntTypes::Size == 4 ));
530532 STATIC_ASSERT ((DuplicateRealTypes::Size == 4 ));
531533 STATIC_ASSERT ((DuplicateIntTypes::Index<Int16> == 1 ));
532534 STATIC_ASSERT ((std::is_same<DuplicateIntTypes::Unique<>, TypeList<Int32, Int16, Int64>>::value));
533535 STATIC_ASSERT ((std::is_same<DuplicateRealTypes::Unique<>, TypeList<float >>::value));
536+ STATIC_ASSERT ((std::is_same<DuplicateRealTypes::Unique<DuplicateIntTypes>,
537+ TypeList<float , Int32, Int16, Int64>>::value));
534538
535539 //
536540
@@ -773,3 +777,59 @@ TEST_F(TestTypes, testPromoteType)
773777 CHECK_PROMOTED_DOUBLE_MATH_TYPE (Mat3)
774778 CHECK_PROMOTED_DOUBLE_MATH_TYPE (Mat4)
775779}
780+
781+ template <typename T> struct IsRegistered { inline void operator ()() { EXPECT_TRUE (T::isRegistered ()); } };
782+ template <typename T> struct IsRegisteredType { inline void operator ()() { EXPECT_TRUE (T::isRegisteredType ()); } };
783+ template <typename GridT> struct GridListContains { inline void operator ()() { STATIC_ASSERT ((GridTypes::Contains<GridT>)); } };
784+ template <typename GridT> struct AttrListContains { inline void operator ()() { STATIC_ASSERT ((AttributeTypes::Contains<GridT>)); } };
785+
786+
787+ TEST_F (TestTypes, testOpenVDBTypeLists)
788+ {
789+ openvdb::initialize ();
790+
791+ #define CHECK_TYPE_LIST_IS_VALID (LIST_T ) \
792+ STATIC_ASSERT ((LIST_T::Size > 0 )); \
793+ STATIC_ASSERT ((std::is_same<LIST_T::Unique<>, LIST_T>::value));
794+
795+ CHECK_TYPE_LIST_IS_VALID (GridTypes)
796+ CHECK_TYPE_LIST_IS_VALID (FloatGridTypes)
797+ CHECK_TYPE_LIST_IS_VALID (IntegerGridTypes)
798+ CHECK_TYPE_LIST_IS_VALID (ScalarGridTypes)
799+ CHECK_TYPE_LIST_IS_VALID (Vec3GridTypes)
800+
801+ GridTypes::foreach<IsRegistered>();
802+
803+ FloatGridTypes::foreach<GridListContains>();
804+ IntegerGridTypes::foreach<GridListContains>();
805+ ScalarGridTypes::foreach<GridListContains>();
806+ Vec3GridTypes::foreach<GridListContains>();
807+
808+ CHECK_TYPE_LIST_IS_VALID (AttributeTypes)
809+ CHECK_TYPE_LIST_IS_VALID (IntegerAttributeTypes)
810+ CHECK_TYPE_LIST_IS_VALID (ScalarAttributeTypes)
811+ CHECK_TYPE_LIST_IS_VALID (Vec3AttributeTypes)
812+ CHECK_TYPE_LIST_IS_VALID (Mat3AttributeTypes)
813+ CHECK_TYPE_LIST_IS_VALID (Mat4AttributeTypes)
814+ CHECK_TYPE_LIST_IS_VALID (QuatAttributeTypes)
815+
816+ AttributeTypes::foreach<IsRegistered>();
817+
818+ FloatAttributeTypes::foreach<AttrListContains>();
819+ IntegerAttributeTypes::foreach<AttrListContains>();
820+ ScalarAttributeTypes::foreach<AttrListContains>();
821+ Vec3AttributeTypes::foreach<AttrListContains>();
822+ Mat3AttributeTypes::foreach<AttrListContains>();
823+ Mat4AttributeTypes::foreach<AttrListContains>();
824+ QuatAttributeTypes::foreach<AttrListContains>();
825+
826+ CHECK_TYPE_LIST_IS_VALID (MapTypes)
827+
828+ MapTypes::foreach<IsRegistered>();
829+
830+ CHECK_TYPE_LIST_IS_VALID (MetaTypes)
831+
832+ MetaTypes::foreach<IsRegisteredType>();
833+
834+ openvdb::uninitialize ();
835+ }
0 commit comments