go-hep.org/x/hep@v0.38.1/groot/riofs/plugin/http/span_test.go (about) 1 // Copyright ©2022 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 http 6 7 import ( 8 "reflect" 9 "testing" 10 ) 11 12 func TestSpanSplit(t *testing.T) { 13 mk := func(beg, end int64) span { 14 return span{ 15 off: beg, 16 len: end - beg, 17 } 18 } 19 from := func(vs ...int64) []span { 20 if len(vs) == 0 { 21 return nil 22 } 23 o := make([]span, 0, len(vs)/2) 24 for i := 0; i < len(vs); i += 2 { 25 o = append(o, mk(vs[i], vs[i+1])) 26 } 27 return o 28 } 29 for _, tc := range []struct { 30 spans []span 31 sp span 32 want []span 33 }{ 34 { 35 spans: from(), 36 sp: span{0, 2}, 37 want: from(0, 2), 38 }, 39 // 1-1 intersects 40 { 41 spans: from(2, 4), 42 sp: mk(0, 3), 43 want: from(0, 2), 44 }, 45 { 46 spans: from(2, 4), 47 sp: mk(3, 5), 48 want: from(4, 5), 49 }, 50 { 51 spans: from(2, 5), 52 sp: mk(3, 4), 53 want: from(), 54 }, 55 { 56 spans: from(2, 4), 57 sp: mk(0, 5), 58 want: from(0, 2, 4, 5), 59 }, 60 { 61 spans: from(2, 4), 62 sp: mk(0, 4), 63 want: from(0, 2), 64 }, 65 { 66 spans: from(2, 4), 67 sp: mk(2, 5), 68 want: from(4, 5), 69 }, 70 { 71 spans: from(2, 4), 72 sp: mk(0, 2), 73 want: from(0, 2), 74 }, 75 { 76 spans: from(2, 4), 77 sp: mk(0, 1), 78 want: from(0, 1), 79 }, 80 { 81 spans: from(2, 4), 82 sp: mk(4, 6), 83 want: from(4, 6), 84 }, 85 { 86 spans: from(2, 4), 87 sp: mk(5, 6), 88 want: from(5, 6), 89 }, 90 // 91 { 92 spans: from(0, 4, 5, 7), 93 sp: mk(0, 7), 94 want: from(4, 5), 95 }, 96 { 97 spans: from(0, 4, 5, 7), 98 sp: mk(0, 6), 99 want: from(4, 5), 100 }, 101 { 102 spans: from(0, 4, 5, 7), 103 sp: mk(7, 9), 104 want: from(7, 9), 105 }, 106 // 2-1 intersects 107 { 108 spans: from(1, 4, 6, 8), 109 sp: mk(3, 7), 110 want: from(4, 6), 111 }, 112 { 113 spans: from(1, 4, 6, 8), 114 sp: mk(3, 10), 115 want: from(4, 6, 8, 10), 116 }, 117 { 118 spans: from(1, 4, 6, 8), 119 sp: mk(3, 5), 120 want: from(4, 5), 121 }, 122 { 123 spans: from(1, 4, 6, 8), 124 sp: mk(1, 5), 125 want: from(4, 5), 126 }, 127 { 128 spans: from(1, 4, 6, 8), 129 sp: mk(1, 7), 130 want: from(4, 6), 131 }, 132 { 133 spans: from(1, 4, 6, 8), 134 sp: mk(1, 10), 135 want: from(4, 6, 8, 10), 136 }, 137 { 138 spans: from(1, 4, 6, 8), 139 sp: mk(0, 5), 140 want: from(0, 1, 4, 5), 141 }, 142 { 143 spans: from(1, 4, 6, 8), 144 sp: mk(0, 7), 145 want: from(0, 1, 4, 6), 146 }, 147 { 148 spans: from(1, 4, 6, 8), 149 sp: mk(0, 10), 150 want: from(0, 1, 4, 6, 8, 10), 151 }, 152 { 153 spans: from(1, 4, 6, 8), 154 sp: mk(4, 5), 155 want: from(4, 5), 156 }, 157 { 158 spans: from(1, 4, 6, 8), 159 sp: mk(4, 7), 160 want: from(4, 6), 161 }, 162 { 163 spans: from(1, 4, 6, 8), 164 sp: mk(4, 10), 165 want: from(4, 6, 8, 10), 166 }, 167 { 168 spans: from(1, 4, 6, 8), 169 sp: mk(1, 8), 170 want: from(4, 6), 171 }, 172 { 173 spans: from(1, 4, 6, 8), 174 sp: mk(1, 4), 175 want: from(), 176 }, 177 { 178 spans: from(1, 4, 6, 8), 179 sp: mk(1, 6), 180 want: from(4, 6), 181 }, 182 { 183 spans: from(1, 4, 6, 8), 184 sp: mk(4, 6), 185 want: from(4, 6), 186 }, 187 { 188 spans: from(1, 4, 6, 8), 189 sp: mk(4, 8), 190 want: from(4, 6), 191 }, 192 { 193 spans: from(1, 4, 6, 8), 194 sp: mk(6, 8), 195 want: from(), 196 }, 197 } { 198 t.Run("", func(t *testing.T) { 199 got := split(tc.sp, tc.spans) 200 if !reflect.DeepEqual(got, tc.want) { 201 t.Fatalf("invalid split:\ngot= %+v\nwant=%+v", got, tc.want) 202 } 203 }) 204 } 205 } 206 207 func TestSpanAdd(t *testing.T) { 208 mk := func(beg, end int64) span { 209 return span{ 210 off: beg, 211 len: end - beg, 212 } 213 } 214 from := func(vs ...int64) []span { 215 if len(vs) == 0 { 216 return nil 217 } 218 o := make([]span, 0, len(vs)/2) 219 for i := 0; i < len(vs); i += 2 { 220 o = append(o, mk(vs[i], vs[i+1])) 221 } 222 return o 223 } 224 for _, tc := range []struct { 225 spans []span 226 sp span 227 want []span 228 }{ 229 { 230 spans: from(), 231 sp: mk(0, 10), 232 want: from(0, 10), 233 }, 234 { 235 spans: from(), 236 sp: mk(9, 10), 237 want: from(9, 10), 238 }, 239 { 240 spans: from(1, 3, 4, 6), 241 sp: mk(3, 4), 242 want: from(1, 6), 243 }, 244 { 245 spans: from(1, 3, 4, 6), 246 sp: mk(0, 1), 247 want: from(0, 3, 4, 6), 248 }, 249 { 250 spans: from(1, 3, 4, 6), 251 sp: mk(6, 10), 252 want: from(1, 3, 4, 10), 253 }, 254 { 255 spans: from(1, 3, 4, 6), 256 sp: mk(7, 10), 257 want: from(1, 3, 4, 6, 7, 10), 258 }, 259 { 260 spans: from(2, 3, 4, 6), 261 sp: mk(0, 1), 262 want: from(0, 1, 2, 3, 4, 6), 263 }, 264 } { 265 t.Run("", func(t *testing.T) { 266 got := make(spans, len(tc.spans)) 267 copy(got, tc.spans) 268 got.add(tc.sp) 269 if !reflect.DeepEqual(got, spans(tc.want)) { 270 t.Fatalf("invalid span-add:\ngot= %+v\nwant=%+v", got, tc.want) 271 } 272 }) 273 } 274 }