go-hep.org/x/hep@v0.38.1/hbook/binning2d_test.go (about)

     1  // Copyright ©2016 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 hbook
     6  
     7  import "testing"
     8  
     9  func TestAxis2DCoords(t *testing.T) {
    10  	bng := newBinning2D(10, -1, 1, 40, -2, +2)
    11  	if nx, want := bng.Nx, 10; nx != want {
    12  		t.Errorf("got nx=%d. want=%d\n", nx, want)
    13  	}
    14  	if ny, want := bng.Ny, 40; ny != want {
    15  		t.Errorf("got ny=%d. want=%d\n", ny, want)
    16  	}
    17  	for i, test := range []struct {
    18  		x, y float64
    19  		want int
    20  	}{
    21  		{x: -1.00, y: -2.00, want: 0},
    22  		{x: +0.01, y: -2.00, want: 5},
    23  		{x: +0.90, y: -2.00, want: 9},
    24  		{x: -1.00, y: -1.90, want: 10},
    25  		{x: +0.01, y: -1.90, want: 15},
    26  		{x: +0.90, y: -1.90, want: 19},
    27  		{x: -1.00, y: -1.00, want: 100},
    28  		{x: +0.01, y: -1.00, want: 105},
    29  		{x: +0.90, y: -1.00, want: 109},
    30  		{x: -0.99, y: +0.01, want: 200},
    31  		{x: +0.01, y: +0.01, want: 205},
    32  		{x: +0.90, y: +0.01, want: 209},
    33  		{x: -0.99, y: +1.01, want: 300},
    34  		{x: +0.01, y: +1.01, want: 305},
    35  		{x: +0.99, y: +1.01, want: 309},
    36  		{x: -0.99, y: +1.9001, want: 390},
    37  		{x: +0.01, y: +1.9001, want: 395},
    38  		{x: +0.99, y: +1.9001, want: bng.Nx*bng.Ny - 1},
    39  		{x: +0.00, y: +2.00, want: -BngN},
    40  		{x: +0.00, y: -2.10, want: -BngS},
    41  		{x: +1.00, y: +2.00, want: -BngNE},
    42  		{x: +1.00, y: -2.00, want: -BngE},
    43  		{x: +1.00, y: -2.10, want: -BngSE},
    44  		{x: -1.10, y: -2.10, want: -BngSW},
    45  		{x: -1.10, y: -2.00, want: -BngW},
    46  		{x: -1.10, y: +2.00, want: -BngNW},
    47  	} {
    48  		got := bng.coordToIndex(test.x, test.y)
    49  		if got != test.want {
    50  			t.Errorf("error: coords[%d](%v, %v). got=%d, want=%d\n", i, test.x, test.y, got, test.want)
    51  			if got >= 0 && test.want >= 0 {
    52  				gbin := bng.Bins[got]
    53  				wbin := bng.Bins[test.want]
    54  				t.Errorf("got.bin.x= %+v\n", gbin.XRange)
    55  				t.Errorf("got.bin.y= %+v\n", gbin.YRange)
    56  				t.Errorf("wnt.bin.x= %+v\n", wbin.XRange)
    57  				t.Errorf("wnt.bin.y= %+v\n", wbin.YRange)
    58  			}
    59  		}
    60  	}
    61  }
    62  
    63  func TestAxis2DCoordsFromEdges(t *testing.T) {
    64  	bng := newBinning2DFromEdges(
    65  		[]float64{-1.0, -0.8, -0.6, -0.4, -0.2, 0.0, 0.2, 0.4, 0.6, 0.8, 1.},
    66  		[]float64{
    67  			-2.0, -1.9, -1.8, -1.7, -1.6, -1.5, -1.4, -1.3, -1.2, -1.1,
    68  			-1.0, -0.9, -0.8, -0.7, -0.6, -0.5, -0.4, -0.3, -0.2, -0.1,
    69  			+0.0, +0.1, +0.2, +0.3, +0.4, +0.5, +0.6, +0.7, +0.8, +0.9,
    70  			+1.0, +1.1, +1.2, +1.3, +1.4, +1.5, +1.6, +1.7, +1.8, +1.9,
    71  			+2.0,
    72  		},
    73  	)
    74  	if nx, want := bng.Nx, 10; nx != want {
    75  		t.Errorf("got nx=%d. want=%d\n", nx, want)
    76  	}
    77  	if ny, want := bng.Ny, 40; ny != want {
    78  		t.Errorf("got ny=%d. want=%d\n", ny, want)
    79  	}
    80  	for i, test := range []struct {
    81  		x, y float64
    82  		want int
    83  	}{
    84  		{x: -1.0, y: -2.0, want: 0},
    85  		{x: +0.0, y: -2.0, want: 5},
    86  		{x: +0.9, y: -2.0, want: 9},
    87  		{x: -1.0, y: -1.9, want: 10},
    88  		{x: +0.0, y: -1.9, want: 15},
    89  		{x: +0.9, y: -1.9, want: 19},
    90  		{x: -1.0, y: -1.0, want: 100},
    91  		{x: +0.0, y: -1.0, want: 105},
    92  		{x: +0.9, y: -1.0, want: 109},
    93  		{x: -1.0, y: +0.0, want: 200},
    94  		{x: +0.0, y: +0.0, want: 205},
    95  		{x: +0.9, y: +0.0, want: 209},
    96  		{x: -1.0, y: +1.0, want: 300},
    97  		{x: +0.0, y: +1.0, want: 305},
    98  		{x: +0.9, y: +1.0, want: 309},
    99  		{x: -1.0, y: +1.9, want: 390},
   100  		{x: +0.0, y: +1.9, want: 395},
   101  		{x: +0.9, y: +1.9, want: bng.Nx*bng.Ny - 1},
   102  		{x: +0.0, y: +2.0, want: -BngN},
   103  		{x: +0.0, y: -2.1, want: -BngS},
   104  		{x: +1.0, y: +2.0, want: -BngNE},
   105  		{x: +1.0, y: -2.0, want: -BngE},
   106  		{x: +1.0, y: -2.1, want: -BngSE},
   107  		{x: -1.1, y: -2.1, want: -BngSW},
   108  		{x: -1.1, y: -2.0, want: -BngW},
   109  		{x: -1.1, y: +2.0, want: -BngNW},
   110  	} {
   111  		if got := bng.coordToIndex(test.x, test.y); got != test.want {
   112  			t.Errorf("error: coords[%d](%v, %v). got=%d, want=%d\n", i, test.x, test.y, got, test.want)
   113  		}
   114  	}
   115  }