public void TestAddRemoveRange()
        {
            var certificates = new List <X509Certificate> ();
            var chain        = new X509CertificateChain();

            foreach (var authority in CertificateAuthorities)
            {
                var certificate = LoadCertificate(GetTestDataPath(authority));

                certificates.Add(certificate);
            }

            Assert.Throws <ArgumentNullException> (() => chain.AddRange(null));

            chain.AddRange(certificates);

            Assert.AreEqual(CertificateAuthorities.Length, chain.Count, "Unexpected number of certificates after AddRange.");

            int index = 0;

            foreach (var certificate in chain)
            {
                Assert.AreEqual(certificates[index++], certificate, "GetEnumerator");
            }

            index = 0;
            foreach (X509Certificate certificate in ((IEnumerable)chain))
            {
                Assert.AreEqual(certificates[index++], certificate, "GetEnumerator");
            }

            Assert.Throws <ArgumentNullException> (() => chain.RemoveRange(null));

            chain.RemoveRange(certificates);

            Assert.AreEqual(0, chain.Count, "Unexpected number of certificates after RemoveRange.");
        }