@@ -1455,3 +1455,91 @@ func compareNativeExemplarValues(t *testing.T, exps []*dto.Exemplar, values []fl
1455
1455
}
1456
1456
}
1457
1457
}
1458
+
1459
+ var resultFindBucket int
1460
+
1461
+ func benchmarkFindBucket (b * testing.B , l int ) {
1462
+ h := & histogram {upperBounds : make ([]float64 , l )}
1463
+ for i := range h .upperBounds {
1464
+ h .upperBounds [i ] = float64 (i )
1465
+ }
1466
+ v := float64 (l / 2 )
1467
+
1468
+ b .ResetTimer ()
1469
+ for i := 0 ; i < b .N ; i ++ {
1470
+ resultFindBucket = h .findBucket (v )
1471
+ }
1472
+ }
1473
+
1474
+ func BenchmarkFindBucketShort (b * testing.B ) {
1475
+ benchmarkFindBucket (b , 20 )
1476
+ }
1477
+
1478
+ func BenchmarkFindBucketMid (b * testing.B ) {
1479
+ benchmarkFindBucket (b , 40 )
1480
+ }
1481
+
1482
+ func BenchmarkFindBucketLarge (b * testing.B ) {
1483
+ benchmarkFindBucket (b , 100 )
1484
+ }
1485
+
1486
+ func BenchmarkFindBucketHuge (b * testing.B ) {
1487
+ benchmarkFindBucket (b , 500 )
1488
+ }
1489
+
1490
+ func BenchmarkFindBucketInf (b * testing.B ) {
1491
+ h := & histogram {upperBounds : make ([]float64 , 500 )}
1492
+ for i := range h .upperBounds {
1493
+ h .upperBounds [i ] = float64 (i )
1494
+ }
1495
+ v := 1000.5
1496
+
1497
+ b .ResetTimer ()
1498
+ for i := 0 ; i < b .N ; i ++ {
1499
+ resultFindBucket = h .findBucket (v )
1500
+ }
1501
+ }
1502
+
1503
+ func BenchmarkFindBucketLow (b * testing.B ) {
1504
+ h := & histogram {upperBounds : make ([]float64 , 500 )}
1505
+ for i := range h .upperBounds {
1506
+ h .upperBounds [i ] = float64 (i )
1507
+ }
1508
+ v := - 1.1
1509
+
1510
+ b .ResetTimer ()
1511
+ for i := 0 ; i < b .N ; i ++ {
1512
+ resultFindBucket = h .findBucket (v )
1513
+ }
1514
+ }
1515
+
1516
+ func TestFindBucket (t * testing.T ) {
1517
+ smallHistogram := & histogram {upperBounds : []float64 {1 , 2 , 3 , 4 , 5 }}
1518
+ largeHistogram := & histogram {upperBounds : make ([]float64 , 50 )}
1519
+ for i := range largeHistogram .upperBounds {
1520
+ largeHistogram .upperBounds [i ] = float64 (i )
1521
+ }
1522
+
1523
+ tests := []struct {
1524
+ h * histogram
1525
+ v float64
1526
+ expected int
1527
+ }{
1528
+ {smallHistogram , - 1 , 0 },
1529
+ {smallHistogram , 0.5 , 0 },
1530
+ {smallHistogram , 2.5 , 2 },
1531
+ {smallHistogram , 5.5 , 5 },
1532
+ {largeHistogram , - 1 , 0 },
1533
+ {largeHistogram , 25.5 , 26 },
1534
+ {largeHistogram , 49.5 , 50 },
1535
+ {largeHistogram , 50.5 , 50 },
1536
+ {largeHistogram , 5000.5 , 50 },
1537
+ }
1538
+
1539
+ for _ , tt := range tests {
1540
+ result := tt .h .findBucket (tt .v )
1541
+ if result != tt .expected {
1542
+ t .Errorf ("findBucket(%v) = %d; expected %d" , tt .v , result , tt .expected )
1543
+ }
1544
+ }
1545
+ }
0 commit comments