Esempio n. 1
0
        public void PutGetTwo()
        {
            using (var pile = new DefaultPile())
            {
                pile.Start();

                var ipile = pile as IPile;

                var rowIn1 = CheckoutRow.MakeFake(new GDID(0, 1));
                var rowIn2 = CheckoutRow.MakeFake(new GDID(0, 2));

                var pp1 = ipile.Put(rowIn1);
                var pp2 = ipile.Put(rowIn2);

                Assert.AreEqual(2, ipile.ObjectCount);
                Assert.AreEqual(DefaultPile.SEG_SIZE_DFLT, ipile.AllocatedMemoryBytes);
                Assert.AreEqual(1, ipile.SegmentCount);

                var rowOut1 = pile.Get(pp1) as CheckoutRow;
                var rowOut2 = pile.Get(pp2) as CheckoutRow;

                Assert.AreEqual(rowIn1, rowOut1);
                Assert.AreEqual(rowIn2, rowOut2);
            }
        }
Esempio n. 2
0
        public void LinkStringNoPreallocate()
        {
            using (var pile = new DefaultPile(NOPApplication.Instance))
            {
                pile.Start();

                var obj1 = "abcdefgh";

                var p1  = pile.Put(obj1);
                var got = pile.Get(p1) as string;
                Aver.AreEqual("abcdefgh", got);

                var obj2 = "abcdefghijklmnopqrst0912345";
                Aver.IsTrue(pile.Put(p1, obj2));

                Aver.AreEqual(1, pile.ObjectCount);
                got = pile.Get(p1) as string;

                Aver.AreEqual("abcdefghijklmnopqrst0912345", got);

                Aver.IsTrue(pile.AllocatedMemoryBytes > 0);
                Aver.IsTrue(pile.Delete(p1));
                Aver.IsTrue(pile.AllocatedMemoryBytes == 0);
                Aver.IsTrue(pile.ObjectCount == 0);
            }
        }
Esempio n. 3
0
        public void LinkPreallocate()
        {
            using (var pile = new DefaultPile(NOPApplication.Instance))
            {
                pile.Start();

                var obj1 = new Payload {
                    ID = 1, Name = "1", Data = null
                };

                var p1 = pile.Put(obj1, preallocateBlockSize: 2000);

                Aver.AreEqual(2000, pile.SizeOf(p1));

                var obj2 = new Payload {
                    ID = 2, Name = "2", Data = new byte [3000]
                };
                Aver.IsTrue(pile.Put(p1, obj2));

                Aver.AreEqual(1, pile.ObjectCount);
                var got = pile.Get(p1) as Payload;

                Aver.AreEqual(2, got.ID);
                Aver.AreEqual("2", got.Name);
                Aver.IsNotNull(got.Data);
                Aver.AreEqual(3000, got.Data.Length);

                Aver.IsTrue(pile.AllocatedMemoryBytes > 0);
                Aver.IsTrue(pile.Delete(p1));
                Aver.IsTrue(pile.AllocatedMemoryBytes == 0);
                Aver.IsTrue(pile.ObjectCount == 0);
            }
        }
Esempio n. 4
0
        public static void NoGrowth_ByteArray(bool speed, int durationSec, int payloadSizeMin, int payloadSizeMax, int countMin, int countMax)
        {
            using (var pile = new DefaultPile(NOPApplication.Instance))
            {
                pile.AllocMode = speed ? AllocationMode.FavorSpeed : AllocationMode.ReuseSpace;
                pile.Start();
                var startTime = DateTime.UtcNow;
                var tasks     = new List <Task>();
                for (var t = 0; t < (System.Environment.ProcessorCount - 1); t++)
                {
                    tasks.Add(Task.Factory.StartNew(() =>
                    {
                        var list = new List <CheckByteArray>();
                        bool put = true;
                        while (true)
                        {
                            if ((DateTime.UtcNow - startTime).TotalSeconds >= durationSec)
                            {
                                return;
                            }

                            if (put)
                            {
                                var cnt = Ambient.Random.NextScaledRandomInteger(countMin, countMax);
                                for (int j = 0; j < cnt; j++)
                                {
                                    var payloadSize      = Ambient.Random.NextScaledRandomInteger(payloadSizeMin, payloadSizeMax);
                                    var val              = new byte[payloadSize];
                                    val[0]               = (byte)Ambient.Random.NextRandomInteger;
                                    val[payloadSize - 1] = (byte)Ambient.Random.NextRandomInteger;

                                    var ptr = pile.Put(val);

                                    var element = new CheckByteArray(ptr, payloadSize - 1, val[0], val[payloadSize - 1]);
                                    list.Add(element);
                                }
                                Console.WriteLine("Thread {0} put {1} objects".Args(Thread.CurrentThread.ManagedThreadId, list.Count));
                                put = false;
                            }
                            else
                            {
                                Console.WriteLine("Thread {0} deleted {1} objects".Args(Thread.CurrentThread.ManagedThreadId, list.Count));
                                for (var j = 0; j < list.Count; j++)
                                {
                                    var element = list[j];
                                    var buf     = pile.Get(element.Ptr) as byte[];
                                    Aver.AreEqual(element.FirstByte, buf[0]);
                                    Aver.AreEqual(element.LastByte, buf[element.IdxLast]);
                                    pile.Delete(element.Ptr);
                                }
                                list.Clear();
                                put = true;
                            }
                        }
                    }, TaskCreationOptions.LongRunning));
                }
                Task.WaitAll(tasks.ToArray());
            }
            Console.WriteLine("Test finished.");
        }
Esempio n. 5
0
        private void btnStart_Click(object sender, EventArgs e)
        {
            lbErrors.Items.Clear();

            var sz = tbSegmentSize.Text.AsInt(0);

            if (sz > 0)
            {
                sz = sz * 1024 * 1024;
                m_Pile.SegmentSize = sz;
            }

            var mm = tbMaxMemoryMb.Text.AsLong(0);

            if (mm > 0)
            {
                mm = mm * 1024 * 1024;
                m_Pile.MaxMemoryLimit = mm;
            }
            else
            {
                m_Pile.MaxMemoryLimit = 0;
            }

            m_Pile.Start();
        }
Esempio n. 6
0
        [Run("cnt=32000000  size=32  parallel=12")] //12 threads put 32,000,000 byte[32] in 5,008 msec at 6,389,776 ops/sec
        //12 threads got 32,000,000 byte[32] in 3,787 msec at 8,449,960 ops/sec
        //--------------------------------------------------------------------------------
        //12 threads put 32,000,000 byte[32] in 2,963 msec at 10,799,865 ops/sec
        //12 threads got 32,000,000 byte[32] in 2,253 msec at 14,203,285 ops/sec


        public void ByteBuf(int CNT, int size, int parallel)
        {
            using (var pile = new DefaultPile(NOPApplication.Instance))
            {
                pile.Start();

                var str = new byte[size];
                var pp  = pile.Put(str);

                var sw = Stopwatch.StartNew();
                Parallel.For(0, CNT, new ParallelOptions {
                    MaxDegreeOfParallelism = parallel
                },
                             (i) =>
                {
                    pile.Put(str);
                });

                var el = sw.ElapsedMilliseconds;
                Console.WriteLine("{0:n0} threads put {1:n0} byte[{2:n0}] in {3:n0} msec at {4:n0} ops/sec".Args(parallel, CNT, size, el, CNT / (el / 1000d)));


                sw.Restart();
                Parallel.For(0, CNT, new ParallelOptions {
                    MaxDegreeOfParallelism = parallel
                },
                             (i) =>
                {
                    pile.Get(pp);
                });

                el = sw.ElapsedMilliseconds;
                Console.WriteLine("{0:n0} threads got {1:n0} byte[{2:n0}] in {3:n0} msec at {4:n0} ops/sec".Args(parallel, CNT, size, el, CNT / (el / 1000d)));
            }
        }
Esempio n. 7
0
        public void FitPreallocateByteArray()
        {
            using (var pile = new DefaultPile())
            {
                pile.Start();

                var obj1 = new byte[3];

                var p1  = pile.Put(obj1, preallocateBlockSize: 4000);
                var got = pile.Get(p1) as byte[];
                Aver.AreEqual(3, got.Length);

                Aver.AreEqual(4000, pile.SizeOf(p1));

                var obj2 = new byte[571];
                Aver.IsTrue(pile.Put(p1, obj2));

                Aver.AreEqual(1, pile.ObjectCount);
                got = pile.Get(p1) as byte[];

                Aver.AreEqual(571, got.Length);

                Aver.IsTrue(pile.AllocatedMemoryBytes > 0);
                Aver.IsTrue(pile.Delete(p1));
                Aver.IsTrue(pile.AllocatedMemoryBytes == 0);
                Aver.IsTrue(pile.ObjectCount == 0);
            }
        }
Esempio n. 8
0
        public void PutSubarray()
        {
            using (var pile = new DefaultPile(NOPApplication.Instance))
            {
                pile.Start();

                var src = new byte[] { 1, 6, 9, 250 };
                var sub = new Subarray <byte>();
                sub.Set(src, 2);

                var ptr1 = pile.Put(sub);
                sub.Set(src, 4);
                var ptr2 = pile.Put(sub);
                var got1 = pile.Get(ptr1) as byte[];
                var got2 = pile.Get(ptr2) as byte[];

                Aver.IsNotNull(got1);
                Aver.AreEqual(2, got1.Length);
                Aver.AreEqual(1, got1[0]);
                Aver.AreEqual(6, got1[1]);

                Aver.IsNotNull(got2);
                Aver.AreEqual(4, got2.Length);
                Aver.AreEqual(1, got2[0]);
                Aver.AreEqual(6, got2[1]);
                Aver.AreEqual(9, got2[2]);
                Aver.AreEqual(250, got2[3]);
            }
        }
Esempio n. 9
0
        public void LinkByteArrayNoPreallocate()
        {
            using (var pile = new DefaultPile())
            {
                pile.Start();

                var obj1 = new byte[12];

                var p1  = pile.Put(obj1);
                var got = pile.Get(p1) as byte[];
                Aver.AreEqual(12, got.Length);

                var obj2 = new byte[389];
                Aver.IsTrue(pile.Put(p1, obj2));

                Aver.AreEqual(1, pile.ObjectCount);
                got = pile.Get(p1) as byte[];

                Aver.AreEqual(389, got.Length);

                Aver.IsTrue(pile.AllocatedMemoryBytes > 0);
                Aver.IsTrue(pile.Delete(p1));
                Aver.IsTrue(pile.AllocatedMemoryBytes == 0);
                Aver.IsTrue(pile.ObjectCount == 0);
            }
        }
Esempio n. 10
0
        public void ReallocateInPlace(int len)
        {
            using (var pile = new DefaultPile())
            {
                pile.Start();
                var lst = new List <PilePointer>();
                for (var i = 0; i < len; i++)
                {
                    var ub  = i * 10;
                    var ptr = pile.Put(new byte[0], preallocateBlockSize: ub);

                    lst.Add(ptr);
                    for (var j = 0; j < ub + (ub / 2); j++)
                    {
                        Aver.IsTrue(pile.Put(ptr, new byte[j]));
                    }
                }

                Aver.AreEqual(lst.Count, pile.ObjectCount);
                var n = 0;
                foreach (var pp in lst)
                {
                    Console.WriteLine("iteration#{0} of {1}".Args(n, lst.Count));
                    Aver.IsTrue(pile.Delete(pp));
                    n++;
                }

                Aver.AreEqual(0, pile.AllocatedMemoryBytes);
                Aver.AreEqual(0, pile.ObjectCount);
                Aver.AreEqual(0, pile.ObjectLinkCount);
            }
        }
Esempio n. 11
0
        public void LinkNoPreallocate()
        {
            using (var pile = new DefaultPile())
            {
                pile.Start();

                var obj1 = new Payload {
                    ID = 1, Name = "1", Data = null
                };

                var p1 = pile.Put(obj1);

                Aver.IsTrue(pile.SizeOf(p1) < 128);

                var obj2 = new Payload {
                    ID = 2, Name = "2", Data = new byte [128]
                };
                Aver.IsTrue(pile.Put(p1, obj2));

                Aver.AreEqual(1, pile.ObjectCount);
                var got = pile.Get(p1) as Payload;

                Aver.AreEqual(2, got.ID);
                Aver.AreEqual("2", got.Name);
                Aver.IsNotNull(got.Data);
                Aver.AreEqual(128, got.Data.Length);

                Aver.IsTrue(pile.AllocatedMemoryBytes > 0);
                Aver.IsTrue(pile.Delete(p1));
                Aver.IsTrue(pile.AllocatedMemoryBytes == 0);
                Aver.IsTrue(pile.ObjectCount == 0);
            }
        }
Esempio n. 12
0
        public void FitPreallocate()
        {
            using (var pile = new DefaultPile())
            {
                pile.Start();

                var obj1 = new Payload {
                    ID = 1, Name = "1", Data = null
                };

                var p1 = pile.Put(obj1, preallocateBlockSize: 4000);

                Aver.AreEqual(4000, pile.SizeOf(p1));

                var obj2 = new Payload {
                    ID = 2, Name = "2", Data = new byte [] { 1, 2, 3, 4, 5, 6, 7, 8 }
                };
                Aver.IsTrue(pile.Put(p1, obj2));

                Aver.AreEqual(1, pile.ObjectCount);
                var got = pile.Get(p1) as Payload;

                Aver.AreEqual(2, got.ID);
                Aver.AreEqual("2", got.Name);
                Aver.IsNotNull(got.Data);
                Aver.AreEqual(8, got.Data.Length);

                Aver.IsTrue(pile.AllocatedMemoryBytes > 0);
                Aver.IsTrue(pile.Delete(p1));
                Aver.IsTrue(pile.AllocatedMemoryBytes == 0);
                Aver.IsTrue(pile.ObjectCount == 0);
            }
        }
Esempio n. 13
0
        public void FitPreallocateString()
        {
            using (var pile = new DefaultPile())
            {
                pile.Start();

                var obj1 = "abcdefgh";

                var p1  = pile.Put(obj1, preallocateBlockSize: 4000);
                var got = pile.Get(p1) as string;
                Aver.AreEqual("abcdefgh", got);

                Aver.AreEqual(4000, pile.SizeOf(p1));

                var obj2 = "abcdefghijklmnopqrst0912345";
                Aver.IsTrue(pile.Put(p1, obj2));

                Aver.AreEqual(1, pile.ObjectCount);
                got = pile.Get(p1) as string;

                Aver.AreEqual("abcdefghijklmnopqrst0912345", got);

                Aver.IsTrue(pile.AllocatedMemoryBytes > 0);
                Aver.IsTrue(pile.Delete(p1));
                Aver.IsTrue(pile.AllocatedMemoryBytes == 0);
                Aver.IsTrue(pile.ObjectCount == 0);
            }
        }
Esempio n. 14
0
        public void SegmentAddedDeleted()
        {
            using (var pile = new DefaultPile()
            {
                SegmentSize = PileCacheTestCore.SEG_SIZE
            })
            {
                pile.Start();

                var ipile = pile as IPile;

                var pp = PilePointer.Invalid;
                for (ulong i = 0; i < PileCacheTestCore.SEG_SIZE && ipile.SegmentCount < 2; i++)
                {
                    var ch = Charge.MakeFake(new GDID(1, i));
                    pp = ipile.Put(ch);
                }

                Assert.AreEqual(2, ipile.SegmentCount);

                ipile.Delete(pp);

                Assert.AreEqual(1, ipile.SegmentCount);
            }
        }
Esempio n. 15
0
        public void Buffers(int count, int segmentSize)
        {
            using (var pile = new DefaultPile())
            {
                pile.SegmentSize = segmentSize;
                pile.Start();

                var hs = new HashSet <int>();

                for (var i = 0; i < count; i++)
                {
                    var buf = new byte[4 + (i % 512)];
                    buf.WriteBEInt32(i);
                    pile.Put(buf);
                    hs.Add(i);
                }

                Console.WriteLine("Created {0} segments".Args(pile.SegmentCount));

                var j = 0;
                foreach (var entry in pile)
                {
                    var buf = pile.Get(entry.Pointer) as byte[];
                    Aver.IsNotNull(buf);
                    Aver.IsTrue(buf.Length >= 4);
                    var i = buf.ReadBEInt32();
                    Aver.IsTrue(hs.Remove(i));
                    Aver.IsTrue(entry.Type == PileEntry.DataType.Buffer);
                    j++;
                }
                Aver.AreEqual(j, count);
                Aver.AreEqual(0, hs.Count);
            }
        }
Esempio n. 16
0
 public void DeleteInvalid()
 {
     using (var pile = new DefaultPile())
     {
         pile.Start();
         var ipile = pile as IPile;
         ipile.Delete(PilePointer.Invalid);
     }
 }
Esempio n. 17
0
 private static void body(IApplication app, int cnt, int threads, object payload)
 {
     GC.Collect();
     using (var pile = new DefaultPile(app))
     {
         pile.Start();
         bodyCore(pile, cnt, threads, payload);
     }
 }
Esempio n. 18
0
 public void GetNoObject()
 {
     using (var pile = new DefaultPile())
     {
         pile.Start();
         var ipile = pile as IPile;
         ipile.Get(PilePointer.Invalid);
     }
 }
Esempio n. 19
0
 public void DeleteInvalid()
 {
     using (var pile = new DefaultPile(NOPApplication.Instance))
     {
         pile.Start();
         var ipile = pile as IPile;
         ipile.Delete(PilePointer.Invalid);
     }
 }
Esempio n. 20
0
        public static void NoGrowth_TRow(bool speed, int durationSec, int countMin, int countMax)
        {
            using (var pile = new DefaultPile())
            {
                pile.AllocMode = speed ? AllocationMode.FavorSpeed : AllocationMode.ReuseSpace;
                pile.Start();
                var startTime = DateTime.UtcNow;
                var tasks     = new List <Task>();
                for (var t = 0; t < (System.Environment.ProcessorCount - 1); t++)
                {
                    tasks.Add(Task.Factory.StartNew(() =>
                    {
                        var list = new List <CheckTRow>();
                        bool put = true;
                        while (true)
                        {
                            if ((DateTime.UtcNow - startTime).TotalSeconds >= durationSec)
                            {
                                return;
                            }

                            if (put)
                            {
                                var cnt = NFX.ExternalRandomGenerator.Instance.NextScaledRandomInteger(countMin, countMax);
                                for (int j = 0; j < cnt; j++)
                                {
                                    var val = PersonRow.MakeFake(new GDID());

                                    var ptr = pile.Put(val);

                                    var element = new CheckTRow(ptr, val.ID, val.Address1);
                                    list.Add(element);
                                }
                                Console.WriteLine("Thread {0} put {1} objects".Args(Thread.CurrentThread.ManagedThreadId, list.Count));
                                put = false;
                            }
                            else
                            {
                                Console.WriteLine("Thread {0} deleted {1} objects".Args(Thread.CurrentThread.ManagedThreadId, list.Count));
                                for (var j = 0; j < list.Count; j++)
                                {
                                    var element = list[j];
                                    var buf     = pile.Get(element.Ptr) as PersonRow;
                                    Aver.AreEqual(element.Id, buf.ID);
                                    Aver.AreEqual(element.Address, buf.Address1);
                                    pile.Delete(element.Ptr);
                                }
                                list.Clear();
                                put = true;
                            }
                        }
                    }, TaskCreationOptions.LongRunning));
                }
                Task.WaitAll(tasks.ToArray());
            }
            Console.WriteLine("Test finished.");
        }
Esempio n. 21
0
        public CacheServer()
        {
            var pile = new DefaultPile();

            pile.Configure(null);
            // m_Pile.SegmentSize = 512 * 1024 * 1024;
            pile.Start();
            _pile   = pile;
            Running = true;
        }
Esempio n. 22
0
        public void Parallel_PutDeleteGet_Checkerboard()
        {
            const int CNT    = 1002030;//1000203;
            var       tuples = new Tuple <PilePointer, Charge> [CNT];

            using (var pile = new DefaultPile())
            {
                pile.Start();

                var ipile = pile as IPile;

                Parallel.For(0, CNT, i => {
                    var ch    = Charge.MakeFake(new GDID(0, (ulong)i));
                    var pp    = ipile.Put(ch);
                    tuples[i] = new Tuple <PilePointer, Charge>(pp, ch);
                });

                Assert.AreEqual(CNT, ipile.ObjectCount);

                Parallel.For(0, CNT, i => {
                    if (i % 3 != 0)
                    {
                        ipile.Delete(tuples[i].Item1);
                    }
                });

                Assert.AreEqual(CNT / 3, ipile.ObjectCount);

                var deletedHits = new ConcurrentDictionary <int, int>();

                Parallel.For(0, CNT, i => {
                    if (i % 3 != 0)
                    {
                        try
                        {
                            deletedHits.AddOrUpdate(System.Threading.Thread.CurrentThread.ManagedThreadId, 1, (threadId, val) => val + 1);
                            ipile.Get(tuples[i].Item1);
                            Assert.Fail("Object is deleted but its pointer doesn't throw exception!");
                        }
                        catch (PileAccessViolationException) {}
                    }
                    else
                    {
                        var ch = ipile.Get(tuples[i].Item1);
                        Assert.AreEqual(ch, tuples[i].Item2);
                    }
                });

                foreach (var kvp in deletedHits)
                {
                    Console.WriteLine("Thread '{0}' {1:n0} times accessed deleted pointer", kvp.Key, kvp.Value);
                }
            }
        }
Esempio n. 23
0
 public void SimpleNullTest()
 {
     using (var m_pile = new DefaultPile()
     {
         AllocMode = AllocationMode.FavorSpeed
     }) {
         m_pile.Start();
         var test = new LinkedListNode <string>(m_pile, null);
         Aver.IsNull(test.Value);
     }
 }
Esempio n. 24
0
        public void MulticulturalString()
        {
            using (var pile = new DefaultPile(NOPApplication.Instance))
            {
                pile.Start();

                var str = @"
外国語の学習と教授

Language Learning and Teaching

Изучение и обучение иностранных языков

Tere Daaheng Aneng Karimah

語文教學・语文教学

Enseñanza y estudio de idiomas

Изучаване и Преподаване на Чужди Езици

ქართული ენის შესწავლა და სწავლება

'læŋɡwidʒ 'lɘr:niŋ ænd 'ti:tʃiŋ

Lus kawm thaib qhia

Ngôn Ngữ, Sự học,

‭‫ללמוד וללמד את השֵפה

L'enseignement et l'étude des langues

말배우기와 가르치기

Nauka języków obcych

Γλωσσική Εκμὰθηση και Διδασκαλία

‭‫ﺗﺪﺭﯾﺲ ﻭ ﯾﺎﺩﮔﯿﺮﯼ ﺯﺑﺎﻥ

Sprachlernen und -lehren

‭‫ﺗﻌﻠﻢ ﻭﺗﺪﺭﻳﺲ ﺍﻟﻌﺮﺑﻴﺔ

เรียนและสอนภาษา";

                var pp = pile.Put(str);

                var got = pile.Get(pp) as string;

                Aver.AreEqual(str, got);
            }
        }
Esempio n. 25
0
        public void PutCheckerboardPattern3()
        {
            using (var pile = new DefaultPile())
            {
                pile.Start();
                var ipile = pile as IPile;

                const ulong CNT = 123;

                var ppp = new Tuple <PilePointer, string> [CNT];

                for (ulong i = 0; i < CNT; i++)
                {
                    var str = NFX.Parsing.NaturalTextGenerator.Generate(179);
                    ppp[i] = new Tuple <PilePointer, string>(ipile.Put(str), str);
                }

                Assert.AreEqual(CNT, ipile.ObjectCount);

                for (ulong i = 0; i < CNT; i++)
                {
                    if (i % 3 != 0)
                    {
                        ipile.Delete(ppp[i].Item1);
                    }
                }

                Assert.AreEqual(CNT / 3, ipile.ObjectCount);

                for (ulong i = 0; i < CNT; i++)
                {
                    if (i % 3 != 0)
                    {
                        try
                        {
                            ipile.Get(ppp[i].Item1);
                            Assert.Fail("Object is deleted but its pointer doesn't throw exception!");
                        }
                        catch (PileAccessViolationException) {}
                    }
                    else
                    {
                        var ch = ipile.Get(ppp[i].Item1);
                        Assert.AreEqual(ch, ppp[i].Item2);
                    }
                }

                ////Console.WriteLine("ObjectCount: {0}", ipile.ObjectCount);
                ////Console.WriteLine("AllocatedMemoryBytes: {0}", ipile.AllocatedMemoryBytes);
                ////Console.WriteLine("UtilizedBytes: {0}", ipile.UtilizedBytes);
                ////Console.WriteLine("OverheadBytes: {0}", ipile.OverheadBytes);
                ////Console.WriteLine("SegmentCount: {0}", ipile.SegmentCount);
            }
        }
Esempio n. 26
0
        public void PutString()
        {
            using (var pile = new DefaultPile(NOPApplication.Instance))
            {
                pile.Start();

                var ptr = pile.Put("abcd123");
                var got = pile.Get(ptr) as string;
                Aver.IsNotNull(got);
                Aver.AreEqual("abcd123", got);
            }
        }
Esempio n. 27
0
        public void PutCheckerboardPattern2()
        {
            using (var pile = new DefaultPile())
            {
                pile.Start();
                var ipile = pile as IPile;

                const ulong CNT = 100;

                var ppp = new Tuple <PilePointer, ChargeRow> [CNT];

                for (ulong i = 0; i < CNT; i++)
                {
                    var ch = ChargeRow.MakeFake(new GDID(0, i));
                    ppp[i] = new Tuple <PilePointer, ChargeRow>(ipile.Put(ch), ch);
                }

                Assert.AreEqual(CNT, ipile.ObjectCount);

                for (ulong i = 0; i < CNT; i++)
                {
                    var ch = ipile.Get(ppp[i].Item1);
                    Assert.AreEqual(ch, ppp[i].Item2);
                }

                for (ulong i = 0; i < CNT; i += 2)
                {
                    ipile.Delete(ppp[i].Item1);
                }

                Assert.AreEqual(CNT / 2, ipile.ObjectCount);

                for (ulong i = 0; i < CNT; i++)
                {
                    if (i % 2 == 0)
                    {
                        try
                        {
                            ipile.Get(ppp[i].Item1);
                            Assert.Fail("Object is deleted but its pointer doesn't throw exception!");
                        }
                        catch (PileAccessViolationException) {}
                    }
                    else
                    {
                        var ch = ipile.Get(ppp[i].Item1);
                        Assert.AreEqual(ch, ppp[i].Item2);
                    }
                }
            }
        }
Esempio n. 28
0
 public void ChangeValueTest()
 {
     using (var m_pile = new DefaultPile()
     {
         AllocMode = AllocationMode.FavorSpeed
     })
     {
         m_pile.Start();
         var test = new LinkedListNode <string>(m_pile, "TEST");
         Aver.AreEqual(test.Value, "TEST");
         test.Value = "TEST 111";
         Aver.AreEqual(test.Value, "TEST 111");
     }
 }
Esempio n. 29
0
        public void PutByteArray()
        {
            using (var pile = new DefaultPile(NOPApplication.Instance))
            {
                pile.Start();

                var ptr = pile.Put(new byte[] { 1, 6, 9 });
                var got = pile.Get(ptr) as byte[];
                Aver.IsNotNull(got);
                Aver.AreEqual(3, got.Length);
                Aver.AreEqual(1, got[0]);
                Aver.AreEqual(6, got[1]);
                Aver.AreEqual(9, got[2]);
            }
        }
Esempio n. 30
0
        [Run("cnt=1048576")] // 1024 * 1024
        public void LongMulticulturalString(int cnt)
        {
            using (var pile = new DefaultPile(NOPApplication.Instance))
            {
                pile.Start();

                var str = new string('久', cnt);

                var pp = pile.Put(str);

                var got = pile.Get(pp) as string;

                Aver.AreEqual(str, got);
            }
        }