File indexing completed on 2025-07-31 02:19:15
0001
0002
0003
0004
0005
0006
0007
0008
0009 #include <catch.hpp>
0010 #include <iostream>
0011 #include "FWCore/Utilities/interface/FriendlyName.h"
0012 #include <map>
0013 #include <string>
0014
0015 using namespace edm;
0016
0017 TEST_CASE("friendlyName produces expected results", "[friendlyName]") {
0018 typedef std::pair<std::string, std::string> Values;
0019 std::map<std::string, std::string> classToFriendly;
0020 classToFriendly.insert(Values("Foo", "Foo"));
0021 classToFriendly.insert(Values("const Foo", "constFoo"));
0022 classToFriendly.insert(Values("bar::Foo", "barFoo"));
0023 classToFriendly.insert(Values("std::vector<Foo>", "Foos"));
0024 classToFriendly.insert(Values("std::vector<bar::Foo>", "barFoos"));
0025 classToFriendly.insert(Values("std::set<bar::Foo>", "barFoostdset"));
0026 classToFriendly.insert(Values("std::map<Foo, bar::Bar>", "FoobarBarstdmap"));
0027 classToFriendly.insert(Values("std::unordered_set<bar::Foo>", "barFoostduset"));
0028 classToFriendly.insert(Values("std::unordered_set<std::basic_string<char>>", "Stringstduset"));
0029 classToFriendly.insert(Values("std::unordered_set<bar::Foo, std::hash<bar::Foo>>", "barFoostduset"));
0030 classToFriendly.insert(
0031 Values("std::unordered_set<std::basic_string<char>, std::hash<std::basic_string<char>>>", "Stringstduset"));
0032 classToFriendly.insert(
0033 Values("std::unordered_set<bar::Foo, std::hash<bar::Foo>, std::equal_to<bar::Foo>>", "barFoostduset"));
0034 classToFriendly.insert(
0035 Values("std::unordered_set<std::basic_string<char>, std::hash<std::basic_string<char>>, "
0036 "std::equal_to<std::basic_string<char>>>",
0037 "Stringstduset"));
0038 classToFriendly.insert(
0039 Values("std::unordered_set<bar::Foo, CustomHash, std::equal_to<bar::Foo>>", "barFooCustomHashstduset"));
0040 classToFriendly.insert(
0041 Values("std::unordered_set<std::basic_string<char>, CustomHash, std::equal_to<std::basic_string<char>>>",
0042 "StringCustomHashstduset"));
0043 classToFriendly.insert(Values("std::unordered_set<bar::Foo, CustomHash>", "barFooCustomHashstduset"));
0044 classToFriendly.insert(Values("std::unordered_set<std::basic_string<char>, CustomHash>", "StringCustomHashstduset"));
0045 classToFriendly.insert(Values("std::unordered_map<Foo, bar::Bar>", "FoobarBarstdumap"));
0046 classToFriendly.insert(Values("std::unordered_map<std::basic_string<char>, bar::Bar>", "StringbarBarstdumap"));
0047 classToFriendly.insert(Values("std::unordered_map<Foo, std::basic_string<char>>", "FooStringstdumap"));
0048 classToFriendly.insert(Values("std::unordered_map<Foo, bar::Bar, std::hash<Foo>>", "FoobarBarstdumap"));
0049 classToFriendly.insert(
0050 Values("std::unordered_map<std::basic_string<char> , bar::Bar, std::hash<std::basic_string<char> > >",
0051 "StringbarBarstdumap"));
0052 classToFriendly.insert(
0053 Values("std::unordered_map<Foo, std::basic_string<char> , std::hash<Foo>>", "FooStringstdumap"));
0054 classToFriendly.insert(
0055 Values("std::unordered_map<Foo, bar::Bar, std::hash<Foo>, std::equal_to<Foo>>", "FoobarBarstdumap"));
0056 classToFriendly.insert(
0057 Values("std::unordered_map<std::basic_string<char>, bar::Bar, std::hash<std::basic_string<char>>, "
0058 "std::equal_to<std::basic_string<char>>>",
0059 "StringbarBarstdumap"));
0060 classToFriendly.insert(Values("std::unordered_map<Foo, std::basic_string<char>, std::hash<Foo>, std::equal_to<Foo>>",
0061 "FooStringstdumap"));
0062 classToFriendly.insert(
0063 Values("std::unordered_map<Foo, bar::Bar, CustomHash, std::equal_to<Foo>>", "FoobarBarCustomHashstdumap"));
0064 classToFriendly.insert(Values(
0065 "std::unordered_map<std::basic_string<char>, bar::Bar, CustomHash, std::equal_to<std::basic_string<char>>>",
0066 "StringbarBarCustomHashstdumap"));
0067 classToFriendly.insert(Values("std::unordered_map<Foo, std::basic_string<char>, CustomHash, std::equal_to<Foo>>",
0068 "FooStringCustomHashstdumap"));
0069 classToFriendly.insert(Values("std::unordered_map<Foo, bar::Bar, CustomHash>", "FoobarBarCustomHashstdumap"));
0070 classToFriendly.insert(
0071 Values("std::unordered_map<std::basic_string<char>, bar::Bar, CustomHash>", "StringbarBarCustomHashstdumap"));
0072 classToFriendly.insert(
0073 Values("std::unordered_map<Foo, std::basic_string<char>, CustomHash>", "FooStringCustomHashstdumap"));
0074 classToFriendly.insert(Values("std::shared_ptr<Foo>", "FooSharedPtr"));
0075 classToFriendly.insert(Values("std::shared_ptr<bar::Foo>", "barFooSharedPtr"));
0076 classToFriendly.insert(Values("std::basic_string<char>", "String"));
0077 classToFriendly.insert(Values("std::string", "String"));
0078 classToFriendly.insert(Values("std::__cxx11::basic_string<char>", "String"));
0079 classToFriendly.insert(Values("std::__cxx11::basic_string<char,std::char_traits<char> >", "String"));
0080 classToFriendly.insert(Values("std::list<int>", "intstdlist"));
0081 classToFriendly.insert(Values("std::__cxx11::list<int>", "intstdlist"));
0082 classToFriendly.insert(Values("std::vector<std::shared_ptr<bar::Foo>>", "barFooSharedPtrs"));
0083 classToFriendly.insert(Values("std::vector<std::basic_string<char>>", "Strings"));
0084 classToFriendly.insert(Values("std::__cxx11::vector<std::__cxx11::basic_string<char>>", "Strings"));
0085 classToFriendly.insert(Values("std::unique_ptr<Foo>", "FooUniquePtr"));
0086 classToFriendly.insert(Values("std::unique_ptr<bar::Foo>", "barFooUniquePtr"));
0087 classToFriendly.insert(Values("std::unique_ptr<const Foo>", "constFooUniquePtr"));
0088 classToFriendly.insert(Values("const std::unique_ptr<Foo>", "FooconstUniquePtr"));
0089 classToFriendly.insert(Values("std::unique_ptr<Foo,std::default_delete<Foo>>", "FooUniquePtr"));
0090 classToFriendly.insert(Values("std::unique_ptr<const Foo, std::default_delete<const Foo>>", "constFooUniquePtr"));
0091 classToFriendly.insert(
0092 Values("std::unique_ptr<std::unique_ptr<Bar,std::default_delete<Bar>>,std::default_delete<std::unique_ptr<Bar,"
0093 "std::default_delete<Bar>>>>",
0094 "BarUniquePtrUniquePtr"));
0095 classToFriendly.insert(Values("std::vector<std::unique_ptr<bar::Foo>>", "barFooUniquePtrs"));
0096 classToFriendly.insert(
0097 Values("std::vector<std::unique_ptr<bar::Foo, std::default_delete<bar::Foo>>>", "barFooUniquePtrs"));
0098 classToFriendly.insert(Values("std::vector<std::unique_ptr<const Foo>>", "constFooUniquePtrs"));
0099 classToFriendly.insert(
0100 Values("std::unique_ptr<std::vector<std::unique_ptr<bar::Foo>>>", "barFooUniquePtrsUniquePtr"));
0101 classToFriendly.insert(
0102 Values("std::unique_ptr<std::vector<std::unique_ptr<bar::Foo>>, "
0103 "std::default_delete<std::vector<std::unique_ptr<bar::Foo>>>>",
0104 "barFooUniquePtrsUniquePtr"));
0105 classToFriendly.insert(
0106 Values("std::unique_ptr<std::vector<std::unique_ptr<bar::Foo, std::default_delete<bar::Foo>>>>",
0107 "barFooUniquePtrsUniquePtr"));
0108 classToFriendly.insert(
0109 Values("std::unique_ptr<std::vector<std::unique_ptr<bar::Foo, std::default_delete<bar::Foo>>>, "
0110 "std::default_delete<std::vector<std::unique_ptr<bar::Foo, std::default_delete<bar::Foo>>>>>",
0111 "barFooUniquePtrsUniquePtr"));
0112 classToFriendly.insert(Values("V<A,B>", "ABV"));
0113 classToFriendly.insert(Values("edm::ExtCollection<std::vector<reco::SuperCluster>,reco::SuperClusterRefProds>",
0114 "recoSuperClustersrecoSuperClusterRefProdsedmExtCollection"));
0115 classToFriendly.insert(
0116 Values("edm::SortedCollection<EcalUncalibratedRecHit,edm::StrictWeakOrdering<EcalUncalibratedRecHit> >",
0117 "EcalUncalibratedRecHitsSorted"));
0118 classToFriendly.insert(
0119 Values("edm::OwnVector<aod::Candidate,edm::ClonePolicy<aod::Candidate> >", "aodCandidatesOwned"));
0120 classToFriendly.insert(Values("edm::OwnVector<Foo,edm::ClonePolicy<Foo> >", "FoosOwned"));
0121 classToFriendly.insert(Values("edm::OwnVector<My<int>, edm::ClonePolicy<My<int> > >", "intMysOwned"));
0122 classToFriendly.insert(Values("std::vector<edm::OwnVector<My<int>, edm::ClonePolicy<My<int> > > >", "intMysOwneds"));
0123 classToFriendly.insert(
0124 Values("edm::Wrapper<MuonDigiCollection<CSCDetId,CSCALCTDigi> >", "CSCDetIdCSCALCTDigiMuonDigiCollection"));
0125 classToFriendly.insert(
0126 Values("edm::AssociationMap<edm::OneToMany<std::vector<CaloJet>,std::vector<reco::Track>,unsigned int> >",
0127 "CaloJetsToManyrecoTracksAssociation"));
0128 classToFriendly.insert(
0129 Values("edm::AssociationMap<edm::OneToOne<std::vector<reco::Track>,std::vector<reco::TrackInfo>,unsigned int> >",
0130 "recoTracksToOnerecoTrackInfosAssociation"));
0131 classToFriendly.insert(Values("edm::AssociationMap<edm::OneToValue<std::vector<reco::Electron>,float,unsigned int> >",
0132 "recoElectronsToValuefloatAssociation"));
0133 classToFriendly.insert(
0134 Values("edm::AssociationMap<edm::OneToManyWithQuality<edm::OwnVector<reco::Candidate,edm::ClonePolicy<reco::"
0135 "Candidate> >,edm::OwnVector<reco::Candidate,edm::ClonePolicy<reco::Candidate> >,double,unsigned int> >",
0136 "recoCandidatesOwnedToManyrecoCandidatesOwnedWithQuantitydoubleAssociation"));
0137 classToFriendly.insert(
0138 Values("edm::AssociationVector<edm::RefProd<std::vector<reco::CaloJet> "
0139 ">,std::vector<int>,edm::Ref<std::vector<reco::CaloJet>,reco::CaloJet,edm::refhelper::FindUsingAdvance<"
0140 "std::vector<reco::CaloJet>,reco::CaloJet> >,unsigned int,edm::helper::AssociationIdenticalKeyReference>",
0141 "recoCaloJetsedmRefProdTointsAssociationVector"));
0142 classToFriendly.insert(
0143 Values("edm::AssociationVector<edm::RefProd<edm::OwnVector<reco::Candidate,edm::ClonePolicy<reco::Candidate> > "
0144 ">,std::vector<double>,edm::Ref<edm::OwnVector<reco::Candidate,edm::ClonePolicy<reco::Candidate> "
0145 ">,reco::Candidate,edm::refhelper::FindUsingAdvance<edm::OwnVector<reco::Candidate,edm::ClonePolicy<reco::"
0146 "Candidate> >,reco::Candidate> >,unsigned int,edm::helper::AssociationIdenticalKeyReference>",
0147 "recoCandidatesOwnededmRefProdTodoublesAssociationVector"));
0148 classToFriendly.insert(
0149 Values("edm::AssociationMap<edm::OneToOne<std::vector<reco::Track>,std::vector<std::pair<double,double> "
0150 ">,unsigned int> >",
0151 "recoTracksToOnedoubledoublestdpairsAssociation"));
0152 classToFriendly.insert(
0153 Values("edm::AssociationMap<edm::OneToOne<std::vector<reco::Track>,std::vector<std::pair<Point3DBase<float,"
0154 "GlobalTag>,GlobalErrorBase<double,ErrorMatrixTag> > >,unsigned int> >",
0155 "recoTracksToOnefloatGlobalTagPoint3DBasedoubleErrorMatrixTagGlobalErrorBasestdpairsAssociation"));
0156 classToFriendly.insert(Values("A<B<C>, D<E> >", "CBEDA"));
0157 classToFriendly.insert(Values("A<B<C<D> > >", "DCBA"));
0158 classToFriendly.insert(Values("A<B<C,D>, E<F> >", "CDBFEA"));
0159 classToFriendly.insert(Values("Aa<Bb<Cc>, Dd<Ee> >", "CcBbEeDdAa"));
0160 classToFriendly.insert(Values("Aa<Bb<Cc<Dd> > >", "DdCcBbAa"));
0161 classToFriendly.insert(Values("Aa<Bb<Cc,Dd>, Ee<Ff> >", "CcDdBbFfEeAa"));
0162 classToFriendly.insert(Values("Aa<Bb<Cc,Dd>, Ee<Ff,Gg> >", "CcDdBbFfGgEeAa"));
0163 classToFriendly.insert(
0164 Values("edm::RangeMap<DetId,edm::OwnVector<SiPixelRecHit,edm::ClonePolicy<SiPixelRecHit> "
0165 ">,edm::ClonePolicy<SiPixelRecHit> >",
0166 "DetIdSiPixelRecHitsOwnedRangeMap"));
0167 classToFriendly.insert(
0168 Values("std::vector<edm::RangeMap<DetId,edm::OwnVector<SiPixelRecHit,edm::ClonePolicy<SiPixelRecHit> "
0169 ">,edm::ClonePolicy<SiPixelRecHit> > >",
0170 "DetIdSiPixelRecHitsOwnedRangeMaps"));
0171 classToFriendly.insert(
0172 Values("edm::RefVector< edm::OwnVector<reco::Candidate,edm::ClonePolicy<reco::Candidate> >,reco::Candidate, "
0173 "edm::refhelper::FindUsingAdvance<edm::OwnVector<reco::Candidate,edm::ClonePolicy<reco::Candidate> >, "
0174 "reco::Candidate> >",
0175 "recoCandidatesOwnedRefs"));
0176 classToFriendly.insert(
0177 Values("edm::RefVector< std::vector<reco::Track>, reco::Track, "
0178 "edm::refhelper::FindUsingAdvance<std::vector<reco::Track>, reco::Track> >",
0179 "recoTracksRefs"));
0180 classToFriendly.insert(
0181 Values("edm::RefVector<Col, Type, edm::refhelper::FindUsingAdvance<Col, Type> >", "ColTypeRefs"));
0182 classToFriendly.insert(
0183 Values("edm::AssociationMap<edm::OneToMany<std::vector<reco::PixelMatchGsfElectron>,edm::SortedCollection<"
0184 "EcalRecHit,edm::StrictWeakOrdering<EcalRecHit> >,unsigned int> >",
0185 "recoPixelMatchGsfElectronsToManyEcalRecHitsSortedAssociation"));
0186 classToFriendly.insert(
0187 Values("edm::AssociationVector<edm::RefToBaseProd<reco::Candidate>,std::vector<double>,edm::RefToBase<reco::"
0188 "Candidate>,unsigned int,edm::helper::AssociationIdenticalKeyReference>",
0189 "recoCandidateedmRefToBaseProdTodoublesAssociationVector"));
0190 classToFriendly.insert(
0191 Values("edm::RefVector<edm::AssociationMap<edm::OneToOne<std::vector<reco::BasicCluster>,std::vector<reco::"
0192 "ClusterShape>,unsigned int> "
0193 ">,edm::helpers::KeyVal<edm::Ref<std::vector<reco::BasicCluster>,reco::BasicCluster,edm::refhelper::"
0194 "FindUsingAdvance<std::vector<reco::BasicCluster>,reco::BasicCluster> "
0195 ">,edm::Ref<std::vector<reco::ClusterShape>,reco::ClusterShape,edm::refhelper::FindUsingAdvance<std::"
0196 "vector<reco::ClusterShape>,reco::ClusterShape> > "
0197 ">,edm::AssociationMap<edm::OneToOne<std::vector<reco::BasicCluster>,std::vector<reco::ClusterShape>,"
0198 "unsigned int> >::Find>",
0199 "recoBasicClustersToOnerecoClusterShapesAssociationRefs"));
0200 classToFriendly.insert(
0201 Values("edmNew::DetSetVector<edm::Ref<edmNew::DetSetVector<SiPixelCluster>,SiPixelCluster,edmNew::DetSetVector<"
0202 "SiPixelCluster>::FindForDetSetVector> >",
0203 "SiPixelClusteredmNewDetSetVectorSiPixelClusterSiPixelClusteredmNewDetSetVectorFindForDetSetVectoredmRefed"
0204 "mNewDetSetVector"));
0205 classToFriendly.insert(
0206 Values("std::vector<std::pair<const pat::Muon *, TLorentzVector>>", "constpatMuonptrTLorentzVectorstdpairs"));
0207 classToFriendly.insert(Values("int[]", "intAs"));
0208 classToFriendly.insert(Values("foo<int[]>", "intAsfoo"));
0209 classToFriendly.insert(Values("bar<foo<int[]>>", "intAsfoobar"));
0210
0211
0212 classToFriendly.insert(Values("alpaka::DevCpu", "alpakaDevCpu"));
0213 classToFriendly.insert(Values("alpaka::DevUniformCudaHipRt<alpaka::ApiCudaRt>", "alpakaDevCudaRt"));
0214 classToFriendly.insert(Values("alpaka::DevUniformCudaHipRt<alpaka::ApiHipRt>", "alpakaDevHipRt"));
0215 classToFriendly.insert(Values("alpaka::QueueGenericThreadsBlocking<alpaka::DevCpu>", "alpakaQueueCpuBlocking"));
0216 classToFriendly.insert(Values("alpaka::QueueGenericThreadsNonBlocking<alpaka::DevCpu>", "alpakaQueueCpuNonBlocking"));
0217 classToFriendly.insert(Values("alpaka::uniform_cuda_hip::detail::QueueUniformCudaHipRt<alpaka::ApiCudaRt,true>",
0218 "alpakaQueueCudaRtBlocking"));
0219 classToFriendly.insert(Values("alpaka::uniform_cuda_hip::detail::QueueUniformCudaHipRt<alpaka::ApiCudaRt,false>",
0220 "alpakaQueueCudaRtNonBlocking"));
0221 classToFriendly.insert(Values("alpaka::uniform_cuda_hip::detail::QueueUniformCudaHipRt<alpaka::ApiHipRt,true>",
0222 "alpakaQueueHipRtBlocking"));
0223 classToFriendly.insert(Values("alpaka::uniform_cuda_hip::detail::QueueUniformCudaHipRt<alpaka::ApiHipRt,false>",
0224 "alpakaQueueHipRtNonBlocking"));
0225
0226 for (std::map<std::string, std::string>::iterator itInfo = classToFriendly.begin(), itInfoEnd = classToFriendly.end();
0227 itInfo != itInfoEnd;
0228 ++itInfo) {
0229
0230 if (itInfo->second != edm::friendlyname::friendlyName(itInfo->first)) {
0231 std::cout << "class name: '" << itInfo->first << "' has wrong friendly name \n"
0232 << "expect: '" << itInfo->second << "' got: '" << edm::friendlyname::friendlyName(itInfo->first) << "'"
0233 << std::endl;
0234 }
0235 REQUIRE(itInfo->second == edm::friendlyname::friendlyName(itInfo->first));
0236 }
0237 }