@@ -610,3 +610,61 @@ TEST(TypeReflectionTest, IsFunctionPointerType) {
610610 EXPECT_FALSE (
611611 Cpp::IsFunctionPointerType (Cpp::GetVariableType (Cpp::GetNamed (" i" ))));
612612}
613+
614+ TEST (TypeReflectionTest, TypeQualifiers) {
615+ Cpp::CreateInterpreter ();
616+ Cpp::Declare (R"(
617+ int *a;
618+ int *__restrict b;
619+ int *const c = 0;
620+ int *volatile d;
621+ int *const volatile e = nullptr;
622+ int *__restrict const f = nullptr;
623+ int *__restrict volatile g;
624+ int *__restrict const volatile h = nullptr;
625+ )" );
626+
627+ Cpp::TCppType_t a = Cpp::GetVariableType (Cpp::GetNamed (" a" ));
628+ Cpp::TCppType_t b = Cpp::GetVariableType (Cpp::GetNamed (" b" ));
629+ Cpp::TCppType_t c = Cpp::GetVariableType (Cpp::GetNamed (" c" ));
630+ Cpp::TCppType_t d = Cpp::GetVariableType (Cpp::GetNamed (" d" ));
631+ Cpp::TCppType_t e = Cpp::GetVariableType (Cpp::GetNamed (" e" ));
632+ Cpp::TCppType_t f = Cpp::GetVariableType (Cpp::GetNamed (" f" ));
633+ Cpp::TCppType_t g = Cpp::GetVariableType (Cpp::GetNamed (" g" ));
634+ Cpp::TCppType_t h = Cpp::GetVariableType (Cpp::GetNamed (" h" ));
635+
636+ EXPECT_FALSE (Cpp::HasTypeQualifier (nullptr , 0 ));
637+ EXPECT_FALSE (Cpp::RemoveTypeQualifier (nullptr , 0 ));
638+
639+ EXPECT_FALSE (Cpp::HasTypeQualifier (a, Cpp::Qualifier::Const));
640+ EXPECT_FALSE (Cpp::HasTypeQualifier (a, Cpp::Qualifier::Volatile));
641+ EXPECT_FALSE (Cpp::HasTypeQualifier (a, Cpp::Qualifier::Restrict));
642+ EXPECT_TRUE (Cpp::HasTypeQualifier (b, Cpp::Qualifier::Restrict));
643+ EXPECT_TRUE (Cpp::HasTypeQualifier (c, Cpp::Qualifier::Const));
644+ EXPECT_TRUE (Cpp::HasTypeQualifier (d, Cpp::Qualifier::Volatile));
645+ EXPECT_TRUE (Cpp::HasTypeQualifier (e, Cpp::Qualifier::Const |
646+ Cpp::Qualifier::Volatile));
647+ EXPECT_TRUE (Cpp::HasTypeQualifier (f, Cpp::Qualifier::Const |
648+ Cpp::Qualifier::Restrict));
649+ EXPECT_TRUE (Cpp::HasTypeQualifier (g, Cpp::Qualifier::Volatile |
650+ Cpp::Qualifier::Restrict));
651+ EXPECT_TRUE (Cpp::HasTypeQualifier (h, Cpp::Qualifier::Const |
652+ Cpp::Qualifier::Volatile |
653+ Cpp::Qualifier::Restrict));
654+
655+ EXPECT_EQ (a, Cpp::RemoveTypeQualifier (b, Cpp::Qualifier::Restrict));
656+ EXPECT_EQ (a, Cpp::RemoveTypeQualifier (c, Cpp::Qualifier::Const));
657+ EXPECT_EQ (a, Cpp::RemoveTypeQualifier (d, Cpp::Qualifier::Volatile));
658+ EXPECT_EQ (a, Cpp::RemoveTypeQualifier (e, Cpp::Qualifier::Const |
659+ Cpp::Qualifier::Volatile));
660+ EXPECT_EQ (a, Cpp::RemoveTypeQualifier (f, Cpp::Qualifier::Const |
661+ Cpp::Qualifier::Restrict));
662+ EXPECT_EQ (a, Cpp::RemoveTypeQualifier (g, Cpp::Qualifier::Volatile |
663+ Cpp::Qualifier::Restrict));
664+ EXPECT_EQ (a, Cpp::RemoveTypeQualifier (h, Cpp::Qualifier::Const |
665+ Cpp::Qualifier::Volatile |
666+ Cpp::Qualifier::Restrict));
667+ EXPECT_EQ (e, Cpp::RemoveTypeQualifier (h, Cpp::Qualifier::Restrict));
668+ EXPECT_EQ (b, Cpp::RemoveTypeQualifier (h, Cpp::Qualifier::Const |
669+ Cpp::Qualifier::Volatile));
670+ }
0 commit comments