public static int Main() { Random r = new Random(); try { // test for ConditionalWeakTable<string> Driver <string, string> stringDriver = new Driver <string, string>(); string[] stringArr = new string[100]; for (int i = 0; i < 100; i++) { stringArr[i] = "SomeTestString" + i.ToString(); } // test with generic object // test for ConditionalWeakTable<RefX1<int>> Driver <string, RefX1 <int> > refIntDriver = new Driver <string, RefX1 <int> >(); RefX1 <int>[] refIntArr = new RefX1 <int> [100]; for (int i = 0; i < 100; i++) { refIntArr[i] = new RefX1 <int>(i); } // test with generic object // test for ConditionalWeakTable<RefX1<string>> Driver <string, RefX1 <string> > refStringDriver = new Driver <string, RefX1 <string> >(); RefX1 <string>[] refStringArr = new RefX1 <string> [100]; for (int i = 0; i < 100; i++) { refStringArr[i] = new RefX1 <string>("SomeTestString" + i.ToString()); } stringDriver.BasicAdd(stringArr, stringArr); refIntDriver.BasicAdd(stringArr, refIntArr); refStringDriver.BasicAdd(stringArr, refStringArr); //=============================================================== // test various boundary conditions // - add/remove/lookup of null key // - remove/lookup of non-existing key in an empty dictionary and a non-empty dictionary stringDriver.AddValidations(stringArr, stringArr, stringArr[0]); refIntDriver.AddValidations(stringArr, refIntArr, refIntArr[0]); refStringDriver.AddValidations(stringArr, refStringArr, refStringArr[0]); //=============================================================== stringDriver.RemoveValidations(stringArr, stringArr, r.Next().ToString(), stringArr[0]); refIntDriver.RemoveValidations(stringArr, refIntArr, r.Next().ToString(), refIntArr[0]); refStringDriver.RemoveValidations(stringArr, refStringArr, r.Next().ToString(), refStringArr[0]); //=============================================================== stringDriver.TryGetValueValidations(stringArr, stringArr, r.Next().ToString(), stringArr[0]); refIntDriver.TryGetValueValidations(stringArr, refIntArr, r.Next().ToString(), refIntArr[0]); refStringDriver.TryGetValueValidations(stringArr, refStringArr, r.Next().ToString(), refStringArr[0]); //=============================================================== // this method generates a dictionary with keys and values to be used for GetValue() method testing stringDriver.GenerateValuesForStringKeys(stringArr); stringDriver.GetValueValidations(stringArr, stringArr); Driver <RefX1 <int>, string> refIntDriver2 = new Driver <RefX1 <int>, string>(); refIntDriver2.GenerateValuesForIntRefKeys(refIntArr, stringArr); refIntDriver2.GetValueValidations(refIntArr, stringArr); Driver <RefX1 <string>, string> refStringDriver2 = new Driver <RefX1 <string>, string>(); refStringDriver2.GenerateValuesForStringRefKeys(refStringArr, stringArr); refStringDriver2.GetValueValidations(refStringArr, stringArr); //=============================================================== stringDriver.AddSameKey(stringArr, stringArr, 0, 2); stringDriver.AddSameKey(stringArr, stringArr, 99, 3); stringDriver.AddSameKey(stringArr, stringArr, 50, 4); stringDriver.AddSameKey(stringArr, stringArr, 1, 5); stringDriver.AddSameKey(stringArr, stringArr, 98, 6); refIntDriver.AddSameKey(stringArr, refIntArr, 0, 2); refIntDriver.AddSameKey(stringArr, refIntArr, 99, 3); refIntDriver.AddSameKey(stringArr, refIntArr, 50, 4); refIntDriver.AddSameKey(stringArr, refIntArr, 1, 5); refIntDriver.AddSameKey(stringArr, refIntArr, 98, 6); refStringDriver.AddSameKey(stringArr, refStringArr, 0, 2); refStringDriver.AddSameKey(stringArr, refStringArr, 99, 3); refStringDriver.AddSameKey(stringArr, refStringArr, 50, 4); refStringDriver.AddSameKey(stringArr, refStringArr, 1, 5); refStringDriver.AddSameKey(stringArr, refStringArr, 98, 6); //=============================================================== stringDriver.AddRemoveKeyValPair(stringArr, stringArr, 0, 2); stringDriver.AddRemoveKeyValPair(stringArr, stringArr, 99, 3); stringDriver.AddRemoveKeyValPair(stringArr, stringArr, 50, 4); stringDriver.AddRemoveKeyValPair(stringArr, stringArr, 1, 5); stringDriver.AddRemoveKeyValPair(stringArr, stringArr, 98, 6); refIntDriver.AddRemoveKeyValPair(stringArr, refIntArr, 0, 2); refIntDriver.AddRemoveKeyValPair(stringArr, refIntArr, 99, 3); refIntDriver.AddRemoveKeyValPair(stringArr, refIntArr, 50, 4); refIntDriver.AddRemoveKeyValPair(stringArr, refIntArr, 1, 5); refIntDriver.AddRemoveKeyValPair(stringArr, refIntArr, 98, 6); refStringDriver.AddRemoveKeyValPair(stringArr, refStringArr, 0, 2); refStringDriver.AddRemoveKeyValPair(stringArr, refStringArr, 99, 3); refStringDriver.AddRemoveKeyValPair(stringArr, refStringArr, 50, 4); refStringDriver.AddRemoveKeyValPair(stringArr, refStringArr, 1, 5); refStringDriver.AddRemoveKeyValPair(stringArr, refStringArr, 98, 6); //============================================================== // new tests for GetOrCreateValue (new Driver <string, WithDefaultConstructor>()).BasicGetOrCreateValue(stringArr); WithDefaultConstructor[] wvalues = new WithDefaultConstructor[stringArr.Length]; for (int i = 0; i < wvalues.Length; i++) { wvalues[i] = new WithDefaultConstructor(stringArr[i]); } (new Driver <string, WithDefaultConstructor>()).BasicAddThenGetOrCreateValue(stringArr, wvalues); NegativeTestCases.NoDefaulConstructor(); //=============================================================== if (Test.result) { Console.WriteLine("Test Passed"); return(100); } else { Console.WriteLine("Test Failed"); return(101); } } catch (Exception e) { Console.WriteLine("Test threw unexpected exception:\n{0}", e); return(102); } }