Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2025-07-31 02:19:15

0001 /*
0002  *  friendlyname_t.cppunit.cc
0003  *  CMSSW
0004  *
0005  *  Created by Chris Jones on 8/8/05.
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   // Alpaka types
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     //std::cout <<itInfo->first<<std::endl;
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 }