use Paolo's benchmark
[mono.git] / mono / benchmark / valuetype-hash-equals.cs
diff --git a/mono/benchmark/valuetype-hash-equals.cs b/mono/benchmark/valuetype-hash-equals.cs
new file mode 100644 (file)
index 0000000..2aa1a4b
--- /dev/null
@@ -0,0 +1,75 @@
+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;
+               }
+       }
+}
+