go-hep.org/x/hep@v0.38.1/groot/rtree/rbasket_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 "reflect" 9 "testing" 10 11 "go-hep.org/x/hep/groot/riofs" 12 ) 13 14 func TestReadAheadBasket(t *testing.T) { 15 for _, tc := range []struct { 16 fname string 17 tree string 18 branch string 19 conc int 20 want []rspan 21 }{ 22 { 23 fname: "../testdata/simple.root", 24 tree: "tree", 25 branch: "two", 26 conc: -1, 27 want: []rspan{{beg: 0, end: 4, pos: 304, sz: 86}}, 28 }, 29 { 30 fname: "../testdata/simple.root", 31 tree: "tree", 32 branch: "two", 33 conc: 0, 34 want: []rspan{{beg: 0, end: 4, pos: 304, sz: 86}}, 35 }, 36 { 37 fname: "../testdata/simple.root", 38 tree: "tree", 39 branch: "two", 40 conc: 1, 41 want: []rspan{{beg: 0, end: 4, pos: 304, sz: 86}}, 42 }, 43 { 44 fname: "../testdata/simple.root", 45 tree: "tree", 46 branch: "two", 47 conc: 10, 48 want: []rspan{{beg: 0, end: 4, pos: 304, sz: 86}}, 49 }, 50 { 51 fname: "../testdata/small-flat-tree.root", 52 tree: "tree", 53 branch: "Float64", 54 conc: 10, 55 want: []rspan{{beg: 0, end: 100, pos: 1551, sz: 297}}, 56 }, 57 { 58 fname: "../testdata/small-flat-tree.root", 59 tree: "tree", 60 branch: "SliceFloat64", 61 conc: -1, 62 want: []rspan{{beg: 0, end: 100, pos: 8112, sz: 690}}, 63 }, 64 { 65 fname: "../testdata/chain.flat.1.root", 66 tree: "tree", 67 branch: "SliF64", 68 conc: 10, 69 want: []rspan{{beg: 0, end: 5, pos: 3770, sz: 125}}, 70 }, 71 } { 72 t.Run(tc.fname+"-"+tc.branch, func(t *testing.T) { 73 f, err := riofs.Open(tc.fname) 74 if err != nil { 75 t.Fatal(err) 76 } 77 defer f.Close() 78 79 o, err := f.Get(tc.tree) 80 if err != nil { 81 t.Fatal(err) 82 } 83 84 var ( 85 tree = o.(Tree) 86 b = tree.Branch(tc.branch) 87 beg = int64(0) 88 end = tree.Entries() 89 ) 90 91 ra := newBkReader(b, tc.conc, beg, end) 92 defer ra.close() 93 94 var got []rspan 95 for i := range ra.spans { 96 rbk, err := ra.read() 97 if err != nil { 98 t.Fatalf("could not read basket %d: %+v", i, err) 99 } 100 got = append(got, rbk.span) 101 } 102 103 if !reflect.DeepEqual(got, tc.want) { 104 t.Fatalf("invalid spans:\ngot= %#v\nwant=%#v", got, tc.want) 105 } 106 }) 107 } 108 }