--- /dev/null
+using System;
+
+public class ValueType1
+{
+ static int Main ()
+ {
+ Blah a = new Blah ("abc", 1);
+ Blah b = new Blah ("ab" + 'c', 1);
+ long start, end;
+ start = Environment.TickCount;
+
+ start = Environment.TickCount;
+ for (int i = 0; i < 1000000; i++)
+ a.GetHashCode ();
+ end = Environment.TickCount;
+ Console.WriteLine ("struct common GetHashCode(): {0}", end-start);
+
+ start = Environment.TickCount;
+ for (int i = 0; i < 1000000; i++)
+ a.Equals (b);
+ end = Environment.TickCount;
+ Console.WriteLine ("struct common Equals(): {0}", end-start);
+
+ Blah2 a2 = new Blah2 ("abc", 1);
+ Blah2 b2 = new Blah2 ("abc", 1);
+ start = Environment.TickCount;
+ for (int i = 0; i < 1000000; i++)
+ a2.GetHashCode ();
+ end = Environment.TickCount;
+ Console.WriteLine ("struct specific GetHashCode(): {0}", end-start);
+
+ start = Environment.TickCount;
+ for (int i = 0; i < 1000000; i++)
+ a2.Equals (b2);
+ end = Environment.TickCount;
+ Console.WriteLine ("struct specific Equals(): {0}", end-start);
+
+ return 0;
+ }
+
+ struct Blah
+ {
+ public string s;
+ public int i;
+
+ public Blah (string s, int k)
+ {
+ this.s = s;
+ i = k;
+ }
+ }
+
+ struct Blah2
+ {
+ public string s;
+ public int i;
+
+ public Blah2 (string s, int k)
+ {
+ this.s = s;
+ i = k;
+ }
+
+ public override int GetHashCode () {
+ return i ^ s.GetHashCode ();
+ }
+ public override bool Equals (object obj) {
+ if (obj == null || !(obj is Blah2))
+ return false;
+ Blah2 b = (Blah2)obj;
+ return b.s == this.s && b.i == this.i;
+ }
+ }
+}
+