using System; namespace Test { public class Program { static int[] testValues = {0, -1, 200, -200, 32, -32, 64, -128, 333, 5}; dynamic dynBase; dynamic dynAmt; int? optBase; int? optAmt; int normBase; int normAmt; dynamic uDynBase; public static void Main () { var tester = new Program (); foreach (int baseVal in testValues) foreach (int amt in testValues) tester.ShiftTest (baseVal, amt); } public static void AreEqual (A a, B b) { if (!a.Equals (b)) throw new Exception ( String.Format ( "Shift Equality Assertion Failed: Had {0} and expected {1}", a, b)); } public void ShiftTest (int shiftBase, int shiftAmt) { optBase = dynBase = normBase = shiftBase; optAmt = dynAmt = normAmt = shiftAmt; int immediate = shiftBase << shiftAmt; AreEqual (dynBase << dynAmt, immediate); AreEqual (dynBase << optAmt, immediate); AreEqual (dynBase << normAmt, immediate); AreEqual (optBase << dynAmt, immediate); AreEqual (optBase << optAmt, immediate); AreEqual (optBase << normAmt, immediate); AreEqual (normBase << dynAmt, immediate); AreEqual (normBase << optAmt, immediate); AreEqual (normBase << normAmt, immediate); uint uShiftBase = (uint)shiftBase; uDynBase = uShiftBase; AreEqual (uShiftBase << dynAmt, uDynBase << dynAmt); AreEqual (uShiftBase << optAmt, uDynBase << optAmt); AreEqual (uShiftBase << normAmt, uDynBase << normAmt); } } }