1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
|
// Compiler options: -unsafe -r:gtest-fixedbuffer-01-lib.dll
// Fixed buffers tests
using System;
using System.Runtime.InteropServices;
[module: DefaultCharSet (CharSet.Ansi)]
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public unsafe struct TestNew {
private fixed char test_1 [128];
public fixed bool test2 [4];
public fixed int T [2];
public fixed bool test20 [4], test21 [40];
private int foo, foo2;
public void SetTest () {
fixed (char* c = test_1) {
*c = 'g';
}
}
}
struct Struct2 {
public unsafe fixed byte Pad[64];
}
public class C {
unsafe static int Test () {
TestNew tt = new TestNew ();
tt.SetTest ();
tt.test2 [2] = false;
tt.T [1] = 5544;
if (tt.T [1] != 5544)
return 2;
ExternalStruct es = new ExternalStruct ();
es.double_buffer [1] = 999999.8888;
es.double_buffer [0] = es.double_buffer [1];
// Attributes test
if (Attribute.GetCustomAttribute (typeof (TestNew).GetField ("test2"), typeof (System.Runtime.CompilerServices.FixedBufferAttribute)) == null)
return 3;
if (typeof (TestNew).GetNestedTypes ().Length != 5)
return 5;
foreach (Type t in typeof (TestNew).GetNestedTypes ()) {
if (Attribute.GetCustomAttribute (t, typeof (System.Runtime.CompilerServices.CompilerGeneratedAttribute)) == null)
return 40;
if (Attribute.GetCustomAttribute (t, typeof (System.Runtime.CompilerServices.UnsafeValueTypeAttribute)) == null)
return 41;
if (!t.IsUnicodeClass)
return 42;
}
Console.WriteLine ("OK");
return 0;
}
public static int Main () {
return Test ();
}
}
|