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  }