public void GetFileMetadataCutsTest()
        {
            FileMetadataInfo[] infos = new FileMetadataInfo[]
            {
                new FileMetadataInfo(new DateTime(1000, 1, 1), new DateTime(1000, 1, 2)),
                new FileMetadataInfo(new DateTime(2000, 1, 1), new DateTime(2000, 1, 2)),
                new FileMetadataInfo(new DateTime(3000, 1, 1), new DateTime(3000, 1, 2)),
                new FileMetadataInfo(new DateTime(4000, 1, 1), new DateTime(4000, 1, 2)),
                new FileMetadataInfo(new DateTime(5000, 1, 1), new DateTime(5000, 1, 2)),
            };

            DateTime startTime;
            DateTime endTime;
            DateTime startCut;
            DateTime endCut;

            startTime = DateTime.MinValue.ToUniversalTime();
            endTime   = startTime + TimeSpan.FromDays(1);
            FileMetadataFilter.GetFileMetadataCuts(infos, startTime, endTime, out startCut, out endCut);
            Assert.AreEqual(DateTime.MinValue.ToUniversalTime(), startCut);
            Assert.AreEqual(new DateTime(1000, 1, 2), endCut);

            startTime = DateTime.MaxValue.ToUniversalTime() - TimeSpan.FromDays(1);
            endTime   = DateTime.MaxValue.ToUniversalTime();
            FileMetadataFilter.GetFileMetadataCuts(infos, startTime, endTime, out startCut, out endCut);
            Assert.AreEqual(new DateTime(5000, 1, 1), startCut);
            Assert.AreEqual(DateTime.MaxValue.ToUniversalTime(), endCut);

            startTime = new DateTime(2000, 1, 1);
            endTime   = new DateTime(3000, 1, 2);
            FileMetadataFilter.GetFileMetadataCuts(infos, startTime, endTime, out startCut, out endCut);
            Assert.AreEqual(new DateTime(1000, 1, 1), startCut);
            Assert.AreEqual(new DateTime(4000, 1, 2), endCut);

            startTime = new DateTime(2000, 1, 3);
            endTime   = new DateTime(4000, 1, 3);
            FileMetadataFilter.GetFileMetadataCuts(infos, startTime, endTime, out startCut, out endCut);
            Assert.AreEqual(new DateTime(2000, 1, 1), startCut);
            Assert.AreEqual(new DateTime(5000, 1, 2), endCut);

            startTime = new DateTime(100, 1, 1);
            endTime   = new DateTime(9000, 1, 1);
            FileMetadataFilter.GetFileMetadataCuts(infos, startTime, endTime, out startCut, out endCut);
            Assert.AreEqual(DateTime.MinValue.ToUniversalTime(), startCut);
            Assert.AreEqual(DateTime.MaxValue.ToUniversalTime(), endCut);

            startTime = DateTime.MinValue.ToUniversalTime();
            endTime   = new DateTime(4000, 1, 3);
            FileMetadataFilter.GetFileMetadataCuts(infos, startTime, endTime, out startCut, out endCut);
            Assert.AreEqual(DateTime.MinValue.ToUniversalTime(), startCut);
            Assert.AreEqual(new DateTime(5000, 1, 2), endCut);

            startTime = new DateTime(4000, 1, 1);
            endTime   = DateTime.MaxValue.ToUniversalTime();
            FileMetadataFilter.GetFileMetadataCuts(infos, startTime, endTime, out startCut, out endCut);
            Assert.AreEqual(new DateTime(3000, 1, 1), startCut);
            Assert.AreEqual(DateTime.MaxValue.ToUniversalTime(), endCut);
        }
        public void CreateFilterFuncTest()
        {
            List <FileInfo> fileInfos = new List <FileInfo>(FileMetadataFilterTest.testFiles.Select(p => new FileInfo(p.Item1)));

            FileMetadataFilter     filter     = new FileMetadataFilter();
            Func <FileInfo, bool>  filterFunc = filter.CreateFilterFunc(fileInfos, new DateTime(4000, 1, 1), new DateTime(4000, 2, 2));
            IEnumerable <FileInfo> result     = fileInfos.Where(filterFunc);

            Assert.AreEqual(3, result.Count());
            Assert.IsTrue(result.Contains(fileInfos[1]) && result.Contains(fileInfos[2]) && result.Contains(fileInfos[3]));
        }