2 // RuntimeHelpersTest.cs - NUnit Test Cases for the System.Runtime.CompilerServices.RuntimeHelpers class
\r
4 // Zoltan Varga (vargaz@freemail.hu)
\r
6 // (C) Ximian, Inc. http://www.ximian.com
\r
9 using System.Runtime.CompilerServices;
\r
11 using NUnit.Framework;
\r
13 namespace MonoTests.System.Runtime.CompilerServices {
\r
16 public class RuntimeHelpersTest : Assertion {
\r
21 public override int GetHashCode () {
\r
25 public override bool Equals (object o) {
\r
32 public static int counter = 0;
\r
34 static FooClass () {
\r
35 counter = counter + 1;
\r
38 public override int GetHashCode () {
\r
42 public override bool Equals (object o) {
\r
48 public void TestOffsetToStringData ()
\r
50 AssertEquals ("OffsetToStringData is not constant",
\r
51 RuntimeHelpers.OffsetToStringData,
\r
52 RuntimeHelpers.OffsetToStringData);
\r
55 public void TestGetObjectValue ()
\r
62 RuntimeHelpers.GetObjectValue (null),
\r
65 // Test non-valuetype
\r
67 RuntimeHelpers.GetObjectValue (this),
\r
73 s2 = (FooStruct)RuntimeHelpers.GetObjectValue(s1);
\r
76 AssertEquals ("", s2.i, 42);
\r
77 AssertEquals ("", s2.j, "FOO");
\r
80 public void TestRunClassConstructor ()
\r
82 RuntimeHelpers.RunClassConstructor (typeof(FooClass).TypeHandle);
\r
83 AssertEquals ("", FooClass.counter, 1);
\r
85 // Each static constructor should only be run once
\r
86 RuntimeHelpers.RunClassConstructor (typeof(FooClass).TypeHandle);
\r
87 AssertEquals ("", FooClass.counter, 1);
\r
91 public void TestGetHashCode ()
\r
93 AssertEquals ("Null has hash code 0", 0, RuntimeHelpers.GetHashCode (null));
\r
94 object o = new object ();
\r
95 AssertEquals ("", o.GetHashCode (), RuntimeHelpers.GetHashCode (o));
\r
96 Assert ("", 5 != RuntimeHelpers.GetHashCode (new FooClass ()));
\r
99 public void TestEquals ()
\r
101 Assert (RuntimeHelpers.Equals (null, null));
\r
102 Assert (!RuntimeHelpers.Equals (new object (), null));
\r
103 Assert (!RuntimeHelpers.Equals (null, new object ()));
\r
105 FooStruct f1 = new FooStruct ();
\r
107 FooStruct f2 = new FooStruct ();
\r
113 Assert (RuntimeHelpers.Equals (o1, o2));
\r
115 // This should do a bit-by-bit comparison for valuetypes
\r
116 Assert (RuntimeHelpers.Equals (o1, o3));
\r
117 Assert (!RuntimeHelpers.Equals (o1, o4));
\r