Added transformation by quaternion test.
authorJarl Gullberg <jarl.gullberg@gmail.com>
Thu, 1 Jun 2017 19:26:34 +0000 (21:26 +0200)
committerJarl Gullberg <jarl.gullberg@gmail.com>
Thu, 1 Jun 2017 19:26:34 +0000 (21:26 +0200)
tests/OpenTK.Tests/Vector3Tests.fs
tests/OpenTK.Tests/Vector4Tests.fs

index 9c879b6..2d5b3ca 100644 (file)
@@ -684,7 +684,7 @@ module Vector3 =
 
         [<Property>]
         let ``Unit one is correct``  =
-            let unitOne = Vector3((float32)1, (float32)1, (float32)1)
+            let unitOne = Vector3(1.0f, 1.0f, 1.0f)
 
             Assert.Equal(Vector3.One, unitOne)
 
@@ -696,4 +696,27 @@ module Vector3 =
             let expectedSize = sizeof<float32> * 3
 
             Assert.Equal(expectedSize, Vector3.SizeInBytes)
-            Assert.Equal(expectedSize, Marshal.SizeOf(Vector3()))
\ No newline at end of file
+            Assert.Equal(expectedSize, Marshal.SizeOf(Vector3()))
+
+    [<Properties(Arbitrary = [| typeof<OpenTKGen> |])>]
+    module Transformation =
+        //
+        [<Property>]
+        let ``Transformation by quaternion 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 = Vector3(transformedQuat.X, transformedQuat.Y, transformedQuat.Z)
+
+            Assert.Equal(transformedVector, Vector3.Transform(v, q))
+
+        [<Property>]
+        let ``Transformation by quaternion by reference 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 = Vector3(transformedQuat.X, transformedQuat.Y,transformedQuat.Z)
+
+            Assert.Equal(transformedVector, Vector3.Transform(ref v, ref q))
\ No newline at end of file
index 7033f2a..2abb7bb 100644 (file)
@@ -806,4 +806,27 @@ module Vector4 =
             let expectedSize = sizeof<float32> * 4
 
             Assert.Equal(expectedSize, Vector4.SizeInBytes)
-            Assert.Equal(expectedSize, Marshal.SizeOf(Vector4()))
\ No newline at end of file
+            Assert.Equal(expectedSize, Marshal.SizeOf(Vector4()))
+
+    [<Properties(Arbitrary = [| typeof<OpenTKGen> |])>]
+    module Transformation =
+        //
+        [<Property>]
+        let ``Transformation by quaternion 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(v, q))
+
+        [<Property>]
+        let ``Transformation by quaternion 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