diff --git a/src/vec3_test.go b/src/vec3_test.go index c77b070..ab7a42e 100644 --- a/src/vec3_test.go +++ b/src/vec3_test.go @@ -58,37 +58,41 @@ func (vs Vec3Slice) IsNil() bool { 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) { vecs := []Vec3{ {X: 1.0, Y: 2.0, Z: 3.0}, {X: 4.5, Y: 5.0, Z: 6.0}, } - for _, ts := range []struct { - 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) - }}, - } { + for _, ts := range encodeFuncs { t.Run(ts.name, func(t *testing.T) { got, err := ts.f(vecs) if err != nil { @@ -111,31 +115,7 @@ func BenchmarkVec3ToJSON(b *testing.B) { Z: 255. * float32(i) / 1000., }) } - for _, ts := range []struct { - 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) - }}, - } { + for _, ts := range encodeFuncs { b.Run(ts.name, func(b *testing.B) { for i := 0; i < b.N; i++ { if _, err := ts.f(vecs); err != nil {