public static unsafe void TestInversionCorrectness()
{
Random random = new Random(5);
for (int iterationIndex = 0; iterationIndex < 1000; ++iterationIndex)
{
bAffineTransform scalar;
AffineTransform simd;
var scalarPointer = (float*)&scalar;
var simdPointer = (float*)&simd;
//Create a guaranteed invertible transform.
scalar.LinearTransform = bMatrix3x3.CreateFromAxisAngle(
bVector3.Normalize(new bVector3(
0.1f + (float)random.NextDouble(),
0.1f + (float)random.NextDouble(),
0.1f + (float)random.NextDouble())),
(float)random.NextDouble());
scalar.Translation = new bVector3((float)random.NextDouble() * 10, (float)random.NextDouble() * 10, (float)random.NextDouble() * 10);
for (int i = 0; i < 12; ++i)
{
simdPointer[i] = scalarPointer[i];
}
bAffineTransform.Invert(ref scalar, out scalar);
AffineTransform.Invert(ref simd, out simd);
for (int i = 0; i < 12; ++i)
{
var errorSimd = Math.Abs(simdPointer[i] - scalarPointer[i]);
Assert.IsTrue(errorSimd < 1e-5f);
}
}
}