Skip to content

Commit 26d39e5

Browse files
committed
[ntuple] add more type name normalization tests
1 parent 461c6b7 commit 26d39e5

File tree

2 files changed

+66
-47
lines changed

2 files changed

+66
-47
lines changed

tree/ntuple/test/CustomStructLinkDef.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
#pragma link C++ class DataVector < int, float> ::Nested < int, double> + ;
3939
#pragma link C++ class DataVector < int, float> ::Nested < int, float> + ;
4040
#pragma link C++ class InnerCV < const int, const volatile int, volatile const int, volatile int> + ;
41+
#pragma link C++ class InnerCV < const std::vector<std::string[2]>, int, int, int> + ;
4142
#pragma link C++ class IntegerTemplates < 0, 0> + ;
4243
#pragma link C++ class IntegerTemplates < -1, 1> + ;
4344
#pragma link C++ class IntegerTemplates < -2147483650ll, 9223372036854775810ull> + ;

tree/ntuple/test/ntuple_type_name.cxx

Lines changed: 65 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -45,11 +45,25 @@ TEST(RNTuple, TypeNameNormalizationByName)
4545
EXPECT_EQ("std::vector<std::array<Double32_t,2>>",
4646
RFieldBase::Create("f", "vector<Double32_t[2]>").Unwrap()->GetTypeAlias());
4747

48+
EXPECT_EQ("std::array<std::vector<std::array<double,3>>,10>",
49+
RFieldBase::Create("f", "std::vector<Double32_t[3] > [10 ] ").Unwrap()->GetTypeName());
50+
EXPECT_EQ("std::array<std::vector<std::array<Double32_t,3>>,10>",
51+
RFieldBase::Create("f", "std::vector<Double32_t[3] > [10 ] ").Unwrap()->GetTypeAlias());
52+
53+
// We keep CV qualifiers only in template arguments of user-defined types
54+
EXPECT_EQ("std::unique_ptr<std::array<std::string,2>>",
55+
RFieldBase::Create("f", "std::unique_ptr<const std::string[2]>").Unwrap()->GetTypeName());
4856
const std::string innerCV = "class InnerCV<const int, const volatile int, volatile const int, volatile int>";
4957
const std::string normInnerCV =
5058
"InnerCV<const std::int32_t,const volatile std::int32_t,const volatile std::int32_t,volatile std::int32_t>";
5159
EXPECT_EQ(normInnerCV, RFieldBase::Create("f", innerCV).Unwrap()->GetTypeName());
5260
EXPECT_EQ("", RFieldBase::Create("f", innerCV).Unwrap()->GetTypeAlias());
61+
EXPECT_EQ(
62+
"InnerCV<const std::vector<std::array<std::string,2>>,std::int32_t,std::int32_t,std::int32_t>",
63+
RFieldBase::Create("f", "InnerCV<const std::vector<std::string[2]>, int, int, int>").Unwrap()->GetTypeName());
64+
EXPECT_EQ(
65+
"",
66+
RFieldBase::Create("f", "InnerCV<const std::vector<std::string[2]>, int, int, int>").Unwrap()->GetTypeAlias());
5367

5468
const std::string example = "const pair<size_t, array<class CustomStruct, 6>>";
5569
std::string normExample;
@@ -68,59 +82,63 @@ TEST(RNTuple, TypeNameNormalizationByName)
6882

6983
TEST(RNTuple, TypeNameNormalizationById)
7084
{
71-
EXPECT_EQ("std::int32_t", ROOT::Internal::GetRenormalizedTypeName(typeid(signed)));
72-
EXPECT_EQ("std::int32_t", ROOT::Internal::GetRenormalizedTypeName(typeid(std::int32_t)));
73-
EXPECT_EQ("double", ROOT::Internal::GetRenormalizedTypeName(typeid(Double32_t)));
74-
EXPECT_EQ("float", ROOT::Internal::GetRenormalizedTypeName(typeid(const float)));
75-
76-
EXPECT_EQ("std::string", ROOT::Internal::GetRenormalizedTypeName(typeid(std::string)));
77-
EXPECT_EQ("std::map<std::string,std::string>",
78-
ROOT::Internal::GetRenormalizedTypeName(typeid(std::map<std::string, std::string>)));
79-
EXPECT_EQ("char", ROOT::Internal::GetRenormalizedTypeName(typeid(std::string::value_type)));
80-
81-
EXPECT_EQ("std::vector<bool>", ROOT::Internal::GetRenormalizedTypeName(typeid(std::vector<Bool_t>)));
82-
EXPECT_EQ("std::vector<char>", ROOT::Internal::GetRenormalizedTypeName(typeid(std::vector<char>)));
83-
EXPECT_EQ("ROOT::VecOps::RVec<float>", ROOT::Internal::GetRenormalizedTypeName(typeid(ROOT::RVec<float>)));
84-
EXPECT_EQ("std::array<float,2>", ROOT::Internal::GetRenormalizedTypeName(typeid(std::array<float, 0x02>)));
85-
EXPECT_EQ("std::variant<float,double>",
86-
ROOT::Internal::GetRenormalizedTypeName(typeid(std::variant<float, double>)));
87-
EXPECT_EQ("std::pair<float,double>", ROOT::Internal::GetRenormalizedTypeName(typeid(std::pair<float, double>)));
88-
EXPECT_EQ("std::tuple<float,float,float>",
89-
ROOT::Internal::GetRenormalizedTypeName(typeid(std::tuple<float, float, float>)));
90-
EXPECT_EQ("std::bitset<1000>", ROOT::Internal::GetRenormalizedTypeName(typeid(std::bitset<1000lu>)));
91-
EXPECT_EQ("std::atomic<std::int32_t>", ROOT::Internal::GetRenormalizedTypeName(typeid(std::atomic<int>)));
92-
EXPECT_EQ("std::unique_ptr<std::int32_t>", ROOT::Internal::GetRenormalizedTypeName(typeid(std::unique_ptr<int>)));
93-
EXPECT_EQ("std::optional<std::int32_t>", ROOT::Internal::GetRenormalizedTypeName(typeid(std::optional<int>)));
94-
95-
EXPECT_EQ("std::array<std::array<std::uint32_t,3>,2>",
96-
ROOT::Internal::GetRenormalizedTypeName(typeid(SG::sgkey_t[2][3])));
97-
EXPECT_EQ("std::vector<std::array<double,2>>",
98-
ROOT::Internal::GetRenormalizedTypeName(typeid(std::vector<Double32_t[2]>)));
99-
100-
EXPECT_EQ("std::set<std::int32_t>", ROOT::Internal::GetRenormalizedTypeName(typeid(std::set<int>)));
101-
EXPECT_EQ("std::unordered_set<std::int32_t>",
102-
ROOT::Internal::GetRenormalizedTypeName(typeid(std::unordered_set<int>)));
103-
EXPECT_EQ("std::multiset<std::int32_t>", ROOT::Internal::GetRenormalizedTypeName(typeid(std::multiset<int>)));
104-
EXPECT_EQ("std::unordered_multiset<std::int32_t>",
105-
ROOT::Internal::GetRenormalizedTypeName(typeid(std::unordered_multiset<int>)));
106-
107-
EXPECT_EQ("std::map<std::int32_t,std::int32_t>",
108-
ROOT::Internal::GetRenormalizedTypeName(typeid(std::map<int, int>)));
85+
using ROOT::Internal::GetRenormalizedTypeName;
86+
87+
EXPECT_EQ("std::int32_t", GetRenormalizedTypeName(typeid(signed)));
88+
EXPECT_EQ("std::int32_t", GetRenormalizedTypeName(typeid(std::int32_t)));
89+
EXPECT_EQ("double", GetRenormalizedTypeName(typeid(Double32_t)));
90+
EXPECT_EQ("float", GetRenormalizedTypeName(typeid(const float)));
91+
92+
EXPECT_EQ("std::string", GetRenormalizedTypeName(typeid(std::string)));
93+
EXPECT_EQ("std::map<std::string,std::string>", GetRenormalizedTypeName(typeid(std::map<std::string, std::string>)));
94+
EXPECT_EQ("std::vector<std::array<std::string,2>>", GetRenormalizedTypeName(typeid(std::vector<std::string[2]>)));
95+
EXPECT_EQ("char", GetRenormalizedTypeName(typeid(std::string::value_type)));
96+
97+
EXPECT_EQ("std::vector<bool>", GetRenormalizedTypeName(typeid(std::vector<Bool_t>)));
98+
EXPECT_EQ("std::vector<char>", GetRenormalizedTypeName(typeid(std::vector<char>)));
99+
EXPECT_EQ("ROOT::VecOps::RVec<float>", GetRenormalizedTypeName(typeid(ROOT::RVec<float>)));
100+
EXPECT_EQ("std::array<float,2>", GetRenormalizedTypeName(typeid(std::array<float, 0x02>)));
101+
EXPECT_EQ("std::variant<float,double>", GetRenormalizedTypeName(typeid(std::variant<float, double>)));
102+
EXPECT_EQ("std::pair<float,double>", GetRenormalizedTypeName(typeid(std::pair<float, double>)));
103+
EXPECT_EQ("std::tuple<float,float,float>", GetRenormalizedTypeName(typeid(std::tuple<float, float, float>)));
104+
EXPECT_EQ("std::bitset<1000>", GetRenormalizedTypeName(typeid(std::bitset<1000lu>)));
105+
EXPECT_EQ("std::atomic<std::int32_t>", GetRenormalizedTypeName(typeid(std::atomic<int>)));
106+
EXPECT_EQ("std::unique_ptr<std::int32_t>", GetRenormalizedTypeName(typeid(std::unique_ptr<int>)));
107+
EXPECT_EQ("std::optional<std::int32_t>", GetRenormalizedTypeName(typeid(std::optional<int>)));
108+
109+
EXPECT_EQ("std::array<std::array<std::uint32_t,3>,2>", GetRenormalizedTypeName(typeid(SG::sgkey_t[2][3])));
110+
EXPECT_EQ("std::vector<std::array<double,2>>", GetRenormalizedTypeName(typeid(std::vector<Double32_t[2]>)));
111+
EXPECT_EQ("std::array<std::vector<std::array<double,3>>,10>",
112+
GetRenormalizedTypeName(typeid(std::vector<Double32_t[3]>[10])));
113+
114+
EXPECT_EQ("std::set<std::int32_t>", GetRenormalizedTypeName(typeid(std::set<int>)));
115+
EXPECT_EQ("std::unordered_set<std::int32_t>", GetRenormalizedTypeName(typeid(std::unordered_set<int>)));
116+
EXPECT_EQ("std::multiset<std::int32_t>", GetRenormalizedTypeName(typeid(std::multiset<int>)));
117+
EXPECT_EQ("std::unordered_multiset<std::int32_t>", GetRenormalizedTypeName(typeid(std::unordered_multiset<int>)));
118+
119+
EXPECT_EQ("std::map<std::int32_t,std::int32_t>", GetRenormalizedTypeName(typeid(std::map<int, int>)));
109120
EXPECT_EQ("std::unordered_map<std::int32_t,std::int32_t>",
110-
ROOT::Internal::GetRenormalizedTypeName(typeid(std::unordered_map<int, int>)));
111-
EXPECT_EQ("std::multimap<std::int32_t,std::int32_t>",
112-
ROOT::Internal::GetRenormalizedTypeName(typeid(std::multimap<int, int>)));
121+
GetRenormalizedTypeName(typeid(std::unordered_map<int, int>)));
122+
EXPECT_EQ("std::multimap<std::int32_t,std::int32_t>", GetRenormalizedTypeName(typeid(std::multimap<int, int>)));
113123
EXPECT_EQ("std::unordered_multimap<std::int32_t,std::int32_t>",
114-
ROOT::Internal::GetRenormalizedTypeName(typeid(std::unordered_multimap<int, int>)));
124+
GetRenormalizedTypeName(typeid(std::unordered_multimap<int, int>)));
115125

116126
EXPECT_EQ("CustomStruct", ROOT::Internal::GetRenormalizedTypeName(typeid(CustomStruct)));
117127

118-
EXPECT_EQ("std::map<std::int32_t,std::int32_t>",
119-
ROOT::Internal::GetRenormalizedTypeName(typeid(std::map<int, int>)));
128+
// We keep CV qualifiers only in template arguments of user-defined types
129+
EXPECT_EQ("std::unique_ptr<std::array<std::string,2>>",
130+
GetRenormalizedTypeName(typeid(std::unique_ptr<const std::string[2]>)));
131+
const std::string normInnerCV =
132+
"InnerCV<const std::int32_t,const volatile std::int32_t,const volatile std::int32_t,volatile std::int32_t>";
133+
EXPECT_EQ(normInnerCV,
134+
GetRenormalizedTypeName(typeid(InnerCV<const int, const volatile int, volatile const int, volatile int>)));
135+
EXPECT_EQ("InnerCV<const std::vector<std::array<std::string,2>>,std::int32_t,std::int32_t,std::int32_t>",
136+
GetRenormalizedTypeName(typeid(InnerCV<const std::vector<std::string[2]>, int, int, int>)));
120137

121-
EXPECT_EQ(
122-
"std::pair<std::uint32_t,std::array<CustomStruct,2>>",
123-
ROOT::Internal::GetRenormalizedTypeName(typeid(const std::pair<unsigned int, std::array<::CustomStruct, 2>>)));
138+
EXPECT_EQ("std::map<std::int32_t,std::int32_t>", GetRenormalizedTypeName(typeid(std::map<int, int>)));
139+
140+
EXPECT_EQ("std::pair<std::uint32_t,std::array<CustomStruct,2>>",
141+
GetRenormalizedTypeName(typeid(const std::pair<unsigned int, std::array<::CustomStruct, 2>>)));
124142
}
125143

126144
TEST(RNTuple, TClassDefaultTemplateParameter)

0 commit comments

Comments
 (0)