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