public void IgnoresCase()
        {
            CaseInsensitiveHashtable st = new CaseInsensitiveHashtable();

            st.Add("key", "value");
            Assert.AreEqual("value", st["KEY"]);
            st["KeY"] = "value2";
            Assert.AreEqual(1, st.Count);
            Assert.AreEqual("value2", st["key"]);

            try
            {
                st.Add("KEY", "value2");
                Assert.Fail();
            }
            catch (ArgumentException)
            { }

            Hashtable ht = new Hashtable();

            ht.Add("key", "value");
            ht.Add("KEY", "value");
            try
            {
                st = new CaseInsensitiveHashtable(ht, CultureInfo.InvariantCulture);
                Assert.Fail();
            }
            catch (ArgumentException)
            { }
        }
        public void ComparePerformance()
        {
            const int runs  = 30000000;
            StopWatch watch = new StopWatch();

            Hashtable ht = CollectionsUtil.CreateCaseInsensitiveHashtable();

            for (int i = 0; i < 1000000; i++)
            {
                ht.Add(Guid.NewGuid().ToString(), "val");                               // gen. higher number of elements results in OOM exception????
            }
            CaseInsensitiveHashtable ciht = new CaseInsensitiveHashtable(ht, CultureInfo.InvariantCulture);

            using (watch.Start("Duration: {0}"))
            {
                for (int i = 0; i < runs; i++)
                {
                    object v = ht["somekey"];
                }
            }

            using (watch.Start("Duration: {0}"))
            {
                for (int i = 0; i < runs; i++)
                {
                    object v = ciht["somekey"];
                }
            }
        }
        public void AcceptsNonStringKeys()
        {
            CaseInsensitiveHashtable st = new CaseInsensitiveHashtable();

            object key = new object();

            st.Add(key, "value");
            Assert.AreEqual(1, st.Count);
            Assert.AreEqual("value", st[key]);
            Assert.IsNull(st[new object()]);
        }
        public void IsSerializable()
        {
            CaseInsensitiveHashtable storiginal = new CaseInsensitiveHashtable();

            storiginal.Add("key", "value");
            CaseInsensitiveHashtable st = (CaseInsensitiveHashtable)SerializeDeserializeObject(storiginal);

            Assert.AreNotSame(storiginal, st);
            Assert.AreEqual("value", st["KEY"]);
            Assert.AreEqual(1, st.Count);
        }
        public void InitializeFromOtherCopiesValues()
        {
            Hashtable ht = new Hashtable();

            ht["key"]  = "value";
            ht["key2"] = "value2";

            CaseInsensitiveHashtable st = new CaseInsensitiveHashtable(ht, CultureInfo.InvariantCulture);

            Assert.AreEqual(2, st.Count);
            ht.Remove("key");
            Assert.AreEqual(1, ht.Count);
            Assert.AreEqual(2, st.Count);
        }