go-hep.org/x/hep@v0.38.1/groot/rtree/rjoin_test.go (about) 1 // Copyright ©2020 The go-hep Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package rtree 6 7 import ( 8 "testing" 9 10 "go-hep.org/x/hep/groot/riofs" 11 ) 12 13 func TestRJoin(t *testing.T) { 14 get := func(fname, tname string) (Tree, func() error) { 15 t.Helper() 16 17 f, err := riofs.Open(fname) 18 if err != nil { 19 t.Fatal(err) 20 } 21 tree, err := f.Get(tname) 22 if err != nil { 23 _ = f.Close() 24 t.Fatal(err) 25 } 26 return tree.(Tree), f.Close 27 } 28 chk := func(f func() error) { 29 err := f() 30 if err != nil { 31 t.Fatal(err) 32 } 33 } 34 35 t1, close1 := get("../testdata/join1.root", "j1") 36 defer chk(close1) 37 38 t2, close2 := get("../testdata/join2.root", "j2") 39 defer chk(close2) 40 41 t3, close3 := get("../testdata/join3.root", "j3") 42 defer chk(close3) 43 44 for _, tc := range []struct { 45 name string 46 trees []Tree 47 rvars []ReadVar 48 err error 49 beg int64 50 end int64 51 fct func(RCtx) error 52 }{ 53 { 54 name: "all", 55 trees: []Tree{t1, t2, t3}, 56 beg: 0, 57 end: 10, 58 fct: func(RCtx) error { return nil }, 59 }, 60 { 61 name: "sub-range", 62 trees: []Tree{t1, t2, t3}, 63 beg: 3, 64 end: 4, 65 fct: func(RCtx) error { return nil }, 66 }, 67 { 68 name: "empty-range", 69 trees: []Tree{t1, t2, t3}, 70 beg: 3, 71 end: 3, 72 fct: func(RCtx) error { return nil }, 73 }, 74 } { 75 t.Run(tc.name, func(t *testing.T) { 76 join, err := Join(tc.trees...) 77 if err != nil { 78 t.Fatalf("could not create joined-tree: %+v", err) 79 } 80 81 rvars := tc.rvars 82 if rvars == nil { 83 rvars = NewReadVars(join) 84 } 85 86 r, err := NewReader(join, rvars, WithRange(tc.beg, tc.end)) 87 if err != nil { 88 t.Fatalf("could not create reader: %+v", err) 89 } 90 defer r.Close() 91 92 err = r.Read(tc.fct) 93 if err != nil { 94 t.Fatalf("could not run reader: %+v", err) 95 } 96 }) 97 } 98 }