public void Add()
        {
            AssemblyCache builder = new AssemblyCache();

            Assembly assembly1 = Assembly.GetExecutingAssembly();
            Assembly assembly2 = typeof(FactAttribute).Assembly;

            builder.AddAssembly(assembly1);
            Assert.Throws <ArgumentNullException>(() => builder.AddAssembly(null));

            builder.AddAssemblies(new Assembly[] { assembly1, assembly2 });
            Assert.Throws <ArgumentNullException>(() => builder.AddAssemblies(null));
            Assert.Throws <ArgumentException>(() => builder.AddAssemblies(new Assembly[] { assembly1, null }));

            builder.AddFile(assembly1.Location);
            Assert.Throws <ArgumentNullException>(() => builder.AddFile(null));
            Assert.Throws <ArgumentException>(() => builder.AddFile(""));
            Assert.Throws <ArgumentException>(() => builder.AddFile(" "));

            builder.AddFiles(new string[] { assembly1.Location, assembly2.Location });
            Assert.Throws <ArgumentNullException>(() => builder.AddFiles(null));
            Assert.Throws <ArgumentException>(() => builder.AddFiles(new string[] { assembly1.Location, null }));
            Assert.Throws <ArgumentException>(() => builder.AddFiles(new string[] { "", assembly1.Location }));
            Assert.Throws <ArgumentException>(() => builder.AddFiles(new string[] { "  ", assembly1.Location }));
        }
        public void Sequence()
        {
            Assembly assembly1 = Assembly.GetExecutingAssembly();
            Assembly assembly2 = typeof(FactAttribute).Assembly;
            IEnumerable <Assembly> sequence12 = new Assembly[] { assembly1, assembly2 };
            IEnumerable <Assembly> sequence21 = new Assembly[] { assembly2, assembly1 };

            var sequence1 = new AssemblyCache();

            sequence1.AddAssembly(assembly1);
            sequence1.AddAssembly(assembly2);
            sequence1.AddFile(assembly2.Location);
            sequence1.AddFile(assembly1.Location);

            Assert.True(sequence1.SequenceEqual(sequence12));
            Assert.True(sequence1.SequenceEqual(sequence12));

            var sequence2 = new AssemblyCache();

            sequence2.AddAssemblies(sequence21);
            sequence2.AddAssemblies(sequence12);

            Assert.True(sequence2.SequenceEqual(sequence21));
            Assert.True(sequence2.SequenceEqual(sequence21));

            var sequence3 = new AssemblyCache();

            sequence3.AddFile(assembly1.Location);
            sequence3.AddFile(assembly2.Location);
            sequence3.AddAssembly(assembly1);
            sequence3.AddAssembly(assembly2);

            Assert.True(sequence3.SequenceEqual(sequence12));
            Assert.True(sequence3.SequenceEqual(sequence12));

            var sequence4 = new AssemblyCache();

            sequence4.AddFile(assembly2.Location);
            sequence4.AddAssembly(assembly1);
            sequence4.AddFile(assembly1.Location);
            sequence4.AddAssembly(assembly2);

            Assert.True(sequence4.SequenceEqual(sequence21));
            Assert.True(sequence4.SequenceEqual(sequence21));
        }