public void TestDistance() {
     Vector p1 = new Vector(0, 0);
     Vector p2 = new Vector(3, 4);
     Assert.IsTrue(p1.Distance(p2) == 5, "Distance calc 1 failed");
     Assert.IsTrue(p1.Distance2(p2) == 25, "Distance2 calc 1 failed");
     Assert.IsTrue(new Vector(1, 1).Closest(p1, new Vector(2, 0)) == new Vector(1, 0), "Closest point 1 failed.");
     //Same test for point that is already on the line
     Assert.IsTrue(new Vector(1, 0).Closest(p1, new Vector(2, 0)) == new Vector(1, 0), "Closest point 3 failed.");
 }
 public void TestAngleProjection() {
     //Test GetPointAt in all 8 cardinal directions.  Origin assumed to be in top-left
     var tests = new List<KeyValuePair<double, Vector>>();
     tests.Add(new KeyValuePair<double, Vector>(0d, new Vector(1, 0)));
     tests.Add(new KeyValuePair<double, Vector>(Math.PI / 4, new Vector(1, -1)));
     tests.Add(new KeyValuePair<double, Vector>(Math.PI / 2, new Vector(0, -1)));
     tests.Add(new KeyValuePair<double, Vector>(3 * Math.PI / 4, new Vector(-1, -1)));
     tests.Add(new KeyValuePair<double, Vector>(Math.PI, new Vector(-1, 0)));
     tests.Add(new KeyValuePair<double, Vector>(-3 * Math.PI / 4, new Vector(-1, 1)));
     tests.Add(new KeyValuePair<double, Vector>(-Math.PI / 2, new Vector(0, 1)));
     tests.Add(new KeyValuePair<double, Vector>(-Math.PI / 4, new Vector(1, 1)));
     string format = "GetPointAt fails on {0}.  Expected {1}, got {2}";
     Vector origin = new Vector(0, 0);
     foreach (var pair in tests) {
         double hypotenuse = origin.Distance(pair.Value);
         Vector point = origin.GetPointAt(hypotenuse, pair.Key);
         Assert.IsTrue(point == pair.Value,
             string.Format(format, pair.Key, pair.Value, point));
     }
 }