public void CanStorageDisposeInAResonableAmountOfTime()
        {
            BinaryDataListStorage bdls = new BinaryDataListStorage("MySweetNamespace", Guid.NewGuid());

            // build insert value ;)
            var row = CreateBinaryDataListRow(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), Guid.NewGuid().ToString());

            DateTime start = DateTime.Now;

            // Insert information
            for (int i = 1; i <= 100000; i++)
            {
                bdls.Add(i, row);
            }

            DateTime end = DateTime.Now;

            double dif = (end.Ticks - (double)start.Ticks) / TimeSpan.TicksPerSecond;

            bdls.Dispose();

            Assert.IsTrue(dif <= 3.5, "100k rows took too long to insert into storage, should be about 0.5 seconds { " + dif + " }");

            Assert.AreEqual(0, bdls.Count, "Not all items disposed from row storage");
        }
        public void CanStorageDisposeInAResonableAmountOfTime()
        {
            BinaryDataListStorage bdls = new BinaryDataListStorage("MySweetNamespace", Guid.NewGuid());

            // build insert value ;)
            var row = CreateBinaryDataListRow(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), Guid.NewGuid().ToString());

            DateTime start = DateTime.Now;

            // Insert information
            for (int i = 1; i <= 100000; i++)
            {
                bdls.Add(i, row);
            }

            DateTime end = DateTime.Now;

            double dif = (end.Ticks - (double)start.Ticks) / TimeSpan.TicksPerSecond;

            bdls.Dispose();

            Assert.IsTrue(dif <= 3.5, "100k rows took too long to insert into storage, should be about 0.5 seconds { " + dif + " }");

            Assert.AreEqual(0, bdls.Count, "Not all items disposed from row storage");
        }
        static IIndexIterator AddLotsOfRows(BinaryDataListStorage bdls)
        {
            var row  = CreateBinaryDataListRow("1", "1", "Barney", "T", "Buchan");
            var row2 = CreateBinaryDataListRow("2", "2", "Huggs", "W", "Naidu");
            var row3 = CreateBinaryDataListRow("3", "3", "Trav", "A", "Fri");
            var row4 = CreateBinaryDataListRow("4", "4", "Trav", "B", "Fri");
            var row5 = CreateBinaryDataListRow("5", "5", "Huggs", "C", "Bear");
            var row6 = CreateBinaryDataListRow("6", "6", "Huggs", "D", "Naidu");

            bdls.Add(1, row);
            bdls.Add(2, row2);
            bdls.Add(3, row3);
            bdls.Add(4, row4);
            bdls.Add(5, row5);
            bdls.Add(6, row6);
            for (int i = 7; i <= 10; i++)
            {
                bdls.Add(i, row2);
            }
            for (int i = 11; i <= 20; i++)
            {
                bdls.Add(i, row3);
            }
            for (int i = 21; i <= 25; i++)
            {
                bdls.Add(i, row4);
            }
            for (int i = 26; i <= 30; i++)
            {
                bdls.Add(i, row5);
            }
            for (int i = 31; i <= 100; i++)
            {
                bdls.Add(i, row2);
            }
            for (int i = 101; i <= 1000; i++)
            {
                bdls.Add(i, row5);
            }
            for (int i = 1001; i <= 10000; i++)
            {
                bdls.Add(i, row);
            }
            var row7 = CreateBinaryDataListRow("7", "Seven", "Something", "02252", "Someone");

            for (int i = 10001; i <= 50000; i++)
            {
                bdls.Add(i, row7);
            }

            return(new IndexIterator(null, 50000));
        }
        public void TryGetValuesWithRangeThrowsExceptionIfNoDataEndIndex()
        {
            BinaryDataListStorage bdls = new BinaryDataListStorage("MySweetNamespace", Guid.NewGuid());


            // build insert value ;)
            var row = CreateBinaryDataListRow(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), Guid.NewGuid().ToString());

            // Insert information
            for (int i = 1; i <= 100000; i++)
            {
                bdls.Add(i, row);
            }
            const int startIndex = 1;
            const int endIndex   = 100002;

            bdls.GetValues(startIndex, endIndex);
        }
        public void TryGetValuesWithRange()
        {
            BinaryDataListStorage bdls = new BinaryDataListStorage("MySweetNamespace", Guid.NewGuid());

            // build insert value ;)
            var row = CreateBinaryDataListRow(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), Guid.NewGuid().ToString());

            // Insert information
            for (int i = 1; i <= 100000; i++)
            {
                bdls.Add(i, row);
            }
            const int startIndex = 1;
            const int endIndex = 100;
            List<IBinaryDataListRow> rows = bdls.GetValues(startIndex, endIndex);
            Assert.AreEqual(99,rows.Count);
            Assert.IsFalse(rows[0].IsEmpty);
            Assert.IsFalse(rows[5].IsEmpty);
        }
        public void DistinctGetValuesWhenHasDistinctValuesShouldReturnOnlyDistinctRows1MilOfRows100Col()
        {
            BinaryDataListStorage bdls = new BinaryDataListStorage("MySweetNamespace", Guid.NewGuid());

            // build insert value ;)
            IIndexIterator keys = AddLotsOfRows1Mil(bdls);
            // Insert information
            List <int> distinctCols = new List <int> {
                2, 4, 5, 7, 120, 134, 99, 78, 34
            };
            DateTime   start = DateTime.Now;
            List <int> rows  = bdls.DistinctGetRows(keys, distinctCols);
            DateTime   end   = DateTime.Now;
            double     dif   = (end.Ticks - (double)start.Ticks) / TimeSpan.TicksPerSecond;

            Assert.AreEqual(7, rows.Count);
            Assert.IsTrue(dif < 20, string.Format("Time taken: {0}", dif));
            Console.Write(dif);
        }
        public void TryGetValuesWithRange()
        {
            BinaryDataListStorage bdls = new BinaryDataListStorage("MySweetNamespace", Guid.NewGuid());

            // build insert value ;)
            var row = CreateBinaryDataListRow(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), Guid.NewGuid().ToString());

            // Insert information
            for (int i = 1; i <= 100000; i++)
            {
                bdls.Add(i, row);
            }
            const int startIndex           = 1;
            const int endIndex             = 100;
            List <IBinaryDataListRow> rows = bdls.GetValues(startIndex, endIndex);

            Assert.AreEqual(99, rows.Count);
            Assert.IsFalse(rows[0].IsEmpty);
            Assert.IsFalse(rows[5].IsEmpty);
        }
        public void DistinctGetValuesWhenHasDistinctValuesShouldReturnOnlyDistinctRows()
        {
            BinaryDataListStorage bdls = new BinaryDataListStorage("MySweetNamespace", Guid.NewGuid());

            // build insert value ;)
            var row  = CreateBinaryDataListRow("1", "1", "Barney", "T", "Buchan");
            var row2 = CreateBinaryDataListRow("2", "2", "Huggs", "W", "Naidu");
            var row3 = CreateBinaryDataListRow("3", "3", "Trav", "A", "Fri");
            var row4 = CreateBinaryDataListRow("4", "4", "Trav", "B", "Fri");
            var row5 = CreateBinaryDataListRow("5", "5", "Huggs", "C", "Bear");
            var row6 = CreateBinaryDataListRow("6", "6", "Huggs", "D", "Naidu");

            bdls.Add(1, row);
            bdls.Add(2, row2);
            bdls.Add(3, row3);
            bdls.Add(4, row4);
            bdls.Add(5, row5);
            bdls.Add(6, row6);
            // Insert information

            IIndexIterator keys         = new IndexIterator(null, 6);
            List <int>     distinctCols = new List <int> {
                2, 4
            };
            List <int> rows = bdls.DistinctGetRows(keys, distinctCols);

            Assert.AreEqual(4, rows.Count);

            // now fetch each item ;)
            IBinaryDataListRow myRow;

            bdls.TryGetValue(rows[0], 1, out myRow);
            Assert.IsFalse(myRow.IsEmpty);
            bdls.TryGetValue(rows[3], 1, out myRow);
            Assert.IsFalse(myRow.IsEmpty);
        }
        static IIndexIterator AddLotsOfRows1Mil(BinaryDataListStorage bdls)
        {
            var row = CreateBinaryDataListRow("1", "1", "Barney", "T", "Buchan");
            var row2 = CreateBinaryDataListRow("2", "2", "Huggs", "W", "Naidu");
            var row3 = CreateBinaryDataListRow("3", "3", "Trav", "A", "Fri");
            var row4 = CreateBinaryDataListRow("4", "4", "Trav", "B", "Fri");
            var row5 = CreateBinaryDataListRow("5", "5", "Huggs", "C", "Bear");
            var row6 = CreateBinaryDataListRow("6", "6", "Huggs", "D", "Naidu");
            bdls.Add(1, row);
            bdls.Add(2, row2);
            bdls.Add(3, row3);
            bdls.Add(4, row4);
            bdls.Add(5, row5);
            bdls.Add(6, row6);
            for (int i = 7; i <= 10; i++)
            {
                     bdls.Add(i, row2);
            }
            for (int i = 11; i <= 20; i++)
            {
                     bdls.Add(i, row3);
            }
            for (int i = 21; i <= 25; i++)
            {
                     bdls.Add(i, row4);
            }
            for (int i = 26; i <= 30; i++)
            {
                     bdls.Add(i, row5);
            }
            for (int i = 31; i <= 100; i++)
            {
                     bdls.Add(i, row2);
            }
            for (int i = 101; i <= 1000; i++)
            {
                     bdls.Add(i, row5);
            }
            for (int i = 1001; i <= 10000; i++)
            {
                bdls.Add(i, row);
            }
            var row7 = CreateBinaryDataListRow("7", "Seven", "Something", "02252", "Someone");
            for (int i = 10001; i <= 50000; i++)
            {
                bdls.Add(i, row7);
            }
            for (int i = 50001; i <= 50100; i++)
            {
                bdls.Add(i, row);
            }
            for (int i = 50101; i <= 51000; i++)
            {
                bdls.Add(i, row2);
            }
            for (int i = 51001; i <= 60000; i++)
            {
                bdls.Add(i, row3);
            }
            for (int i = 60001; i <= 70000; i++)
            {
                bdls.Add(i, row4);
            }
            for (int i = 70001; i <= 80000; i++)
            {
                bdls.Add(i, row5);
            }
            for (int i = 80001; i <= 100000; i++)
            {
                bdls.Add(i, row6);
            }
            for (int i = 100001; i <= 1000000; i++)
            {
                bdls.Add(i, row7);
            }

            return new IndexIterator(null, 1000000);
        }
        public void DistinctGetValuesWhenHasDistinctValuesShouldReturnOnlyDistinctRows1MilOfRows100Col()
        {
            BinaryDataListStorage bdls = new BinaryDataListStorage("MySweetNamespace", Guid.NewGuid());

            // build insert value ;)
            IIndexIterator keys = AddLotsOfRows1Mil(bdls);
            // Insert information
            List<int> distinctCols = new List<int> { 2, 4, 5, 7, 120, 134, 99, 78, 34 };
            DateTime start = DateTime.Now;
            List<int> rows = bdls.DistinctGetRows(keys, distinctCols);
            DateTime end = DateTime.Now;
            double dif = (end.Ticks - (double)start.Ticks) / TimeSpan.TicksPerSecond;
            Assert.AreEqual(7, rows.Count);
            Assert.IsTrue(dif < 20, string.Format("Time taken: {0}", dif));
            Console.Write(dif);
        }
        public void DistinctGetValuesWhenHasDistinctValuesShouldReturnOnlyDistinctRows()
        {
            BinaryDataListStorage bdls = new BinaryDataListStorage("MySweetNamespace", Guid.NewGuid());

            // build insert value ;)
            var row = CreateBinaryDataListRow("1", "1", "Barney", "T", "Buchan");
            var row2 = CreateBinaryDataListRow("2", "2", "Huggs", "W", "Naidu");
            var row3 = CreateBinaryDataListRow("3", "3", "Trav", "A", "Fri");
            var row4 = CreateBinaryDataListRow("4", "4", "Trav", "B", "Fri");
            var row5 = CreateBinaryDataListRow("5", "5", "Huggs", "C", "Bear");
            var row6 = CreateBinaryDataListRow("6", "6", "Huggs", "D", "Naidu");
            bdls.Add(1, row);
            bdls.Add(2, row2);
            bdls.Add(3, row3);
            bdls.Add(4, row4);
            bdls.Add(5, row5);
            bdls.Add(6, row6);
            // Insert information

            IIndexIterator keys = new IndexIterator(null,6);
            List<int> distinctCols = new List<int> { 2, 4 };
            List<int> rows = bdls.DistinctGetRows(keys, distinctCols);
            Assert.AreEqual(4, rows.Count);

            // now fetch each item ;)
            IBinaryDataListRow myRow;
            bdls.TryGetValue(rows[0], 1, out myRow);
            Assert.IsFalse(myRow.IsEmpty);
            bdls.TryGetValue(rows[3], 1, out myRow);
            Assert.IsFalse(myRow.IsEmpty);
        }
        public void TryGetValuesWithRangeThrowsExceptionIfNoDataEndIndex()
        {
            BinaryDataListStorage bdls = new BinaryDataListStorage("MySweetNamespace", Guid.NewGuid());


            // build insert value ;)
            var row = CreateBinaryDataListRow(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), Guid.NewGuid().ToString());

            // Insert information
            for (int i = 1; i <= 100000; i++)
            {
                bdls.Add(i, row);
            }
            const int startIndex = 1;
            const int endIndex = 100002;
            bdls.GetValues(startIndex, endIndex);
        }