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")
                            );
            }
        }
示例#3
0
    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
                            );
            }
        }
示例#5
0
    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")
                    );
    }