@@ -179,6 +179,115 @@ TEST(OStreamMetricsExporter, ExportHistogramPointData)
179179 ASSERT_EQ (stdoutOutput.str (), expected_output);
180180}
181181
182+ TEST (OStreamMetricsExporter, ExportBase2ExponentialHistogramPointData)
183+ {
184+ auto exporter =
185+ std::unique_ptr<metric_sdk::PushMetricExporter>(new exportermetrics::OStreamMetricExporter);
186+
187+ metric_sdk::Base2ExponentialHistogramPointData histogram_point_data1;
188+ histogram_point_data1.count_ = 3 ;
189+ histogram_point_data1.sum_ = 6.5 ;
190+ histogram_point_data1.min_ = 0.0 ;
191+ histogram_point_data1.max_ = 3.5 ;
192+ histogram_point_data1.scale_ = 3 ;
193+ histogram_point_data1.record_min_max_ = true ;
194+ histogram_point_data1.zero_count_ = 1 ;
195+ histogram_point_data1.positive_buckets_ =
196+ opentelemetry::sdk::metrics::AdaptingCircularBufferCounter (10 );
197+ histogram_point_data1.negative_buckets_ =
198+ opentelemetry::sdk::metrics::AdaptingCircularBufferCounter (10 );
199+ histogram_point_data1.positive_buckets_ .Increment (1 , 1 );
200+ histogram_point_data1.negative_buckets_ .Increment (-2 , 1 );
201+
202+ metric_sdk::Base2ExponentialHistogramPointData histogram_point_data2;
203+ histogram_point_data2.count_ = 4 ;
204+ histogram_point_data2.sum_ = 6.2 ;
205+ histogram_point_data2.min_ = -0.03 ;
206+ histogram_point_data2.max_ = 3.5 ;
207+ histogram_point_data2.scale_ = 3 ;
208+ histogram_point_data2.record_min_max_ = false ;
209+ histogram_point_data2.zero_count_ = 2 ;
210+ histogram_point_data2.positive_buckets_ =
211+ opentelemetry::sdk::metrics::AdaptingCircularBufferCounter (10 );
212+ histogram_point_data2.negative_buckets_ =
213+ opentelemetry::sdk::metrics::AdaptingCircularBufferCounter (10 );
214+ histogram_point_data2.positive_buckets_ .Increment (3 , 1 );
215+ histogram_point_data2.negative_buckets_ .Increment (-2 , 1 );
216+ histogram_point_data2.negative_buckets_ .Increment (-4 , 2 );
217+
218+ metric_sdk::ResourceMetrics data;
219+ auto resource = opentelemetry::sdk::resource::Resource::Create (
220+ opentelemetry::sdk::resource::ResourceAttributes{});
221+ data.resource_ = &resource;
222+ auto scope = opentelemetry::sdk::instrumentationscope::InstrumentationScope::Create (
223+ " library_name" , " 1.2.0" );
224+ metric_sdk::MetricData metric_data{
225+ metric_sdk::InstrumentDescriptor{" library_name" , " description" , " unit" ,
226+ metric_sdk::InstrumentType::kCounter ,
227+ metric_sdk::InstrumentValueType::kDouble },
228+ metric_sdk::AggregationTemporality::kDelta , opentelemetry::common::SystemTimestamp{},
229+ opentelemetry::common::SystemTimestamp{},
230+ std::vector<metric_sdk::PointDataAttributes>{
231+ {metric_sdk::PointAttributes{{" a1" , " b1" }, {" a2" , " b2" }}, histogram_point_data1},
232+ {metric_sdk::PointAttributes{{" a1" , " b1" }}, histogram_point_data2}}};
233+ data.scope_metric_data_ = std::vector<metric_sdk::ScopeMetrics>{
234+ {scope.get (), std::vector<metric_sdk::MetricData>{metric_data}}};
235+
236+ std::stringstream stdoutOutput;
237+ std::streambuf *sbuf = std::cout.rdbuf ();
238+ std::cout.rdbuf (stdoutOutput.rdbuf ());
239+
240+ auto result = exporter->Export (data);
241+ EXPECT_EQ (result, opentelemetry::sdk::common::ExportResult::kSuccess );
242+ std::cout.rdbuf (sbuf);
243+
244+ std::string expected_output =
245+ " {"
246+ " \n scope name\t : library_name"
247+ " \n schema url\t : "
248+ " \n version\t : 1.2.0"
249+ " \n start time\t : Thu Jan 1 00:00:00 1970"
250+ " \n end time\t : Thu Jan 1 00:00:00 1970"
251+ " \n instrument name\t : library_name"
252+ " \n description\t : description"
253+ " \n unit\t\t : unit"
254+ " \n type: Base2ExponentialHistogramPointData"
255+ " \n count: 3"
256+ " \n sum: 6.5"
257+ " \n zero_count: 1"
258+ " \n min: 0"
259+ " \n max: 3.5"
260+ " \n scale: 3"
261+ " \n positive buckets:"
262+ " \n\t 1: 1"
263+ " \n negative buckets:"
264+ " \n\t -2: 1"
265+ " \n attributes\t\t : "
266+ " \n\t a1: b1"
267+ " \n\t a2: b2"
268+ " \n type: Base2ExponentialHistogramPointData"
269+ " \n count: 4"
270+ " \n sum: 6.2"
271+ " \n zero_count: 2"
272+ " \n scale: 3"
273+ " \n positive buckets:"
274+ " \n\t 3: 1"
275+ " \n negative buckets:"
276+ " \n\t -4: 2"
277+ " \n\t -3: 0"
278+ " \n\t -2: 1"
279+ " \n attributes\t\t : "
280+ " \n\t a1: b1"
281+ " \n resources\t :"
282+ " \n\t service.name: unknown_service"
283+ " \n\t telemetry.sdk.language: cpp"
284+ " \n\t telemetry.sdk.name: opentelemetry"
285+ " \n\t telemetry.sdk.version: " ;
286+ expected_output += OPENTELEMETRY_SDK_VERSION;
287+ expected_output += " \n }\n " ;
288+ ASSERT_EQ (stdoutOutput.str (), expected_output);
289+ }
290+
182291TEST (OStreamMetricsExporter, ExportLastValuePointData)
183292{
184293 auto exporter =
0 commit comments