@@ -610,3 +610,61 @@ TEST(TypeReflectionTest, IsFunctionPointerType) {
610
610
EXPECT_FALSE (
611
611
Cpp::IsFunctionPointerType (Cpp::GetVariableType (Cpp::GetNamed (" i" ))));
612
612
}
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