diff --git a/tree/treeplayer/test/dataframe/vecops_tvec.cxx b/tree/treeplayer/test/dataframe/vecops_tvec.cxx index 71d3c0ed62e2cc491aa2ac06f49edc297050032e..bf908104f575431e82415c7c665170c9cd49741f 100644 --- a/tree/treeplayer/test/dataframe/vecops_tvec.cxx +++ b/tree/treeplayer/test/dataframe/vecops_tvec.cxx @@ -1,5 +1,9 @@ #include <gtest/gtest.h> #include <ROOT/TVec.hxx> +#include <ROOT/TSeq.hxx> +#include <TFile.h> +#include <TTree.h> +#include <TSystem.h> #include <vector> #include <sstream> @@ -358,3 +362,111 @@ TEST(VecOps, PhysicsSelections) ROOT::Experimental::VecOps::TVec<float> goodMuons_pt_ref = {56.f, 32.f, 24.f}; CheckEqual(goodMuons_pt, goodMuons_pt_ref, "Muons quality cut"); } + +template<typename T0> +void CheckEq(const T0 &v, const T0 &ref) +{ + auto vsize = v.size(); + auto refsize = ref.size(); + EXPECT_EQ(vsize, refsize) << "Sizes are: " << vsize << " " << refsize << std::endl; + for (auto i : ROOT::TSeqI(vsize)) { + EXPECT_EQ(v[i], ref[i]) << "TVecs differ: " << v << " " << ref << std::endl; + } +} + +TEST(VecOps, inputOutput) +{ + auto filename = "vecops_inputoutput.root"; + auto treename = "t"; + + const ROOT::Experimental::VecOps::TVec<double> dref {1., 2., 3.}; + const ROOT::Experimental::VecOps::TVec<float> fref {1.f, 2.f, 3.f}; + const ROOT::Experimental::VecOps::TVec<UInt_t> uiref {1, 2, 3}; + const ROOT::Experimental::VecOps::TVec<ULong_t> ulref {1UL, 2UL, 3UL}; + const ROOT::Experimental::VecOps::TVec<ULong64_t> ullref {1ULL, 2ULL, 3ULL}; + const ROOT::Experimental::VecOps::TVec<UShort_t> usref {1, 2, 3}; + const ROOT::Experimental::VecOps::TVec<UChar_t> ucref {1, 2, 3}; + const ROOT::Experimental::VecOps::TVec<Int_t> iref {1, 2, 3};; + const ROOT::Experimental::VecOps::TVec<Long_t> lref {1UL, 2UL, 3UL};; + const ROOT::Experimental::VecOps::TVec<Long64_t> llref {1ULL, 2ULL, 3ULL}; + const ROOT::Experimental::VecOps::TVec<Short_t> sref {1, 2, 3}; + const ROOT::Experimental::VecOps::TVec<Char_t> cref {1, 2, 3}; + + { + ROOT::Experimental::VecOps::TVec<double> d = dref; + ROOT::Experimental::VecOps::TVec<float> f = fref; + ROOT::Experimental::VecOps::TVec<UInt_t> ui = uiref; + ROOT::Experimental::VecOps::TVec<ULong_t> ul = ulref; + ROOT::Experimental::VecOps::TVec<ULong64_t> ull = ullref; + ROOT::Experimental::VecOps::TVec<UShort_t> us = usref; + ROOT::Experimental::VecOps::TVec<UChar_t> uc = ucref; + ROOT::Experimental::VecOps::TVec<Int_t> i = iref; + ROOT::Experimental::VecOps::TVec<Long_t> l = lref; + ROOT::Experimental::VecOps::TVec<Long64_t> ll = llref; + ROOT::Experimental::VecOps::TVec<Short_t> s = sref; + ROOT::Experimental::VecOps::TVec<Char_t> c = cref; + TFile file(filename, "RECREATE"); + TTree t(treename, treename); + t.Branch("d", &d); + t.Branch("f", &f); + t.Branch("ui", &ui); + t.Branch("ul", &ul); + t.Branch("ull", &ull); + t.Branch("us", &us); + t.Branch("uc", &uc); + t.Branch("i", &i); + t.Branch("l", &l); + t.Branch("ll", &ll); + t.Branch("s", &s); + t.Branch("c", &c); + t.Fill(); + t.Write(); + } + + auto d = new ROOT::Experimental::VecOps::TVec<double>(); + auto f = new ROOT::Experimental::VecOps::TVec<float>; + auto ui = new ROOT::Experimental::VecOps::TVec<UInt_t>(); + auto ul = new ROOT::Experimental::VecOps::TVec<ULong_t>(); + auto ull = new ROOT::Experimental::VecOps::TVec<ULong64_t>(); + auto us = new ROOT::Experimental::VecOps::TVec<UShort_t>(); + auto uc = new ROOT::Experimental::VecOps::TVec<UChar_t>(); + auto i = new ROOT::Experimental::VecOps::TVec<Int_t>(); + auto l = new ROOT::Experimental::VecOps::TVec<Long_t>(); + auto ll = new ROOT::Experimental::VecOps::TVec<Long64_t>(); + auto s = new ROOT::Experimental::VecOps::TVec<Short_t>(); + auto c = new ROOT::Experimental::VecOps::TVec<Char_t>(); + + TFile file(filename); + TTree *tp; + file.GetObject(treename, tp); + auto &t = *tp; + + t.SetBranchAddress("d", &d); + t.SetBranchAddress("f", &f); + t.SetBranchAddress("ui", &ui); + t.SetBranchAddress("ul", &ul); + t.SetBranchAddress("ull", &ull); + t.SetBranchAddress("us", &us); + t.SetBranchAddress("uc", &uc); + t.SetBranchAddress("i", &i); + t.SetBranchAddress("l", &l); + t.SetBranchAddress("ll", &ll); + t.SetBranchAddress("s", &s); + t.SetBranchAddress("c", &c); + + t.GetEntry(0); + CheckEq(*d, dref); + CheckEq(*f, fref); + CheckEq(*d, dref); + CheckEq(*f, fref); + CheckEq(*d, dref); + CheckEq(*f, fref); + CheckEq(*d, dref); + CheckEq(*f, fref); + CheckEq(*d, dref); + CheckEq(*f, fref); + + gSystem->Unlink(filename); + +} +