private void PageBorderOperations <T>(bool enableMma, int pageSize)
            where T : IEquatable <T>
        {
            DeleteTempFiles();

            string fileName = GetBinFileName();

            using (
                BinIndexedFile <T> f = AllowCreate
                                          ? new BinIndexedFile <T>(fileName)
                                          : (BinIndexedFile <T>)
                                       BinaryFile.Open(fileName, false, LegacyResolver))
            {
                if (AllowCreate)
                {
                    f.InitializeNewFile();
                    f.EnableMemMappedAccessOnRead  = enableMma;
                    f.EnableMemMappedAccessOnWrite = enableMma;
                }

                int itemsPerPage          = pageSize / Marshal.SizeOf(typeof(T));
                int headerSizeAsItemCount = f.HeaderSize / f.ItemSize;
                int items1StPg            = (int)TestUtils.RoundUpToMultiple(headerSizeAsItemCount, itemsPerPage) -
                                            headerSizeAsItemCount;

                if (items1StPg == 0)
                {
                    items1StPg = itemsPerPage;
                }

                T[] dataMinusOne = TestUtils.GenerateData <T>(items1StPg - 1, 0);
                T[] dataZero     = TestUtils.GenerateData <T>(items1StPg, 0);
                T[] dataPlusOne  = TestUtils.GenerateData <T>(items1StPg + 1, 0);

                if (AllowCreate)
                {
                    f.WriteData(0, new ArraySegment <T>(dataMinusOne));
                    Assert.AreEqual(f.HeaderSize + (items1StPg - 1) * f.ItemSize, new FileInfo(fileName).Length);
                    ReadAndAssert(dataMinusOne, f, 0, dataMinusOne.Length);

                    f.WriteData(0, new ArraySegment <T>(dataZero));
                    Assert.AreEqual(f.HeaderSize + items1StPg * f.ItemSize, new FileInfo(fileName).Length);
                    ReadAndAssert(dataZero, f, 0, dataZero.Length);

                    f.WriteData(0, new ArraySegment <T>(dataPlusOne));
                }

                Assert.AreEqual(f.HeaderSize + (items1StPg + 1) * f.ItemSize, new FileInfo(fileName).Length);
                ReadAndAssert(dataPlusOne, f, 0, dataPlusOne.Length);

                ReadAndAssert(TestUtils.GenerateData <T>(1, items1StPg - 1), f, items1StPg - 1, 1);
                ReadAndAssert(TestUtils.GenerateData <T>(1, items1StPg), f, items1StPg, 1);
                ReadAndAssert(TestUtils.GenerateData <T>(2, items1StPg - 1), f, items1StPg - 1, 2);
            }
        }
Beispiel #2
0
        public void StreamingTest()
        {
            string fileName = GetBinFileName();

            byte[] data = TestUtils.GenerateData <byte>(10000, 0);
            if (AllowCreate)
            {
                using (var b = new BinIndexedFile <byte>(fileName))
                {
                    b.InitializeNewFile();
                    b.WriteData(0, new ArraySegment <byte>(data));
                }
            }

            byte[] bytes = File.ReadAllBytes(fileName);

            using (var b = (BinIndexedFile <byte>)BinaryFile.Open(fileName, false, LegacyResolver))
            {
                var ms    = new MemoryStream(bytes);
                var cs    = new ConfigurableStream(ms);
                var data2 = new byte[data.Length / 2];

                cs.AllowSeek = cs.AllowWrite = false;
                var b2 = (BinIndexedFile <byte>)BinaryFile.Open(cs, LegacyResolver);
                Assert.IsTrue(b2.IsOpen);
                Assert.AreEqual(b.ItemSize, b2.ItemSize);

                b2.ReadData(0, new ArraySegment <byte>(data2));
                TestUtils.CollectionAssertEqual(TestUtils.GenerateData <byte>(data.Length / 2, 0), data2);

                b2.ReadData(0, new ArraySegment <byte>(data2));
                TestUtils.CollectionAssertEqual(TestUtils.GenerateData <byte>(data.Length / 2, data.Length / 2), data2);
            }
        }
        public void StreamingTest()
        {
            string fileName = GetBinFileName();

            byte[] data = TestUtils.GenerateData<byte>(10000, 0);
            if (AllowCreate)
            {
                using (var b = new BinIndexedFile<byte>(fileName))
                {
                    b.InitializeNewFile();
                    b.WriteData(0, new ArraySegment<byte>(data));
                }
            }

            byte[] bytes = File.ReadAllBytes(fileName);

            using (var b = (BinIndexedFile<byte>) BinaryFile.Open(fileName, false, LegacyResolver))
            {
                var ms = new MemoryStream(bytes);
                var cs = new ConfigurableStream(ms);
                var data2 = new byte[data.Length/2];

                cs.AllowSeek = cs.AllowWrite = false;
                var b2 = (BinIndexedFile<byte>) BinaryFile.Open(cs, LegacyResolver);
                Assert.IsTrue(b2.IsOpen);
                Assert.AreEqual(b.ItemSize, b2.ItemSize);

                b2.ReadData(0, new ArraySegment<byte>(data2));
                TestUtils.CollectionAssertEqual(TestUtils.GenerateData<byte>(data.Length/2, 0), data2);

                b2.ReadData(0, new ArraySegment<byte>(data2));
                TestUtils.CollectionAssertEqual(TestUtils.GenerateData<byte>(data.Length/2, data.Length/2), data2);
            }
        }
Beispiel #4
0
        public void Test()
        {
            const int blockSize = 100;
            var       data      = new TradesBlock[1000];

            for (int i = 0; i < data.Length; i++)
            {
                data[i] = new TradesBlock(i, blockSize);
            }

            string fileName = GetBinFileName();

            if (AllowCreate)
            {
                using (var f = new BinIndexedFile <TradesBlock>(fileName))
                {
                    ((IBinBlockSerializer)f.Serializer).ItemCount = blockSize;
                    f.InitializeNewFile();
                    f.WriteData(0, new ArraySegment <TradesBlock>(data));

                    VerifyData(f, data);
                }
            }

            using (var bf = (BinIndexedFile <TradesBlock>)BinaryFile.Open(fileName, false, LegacyResolver))
            {
                VerifyData(bf, data);
            }
        }
        public void MappingTest()
        {
            string fileName = GetBinFileName();

            _DatetimeByte_SeqPk1[] data = TestUtils.GenerateData <_DatetimeByte_SeqPk1>(1, 10);
            if (AllowCreate)
            {
                using (var f = new BinIndexedFile <_DatetimeByte_SeqPk1>(fileName))
                {
                    f.InitializeNewFile();
                    f.WriteData(0, new ArraySegment <_DatetimeByte_SeqPk1>(data));
                }
            }

            Type   oldT  = typeof(_DatetimeByte_SeqPk1);
            string oldAn = oldT.Assembly.GetName().Name;

            using (BinaryFile f = BinaryFile.Open(
                       fileName, false,
                       tn =>
                       TypeUtils.ParseAndResolve(
                           tn,
                           ts2 => TypeSpec.DefaultFullTypeResolver(
                               ts2,
                               (ts, an) =>
                               an != null && an.Name == oldAn && ts.Name == oldT.FullName ? typeof(_LongByte_SeqPk1) : null,
                               TypeResolver, LegacySupport.TypeResolver, TypeUtils.ResolverFromAnyAssemblyVersion))))
            {
                var p = (BinIndexedFile <_LongByte_SeqPk1>)f;

                var data2 = new _LongByte_SeqPk1[1];
                p.ReadData(0, new ArraySegment <_LongByte_SeqPk1>(data2));

                Assert.AreEqual(data[0].a.Ticks, data2[0].a);
                Assert.AreEqual(data[0].b, data2[0].b);
            }
        }
 private static void WriteData <T>(BinIndexedFile <T> f, long firstItemIndex, T[] buffer)
 {
     f.WriteData(firstItemIndex, new ArraySegment <T>(buffer));
 }
        private void FileIncrementalAddition <T>() where T : IEquatable <T>
        {
            const string testName = "FileIncrementalAddition";

            try
            {
                Stopwatch sw = TestStart();

                T[] data0 = TestUtils.GenerateData <T>(1, 10);
                T[] data1 = TestUtils.GenerateData <T>(2, 20);
                T[] data2 = TestUtils.GenerateData <T>(3, 30);

                string fileName = GetBinFileName();

                if (AllowCreate)
                {
                    using (var f = new BinIndexedFile <T>(fileName))
                    {
                        f.InitializeNewFile();
                        f.WriteData(0, new ArraySegment <T>(data0));

                        Assert.AreEqual(true, f.CanWrite);
                        Assert.AreEqual(1, f.Count);
                        Assert.IsFalse(f.IsEmpty);

                        ReadAndAssert(data0, f, 0, f.Count);
                    }
                }

                using (BinaryFile file = BinaryFile.Open(fileName, AllowCreate, LegacyResolver))
                {
                    Assert.IsInstanceOf <BinIndexedFile <T> >(file);
                    var f = (BinIndexedFile <T>)file;

                    Assert.AreEqual(AllowCreate, f.CanWrite);
                    if (AllowCreate)
                    {
                        Assert.AreEqual(1, f.Count);
                        ReadAndAssert(data0, f, 0, f.Count);

                        // Replace with buff2 starting at 0
                        WriteData(f, 0, data1);
                        Assert.AreEqual(2, f.Count);
                        ReadAndAssert(data1, f, 0, f.Count);

                        // Append buff1
                        WriteData(f, f.Count, data0);
                        Assert.AreEqual(3, f.Count);
                        ReadAndAssert(data0, f, 2, 1);

                        // Write buff3 instead of buff1
                        WriteData(f, data1.Length, data2);
                    }

                    Assert.AreEqual(data1.Length + data2.Length, f.Count);
                    ReadAndAssert(TestUtils.Concatenate(data1, data2), f, 0, f.Count);
                }

                TestStop <T>(testName, sw);
            }
            catch
            {
                Console.WriteLine("Error in " + testName);
                throw;
            }
        }
        public void MappingTest()
        {
            string fileName = GetBinFileName();
            _DatetimeByte_SeqPk1[] data = TestUtils.GenerateData<_DatetimeByte_SeqPk1>(1, 10);
            if (AllowCreate)
            {
                using (var f = new BinIndexedFile<_DatetimeByte_SeqPk1>(fileName))
                {
                    f.InitializeNewFile();
                    f.WriteData(0, new ArraySegment<_DatetimeByte_SeqPk1>(data));
                }
            }

            Type oldT = typeof (_DatetimeByte_SeqPk1);
            string oldAn = oldT.Assembly.GetName().Name;

            using (BinaryFile f = BinaryFile.Open(
                fileName, false,
                tn =>
                TypeUtils.ParseAndResolve(
                    tn,
                    ts2 => TypeSpec.DefaultFullTypeResolver(
                        ts2,
                        (ts, an) =>
                        an != null && an.Name == oldAn && ts.Name == oldT.FullName ? typeof (_LongByte_SeqPk1) : null,
                        TypeResolver, LegacySupport.TypeResolver, TypeUtils.ResolverFromAnyAssemblyVersion))))
            {
                var p = (BinIndexedFile<_LongByte_SeqPk1>) f;

                var data2 = new _LongByte_SeqPk1[1];
                p.ReadData(0, new ArraySegment<_LongByte_SeqPk1>(data2));

                Assert.AreEqual(data[0].a.Ticks, data2[0].a);
                Assert.AreEqual(data[0].b, data2[0].b);
            }
        }