You've already forked opentelemetry-go
mirror of
https://github.com/open-telemetry/opentelemetry-go.git
synced 2025-12-03 23:21:27 +02:00
Resolve #6525 ## Description This pull request addresses the issue of moving internal functionality from the `internal/attribute` package to the `attribute `package within the open-telemetry/opentelemetry-go repository. The goal is to ensure that none of this functionality is added to the public API of the attribute or any other public package while improving the naming, layout, and following Go idioms. ## Changes made 1. Moved Functions to `attribute/internal` - Created a new internal package within the `attribute` package: `attribute/internal`. - Moved `attribute.go` and `attribute_test.go` into the `attribute/internal` - Moved the following functions from `internal/attribute` to `attribute/internal` 2 . Changes in .golangci.yml - Removed line 67 and 68 from .golangci.yml --------- Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
146 lines
3.4 KiB
Go
146 lines
3.4 KiB
Go
// Copyright The OpenTelemetry Authors
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package attribute
|
|
|
|
import (
|
|
"reflect"
|
|
"testing"
|
|
)
|
|
|
|
var wrapFloat64SliceValue = func(v interface{}) interface{} {
|
|
if vi, ok := v.([]float64); ok {
|
|
return Float64SliceValue(vi)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
var wrapInt64SliceValue = func(v interface{}) interface{} {
|
|
if vi, ok := v.([]int64); ok {
|
|
return Int64SliceValue(vi)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
var wrapBoolSliceValue = func(v interface{}) interface{} {
|
|
if vi, ok := v.([]bool); ok {
|
|
return BoolSliceValue(vi)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
var wrapStringSliceValue = func(v interface{}) interface{} {
|
|
if vi, ok := v.([]string); ok {
|
|
return StringSliceValue(vi)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
var (
|
|
wrapAsBoolSlice = func(v interface{}) interface{} { return AsBoolSlice(v) }
|
|
wrapAsInt64Slice = func(v interface{}) interface{} { return AsInt64Slice(v) }
|
|
wrapAsFloat64Slice = func(v interface{}) interface{} { return AsFloat64Slice(v) }
|
|
wrapAsStringSlice = func(v interface{}) interface{} { return AsStringSlice(v) }
|
|
)
|
|
|
|
func TestSliceValue(t *testing.T) {
|
|
type args struct {
|
|
v interface{}
|
|
}
|
|
tests := []struct {
|
|
name string
|
|
args args
|
|
want interface{}
|
|
fn func(interface{}) interface{}
|
|
}{
|
|
{
|
|
name: "Float64SliceValue() two items",
|
|
args: args{v: []float64{1, 2.3}}, want: [2]float64{1, 2.3}, fn: wrapFloat64SliceValue,
|
|
},
|
|
{
|
|
name: "Int64SliceValue() two items",
|
|
args: args{[]int64{1, 2}}, want: [2]int64{1, 2}, fn: wrapInt64SliceValue,
|
|
},
|
|
{
|
|
name: "BoolSliceValue() two items",
|
|
args: args{v: []bool{true, false}}, want: [2]bool{true, false}, fn: wrapBoolSliceValue,
|
|
},
|
|
{
|
|
name: "StringSliceValue() two items",
|
|
args: args{[]string{"123", "2"}}, want: [2]string{"123", "2"}, fn: wrapStringSliceValue,
|
|
},
|
|
{
|
|
name: "AsBoolSlice() two items",
|
|
args: args{[2]bool{true, false}}, want: []bool{true, false}, fn: wrapAsBoolSlice,
|
|
},
|
|
{
|
|
name: "AsInt64Slice() two items",
|
|
args: args{[2]int64{1, 3}}, want: []int64{1, 3}, fn: wrapAsInt64Slice,
|
|
},
|
|
{
|
|
name: "AsFloat64Slice() two items",
|
|
args: args{[2]float64{1.2, 3.1}}, want: []float64{1.2, 3.1}, fn: wrapAsFloat64Slice,
|
|
},
|
|
{
|
|
name: "AsStringSlice() two items",
|
|
args: args{[2]string{"1234", "12"}}, want: []string{"1234", "12"}, fn: wrapAsStringSlice,
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
if got := tt.fn(tt.args.v); !reflect.DeepEqual(got, tt.want) {
|
|
t.Errorf("got %v, want %v", got, tt.want)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
// sync is a global used to ensure the benchmark are not optimized away.
|
|
var sync any
|
|
|
|
func BenchmarkBoolSliceValue(b *testing.B) {
|
|
b.ReportAllocs()
|
|
s := []bool{true, false, true, false}
|
|
b.ResetTimer()
|
|
for n := 0; n < b.N; n++ {
|
|
sync = BoolSliceValue(s)
|
|
}
|
|
}
|
|
|
|
func BenchmarkInt64SliceValue(b *testing.B) {
|
|
b.ReportAllocs()
|
|
s := []int64{1, 2, 3, 4}
|
|
b.ResetTimer()
|
|
for n := 0; n < b.N; n++ {
|
|
sync = Int64SliceValue(s)
|
|
}
|
|
}
|
|
|
|
func BenchmarkFloat64SliceValue(b *testing.B) {
|
|
b.ReportAllocs()
|
|
s := []float64{1.2, 3.4, 5.6, 7.8}
|
|
b.ResetTimer()
|
|
for n := 0; n < b.N; n++ {
|
|
sync = Float64SliceValue(s)
|
|
}
|
|
}
|
|
|
|
func BenchmarkStringSliceValue(b *testing.B) {
|
|
b.ReportAllocs()
|
|
s := []string{"a", "b", "c", "d"}
|
|
b.ResetTimer()
|
|
for n := 0; n < b.N; n++ {
|
|
sync = StringSliceValue(s)
|
|
}
|
|
}
|
|
|
|
func BenchmarkAsFloat64Slice(b *testing.B) {
|
|
b.ReportAllocs()
|
|
var in interface{} = [2]float64{1, 2.3}
|
|
b.ResetTimer()
|
|
|
|
for i := 0; i < b.N; i++ {
|
|
sync = AsFloat64Slice(in)
|
|
}
|
|
}
|