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();
Single[] data = new Single[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();
}
}