public void TestDualQuaternionRotationPosition()
        {
            var r     = (RIJK) new RIJK((I)1, (J)2, (K)3, (R)4).Normalized;
            var p     = new Vector3(10, 20, 30);
            var dq    = RIJKD.From(r, p);
            var p2    = dq.Position;
            var delta = 1e-4f;

            Assert.AreEqual(p.x, p2.x, delta);
            Assert.AreEqual(p.y, p2.y, delta);
            Assert.AreEqual(p.z, p2.z, delta);
        }
        public void TestDualQuaternionAddition()
        {
            var d1 = new RIJKD((R)1, (I)2, (J)3, (K)4, (D)5, (DI)6, (DJ)7, (DK)8);
            var d2 = new RIJKD((R)10, (I)11, (J)12, (K)13, (D)14, (DI)15, (DJ)16, (DK)17);
            var d  = d1 + d2;

            Debug.Log(d);

            Assert.AreEqual((R)11, d.r);
            Assert.AreEqual((I)13, d.i);
            Assert.AreEqual((J)15, d.j);
            Assert.AreEqual((K)17, d.k);
            Assert.AreEqual((D)19, d.d);
            Assert.AreEqual((DI)21, d.di);
            Assert.AreEqual((DJ)23, d.dj);
            Assert.AreEqual((DK)25, d.dk);
        }