public void TestFunctions()
        {
            Quaternion2D q = new Quaternion2D();

            q.SetIdentity();
            Assert.AreEqual(q, new Quaternion2D(0, 1));

            q = new Quaternion2D(2, 4);
            float l = q.length;

            q.Normalize();
            Assert.AreEqual(q, new Quaternion2D(2 / l, 4 / l));

            q = new Quaternion2D(2, 4);

            q.Inverse();
            Assert.AreEqual(q, new Quaternion2D(-2, 4));

            q.SetIdentity();
            q.angle = 0.927295268f;
            Assert.AreEqual(q, Quaternion2D.Normalize(new Quaternion2D(2, 4)));

            q.SetIdentity();
            q.SetFromTo(new Vector2(-1, -3), new Vector2(2, 4));
            Assert.AreEqual(q, new Quaternion2D(-0.9974842f, 0.07088902f));

            q = Quaternion2D.LookRotation(new Vector2(1, 3));
            Assert.AreEqual(q, new Quaternion2D(0.1601822f, 0.9870874f));
        }
        public void TestStaticFunctions()
        {
            Quaternion2D q1 = new Quaternion2D(2, 4);
            Quaternion2D q2 = new Quaternion2D(3, 5);

            Assert.IsTrue(Mathf.Equals(q1, new Quaternion2D(2.000009f, 4)));
            Assert.IsFalse(Mathf.Equals(q1, new Quaternion2D(2.00001f, 4)));
            Assert.IsFalse(Mathf.Equals(q1, new Quaternion2D(2.000009f, 4.00001f)));

            Assert.AreEqual(Quaternion2D.Length(q1), Mathf.Sqrt(20));

            float l = q1.length;

            Assert.AreEqual(Quaternion2D.Normalize(q1), new Quaternion2D(2 / l, 4 / l));

            Assert.AreEqual(Quaternion2D.Angle(q1, q2), 0f);
            //Assert.AreEqual(Quaternion2D.Angle(q1.normalized, q2.normalized), 0.153542951f);
            Assert.IsTrue(Mathf.Equals(Quaternion2D.Angle(q1.normalized, q2.normalized), 0.15354f));

            Assert.AreEqual(Quaternion2D.Dot(q1, q2), 26);

            Assert.AreEqual(Quaternion2D.Inverse(q1), new Quaternion2D(-2, 4));

            Assert.AreEqual(Quaternion2D.Slerp(q1, q2, 0), q1);
            Assert.AreEqual(Quaternion2D.Slerp(q1, q2, 0.5f), new Quaternion2D(2.5f, 4.5f));
            Assert.AreEqual(Quaternion2D.Slerp(q1, q2, 1), q2);

            Assert.AreEqual(Quaternion2D.FromAngle(0.927295268f),
                            Quaternion2D.Normalize(new Quaternion2D(2, 4)));

            Assert.AreEqual(Quaternion2D.FromToRotation(new Vector3(-1, -3), new Vector3(2, 4)),
                            new Quaternion2D(-0.9974842f, 0.07088902f));
        }
        public void TestProperties()
        {
            Quaternion2D q = new Quaternion2D(2, 4);

            Assert.AreEqual(q.length, Mathf.Sqrt(20));
            q.Normalize();

            Assert.AreEqual(q.angle, 0.927295268f);
        }