48 lines
1.2 KiB
Go
48 lines
1.2 KiB
Go
package protocol
|
|
|
|
import (
|
|
"bytes"
|
|
"math"
|
|
"testing"
|
|
)
|
|
|
|
func TestLPVec3VanillaFixtures(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
x, y, z float64
|
|
encoded []byte
|
|
tolerance float64
|
|
}{
|
|
{name: "zero", encoded: []byte{0x00}},
|
|
{
|
|
name: "entity velocity", x: 123.0 / 8000.0, y: -456.0 / 8000.0, z: 789.0 / 8000.0,
|
|
encoded: []byte{0xd9, 0x07, 0x8c, 0x9e, 0xf1, 0x66}, tolerance: 1.0 / 16383.0,
|
|
},
|
|
{
|
|
name: "continuation scale", x: 4.095875,
|
|
encoded: []byte{0x65, 0xa3, 0x7f, 0xfe, 0xff, 0xff, 0x01}, tolerance: 5.0 / 16383.0,
|
|
},
|
|
}
|
|
|
|
for _, tc := range tests {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
w := NewWriter(len(tc.encoded))
|
|
w.LPVec3(tc.x, tc.y, tc.z)
|
|
if !bytes.Equal(w.Bytes(), tc.encoded) {
|
|
t.Fatalf("encoded = % x, want % x", w.Bytes(), tc.encoded)
|
|
}
|
|
|
|
r := NewReader(tc.encoded)
|
|
x, y, z, err := r.LPVec3()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if math.Abs(x-tc.x) > tc.tolerance || math.Abs(y-tc.y) > tc.tolerance || math.Abs(z-tc.z) > tc.tolerance {
|
|
t.Fatalf("decoded = (%v, %v, %v), want (%v, %v, %v)", x, y, z, tc.x, tc.y, tc.z)
|
|
}
|
|
if r.Remaining() != 0 {
|
|
t.Fatalf("remaining bytes = %d, want 0", r.Remaining())
|
|
}
|
|
})
|
|
}
|
|
}
|