Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
64 changes: 59 additions & 5 deletions root/meta/ROOT-10804/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,8 +1,62 @@
ROOTTEST_GENERATE_REFLEX_DICTIONARY(ROOT10804 ROOT10804.h SELECTION selection.xml)
set(depends ${GENERATE_REFLEX_TEST})

ROOTTEST_ADD_TEST(execROOT10804
MACRO execROOT10804.C
OUTREF execROOT10804.oref
ERRREF execROOT10804.eref
DEPENDS ${depends})
# Class names starting with '!': check that they do *not* have a protoclass.
set(CLASSES_TO_TEST
"Outer::Inline::Class"
"Outer::Class"

"list<Outer::Inline::Class>"
"list<Outer::Class>"
"std::list<Outer::Inline::Class>"
"std::list<Outer::Class>"

"Outer::Container<Outer::Inline::Class>"
"Outer::Container<Outer::Class>"

"Outer::Inline::Template<Outer::Inline::Class>"
"Outer::Template<Outer::Inline::Class>"
"Outer::Inline::Template<Outer::Class>"
"Outer::Template<Outer::Class>"

"Outer::Container<Outer::Inline::Template<Outer::Inline::Class>>"
"Outer::Container<Outer::Inline::Template<Outer::Class>>"
"Outer::Container<Outer::Template<Outer::Inline::Class>>>"

"Outer::Container<Outer::Template<Outer::Class>>"

# Container is not `Inline::`:
"!Outer::Inline::Container<Outer::Inline::Template<Outer::Inline::Class>>"

# Float16_t won't get a demangled alternate name,
# only as-written-in-selection.xml
"Outer::Template<Float16_t>"

# Found because of fwd decl of Inline as inline:
"Outer::Inline::Template<Float16_t>"

# Double32_t won't get a demangled alternate name,
# only as-written-in-selection.xml
"Outer::Container<Outer::Template<Double32_t>>"
# Found because of fwd decl of Inline as inline:
"Outer::Container<Outer::Inline::Template<Double32_t>>"

# Cross-check: not selected.
"!Outer::Container<int>"
"!Outer::Container<Outer::Template<Float16_t>>"
"!Outer::Template<float>" # but did select Template<Float16_t>!
)

list(LENGTH CLASSES_TO_TEST LEN_CLASSES_TO_TEST)
math(EXPR LAST_CLASS_TO_TEST ${LEN_CLASSES_TO_TEST}-1)
# foreach takes *last*, not num-elements :-(
foreach(INDEX RANGE ${LAST_CLASS_TO_TEST})
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Isn't 'foreach element of the list'? If there is and it does not work, could you add a comment why not?

list(GET CLASSES_TO_TEST ${INDEX} TEST_CLASS)

ROOTTEST_ADD_TEST(execROOT10804_${INDEX}
MACRO execROOT10804.C
MACROARG "\"${TEST_CLASS}\""
OUTREF execROOT10804.oref
ERRREF execROOT10804.eref
DEPENDS ${depends})
endforeach()
66 changes: 5 additions & 61 deletions root/meta/ROOT-10804/execROOT10804.C
Original file line number Diff line number Diff line change
Expand Up @@ -15,71 +15,15 @@ void check_not(const char *what) {
}
}

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

check("list<Outer::Inline::Class>");
check("list<Outer::Class>");
check("std::list<Outer::Inline::Class>");
check("std::list<Outer::Class>");

check("Outer::Container<Outer::Inline::Class>");
check("Outer::Container<Outer::Inline::Class>");
check("Outer::Container<Outer::Class>");

check("Outer::Inline::Template<Outer::Inline::Class>");
check("Outer::Template<Outer::Inline::Class>");
check("Outer::Inline::Template<Outer::Class>");
check("Outer::Template<Outer::Class>");

check("Outer::Container<"
"Outer::Inline::Template<"
"Outer::Inline::Class>>");

check("Outer::Container<"
"Outer::Inline::Template<"
"Outer::Inline::Class>>>");

check("Outer::Container<"
"Outer::Inline::Template<"
"Outer::Class>>");
check("Outer::Container<"
"Outer::Template<"
"Outer::Inline::Class>>");

check("Outer::Container<"
"Outer::Template<"
"Outer::Class>>");

// Container is not Inline::
check_not("Outer::Inline::Container<"
"Outer::Inline::Template<"
"Outer::Inline::Class>>");

// Float16_t won't get a demangled alternate name,
// only as-written-in-selection.xml
check("Outer::Template<Float16_t>");
// FIXME: can be resolved now that the payload has been parsed.
// And that shows that the test needs to check *one* type name only,
// before parsing the payload.
//!!! check_not("Outer::Inline::Template<Float16_t>");

// Double32_t won't get a demangled alternate name,
// only as-written-in-selection.xml
check("Outer::Container<Outer::Template<Double32_t>>");
// FIXME: can be resolved now that the payload has been parsed.
// And that shows that the test needs to check *one* type name only,
// before parsing the payload.
//!!! check_not("Outer::Container<Outer::Inline::Template<Double32_t>>");

// Cross-check: not selected.
check_not("Outer::Container<int>");
check_not("Outer::Container<Outer::Template<Float16_t>>");
check_not("Outer::Template<float>"); // but did select Template<Float16_t>!
return numErrors ? 1 : 0;
}