@@ -388,8 +388,11 @@ TEST_P(WritableMetricStorageHistogramTestFixture, Base2ExponentialDoubleHistogra
388388 EXPECT_EQ (data.count_ , 2 );
389389 EXPECT_EQ (data.min_ , 10 );
390390 EXPECT_EQ (data.max_ , 20 );
391- EXPECT_EQ (data.positive_buckets_ .Empty (), false );
392391 EXPECT_EQ (data.negative_buckets_ .Empty (), true );
392+ auto start_index = data.positive_buckets_ .StartIndex ();
393+ auto end_index = data.positive_buckets_ .EndIndex ();
394+ EXPECT_EQ (data.positive_buckets_ .Get (start_index), 1 );
395+ EXPECT_EQ (data.positive_buckets_ .Get (end_index), 1 );
393396 count_attributes++;
394397 }
395398 else if (opentelemetry::nostd::get<std::string>(
@@ -399,7 +402,10 @@ TEST_P(WritableMetricStorageHistogramTestFixture, Base2ExponentialDoubleHistogra
399402 EXPECT_EQ (data.count_ , 2 );
400403 EXPECT_EQ (data.min_ , 30 );
401404 EXPECT_EQ (data.max_ , 40 );
402- EXPECT_EQ (data.positive_buckets_ .Empty (), false );
405+ auto start_index = data.positive_buckets_ .StartIndex ();
406+ auto end_index = data.positive_buckets_ .EndIndex ();
407+ EXPECT_EQ (data.positive_buckets_ .Get (start_index), 1 );
408+ EXPECT_EQ (data.positive_buckets_ .Get (end_index), 1 );
403409 EXPECT_EQ (data.negative_buckets_ .Empty (), true );
404410 count_attributes++;
405411 }
@@ -464,25 +470,68 @@ TEST_P(WritableMetricStorageHistogramTestFixture, Base2ExponentialDoubleHistogra
464470 collector.get (), collectors, sdk_start_ts, collection_ts, [&](const MetricData &metric_data) {
465471 for (const auto &data_attr : metric_data.point_data_attr_ )
466472 {
467- const auto &data =
473+ auto &data =
468474 opentelemetry::nostd::get<Base2ExponentialHistogramPointData>(data_attr.point_data );
469475 if (opentelemetry::nostd::get<std::string>(
470476 data_attr.attributes .find (" RequestType" )->second ) == " GET" )
471477 {
472478 EXPECT_EQ (data.sum_ , expected_total_get_requests);
473479 count_attributes++;
480+ auto start_index = data.positive_buckets_ .StartIndex ();
481+ auto end_index = data.positive_buckets_ .EndIndex ();
482+ if (temporality == AggregationTemporality::kCumulative )
483+ {
484+ EXPECT_EQ (data.count_ , 3 );
485+ EXPECT_EQ (data.min_ , 10 );
486+ EXPECT_EQ (data.max_ , 50 );
487+ auto count = 0 ;
488+ for (int i = start_index; i <= end_index; ++i) {
489+ count += data.positive_buckets_ .Get (i);
490+ }
491+ EXPECT_EQ (count, 3 );
492+ }
493+ if (temporality == AggregationTemporality::kDelta )
494+ {
495+ EXPECT_EQ (data.count_ , 1 );
496+ EXPECT_EQ (data.min_ , 50 );
497+ EXPECT_EQ (data.max_ , 50 );
498+ EXPECT_EQ (data.positive_buckets_ .Get (start_index), 1 );
499+ EXPECT_EQ (end_index, start_index);
500+ }
474501 }
475502 else if (opentelemetry::nostd::get<std::string>(
476503 data_attr.attributes .find (" RequestType" )->second ) == " PUT" )
477504 {
478505 EXPECT_EQ (data.sum_ , expected_total_put_requests);
479506 count_attributes++;
507+ auto start_index = data.positive_buckets_ .StartIndex ();
508+ auto end_index = data.positive_buckets_ .EndIndex ();
509+ if (temporality == AggregationTemporality::kCumulative )
510+ {
511+ EXPECT_EQ (data.count_ , 3 );
512+ EXPECT_EQ (data.min_ , 30 );
513+ EXPECT_EQ (data.max_ , 40 );
514+ auto count = 0 ;
515+ for (int i = start_index; i <= end_index; ++i) {
516+ count += data.positive_buckets_ .Get (i);
517+ }
518+ EXPECT_EQ (count, 3 );
519+ }
520+ if (temporality == AggregationTemporality::kDelta )
521+ {
522+ EXPECT_EQ (data.count_ , 1 );
523+ EXPECT_EQ (data.min_ , 40 );
524+ EXPECT_EQ (data.max_ , 40 );
525+ EXPECT_EQ (data.positive_buckets_ .Get (start_index), 1 );
526+ EXPECT_EQ (end_index, start_index);}
480527 }
481528 }
482529 return true ;
483530 });
531+
484532 EXPECT_EQ (count_attributes, 2 ); // GET and PUT
485533}
534+
486535INSTANTIATE_TEST_SUITE_P (WritableMetricStorageHistogramTestBase2ExponentialDouble,
487536 WritableMetricStorageHistogramTestFixture,
488537 ::testing::Values (AggregationTemporality::kCumulative ,
0 commit comments