示例#1
0
 private void AssertReader(Int32BlockPool.SliceReader reader, StartEndAndValues values)
 {
     reader.Reset(values.start, values.end);
     for (int i = 0; i < values.valueCount; i++)
     {
         Assert.AreEqual(values.valueOffset + i, reader.ReadInt32());
     }
     Assert.IsTrue(reader.IsEndOfSlice);
 }
示例#2
0
        public virtual void TestMultipleWriterReader()
        {
            Counter        bytesUsed = Util.Counter.NewCounter();
            Int32BlockPool pool      = new Int32BlockPool(new ByteTrackingAllocator(bytesUsed));

            for (int j = 0; j < 2; j++)
            {
                IList <StartEndAndValues> holders = new JCG.List <StartEndAndValues>();
                int num = AtLeast(4);
                for (int i = 0; i < num; i++)
                {
                    holders.Add(new StartEndAndValues(Random.Next(1000)));
                }
                Int32BlockPool.SliceWriter writer = new Int32BlockPool.SliceWriter(pool);
                Int32BlockPool.SliceReader reader = new Int32BlockPool.SliceReader(pool);

                int numValuesToWrite = AtLeast(10000);
                for (int i = 0; i < numValuesToWrite; i++)
                {
                    StartEndAndValues values = holders[Random.Next(holders.Count)];
                    if (values.valueCount == 0)
                    {
                        values.start = writer.StartNewSlice();
                    }
                    else
                    {
                        writer.Reset(values.end);
                    }
                    writer.WriteInt32(values.NextValue());
                    values.end = writer.CurrentOffset;
                    if (Random.Next(5) == 0)
                    {
                        // pick one and reader the ints
                        AssertReader(reader, holders[Random.Next(holders.Count)]);
                    }
                }

                while (holders.Count > 0)
                {
                    int randIndex            = Random.Next(holders.Count);
                    StartEndAndValues values = holders[randIndex];
                    holders.RemoveAt(randIndex);
                    AssertReader(reader, values);
                }
                if (Random.NextBoolean())
                {
                    pool.Reset(true, false);
                    Assert.AreEqual(0, bytesUsed);
                }
                else
                {
                    pool.Reset(true, true);
                    Assert.AreEqual(Int32BlockPool.INT32_BLOCK_SIZE * RamUsageEstimator.NUM_BYTES_INT32, bytesUsed);
                }
            }
        }
示例#3
0
 private void AssertReader(IntBlockPool.SliceReader reader, StartEndAndValues values)
 {
     reader.Reset(values.Start, values.End);
     for (int i = 0; i < values.ValueCount; i++)
     {
         Assert.AreEqual(values.ValueOffset + i, reader.ReadInt());
     }
     Assert.IsTrue(reader.EndOfSlice());
 }