void TestM <T>()
        {
            const int length = 100;
            UnmanagedMemoryManager <T> manager = new UnmanagedMemoryManager <T>(length);
            var span = manager.GetSpan();

            Assert.AreEqual(length, manager.Length);
            Assert.AreEqual(length, span.Length);

            dynamic value = default;

            if (typeof(T) == typeof(byte))
            {
                value = byte.MaxValue;
            }
            if (typeof(T) == typeof(short))
            {
                value = short.MaxValue;
            }
            if (typeof(T) == typeof(int))
            {
                value = int.MaxValue;
            }

            if (typeof(T) == typeof(long))
            {
                value = long.MaxValue;
            }

            span[0] = value;
            var span2 = manager.GetSpan();

            Assert.AreEqual(span2[0], span[0]);

            if (manager is IDisposable disposable)
            {
                disposable.Dispose();

                try
                {
                    var span3 = manager.GetSpan();
                }
                catch (ObjectDisposedException)
                {
                }

                Assert.AreEqual(-1, manager.Length);
            }
        }
Ejemplo n.º 2
0
        public void Disposed_throw_ObjectDisposedException()
        {
            var mgr = new UnmanagedMemoryManager <char>(1);

            ((IDisposable)mgr).Dispose();
            Assert.Throws <ObjectDisposedException>(() => mgr.Pin());
            Assert.Throws <ObjectDisposedException>(() => mgr.Unpin());
            Assert.Throws <ObjectDisposedException>(() => mgr.GetSpan());
        }