예제 #1
0
        public void BasicsWork()
        {
            var ints = new Multispan<int>();
            Assert.Equal(0, ints.Count);

            int index1 = ints.AppendNewSegment(10);
            Assert.Equal(1, ints.Count);
            Assert.Equal(0, index1);
            Span<int> segment1 = ints[index1];
            Assert.True(segment1.Length >= 10);

            int index2 = ints.AppendNewSegment(1000);
            Assert.Equal(2, ints.Count);
            Assert.Equal(1, index2);
            Span<int> segment2 = ints[index2];
            Assert.True(segment2.Length >= 1000);

            var totalSize = segment1.Length + segment2.Length;
            var computedSize = ints.TotalItemCount();
            Assert.Equal(totalSize, computedSize);

            ints.ResizeSegment(0, 20);
            ints.ResizeSegment(1, 100);
            segment1 = ints[0];
            segment2 = ints[1];
            Assert.True(segment1.Length >= 20);
            Assert.True(segment2.Length >= 100);

            ints.Dispose();
            Assert.Equal(0, ints.Count);
        }
        public void ReadOnlySpanEnumeration()
        {
            ReadOnlySpan <byte> span;
            {
                Multispan <byte> collection = ToMultispan("A");
                Assert.Equal(1, collection.Count);
                Position position = Position.First;

                Assert.True(collection.TryGet(ref position, out span, advance: true));
                Assert.True(position.Equals(Position.AfterLast));
                Assert.Equal(span[0], (byte)'A');
                collection.Dispose();
            }
            {
                Multispan <byte> collection = ToMultispan("A", "B");
                Assert.Equal(2, collection.Count);
                Position position = Position.First;
                Assert.True(collection.TryGet(ref position, out span, advance: true));
                Assert.Equal(span[0], (byte)'A');
                Assert.True(collection.TryGet(ref position, out span, advance: true));
                Assert.Equal(span[0], (byte)'B');
                Assert.True(position.Equals(Position.AfterLast));
                collection.Dispose();
            }
        }
        public void SpanForeach()
        {
            {
                Multispan <byte> collection = ToMultispan("A");
                Assert.Equal(1, collection.Count);
                foreach (var item in collection)
                {
                    Assert.Equal(item[0], (byte)'A');
                }
                collection.Dispose();
            }
            {
                Multispan <byte> collection = ToMultispan("A", "B");
                Assert.Equal(2, collection.Count);
                int itemIndex = 0;
                foreach (var item in collection)
                {
                    switch (itemIndex++)
                    {
                    case 0:
                        Assert.Equal(item[0], (byte)'A');
                        break;

                    case 1:
                        Assert.Equal(item[0], (byte)'B');
                        break;

                    default:
                        throw new Exception("expected two items in the collection");
                    }
                }
                collection.Dispose();
            }
        }
예제 #4
0
        public void Slicing(int sliceIndex, int expectedTotalItems)
        {
            var ms = new Multispan<byte>();
            Initialize(ref ms);

            var slice = ms.Slice(sliceIndex);
            Assert.Equal(expectedTotalItems, slice.TotalItemCount());

            ms.Dispose();
        }
예제 #5
0
        public void Slicing(int sliceIndex, int expectedTotalItems)
        {
            var ms = new Multispan <byte>();

            Initialize(ref ms);

            var slice = ms.Slice(sliceIndex);

            Assert.Equal(expectedTotalItems, slice.TotalItemCount());

            ms.Dispose();
        }
예제 #6
0
        public void SingleSpanMultispanBasics()
        {
            var ints = new Multispan<int>();

            Assert.Equal(0, ints.Count);

            int index1 = ints.AppendNewSegment(10);
            Assert.Equal(1, ints.Count);
            Assert.Equal(0, index1);
            Span<int> segment1 = ints[index1];
            Assert.True(segment1.Length >= 10);
            var sliced = ints.Slice(1);

            ints.Dispose();
            Assert.Equal(0, ints.Count);
        }
예제 #7
0
        public void SingleSpanMultispanBasics()
        {
            var ints = new Multispan <int>();

            Assert.Equal(0, ints.Count);

            int index1 = ints.AppendNewSegment(10);

            Assert.Equal(1, ints.Count);
            Assert.Equal(0, index1);
            Span <int> segment1 = ints[index1];

            Assert.True(segment1.Length >= 10);
            var sliced = ints.Slice(1);

            ints.Dispose();
            Assert.Equal(0, ints.Count);
        }
예제 #8
0
        public void BasicsWork()
        {
            var ints = new Multispan <int>();

            Assert.Equal(0, ints.Count);

            int index1 = ints.AppendNewSegment(10);

            Assert.Equal(1, ints.Count);
            Assert.Equal(0, index1);
            Span <int> segment1 = ints[index1];

            Assert.True(segment1.Length >= 10);

            int index2 = ints.AppendNewSegment(1000);

            Assert.Equal(2, ints.Count);
            Assert.Equal(1, index2);
            Span <int> segment2 = ints[index2];

            Assert.True(segment2.Length >= 1000);

            var totalSize    = segment1.Length + segment2.Length;
            var computedSize = ints.TotalItemCount();

            Assert.Equal(totalSize, computedSize);

            ints.ResizeSegment(0, 20);
            ints.ResizeSegment(1, 100);
            segment1 = ints[0];
            segment2 = ints[1];
            Assert.True(segment1.Length >= 20);
            Assert.True(segment2.Length >= 100);

            ints.Dispose();
            Assert.Equal(0, ints.Count);
        }
예제 #9
0
 public void MultispanEnumeration()
 {
     {
         Multispan <byte> collection = ToMultispan("A");
         Assert.Equal(1, collection.Count);
         Position position = Position.BeforeFirst;
         var      item     = collection.TryGetItem(ref position);
         Assert.True(position.IsEnd);
         Assert.Equal(item[0], (byte)'A');
         collection.Dispose();
     }
     {
         Multispan <byte> collection = ToMultispan("A", "B");
         Assert.Equal(2, collection.Count);
         Position position = Position.BeforeFirst;
         var      item1    = collection.TryGetItem(ref position);
         Assert.True(position.IsValid);
         Assert.Equal(item1[0], (byte)'A');
         var item2 = collection.TryGetItem(ref position);
         Assert.Equal(item2[0], (byte)'B');
         Assert.True(position.IsEnd);
         collection.Dispose();
     }
 }