public static void PopTest() { var array = new UnmanagedArray <int>(3); array[0] = 1; array[1] = 2; array[2] = 3; using (var valueStack = new UnmanagedValueStack <int>(array, takeOwnership: false)) { Assert.That(() => valueStack.Pop(), Is.EqualTo(3) ); Assert.That(() => valueStack.Pop(), Is.EqualTo(2) ); Assert.That(() => valueStack.Pop(), Is.EqualTo(1) ); Assert.That(() => valueStack.Pop(), Throws.InvalidOperationException ); } using (var valueStack = new UnmanagedValueStack <int>(array, takeOwnership: true)) { _ = valueStack.Pop(); valueStack.Push(4); Assert.That(() => valueStack.Pop(), Is.EqualTo(4) ); _ = valueStack.Pop(); valueStack.Push(5); valueStack.Push(6); Assert.That(() => valueStack.Pop(), Is.EqualTo(6) ); Assert.That(() => valueStack.Pop(), Is.EqualTo(5) ); Assert.That(() => valueStack.Pop(), Is.EqualTo(1) ); Assert.That(() => valueStack, Has.Property("Capacity").EqualTo((nuint)3) .And.Count.EqualTo((nuint)0) ); } using (var valueStack = new UnmanagedValueStack <int>()) { Assert.That(() => valueStack.Pop(), Throws.InvalidOperationException ); } }
public static void PeekNUIntTest() { var array = new UnmanagedArray <int>(3); array[0] = 1; array[1] = 2; array[2] = 3; using (var valueStack = new UnmanagedValueStack <int>(array, takeOwnership: true)) { Assert.That(() => valueStack.Peek(0), Is.EqualTo(3) ); valueStack.Push(4); Assert.That(() => valueStack.Peek(0), Is.EqualTo(4) ); Assert.That(() => valueStack.Peek(3), Is.EqualTo(1) ); _ = valueStack.Pop(); valueStack.Push(5); Assert.That(() => valueStack.Peek(0), Is.EqualTo(5) ); Assert.That(() => valueStack.Peek(1), Is.EqualTo(3) ); _ = valueStack.Pop(); valueStack.Push(6); valueStack.Push(7); Assert.That(() => valueStack.Peek(0), Is.EqualTo(7) ); Assert.That(() => valueStack.Peek(2), Is.EqualTo(3) ); Assert.That(() => valueStack, Has.Property("Capacity").EqualTo((nuint)6) .And.Count.EqualTo((nuint)5) ); } using (var valueStack = new UnmanagedValueStack <int>()) { Assert.That(() => valueStack.Peek(0), Throws.InstanceOf <ArgumentOutOfRangeException>() .And.Property("ActualValue").EqualTo((nuint)0) .And.Property("ParamName").EqualTo("index") ); } }
public static void TrimExcessTest() { var array = new UnmanagedArray <int>(3); array[0] = 1; array[1] = 2; array[2] = 3; using (var valueStack = new UnmanagedValueStack <int>(array, takeOwnership: false)) { valueStack.TrimExcess(); Assert.That(() => valueStack, Has.Property("Capacity").EqualTo((nuint)3) .And.Count.EqualTo((nuint)3) ); } using (var valueStack = new UnmanagedValueStack <int>(array, takeOwnership: false)) { _ = valueStack.Pop(); valueStack.Push(4); valueStack.TrimExcess(); Assert.That(() => valueStack, Has.Property("Capacity").EqualTo((nuint)3) .And.Count.EqualTo((nuint)3) ); } using (var valueStack = new UnmanagedValueStack <int>(array, takeOwnership: true)) { valueStack.Push(4); valueStack.Push(5); valueStack.TrimExcess(); Assert.That(() => valueStack, Has.Property("Capacity").EqualTo((nuint)5) .And.Count.EqualTo((nuint)5) ); valueStack.EnsureCapacity(15); valueStack.TrimExcess(0.3f); Assert.That(() => valueStack, Has.Property("Capacity").EqualTo((nuint)15) .And.Count.EqualTo((nuint)5) ); } using (var valueStack = new UnmanagedValueStack <int>()) { valueStack.TrimExcess(); Assert.That(() => valueStack, Has.Property("Capacity").EqualTo((nuint)0) .And.Count.EqualTo((nuint)0) ); } }
public static void CopyToUnmanagedSpanTest() { var array = new UnmanagedArray <int>(3); array[0] = 1; array[1] = 2; array[2] = 3; using (var valueStack = new UnmanagedValueStack <int>(array, takeOwnership: true)) { using (var destination = new UnmanagedArray <int>(3)) { valueStack.CopyTo(destination); Assert.That(() => destination[0], Is.EqualTo(1) ); Assert.That(() => destination[1], Is.EqualTo(2) ); Assert.That(() => destination[2], Is.EqualTo(3) ); _ = valueStack.Pop(); valueStack.Push(4); valueStack.CopyTo(destination); Assert.That(() => destination[0], Is.EqualTo(1) ); Assert.That(() => destination[1], Is.EqualTo(2) ); Assert.That(() => destination[2], Is.EqualTo(4) ); } using (var destination = new UnmanagedArray <int>(6)) { valueStack.CopyTo(destination); Assert.That(() => destination[0], Is.EqualTo(1) ); Assert.That(() => destination[1], Is.EqualTo(2) ); Assert.That(() => destination[2], Is.EqualTo(4) ); Assert.That(() => destination[3], Is.EqualTo(0) ); Assert.That(() => destination[4], Is.EqualTo(0) ); Assert.That(() => destination[5], Is.EqualTo(0) ); _ = valueStack.Pop(); valueStack.Push(5); valueStack.Push(6); valueStack.CopyTo(destination); Assert.That(() => destination[0], Is.EqualTo(1) ); Assert.That(() => destination[1], Is.EqualTo(2) ); Assert.That(() => destination[2], Is.EqualTo(5) ); Assert.That(() => destination[3], Is.EqualTo(6) ); Assert.That(() => destination[4], Is.EqualTo(0) ); Assert.That(() => destination[5], Is.EqualTo(0) ); } Assert.That(() => valueStack.CopyTo(UnmanagedArray <int> .Empty), Throws.InstanceOf <ArgumentOutOfRangeException>() .And.Property("ActualValue").EqualTo((nuint)4) .And.Property("ParamName").EqualTo("Count") ); } using (var valueStack = new UnmanagedValueStack <int>()) { Assert.That(() => valueStack.CopyTo(UnmanagedArray <int> .Empty), Throws.Nothing ); } }
public static void CtorUnmanagedReadOnlySpanNUIntTest() { using var array = new UnmanagedArray <int>(3); array[0] = 1; array[1] = 2; array[2] = 3; using (var valueStack = new UnmanagedValueStack <int>(array.AsUnmanagedSpan())) { Assert.That(() => valueStack, Has.Property("Capacity").EqualTo((nuint)3) .And.Count.EqualTo((nuint)3) ); } using (var valueStack = new UnmanagedValueStack <int>(array.AsUnmanagedSpan(), 2)) { Assert.That(() => valueStack, Has.Property("Capacity").EqualTo((nuint)3) .And.Count.EqualTo((nuint)3) ); } Assert.That(() => new UnmanagedValueStack <int>(array.AsUnmanagedSpan(), 3), Throws.InstanceOf <ArgumentOutOfRangeException>() .And.Property("ActualValue").EqualTo((nuint)3) .And.Property("ParamName").EqualTo("alignment") ); using (var valueStack = new UnmanagedValueStack <int>(UnmanagedArray <int> .Empty.AsUnmanagedSpan())) { Assert.That(() => valueStack, Has.Property("Capacity").EqualTo((nuint)0) .And.Count.EqualTo((nuint)0) ); } using (var valueStack = new UnmanagedValueStack <int>(UnmanagedArray <int> .Empty.AsUnmanagedSpan(), 2)) { Assert.That(() => valueStack, Has.Property("Capacity").EqualTo((nuint)0) .And.Count.EqualTo((nuint)0) ); } Assert.That(() => new UnmanagedValueStack <int>(UnmanagedArray <int> .Empty.AsUnmanagedSpan(), 3), Throws.InstanceOf <ArgumentOutOfRangeException>() .And.Property("ActualValue").EqualTo((nuint)3) .And.Property("ParamName").EqualTo("alignment") ); using (var valueStack = new UnmanagedValueStack <int>(new UnmanagedArray <int>().AsUnmanagedSpan())) { Assert.That(() => valueStack, Has.Property("Capacity").EqualTo((nuint)0) .And.Count.EqualTo((nuint)0) ); } using (var valueStack = new UnmanagedValueStack <int>(new UnmanagedArray <int>().AsUnmanagedSpan(), 2)) { Assert.That(() => valueStack, Has.Property("Capacity").EqualTo((nuint)0) .And.Count.EqualTo((nuint)0) ); } Assert.That(() => new UnmanagedValueStack <int>(new UnmanagedArray <int>().AsUnmanagedSpan(), 3), Throws.InstanceOf <ArgumentOutOfRangeException>() .And.Property("ActualValue").EqualTo((nuint)3) .And.Property("ParamName").EqualTo("alignment") ); }