76 lines
1.1 KiB
Go
76 lines
1.1 KiB
Go
|
package helper
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"reflect"
|
||
|
"testing"
|
||
|
)
|
||
|
|
||
|
type x struct {
|
||
|
Id uint64
|
||
|
}
|
||
|
|
||
|
func c(x []*x) (r []uint64) {
|
||
|
for i := 0; i < len(x); i++ {
|
||
|
r = append(r, x[i].Id)
|
||
|
}
|
||
|
return
|
||
|
}
|
||
|
|
||
|
func getX() (r []*x) {
|
||
|
for i := 0; i < 10; i++ {
|
||
|
r = append(r, &x{
|
||
|
uint64(i),
|
||
|
})
|
||
|
}
|
||
|
return
|
||
|
}
|
||
|
|
||
|
func BenchmarkOr(b *testing.B) {
|
||
|
y := getX()
|
||
|
b.ResetTimer()
|
||
|
for i := 0; i < b.N; i++ {
|
||
|
c(y)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func BenchmarkStructColumn(b *testing.B) {
|
||
|
y := getX()
|
||
|
fmt.Println(y)
|
||
|
b.ResetTimer()
|
||
|
//b.N = 2
|
||
|
for i := 0; i < 1; i++ {
|
||
|
StructColumn[int, *x](y, "Id")
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestStructColumn(t *testing.T) {
|
||
|
type args struct {
|
||
|
arr []x
|
||
|
field string
|
||
|
}
|
||
|
|
||
|
tests := []struct {
|
||
|
name string
|
||
|
args args
|
||
|
wantR []uint64
|
||
|
}{
|
||
|
{name: "test1", args: args{
|
||
|
arr: []x{
|
||
|
{Id: 1},
|
||
|
{2},
|
||
|
{4},
|
||
|
{6},
|
||
|
},
|
||
|
field: "Id",
|
||
|
}, wantR: []uint64{1, 2, 4, 6}},
|
||
|
}
|
||
|
for _, tt := range tests {
|
||
|
t.Run(tt.name, func(t *testing.T) {
|
||
|
if gotR := StructColumn[uint64, x](tt.args.arr, tt.args.field); !reflect.DeepEqual(gotR, tt.wantR) {
|
||
|
t.Errorf("StructColumn() = %v, want %v", gotR, tt.wantR)
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
}
|