public void FromBase62Chars11_WithOverlappingInputAndOutputSpans_ShouldReturnExpectedOutput(string text, string base62String)
        {
            Span <byte> bytes = stackalloc byte[11];

            System.Text.Encoding.UTF8.GetBytes(base62String, bytes);
            Base62.FromBase62Chars11(bytes, bytes);
            var originalString = System.Text.Encoding.UTF8.GetString(bytes[..8]);
        public void FromBase62Chars11_Regularly_ShouldReturnExpectedOutput(string text, string base62String)
        {
            var         chars       = System.Text.Encoding.UTF8.GetBytes(base62String);
            Span <byte> outputBytes = stackalloc byte[text.Length];

            Base62.FromBase62Chars11(chars, outputBytes);
            var originalString = System.Text.Encoding.UTF8.GetString(outputBytes);

            Assert.Equal(text, originalString);
        }
Esempio n. 3
0
        /// <summary>
        /// <para>
        /// Outputs an ID decoded from the given UTF-8 alphanumeric string representation, effectively inverting <see cref="GetAlphanumeric(ulong, Span{byte})"/>.
        /// </para>
        /// <para>
        /// Returns false if the input is not a value encoded using the expected encoding.
        /// </para>
        /// </summary>
        /// <param name="bytes">A sequence of at least 11 input characters.</param>
        /// <param name="id">On true, this outputs the decoded ID.</param>
        public static bool TryGetUlong(ReadOnlySpan <byte> bytes, out ulong id)
        {
            // Alphanumeric encodings are exactly 11 characters long
            if (bytes.Length < 11)
            {
                id = default;
                return(false);
            }

            Span <byte> outputBytes = stackalloc byte[8];

            try
            {
                Base62.FromBase62Chars11(bytes, outputBytes);
            }
            catch (ArgumentException)
            {
                id = default;
                return(false);
            }

            id = BinaryPrimitives.ReadUInt64BigEndian(outputBytes);
            return(true);
        }