Move test and bench functions to single global variable.

This commit is contained in:
Bill Thiede 2019-11-19 21:02:08 -08:00
parent 7707ff9660
commit 6289413a60

View File

@ -58,37 +58,41 @@ func (vs Vec3Slice) IsNil() bool {
return vs == nil return vs == nil
} }
type testFunc struct {
name string
f func([]Vec3) ([]byte, error)
}
var encodeFuncs = []testFunc{
{"HandRolled", HandRolled},
{"stdlib", func(vs []Vec3) ([]byte, error) {
return json.Marshal(vs)
}},
{"ffjson", func(vs []Vec3) ([]byte, error) {
return ffjson.Marshal(vs)
}},
{"iterator", func(vs []Vec3) ([]byte, error) {
var js = jsoniter.ConfigCompatibleWithStandardLibrary
return js.Marshal(vs)
}},
{"gojay", func(vs []Vec3) ([]byte, error) {
var vecs Vec3Slice
for _, v := range vs {
v := v
vecs = append(vecs, &v)
}
return gojay.Marshal(&vecs)
}},
}
func TestVec3ToJSON(t *testing.T) { func TestVec3ToJSON(t *testing.T) {
vecs := []Vec3{ vecs := []Vec3{
{X: 1.0, Y: 2.0, Z: 3.0}, {X: 1.0, Y: 2.0, Z: 3.0},
{X: 4.5, Y: 5.0, Z: 6.0}, {X: 4.5, Y: 5.0, Z: 6.0},
} }
for _, ts := range []struct { for _, ts := range encodeFuncs {
name string
f func([]Vec3) ([]byte, error)
}{
{"HandRolled", HandRolled},
{"stdlib", func(vs []Vec3) ([]byte, error) {
return json.Marshal(vs)
}},
{"ffjson", func(vs []Vec3) ([]byte, error) {
return ffjson.Marshal(vecs)
}},
{"iterator", func(vs []Vec3) ([]byte, error) {
var js = jsoniter.ConfigCompatibleWithStandardLibrary
return js.Marshal(vecs)
}},
{"gojay", func(vs []Vec3) ([]byte, error) {
var vecs Vec3Slice
for _, v := range vs {
v := v
vecs = append(vecs, &v)
}
return gojay.Marshal(&vecs)
}},
} {
t.Run(ts.name, func(t *testing.T) { t.Run(ts.name, func(t *testing.T) {
got, err := ts.f(vecs) got, err := ts.f(vecs)
if err != nil { if err != nil {
@ -111,31 +115,7 @@ func BenchmarkVec3ToJSON(b *testing.B) {
Z: 255. * float32(i) / 1000., Z: 255. * float32(i) / 1000.,
}) })
} }
for _, ts := range []struct { for _, ts := range encodeFuncs {
name string
f func([]Vec3) ([]byte, error)
}{
{"HandRolled", HandRolled},
{"stdlib", func(vs []Vec3) ([]byte, error) {
return json.Marshal(vs)
}},
{"ffjson", func(vs []Vec3) ([]byte, error) {
return ffjson.Marshal(vecs)
}},
{"iterator", func(vs []Vec3) ([]byte, error) {
var js = jsoniter.ConfigCompatibleWithStandardLibrary
return js.Marshal(vecs)
}},
{"gojay", func(vs []Vec3) ([]byte, error) {
var vecs Vec3Slice
for _, v := range vs {
v := v
vecs = append(vecs, &v)
}
return gojay.Marshal(&vecs)
}},
} {
b.Run(ts.name, func(b *testing.B) { b.Run(ts.name, func(b *testing.B) {
for i := 0; i < b.N; i++ { for i := 0; i < b.N; i++ {
if _, err := ts.f(vecs); err != nil { if _, err := ts.f(vecs); err != nil {