@@ -1173,11 +1173,155 @@ impl<T> ExemplarBuilder<T> {
11731173#[ cfg( test) ]
11741174mod tests {
11751175
1176- use super :: { Exemplar , ExponentialHistogramDataPoint , HistogramDataPoint , SumDataPoint } ;
1176+ use super :: * ;
11771177
11781178 use opentelemetry:: time:: now;
11791179 use opentelemetry:: KeyValue ;
11801180
1181+ #[ test]
1182+ fn build_resource_metrics_full_tree ( ) {
1183+ let time = now ( ) ;
1184+ let exemplar = Exemplar :: builder ( 1.0_f64 , time)
1185+ . with_filtered_attributes ( vec ! [ KeyValue :: new( "filtered" , "attr" ) ] )
1186+ . with_span_id ( [ 1 ; 8 ] )
1187+ . with_trace_id ( [ 2 ; 16 ] )
1188+ . build ( ) ;
1189+
1190+ let gauge_dp = GaugeDataPoint :: builder ( 42.0_f64 )
1191+ . with_attributes ( vec ! [ KeyValue :: new( "host" , "localhost" ) ] )
1192+ . with_exemplars ( vec ! [ exemplar] )
1193+ . build ( ) ;
1194+
1195+ let gauge = Gauge :: builder ( vec ! [ gauge_dp] , time)
1196+ . with_start_time ( time)
1197+ . build ( ) ;
1198+
1199+ let metric = Metric :: builder ( "my_gauge" , AggregatedMetrics :: F64 ( MetricData :: Gauge ( gauge) ) )
1200+ . with_description ( "a test gauge" )
1201+ . with_unit ( "ms" )
1202+ . build ( ) ;
1203+
1204+ let scope_metrics = ScopeMetrics :: builder ( ) . with_metrics ( vec ! [ metric] ) . build ( ) ;
1205+
1206+ let rm = ResourceMetrics :: builder ( )
1207+ . with_resource ( Resource :: builder ( ) . build ( ) )
1208+ . with_scope_metrics ( vec ! [ scope_metrics] )
1209+ . build ( ) ;
1210+
1211+ assert_eq ! ( rm. scope_metrics( ) . count( ) , 1 ) ;
1212+ let sm = rm. scope_metrics ( ) . next ( ) . unwrap ( ) ;
1213+ assert_eq ! ( sm. metrics( ) . count( ) , 1 ) ;
1214+ let m = sm. metrics ( ) . next ( ) . unwrap ( ) ;
1215+ assert_eq ! ( m. name( ) , "my_gauge" ) ;
1216+ assert_eq ! ( m. description( ) , "a test gauge" ) ;
1217+ assert_eq ! ( m. unit( ) , "ms" ) ;
1218+ }
1219+
1220+ #[ test]
1221+ fn build_sum_with_data_points ( ) {
1222+ let time = now ( ) ;
1223+ let dp = SumDataPoint :: builder ( 100_i64 )
1224+ . with_attributes ( vec ! [ KeyValue :: new( "key" , "value" ) ] )
1225+ . build ( ) ;
1226+
1227+ let sum = Sum :: builder ( vec ! [ dp] , Temporality :: Cumulative , true , time, time) . build ( ) ;
1228+
1229+ assert_eq ! ( sum. data_points( ) . count( ) , 1 ) ;
1230+ assert ! ( sum. is_monotonic( ) ) ;
1231+ assert_eq ! ( sum. temporality( ) , Temporality :: Cumulative ) ;
1232+ let dp = sum. data_points ( ) . next ( ) . unwrap ( ) ;
1233+ assert_eq ! ( dp. value( ) , 100 ) ;
1234+ assert_eq ! ( dp. attributes( ) . count( ) , 1 ) ;
1235+ }
1236+
1237+ #[ test]
1238+ fn build_histogram_with_optional_fields ( ) {
1239+ let time = now ( ) ;
1240+ let dp = HistogramDataPoint :: builder ( 10 , 42.0_f64 , vec ! [ 5.0 , 10.0 ] , vec ! [ 3 , 5 , 2 ] )
1241+ . with_attributes ( vec ! [ KeyValue :: new( "key" , "val" ) ] )
1242+ . with_min ( 1.0 )
1243+ . with_max ( 20.0 )
1244+ . build ( ) ;
1245+
1246+ let histogram = Histogram :: builder ( vec ! [ dp] , Temporality :: Delta , time, time) . build ( ) ;
1247+
1248+ assert_eq ! ( histogram. data_points( ) . count( ) , 1 ) ;
1249+ assert_eq ! ( histogram. temporality( ) , Temporality :: Delta ) ;
1250+ let dp = histogram. data_points ( ) . next ( ) . unwrap ( ) ;
1251+ assert_eq ! ( dp. count( ) , 10 ) ;
1252+ assert_eq ! ( dp. sum( ) , 42.0 ) ;
1253+ assert_eq ! ( dp. min( ) , Some ( 1.0 ) ) ;
1254+ assert_eq ! ( dp. max( ) , Some ( 20.0 ) ) ;
1255+ assert_eq ! ( dp. bounds( ) . collect:: <Vec <_>>( ) , vec![ 5.0 , 10.0 ] ) ;
1256+ assert_eq ! ( dp. bucket_counts( ) . collect:: <Vec <_>>( ) , vec![ 3 , 5 , 2 ] ) ;
1257+ }
1258+
1259+ #[ test]
1260+ fn build_exponential_histogram ( ) {
1261+ let time = now ( ) ;
1262+ let dp = ExponentialHistogramDataPoint :: builder (
1263+ 5 ,
1264+ 100.0_f64 ,
1265+ 3 ,
1266+ 1 ,
1267+ ExponentialBucket :: new ( 0 , vec ! [ 1 , 2 , 3 ] ) ,
1268+ ExponentialBucket :: new ( 0 , vec ! [ 4 , 5 ] ) ,
1269+ )
1270+ . with_attributes ( vec ! [ KeyValue :: new( "key" , "val" ) ] )
1271+ . with_min ( 10.0 )
1272+ . with_max ( 50.0 )
1273+ . with_zero_threshold ( 0.001 )
1274+ . build ( ) ;
1275+
1276+ let eh =
1277+ ExponentialHistogram :: builder ( vec ! [ dp] , Temporality :: Cumulative , time, time) . build ( ) ;
1278+
1279+ assert_eq ! ( eh. data_points( ) . count( ) , 1 ) ;
1280+ let dp = eh. data_points ( ) . next ( ) . unwrap ( ) ;
1281+ assert_eq ! ( dp. count( ) , 5 ) ;
1282+ assert_eq ! ( dp. scale( ) , 3 ) ;
1283+ assert_eq ! ( dp. zero_count( ) , 1 ) ;
1284+ assert_eq ! ( dp. sum( ) , 100.0 ) ;
1285+ assert_eq ! ( dp. min( ) , Some ( 10.0 ) ) ;
1286+ assert_eq ! ( dp. max( ) , Some ( 50.0 ) ) ;
1287+ assert ! ( ( dp. zero_threshold( ) - 0.001 ) . abs( ) < f64 :: EPSILON ) ;
1288+ assert_eq ! ( dp. positive_bucket( ) . offset( ) , 0 ) ;
1289+ assert_eq ! (
1290+ dp. positive_bucket( ) . counts( ) . collect:: <Vec <_>>( ) ,
1291+ vec![ 1 , 2 , 3 ]
1292+ ) ;
1293+ assert_eq ! (
1294+ dp. negative_bucket( ) . counts( ) . collect:: <Vec <_>>( ) ,
1295+ vec![ 4 , 5 ]
1296+ ) ;
1297+ }
1298+
1299+ #[ test]
1300+ fn build_exemplar_with_defaults ( ) {
1301+ let time = now ( ) ;
1302+ let exemplar = Exemplar :: builder ( 42.0_f64 , time) . build ( ) ;
1303+
1304+ assert_eq ! ( exemplar. value, 42.0 ) ;
1305+ assert_eq ! ( exemplar. time( ) , time) ;
1306+ assert_eq ! ( exemplar. span_id( ) , & [ 0 ; 8 ] ) ;
1307+ assert_eq ! ( exemplar. trace_id( ) , & [ 0 ; 16 ] ) ;
1308+ assert_eq ! ( exemplar. filtered_attributes( ) . count( ) , 0 ) ;
1309+ }
1310+
1311+ #[ test]
1312+ fn build_defaults_without_optional_fields ( ) {
1313+ let rm = ResourceMetrics :: builder ( ) . build ( ) ;
1314+ assert_eq ! ( rm. scope_metrics( ) . count( ) , 0 ) ;
1315+
1316+ let sm = ScopeMetrics :: builder ( ) . build ( ) ;
1317+ assert_eq ! ( sm. metrics( ) . count( ) , 0 ) ;
1318+
1319+ let dp = GaugeDataPoint :: builder ( 0.0_f64 ) . build ( ) ;
1320+ assert_eq ! ( dp. value( ) , 0.0 ) ;
1321+ assert_eq ! ( dp. attributes( ) . count( ) , 0 ) ;
1322+ assert_eq ! ( dp. exemplars( ) . count( ) , 0 ) ;
1323+ }
1324+
11811325 #[ test]
11821326 fn validate_cloning_data_points ( ) {
11831327 let data_type = SumDataPoint {
0 commit comments