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 }