Added test of multiplication operators.
authorJarl Gullberg <jarl.gullberg@gmail.com>
Fri, 2 Jun 2017 08:56:02 +0000 (10:56 +0200)
committerJarl Gullberg <jarl.gullberg@gmail.com>
Fri, 2 Jun 2017 08:56:02 +0000 (10:56 +0200)
tests/OpenTK.Tests/Vector2Tests.fs
tests/OpenTK.Tests/Vector3Tests.fs
tests/OpenTK.Tests/Vector4Tests.fs

index 0bf0b30..fccdbc6 100644 (file)
@@ -574,6 +574,17 @@ module Vector2 =
 
             Assert.Equal(transformedVector, Vector2.Transform(ref v, ref q))
 
+// TODO: Implement multiplication operator for Vector2 and Quaternion
+//        [<Property>]
+//        let ``Transformation by quaternion by multiplication using right-handed notation is the same as multiplication by quaternion and its conjugate`` (v : Vector2, q : Quaternion) =
+//            let vectorQuat = Quaternion(v.X, v.Y, 0.0f, 0.0f)
+//            let inverse = Quaternion.Invert(q)
+//
+//            let transformedQuat = q * vectorQuat * inverse
+//            let transformedVector = Vector2(transformedQuat.X, transformedQuat.Y)
+//
+//            Assert.Equal(transformedVector, q * v)
+
     [<Properties(Arbitrary = [| typeof<OpenTKGen> |])>]
     module Serialization =
         //
index 37bac29..851358c 100644 (file)
@@ -722,6 +722,16 @@ module Vector3 =
             Assert.ApproximatelyEqual(transformedVector, Vector3.Transform(ref v, ref q))
 
         [<Property>]
+        let ``Transformation by quaternion by multiplication using right-handed notation is the same as multiplication by quaternion and its conjugate`` (v : Vector3, q : Quaternion) =
+            let vectorQuat = Quaternion(v.X, v.Y, v.Z, 0.0f)
+            let inverse = Quaternion.Invert(q)
+
+            let transformedQuat = q * vectorQuat * inverse
+            let transformedVector = transformedQuat.Xyz
+
+            Assert.ApproximatelyEqual(transformedVector, q * v)
+
+        [<Property>]
         let ``Transformation by identity quaternion does not alter vector`` (v : Vector3) =
             let q = Quaternion.Identity
             let vectorQuat = Quaternion(v.X, v.Y, v.Z, 0.0f)
index ea6e072..0cf78ad 100644 (file)
@@ -812,7 +812,7 @@ module Vector4 =
     module Transformation =
         //
         [<Property>]
-        let ``Transformation by quaternion is the same as multiplication by quaternion and its conjugate`` (v : Vector4, q : Quaternion) =
+        let ``Transformation by quaternion with static method is the same as multiplication by quaternion and its conjugate`` (v : Vector4, q : Quaternion) =
             let vectorQuat = Quaternion(v.X, v.Y, v.Z, v.W)
             let inverse = Quaternion.Invert(q)
 
@@ -822,11 +822,21 @@ module Vector4 =
             Assert.Equal(transformedVector, Vector4.Transform(v, q))
 
         [<Property>]
-        let ``Transformation by quaternion by reference is the same as multiplication by quaternion and its conjugate`` (v : Vector4, q : Quaternion) =
+        let ``Transformation by quaternion with static method by reference is the same as multiplication by quaternion and its conjugate`` (v : Vector4, q : Quaternion) =
             let vectorQuat = Quaternion(v.X, v.Y, v.Z, v.W)
             let inverse = Quaternion.Invert(q)
 
             let transformedQuat = q * vectorQuat * inverse
             let transformedVector = Vector4(transformedQuat.X, transformedQuat.Y,transformedQuat.Z, transformedQuat.W)
 
-            Assert.Equal(transformedVector, Vector4.Transform(ref v, ref q))
\ No newline at end of file
+            Assert.Equal(transformedVector, Vector4.Transform(ref v, ref q))
+
+        [<Property>]
+        let ``Transformation by quaternion by multiplication using right-handed notation is the same as multiplication by quaternion and its conjugate`` (v : Vector4, q : Quaternion) =
+            let vectorQuat = Quaternion(v.X, v.Y, v.Z, v.W)
+            let inverse = Quaternion.Invert(q)
+
+            let transformedQuat = q * vectorQuat * inverse
+            let transformedVector = Vector4(transformedQuat.X, transformedQuat.Y, transformedQuat.Z, transformedQuat.W)
+
+            Assert.Equal(transformedVector, q * v)
\ No newline at end of file