1
0
mirror of https://github.com/open-telemetry/opentelemetry-go.git synced 2025-12-03 23:21:27 +02:00
Files
opentelemetry-go/attribute/internal/attribute_test.go
Rabel Mervin 5bf8691520 Functionality moved from internal/attribute to attribute (#6580)
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>
2025-04-03 14:12:30 +01:00

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)
}
}