Ejemplo n.º 1
0
        public static unsafe void CastSpanOverflow()
        {
            Span <MemoryTestHelpers.TestStructExplicit> span = new Span <MemoryTestHelpers.TestStructExplicit>(null, int.MaxValue);

            MemoryTestHelpers.AssertThrows <OverflowException, MemoryTestHelpers.TestStructExplicit>(span, (_span) => MemoryMarshal.Cast <MemoryTestHelpers.TestStructExplicit, byte>(_span).DontBox());
            MemoryTestHelpers.AssertThrows <OverflowException, MemoryTestHelpers.TestStructExplicit>(span, (_span) => MemoryMarshal.Cast <MemoryTestHelpers.TestStructExplicit, ulong>(_span).DontBox());
        }
Ejemplo n.º 2
0
        public void ReadOnlySpanReadFail()
        {
            ReadOnlySpan <byte> span = new byte[] { 1 };

            Assert.Equal <byte>(1, MemoryMarshal.Read <byte>(span));
            Assert.True(MemoryMarshal.TryRead(span, out byte byteValue));
            Assert.Equal(1, byteValue);

            MemoryTestHelpers.AssertThrows <ArgumentOutOfRangeException, byte>(span, (_span) => MemoryMarshal.Read <short>(_span));
            Assert.False(MemoryMarshal.TryRead(span, out short shortValue));
            MemoryTestHelpers.AssertThrows <ArgumentOutOfRangeException, byte>(span, (_span) => MemoryMarshal.Read <int>(_span));
            Assert.False(MemoryMarshal.TryRead(span, out int intValue));
            MemoryTestHelpers.AssertThrows <ArgumentOutOfRangeException, byte>(span, (_span) => MemoryMarshal.Read <long>(_span));
            Assert.False(MemoryMarshal.TryRead(span, out long longValue));

            MemoryTestHelpers.AssertThrows <ArgumentOutOfRangeException, byte>(span, (_span) => MemoryMarshal.Read <ushort>(_span));
            Assert.False(MemoryMarshal.TryRead(span, out ushort ushortValue));
            MemoryTestHelpers.AssertThrows <ArgumentOutOfRangeException, byte>(span, (_span) => MemoryMarshal.Read <uint>(_span));
            Assert.False(MemoryMarshal.TryRead(span, out uint uintValue));
            MemoryTestHelpers.AssertThrows <ArgumentOutOfRangeException, byte>(span, (_span) => MemoryMarshal.Read <ulong>(_span));
            Assert.False(MemoryMarshal.TryRead(span, out ulong ulongValue));

            ReadOnlySpan <byte> largeSpan = new byte[100];

            MemoryTestHelpers.AssertThrows <ArgumentException, byte>(largeSpan, (_span) => MemoryMarshal.Read <MemoryTestHelpers.TestValueTypeWithReference>(_span));
            MemoryTestHelpers.AssertThrows <ArgumentException, byte>(largeSpan, (_span) => MemoryMarshal.TryRead(_span, out MemoryTestHelpers.TestValueTypeWithReference stringValue));
        }
Ejemplo n.º 3
0
        public static void EqualsUnknownComparisonType_StringComparison()
        {
            char[] a    = { '4', '5', '6' };
            var    span = new ReadOnlySpan <char>(a);

            MemoryTestHelpers.AssertThrows <ArgumentException, char>(span, (_span) => _span.Equals(_span, StringComparison.CurrentCulture - 1));
            MemoryTestHelpers.AssertThrows <ArgumentException, char>(span, (_span) => _span.Equals(_span, StringComparison.OrdinalIgnoreCase + 1));
            MemoryTestHelpers.AssertThrows <ArgumentException, char>(span, (_span) => _span.Equals(_span, (StringComparison)6));
        }
Ejemplo n.º 4
0
        public void SpanWriteFail()
        {
            byte   byteValue   = 1;
            sbyte  sbyteValue  = 1;
            short  shortValue  = 1;
            ushort ushortValue = 1;
            int    intValue    = 1;
            uint   uintValue   = 1;
            long   longValue   = 1;
            ulong  ulongValue  = 1;

            Span <byte> span = new byte[1];

            MemoryMarshal.Write <byte>(span, ref byteValue);
            byte read = MemoryMarshal.Read <byte>(span);

            Assert.Equal <byte>(byteValue, read);

            span.Clear();
            Assert.True(MemoryMarshal.TryWrite <byte>(span, ref byteValue));
            read = MemoryMarshal.Read <byte>(span);
            Assert.Equal <byte>(byteValue, read);

            MemoryMarshal.Write <sbyte>(span, ref sbyteValue);
            sbyte readSbyte = MemoryMarshal.Read <sbyte>(span);

            Assert.Equal <sbyte>(sbyteValue, readSbyte);

            span.Clear();
            Assert.True(MemoryMarshal.TryWrite <sbyte>(span, ref sbyteValue));
            readSbyte = MemoryMarshal.Read <sbyte>(span);
            Assert.Equal <sbyte>(sbyteValue, readSbyte);

            MemoryTestHelpers.AssertThrows <ArgumentOutOfRangeException, byte>(span, (_span) => MemoryMarshal.Write <short>(_span, ref shortValue));
            Assert.False(MemoryMarshal.TryWrite <short>(span, ref shortValue));
            MemoryTestHelpers.AssertThrows <ArgumentOutOfRangeException, byte>(span, (_span) => MemoryMarshal.Write <int>(_span, ref intValue));
            Assert.False(MemoryMarshal.TryWrite <int>(span, ref intValue));
            MemoryTestHelpers.AssertThrows <ArgumentOutOfRangeException, byte>(span, (_span) => MemoryMarshal.Write <long>(_span, ref longValue));
            Assert.False(MemoryMarshal.TryWrite <long>(span, ref longValue));

            MemoryTestHelpers.AssertThrows <ArgumentOutOfRangeException, byte>(span, (_span) => MemoryMarshal.Write <ushort>(_span, ref ushortValue));
            Assert.False(MemoryMarshal.TryWrite <ushort>(span, ref ushortValue));
            MemoryTestHelpers.AssertThrows <ArgumentOutOfRangeException, byte>(span, (_span) => MemoryMarshal.Write <uint>(_span, ref uintValue));
            Assert.False(MemoryMarshal.TryWrite <uint>(span, ref uintValue));
            MemoryTestHelpers.AssertThrows <ArgumentOutOfRangeException, byte>(span, (_span) => MemoryMarshal.Write <ulong>(_span, ref ulongValue));
            Assert.False(MemoryMarshal.TryWrite <ulong>(span, ref ulongValue));

            var structValue = new MemoryTestHelpers.TestValueTypeWithReference {
                I = 1, S = "1"
            };

            MemoryTestHelpers.AssertThrows <ArgumentException, byte>(span, (_span) => MemoryMarshal.Write <MemoryTestHelpers.TestValueTypeWithReference>(_span, ref structValue));
            MemoryTestHelpers.AssertThrows <ArgumentException, byte>(span, (_span) => MemoryMarshal.TryWrite <MemoryTestHelpers.TestValueTypeWithReference>(_span, ref structValue));
        }
Ejemplo n.º 5
0
        public static void CopyToShorter()
        {
            int[] src = { 1, 2, 3 };
            int[] dst = { 99, 100 };

            ReadOnlySpan <int> srcSpan = new ReadOnlySpan <int>(src);

            MemoryTestHelpers.AssertThrows <ArgumentException, int>(srcSpan, (_srcSpan) => _srcSpan.CopyTo(dst));
            int[] expected = { 99, 100 };
            Assert.Equal <int>(expected, dst);  // CopyTo() checks for sufficient space before doing any copying.
        }
Ejemplo n.º 6
0
        public static void CopyToShorterArray()
        {
            int[] src = { 1, 2, 3 };
            int[] dst = new int[2] {
                99, 100
            };

            MemoryTestHelpers.AssertThrows <ArgumentException, int>(src, (_src) => _src.CopyTo(dst));
            int[] expected = { 99, 100 };
            Assert.Equal <int>(expected, dst);  // CopyTo() checks for sufficient space before doing any copying.
        }
Ejemplo n.º 7
0
        public static void Span_AsBytesContainsReferences()
        {
            Span <MemoryTestHelpers.StructWithReferences> span = new Span <MemoryTestHelpers.StructWithReferences>(Array.Empty <MemoryTestHelpers.StructWithReferences>());

            MemoryTestHelpers.AssertThrows <ArgumentException, MemoryTestHelpers.StructWithReferences>(span, (_span) => MemoryMarshal.AsBytes(_span).DontBox());
        }
Ejemplo n.º 8
0
        public static void MemoryExtensionsToUpperLowerOverlappingThrows(MemoryTestHelpers.AssertThrowsAction <char> action)
        {
            Span <char> buffer = new char[] { 'a', 'b', 'c', 'd' };

            MemoryTestHelpers.AssertThrows <InvalidOperationException, char>(buffer, action);
        }
Ejemplo n.º 9
0
        public static void CastSpanFromTypeContainsReferences()
        {
            Span <MemoryTestHelpers.StructWithReferences> span = new Span <MemoryTestHelpers.StructWithReferences>(Array.Empty <MemoryTestHelpers.StructWithReferences>());

            MemoryTestHelpers.AssertThrows <ArgumentException, MemoryTestHelpers.StructWithReferences>(span, (_span) => MemoryMarshal.Cast <MemoryTestHelpers.StructWithReferences, uint>(_span).DontBox());
        }
Ejemplo n.º 10
0
        public static void CastReadOnlySpanToTypeContainsReferences()
        {
            ReadOnlySpan <uint> span = new ReadOnlySpan <uint>(Array.Empty <uint>());

            MemoryTestHelpers.AssertThrows <ArgumentException, uint>(span, (_span) => MemoryMarshal.Cast <uint, MemoryTestHelpers.StructWithReferences>(_span).DontBox());
        }