package geo

import (
	"testing"
)

func TestPointDistanceTo(t *testing.T) {
	p1 := &Point{0, 0}
	p2 := &Point{100, 0}

	p := &Point{50, 70}

	d := p.DistanceToLine(p1, p2)

	if d != 70.0 {
		t.Fatalf("Expected 70.0 and got %v", d)
	}
}

func TestAddVector(t *testing.T) {
	start := &Point{1.5, 5.3}
	c := NewVector(-3.5, -2.3)
	p2 := start.AddVector(c)

	if p2.X != -2 || p2.Y != 3 {
		t.Fatalf("Expected resulting point to be (-2, 3), got %+v", p2)
	}
}

func TestToVector(t *testing.T) {
	p := &Point{3.5, 6.7}
	v := p.ToVector()

	if v[0] != p.X || v[1] != p.Y {
		t.Fatalf("Expected Vector (%v) coordinates to match the point (%v)", p, v)
	}

	if len(v) != 2 {
		t.Fatal("Expected the Vector to have 2 components")
	}
}

func TestVectorTo(t *testing.T) {
	p1 := &Point{1.5, 5.3}
	p2 := &Point{-2, 3}
	c := p1.VectorTo(p2)
	if !c.equals(NewVector(-3.5, -2.3)) {
		t.Fatalf("Expected Vector to be (-3.5, -2.3), got %v", c)
	}

	p1 = &Point{1.5, 5.3}
	p2 = &Point{-2, 3}
	c = p2.VectorTo(p1)
	if !c.equals(NewVector(3.5, 2.3)) {
		t.Fatalf("Expected Vector to be (3.5, 2.3), got %v", c)
	}
}
