RegionIO/internal/protocol/lpvec3_test.go
2026-07-21 10:30:28 +03:00

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