Skip to content

Commit fcf37db

Browse files
committed
Split ROOT-10804 test into several runs:
Once autoparsing happened, everything can be resolved. Make sure we test what is supposed to be tested, namely early-registration alternate names. To do that, test only one class name per test run.
1 parent 9558f29 commit fcf37db

File tree

2 files changed

+64
-66
lines changed

2 files changed

+64
-66
lines changed
Lines changed: 59 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,62 @@
11
ROOTTEST_GENERATE_REFLEX_DICTIONARY(ROOT10804 ROOT10804.h SELECTION selection.xml)
22
set(depends ${GENERATE_REFLEX_TEST})
33

4-
ROOTTEST_ADD_TEST(execROOT10804
5-
MACRO execROOT10804.C
6-
OUTREF execROOT10804.oref
7-
ERRREF execROOT10804.eref
8-
DEPENDS ${depends})
4+
# Class names starting with '!': check that they do *not* have a protoclass.
5+
set(CLASSES_TO_TEST
6+
"Outer::Inline::Class"
7+
"Outer::Class"
8+
9+
"list<Outer::Inline::Class>"
10+
"list<Outer::Class>"
11+
"std::list<Outer::Inline::Class>"
12+
"std::list<Outer::Class>"
13+
14+
"Outer::Container<Outer::Inline::Class>"
15+
"Outer::Container<Outer::Class>"
16+
17+
"Outer::Inline::Template<Outer::Inline::Class>"
18+
"Outer::Template<Outer::Inline::Class>"
19+
"Outer::Inline::Template<Outer::Class>"
20+
"Outer::Template<Outer::Class>"
21+
22+
"Outer::Container<Outer::Inline::Template<Outer::Inline::Class>>"
23+
"Outer::Container<Outer::Inline::Template<Outer::Class>>"
24+
"Outer::Container<Outer::Template<Outer::Inline::Class>>>"
25+
26+
"Outer::Container<Outer::Template<Outer::Class>>"
27+
28+
# Container is not `Inline::`:
29+
"!Outer::Inline::Container<Outer::Inline::Template<Outer::Inline::Class>>"
30+
31+
# Float16_t won't get a demangled alternate name,
32+
# only as-written-in-selection.xml
33+
"Outer::Template<Float16_t>"
34+
35+
# Found because of fwd decl of Inline as inline:
36+
"Outer::Inline::Template<Float16_t>"
37+
38+
# Double32_t won't get a demangled alternate name,
39+
# only as-written-in-selection.xml
40+
"Outer::Container<Outer::Template<Double32_t>>"
41+
# Found because of fwd decl of Inline as inline:
42+
"Outer::Container<Outer::Inline::Template<Double32_t>>"
43+
44+
# Cross-check: not selected.
45+
"!Outer::Container<int>"
46+
"!Outer::Container<Outer::Template<Float16_t>>"
47+
"!Outer::Template<float>" # but did select Template<Float16_t>!
48+
)
49+
50+
list(LENGTH CLASSES_TO_TEST LEN_CLASSES_TO_TEST)
51+
math(EXPR LAST_CLASS_TO_TEST ${LEN_CLASSES_TO_TEST}-1)
52+
# foreach takes *last*, not num-elements :-(
53+
foreach(INDEX RANGE ${LAST_CLASS_TO_TEST})
54+
list(GET CLASSES_TO_TEST ${INDEX} TEST_CLASS)
55+
56+
ROOTTEST_ADD_TEST(execROOT10804_${INDEX}
57+
MACRO execROOT10804.C
58+
MACROARG "\"${TEST_CLASS}\""
59+
OUTREF execROOT10804.oref
60+
ERRREF execROOT10804.eref
61+
DEPENDS ${depends})
62+
endforeach()

root/meta/ROOT-10804/execROOT10804.C

Lines changed: 5 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -15,71 +15,15 @@ void check_not(const char *what) {
1515
}
1616
}
1717

18-
int execROOT10804() {
18+
int execROOT10804(const char *className) {
1919
if (gSystem->Load("libROOT10804_dictrflx") < 0) {
2020
std::cerr << "Failed to load ROOT10804Dict!\n";
2121
return 1;
2222
}
23-
check("Outer::Inline::Class");
24-
check("Outer::Class");
23+
if (className[0] == '!')
24+
check_not(className + 1);
25+
else
26+
check(className);
2527

26-
check("list<Outer::Inline::Class>");
27-
check("list<Outer::Class>");
28-
check("std::list<Outer::Inline::Class>");
29-
check("std::list<Outer::Class>");
30-
31-
check("Outer::Container<Outer::Inline::Class>");
32-
check("Outer::Container<Outer::Inline::Class>");
33-
check("Outer::Container<Outer::Class>");
34-
35-
check("Outer::Inline::Template<Outer::Inline::Class>");
36-
check("Outer::Template<Outer::Inline::Class>");
37-
check("Outer::Inline::Template<Outer::Class>");
38-
check("Outer::Template<Outer::Class>");
39-
40-
check("Outer::Container<"
41-
"Outer::Inline::Template<"
42-
"Outer::Inline::Class>>");
43-
44-
check("Outer::Container<"
45-
"Outer::Inline::Template<"
46-
"Outer::Inline::Class>>>");
47-
48-
check("Outer::Container<"
49-
"Outer::Inline::Template<"
50-
"Outer::Class>>");
51-
check("Outer::Container<"
52-
"Outer::Template<"
53-
"Outer::Inline::Class>>");
54-
55-
check("Outer::Container<"
56-
"Outer::Template<"
57-
"Outer::Class>>");
58-
59-
// Container is not Inline::
60-
check_not("Outer::Inline::Container<"
61-
"Outer::Inline::Template<"
62-
"Outer::Inline::Class>>");
63-
64-
// Float16_t won't get a demangled alternate name,
65-
// only as-written-in-selection.xml
66-
check("Outer::Template<Float16_t>");
67-
// FIXME: can be resolved now that the payload has been parsed.
68-
// And that shows that the test needs to check *one* type name only,
69-
// before parsing the payload.
70-
//!!! check_not("Outer::Inline::Template<Float16_t>");
71-
72-
// Double32_t won't get a demangled alternate name,
73-
// only as-written-in-selection.xml
74-
check("Outer::Container<Outer::Template<Double32_t>>");
75-
// FIXME: can be resolved now that the payload has been parsed.
76-
// And that shows that the test needs to check *one* type name only,
77-
// before parsing the payload.
78-
//!!! check_not("Outer::Container<Outer::Inline::Template<Double32_t>>");
79-
80-
// Cross-check: not selected.
81-
check_not("Outer::Container<int>");
82-
check_not("Outer::Container<Outer::Template<Float16_t>>");
83-
check_not("Outer::Template<float>"); // but did select Template<Float16_t>!
8428
return numErrors ? 1 : 0;
8529
}

0 commit comments

Comments
 (0)