rove/pkg/maths/vector_test.go

206 lines
3.2 KiB
Go
Raw Permalink Normal View History

2020-07-10 18:22:59 +01:00
package maths
import (
"math"
"reflect"
"testing"
"github.com/stretchr/testify/assert"
)
type VectorTest struct {
name string
vec Vector
arg Vector
want Vector
}
var additionTests = []VectorTest{
{
name: "Basic addition 1",
vec: Vector{
X: 0.0,
Y: 0.0,
},
arg: Vector{
1.0,
1.0,
},
want: Vector{
1.0,
1.0,
},
},
{
name: "Basic addition 2",
vec: Vector{
X: 1.0,
Y: 2.0,
},
arg: Vector{
3.0,
4.0,
},
want: Vector{
4.0,
6.0,
},
},
}
func TestVector_Add(t *testing.T) {
for _, tt := range additionTests {
t.Run(tt.name, func(t *testing.T) {
v := Vector{
X: tt.vec.X,
Y: tt.vec.Y,
}
v.Add(tt.arg)
assert.Equal(t, tt.want, v, "Add did not produce expected result")
})
}
}
func TestVector_Added(t *testing.T) {
for _, tt := range additionTests {
t.Run(tt.name, func(t *testing.T) {
v := Vector{
X: tt.vec.X,
Y: tt.vec.Y,
}
assert.Equal(t, tt.want, v.Added(tt.arg), "Added didn't return expected value")
})
}
}
func TestVector_Negated(t *testing.T) {
tests := []struct {
name string
vec Vector
want Vector
}{
{
name: "Simple check 1",
vec: Vector{1, 1},
want: Vector{-1, -1},
},
{
name: "Simple check 2",
vec: Vector{1, -1},
want: Vector{-1, 1},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
v := Vector{
X: tt.vec.X,
Y: tt.vec.Y,
}
if got := v.Negated(); !reflect.DeepEqual(got, tt.want) {
t.Errorf("Vector.Negated() = %v, want %v", got, tt.want)
}
})
}
}
func TestVector_Length(t *testing.T) {
tests := []struct {
name string
vec Vector
want float64
}{
{
name: "Simple length 1",
vec: Vector{1, 0},
want: 1,
}, {
name: "Simple length 2",
vec: Vector{1, -1},
want: math.Sqrt(2),
}, {
name: "Simple length 3",
vec: Vector{0, 0},
want: 0,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
v := Vector{
X: tt.vec.X,
Y: tt.vec.Y,
}
if got := v.Length(); got != tt.want {
t.Errorf("Vector.Length() = %v, want %v", got, tt.want)
}
})
}
}
func TestVector_Distance(t *testing.T) {
tests := []struct {
name string
vec Vector
arg Vector
want float64
}{
{
name: "Simple distance 1",
vec: Vector{0, 0},
arg: Vector{1, 0},
want: 1,
},
{
name: "Simple distance 2",
vec: Vector{1, 1},
arg: Vector{-1, -1},
want: math.Sqrt(8),
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
v := Vector{
X: tt.vec.X,
Y: tt.vec.Y,
}
if got := v.Distance(tt.arg); got != tt.want {
t.Errorf("Vector.Distance() = %v, want %v", got, tt.want)
}
})
}
}
func TestVector_Multiplied(t *testing.T) {
tests := []struct {
name string
vec Vector
arg int
want Vector
}{
{
name: "Basic multiply 1",
vec: Vector{0, 1},
arg: 2,
want: Vector{0, 2},
},
{
name: "Basic multiply 2",
vec: Vector{-1, 1},
arg: -1,
want: Vector{1, -1},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
v := Vector{
X: tt.vec.X,
Y: tt.vec.Y,
}
if got := v.Multiplied(tt.arg); !reflect.DeepEqual(got, tt.want) {
t.Errorf("Vector.Multiplied() = %v, want %v", got, tt.want)
}
})
}
}