public void Vector2dCloneWorks()
        {
            var v = new Vector2d(1, 2);
            var v2 = v.Clone();

            v2.X = 3;

            Assert.NotEqual(v, v2);
            Assert.False(v.Equivalent(v2));
            Assert.True(v.Equivalent(new Vector2d(1, 2)));
        }
        public void Vector2dNormalizedWorks()
        {
            var v = new Vector2d(12, 23);
            var v2 = v.Normalized();

            Assert.NotEqual(v, v2);
            Assert.True(v.Equivalent(new Vector2d(12, 23)));
            Assert.Equal(1, v.Normalized().Magnitude());
        }
        public void Vector2dDividesCorrectly()
        {
            var v = new Vector2d(2, 4);

            Assert.False(v == v / 1);
            Assert.False(v == v.Divide(1));
            Assert.True(v.Equivalent(v / 1));
            Assert.True(v.Equivalent(v.Divide(1)));
            Assert.True(new Vector2d(.5, .25).Equivalent(1 / v));
            Assert.True(new Vector2d(.5, .25).Equivalent(v.DivideFrom(1)));
            Assert.True(new Vector2d(20, 40).Equivalent(v / .1));
            Assert.True(new Vector2d(20, 40).Equivalent(v.Divide(.1)));
        }
        public void Vector2dSubtractsCorrectly()
        {
            var v = new Vector2d(2, 3);

            Assert.False(v == v - 0);
            Assert.False(v == v.Subtract(0));
            Assert.False(-v == v.SubtractFrom(0));
            Assert.True(v.Equivalent(v - 0));
            Assert.True(v.Equivalent(v.Subtract(0)));
            Assert.True((-v).Equivalent(0- v));
            Assert.True((-v).Equivalent(v.SubtractFrom(0)));
            Assert.True((v - v).Equivalent(Vector2d.Zero));
            Assert.True((v.Subtract(v)).Equivalent(Vector2d.Zero));
            Assert.True((v - .1).Equivalent(new Vector2d(1.9, 2.9)));
            Assert.True((v.Subtract(.1)).Equivalent(new Vector2d(1.9, 2.9)));
            Assert.True((.1 - v).Equivalent(new Vector2d(-1.9, -2.9)));
            Assert.True((v.SubtractFrom(.1)).Equivalent(new Vector2d(-1.9, -2.9)));
        }
        public void Vector2dAddsCorrectly()
        {
            var v = new Vector2d(2, 3);

            Assert.False(v == v + 0);
            Assert.False(v == v.Add(0));
            Assert.True(v.Equivalent(v+0));
            Assert.True(v.Equivalent(v.Add(0)));
            Assert.True((v + v).Equivalent(new Vector2d(4, 6)));
            Assert.True(v.Add(v).Equivalent(new Vector2d(4, 6)));
            Assert.True((v + .1).Equivalent(new Vector2d(2.1, 3.1)));
            Assert.True(v.Add(.1).Equivalent(new Vector2d(2.1, 3.1)));
        }
        public void Vector2dApplyWorks()
        {
            var v = new Vector2d(1.11, 2.22);

            v.Apply(Math.Round);

            Assert.True(v.Equivalent(new Vector2d(1, 2)));

            v.Apply(val => { return val + 1; });

            Assert.True(v.Equivalent(new Vector2d(2, 3)));
        }