@@ -620,3 +620,69 @@ TEST(TypeReflectionTest, OperatorSpelling) {
620620 EXPECT_EQ (Cpp::GetOperatorFromSpelling (" ()" ), Cpp::OP_Call);
621621 EXPECT_EQ (Cpp::GetOperatorFromSpelling (" invalid" ), Cpp::OP_None);
622622}
623+
624+ TEST (TypeReflectionTest, TypeQualifiers) {
625+ Cpp::CreateInterpreter ();
626+ Cpp::Declare (R"(
627+ int *a;
628+ int *__restrict__ b;
629+ int *const c = 0;
630+ int *volatile d;
631+ int *const volatile e = nullptr;
632+ int *__restrict__ const f = nullptr;
633+ int *__restrict__ volatile g;
634+ int *__restrict__ const volatile h = nullptr;
635+ )" );
636+
637+ Cpp::TCppType_t a = Cpp::GetVariableType (Cpp::GetNamed (" a" ));
638+ Cpp::TCppType_t b = Cpp::GetVariableType (Cpp::GetNamed (" b" ));
639+ Cpp::TCppType_t c = Cpp::GetVariableType (Cpp::GetNamed (" c" ));
640+ Cpp::TCppType_t d = Cpp::GetVariableType (Cpp::GetNamed (" d" ));
641+ Cpp::TCppType_t e = Cpp::GetVariableType (Cpp::GetNamed (" e" ));
642+ Cpp::TCppType_t f = Cpp::GetVariableType (Cpp::GetNamed (" f" ));
643+ Cpp::TCppType_t g = Cpp::GetVariableType (Cpp::GetNamed (" g" ));
644+ Cpp::TCppType_t h = Cpp::GetVariableType (Cpp::GetNamed (" h" ));
645+
646+ EXPECT_FALSE (Cpp::HasTypeQualifier (nullptr , Cpp::QualKind::Const));
647+ EXPECT_FALSE (Cpp::RemoveTypeQualifier (nullptr , Cpp::QualKind::Const));
648+ EXPECT_FALSE (Cpp::AddTypeQualifier (nullptr , Cpp::QualKind::Const));
649+
650+ EXPECT_FALSE (Cpp::HasTypeQualifier (a, Cpp::QualKind::Const));
651+ EXPECT_FALSE (Cpp::HasTypeQualifier (a, Cpp::QualKind::Volatile));
652+ EXPECT_FALSE (Cpp::HasTypeQualifier (a, Cpp::QualKind::Restrict));
653+ EXPECT_TRUE (Cpp::HasTypeQualifier (b, Cpp::QualKind::Restrict));
654+ EXPECT_TRUE (Cpp::HasTypeQualifier (c, Cpp::QualKind::Const));
655+ EXPECT_TRUE (Cpp::HasTypeQualifier (d, Cpp::QualKind::Volatile));
656+ EXPECT_TRUE (
657+ Cpp::HasTypeQualifier (e, Cpp::QualKind::Const | Cpp::QualKind::Volatile));
658+ EXPECT_TRUE (
659+ Cpp::HasTypeQualifier (f, Cpp::QualKind::Const | Cpp::QualKind::Restrict));
660+ EXPECT_TRUE (Cpp::HasTypeQualifier (g, Cpp::QualKind::Volatile |
661+ Cpp::QualKind::Restrict));
662+ EXPECT_TRUE (Cpp::HasTypeQualifier (h, Cpp::QualKind::Const |
663+ Cpp::QualKind::Volatile |
664+ Cpp::QualKind::Restrict));
665+
666+ EXPECT_EQ (a, Cpp::RemoveTypeQualifier (b, Cpp::QualKind::Restrict));
667+ EXPECT_EQ (a, Cpp::RemoveTypeQualifier (c, Cpp::QualKind::Const));
668+ EXPECT_EQ (a, Cpp::RemoveTypeQualifier (d, Cpp::QualKind::Volatile));
669+ EXPECT_EQ (a, Cpp::RemoveTypeQualifier (e, Cpp::QualKind::Const |
670+ Cpp::QualKind::Volatile));
671+ EXPECT_EQ (a, Cpp::RemoveTypeQualifier (f, Cpp::QualKind::Const |
672+ Cpp::QualKind::Restrict));
673+ EXPECT_EQ (a, Cpp::RemoveTypeQualifier (g, Cpp::QualKind::Volatile |
674+ Cpp::QualKind::Restrict));
675+ EXPECT_EQ (a, Cpp::RemoveTypeQualifier (h, Cpp::QualKind::Const |
676+ Cpp::QualKind::Volatile |
677+ Cpp::QualKind::Restrict));
678+ EXPECT_EQ (e, Cpp::RemoveTypeQualifier (h, Cpp::QualKind::Restrict));
679+ EXPECT_EQ (b, Cpp::RemoveTypeQualifier (h, Cpp::QualKind::Const |
680+ Cpp::QualKind::Volatile));
681+
682+ EXPECT_EQ (c, Cpp::AddTypeQualifier (a, Cpp::QualKind::Const));
683+ EXPECT_EQ (d, Cpp::AddTypeQualifier (a, Cpp::QualKind::Volatile));
684+ EXPECT_EQ (b, Cpp::AddTypeQualifier (a, Cpp::QualKind::Restrict));
685+ EXPECT_EQ (h, Cpp::AddTypeQualifier (a, Cpp::QualKind::Const |
686+ Cpp::QualKind::Volatile |
687+ Cpp::QualKind::Restrict));
688+ }
0 commit comments