public unsafe void ReadMultiLevelPointer()
        {
            int   number       = 1;
            int * numberPtr    = &number;
            int **numberPtrPtr = &numberPtr;

            var refPointer = new Reloaded.Memory.Pointers.RefPointer <int>((int *)numberPtrPtr, 2);

            for (int x = 0; x < 100; x++)
            {
                number = x;
                ref int newNumber = ref refPointer.TryDereference(out bool success);
                Assert.True(success);
                Assert.Equal(number, newNumber);
            }
        public unsafe void TryDereferenceRawPointer()
        {
            int   number       = 1;
            int * numberPtr    = &number;
            int **numberPtrPtr = &numberPtr;

            var refPointer = new Reloaded.Memory.Pointers.RefPointer <int>((int *)numberPtrPtr, 2);

            for (int x = 0; x < 100; x++)
            {
                bool success = refPointer.TryDereference(out int *value);
                *    value   = x;
                Assert.True(success);
                Assert.Equal(number, *value);
            }
        }
        public unsafe void TryDereferenceAlternateSyntax()
        {
            int   number       = 1;
            int * numberPtr    = &number;
            int **numberPtrPtr = &numberPtr;

            var refPointer = new Reloaded.Memory.Pointers.RefPointer <int>((int *)numberPtrPtr, 2);

            for (int x = 0; x < 100; x++)
            {
                number = x;

                int  newNumber = 0;
                bool success   = refPointer.TryDereference(ref newNumber);

                Assert.True(success);
                Assert.Equal(number, newNumber);
            }
        }