public void ConcurrentHashSet()
        {
            ConcurrentHashSet <int> playSet  = new ConcurrentHashSet <int>();
            ConcurrentHashSet <int> smallSet = new ConcurrentHashSet <int>(new int[] { 0, 1 });
            ConcurrentHashSet <int> bigSet   = new ConcurrentHashSet <int>(new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }, EqualityComparer <int> .Default);
            ConcurrentHashSet <int> nullSet  = null;

            Assert.AreEqual(EqualityComparer <int> .Default, bigSet.Comparer);
            Assert.IsFalse(string.IsNullOrEmpty(smallSet.ToString()));
            Assert.IsTrue(smallSet.IsProperSubsetOf(bigSet));
            Assert.IsTrue(smallSet.IsSubsetOf(bigSet));
            Assert.IsTrue(bigSet.IsProperSupersetOf(smallSet));
            Assert.IsTrue(bigSet.IsSupersetOf(smallSet));
            playSet.TryAdd(0);
            ((ICollection <int>)playSet).Add(1);
            Assert.IsTrue(playSet.Contains(0));
            Assert.IsTrue(smallSet.SetEquals(playSet));
            Assert.IsFalse(smallSet.SetEquals(bigSet));
            Assert.IsFalse(smallSet.SetEquals(null));
            Assert.IsTrue(smallSet.IsSubsetOf(playSet));
            Assert.IsFalse(bigSet.IsSubsetOf(playSet));
            Assert.IsFalse(bigSet.IsSubsetOf(null));
            Assert.IsFalse(playSet.IsSupersetOf(bigSet));
            Assert.IsTrue(playSet.IsSupersetOf(null));
            Assert.IsFalse(bigSet.IsSubsetOf(playSet));
            Assert.IsFalse(bigSet.IsSubsetOf(null));
            Assert.IsFalse(smallSet.IsProperSubsetOf(playSet));
            Assert.IsFalse(playSet.IsProperSupersetOf(smallSet));
            Assert.IsTrue(playSet.IsProperSupersetOf(null));
            Assert.IsFalse(smallSet.IsProperSubsetOf(null));
            Assert.IsFalse(smallSet.IsProperSubsetOf(new ConcurrentHashSet <int>(new int[] { 3, 4, 5 })));
            Assert.IsFalse(smallSet.IsSupersetOf(new ConcurrentHashSet <int>(new int[] { 3, 4, 5 })));
            Assert.IsFalse(smallSet.IsSubsetOf(new ConcurrentHashSet <int>(new int[] { 3, 4, 5 })));
            Assert.IsFalse(new ConcurrentHashSet <int>(new int[] { 3, 4, 5 }).IsProperSupersetOf(smallSet));
            Assert.IsFalse(new ConcurrentHashSet <int>(new int[] { 3, 4, 5 }).IsSupersetOf(smallSet));
            Assert.IsFalse(new ConcurrentHashSet <int>(new int[] { 3, 4, 5 }).Overlaps(smallSet));
            IEqualityComparer <ConcurrentHashSet <int> > setComparer = ConcurrentHashSet <int> .CreateSetComparer();

            Assert.IsTrue(setComparer.Equals(smallSet, playSet));
            Assert.IsFalse(setComparer.Equals(bigSet, playSet));
            Assert.AreEqual(setComparer.GetHashCode(smallSet), setComparer.GetHashCode(playSet));
            Assert.IsTrue(setComparer.Equals(smallSet, smallSet));
            Assert.IsFalse(setComparer.Equals(smallSet, nullSet));
            Assert.IsFalse(setComparer.Equals(nullSet, smallSet));
            Assert.IsFalse(smallSet.IsReadOnly);

            Assert.IsTrue(smallSet.Overlaps(bigSet));
            Assert.IsFalse(smallSet.Overlaps(null));

            int[] test = new int[2];
            smallSet.CopyTo(test);
            smallSet.CopyTo(test, 0);

            smallSet.Add(2);

            playSet.Remove(1);
            bigSet.ExceptWith(playSet);
            bigSet.ExceptWith(null);
            Assert.IsFalse(bigSet.Contains(0));
            Assert.IsTrue(bigSet.Contains(1));
            smallSet.IntersectWith(playSet);
            Assert.IsTrue(smallSet.Contains(0));
            Assert.IsFalse(smallSet.Contains(1));

            ConcurrentHashSet <int> niSet = new ConcurrentHashSet <int>();

            niSet.Add(0);
            Assert.IsFalse(niSet.IsEmpty);
            niSet.IntersectWith(null);
            Assert.IsTrue(niSet.IsEmpty);
            niSet.Add(0);
            Assert.AreEqual(1, niSet.Count);
            niSet.RemoveWhere(null);
            Assert.AreEqual(1, niSet.Count);

            smallSet.IntersectWith(playSet);

            playSet.Add(0);
            playSet.Add(2);
            playSet.RemoveWhere(n => n != 0);
            Assert.IsTrue(playSet.Contains(0));
            Assert.IsFalse(playSet.Contains(1));

            playSet.Add(0);
            playSet.Add(2);
            smallSet.Add(1);
            playSet.SymmetricExceptWith(smallSet);
            playSet.SymmetricExceptWith(null);
            Assert.IsFalse(playSet.Contains(0));
            Assert.IsTrue(playSet.Contains(1));
            Assert.IsTrue(playSet.Contains(2));

            playSet.UnionWith(smallSet);
            playSet.UnionWith(null);
            Assert.IsTrue(playSet.Contains(0));
            Assert.IsTrue(playSet.Contains(1));
            Assert.IsTrue(playSet.Contains(2));
            Assert.IsFalse(playSet.Contains(3));

            playSet.Clear();
            Assert.IsFalse(smallSet.IsSubsetOf(playSet));

            foreach (object o in ((System.Collections.IEnumerable)smallSet))
            {
                Assert.IsTrue(o is int);
                Assert.IsTrue((int)o < 10);
            }
        }