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