Abacus.DoublePrecision.Matrix44Tests.Test_StructLayout_ii C# (CSharp) Method

Test_StructLayout_ii() private method

private Test_StructLayout_ii ( ) : void
return void
        public unsafe void Test_StructLayout_ii ()
        {
            for( Int32 i = 0; i < 100; ++ i)
            {
                Matrix44 mat = GetNextRandomMatrix44();

                GCHandle h_vec = GCHandle.Alloc(mat, GCHandleType.Pinned);

                IntPtr vecAddress = h_vec.AddrOfPinnedObject();

                Double[] data = new Double[16];

                // nb: when Fixed32 and Half are moved back into the main
                //     dev branch there will be need for an extension method for
                //     Marshal that will perform the copy for those types.
                MarshalHelper.Copy(vecAddress, data, 0, 16);
                Assert.That(data[0], Is.EqualTo(mat.R0C0));
                Assert.That(data[1], Is.EqualTo(mat.R0C1));
                Assert.That(data[2], Is.EqualTo(mat.R0C2));
                Assert.That(data[3], Is.EqualTo(mat.R0C3));
                Assert.That(data[4], Is.EqualTo(mat.R1C0));
                Assert.That(data[5], Is.EqualTo(mat.R1C1));
                Assert.That(data[6], Is.EqualTo(mat.R1C2));
                Assert.That(data[7], Is.EqualTo(mat.R1C3));
                Assert.That(data[8], Is.EqualTo(mat.R2C0));
                Assert.That(data[9], Is.EqualTo(mat.R2C1));
                Assert.That(data[10], Is.EqualTo(mat.R2C2));
                Assert.That(data[11], Is.EqualTo(mat.R2C3));
                Assert.That(data[12], Is.EqualTo(mat.R3C0));
                Assert.That(data[13], Is.EqualTo(mat.R3C1));
                Assert.That(data[14], Is.EqualTo(mat.R3C2));
                Assert.That(data[15], Is.EqualTo(mat.R3C3));

                h_vec.Free();
            }
        }
Matrix44Tests