Files
mercury/tests/hard_coded/test_char_digits.exp
Julien Fischer 696829e6c1 Fix problems with the char module.
(1) The behaviour of digit_to_int/2 was inconsistent with that of is_digit/2.
The former succeeds for all of 0-9, a-z and A-Z while the latter succeeds only
for 0-9 (i.e. it was possible for digit_to_int/2 to succeed for non-decimal
characters, which is not what was intended in many of it uses).

(2) Predicates involving hexadecimal digits were inconsistently named, they
were "hex digits" in one predicate name, "hex chars" in another.

This change ensures that the following operations are supported for binary,
octal, decimal and hexadecimal digits and that we use a consistent naming
scheme for the predicates that implement them:
    - testing if a character is a digit of the given base
    - conversion to an int
    - conversion from an int

In addition, we also add predicates for supporting these operations for user
defined bases, ranging from 2-36.

library/char.m:
    Add the predicate is_decimal_digit/1, which is a synonym for is_digit/1.

    Add the predicate is_base_digit/2.

    Add the predicates int_to_{binary,octal,decimal,hex}_digit/2 and
    base_int_to_digit/3.

    Add the predicates {binary,octal,decimal,hex}_digit_to_int/2 and
    base_digit_to_int/3.

    Add det function versions of the above.

    Delete the function det_digit_to_int/1 that I added the other day.

    Mark the following as obsolete:
        - is_hex_digit/2
        - int_to_hex_char/2
        - int_to_digit/2
        - det_int_to_digit/1
        - det_int_to_digit/2

    Avoid redundant module qualification in the implementation.

    Mark some C foreign_procs as not modifying the trail.

    Re-order some declarations according to how the coding standard says they
    should be ordered.

library/bitmap.m:
library/integer.m:
library/parsing_utils.m:
library/string.m:
compiler/prog_rep_tables.m:
    Replace calls to obsolete predicates or functions.

NEWS:
    Announce the above changes.

    Add note advising users of digit_to_int/2 to check their code for the
    problem described above.

tests/hard_coded/Mmakefile:
tests/hard_coded/test_char_digits.m:
tests/hard_coded/test_char_digits.exp:
    Add a systematic test for the above predicates.
2014-09-12 01:16:00 +10:00

2575 lines
48 KiB
Plaintext

==== Testing binary digits ====
'0': yes : 0 : '0'
'1': yes : 1 : '1'
'2': no : * : *
'3': no : * : *
'4': no : * : *
'5': no : * : *
'6': no : * : *
'7': no : * : *
'8': no : * : *
'9': no : * : *
'a': no : * : *
'b': no : * : *
'c': no : * : *
'd': no : * : *
'e': no : * : *
'f': no : * : *
'g': no : * : *
'h': no : * : *
'i': no : * : *
'j': no : * : *
'k': no : * : *
'l': no : * : *
'm': no : * : *
'n': no : * : *
'o': no : * : *
'p': no : * : *
'q': no : * : *
'r': no : * : *
's': no : * : *
't': no : * : *
'u': no : * : *
'v': no : * : *
'w': no : * : *
'x': no : * : *
'y': no : * : *
'z': no : * : *
'A': no : * : *
'B': no : * : *
'C': no : * : *
'D': no : * : *
'E': no : * : *
'F': no : * : *
'G': no : * : *
'H': no : * : *
'I': no : * : *
'J': no : * : *
'K': no : * : *
'L': no : * : *
'M': no : * : *
'N': no : * : *
'O': no : * : *
'P': no : * : *
'Q': no : * : *
'R': no : * : *
'S': no : * : *
'T': no : * : *
'U': no : * : *
'V': no : * : *
'W': no : * : *
'X': no : * : *
'Y': no : * : *
'Z': no : * : *
'!': no : * : *
'@': no : * : *
'?': no : * : *
==== Testing octal digits ====
'0': yes : 0 : '0'
'1': yes : 1 : '1'
'2': yes : 2 : '2'
'3': yes : 3 : '3'
'4': yes : 4 : '4'
'5': yes : 5 : '5'
'6': yes : 6 : '6'
'7': yes : 7 : '7'
'8': no : * : *
'9': no : * : *
'a': no : * : *
'b': no : * : *
'c': no : * : *
'd': no : * : *
'e': no : * : *
'f': no : * : *
'g': no : * : *
'h': no : * : *
'i': no : * : *
'j': no : * : *
'k': no : * : *
'l': no : * : *
'm': no : * : *
'n': no : * : *
'o': no : * : *
'p': no : * : *
'q': no : * : *
'r': no : * : *
's': no : * : *
't': no : * : *
'u': no : * : *
'v': no : * : *
'w': no : * : *
'x': no : * : *
'y': no : * : *
'z': no : * : *
'A': no : * : *
'B': no : * : *
'C': no : * : *
'D': no : * : *
'E': no : * : *
'F': no : * : *
'G': no : * : *
'H': no : * : *
'I': no : * : *
'J': no : * : *
'K': no : * : *
'L': no : * : *
'M': no : * : *
'N': no : * : *
'O': no : * : *
'P': no : * : *
'Q': no : * : *
'R': no : * : *
'S': no : * : *
'T': no : * : *
'U': no : * : *
'V': no : * : *
'W': no : * : *
'X': no : * : *
'Y': no : * : *
'Z': no : * : *
'!': no : * : *
'@': no : * : *
'?': no : * : *
==== Testing decimal digits ====
'0': yes : 0 : '0'
'1': yes : 1 : '1'
'2': yes : 2 : '2'
'3': yes : 3 : '3'
'4': yes : 4 : '4'
'5': yes : 5 : '5'
'6': yes : 6 : '6'
'7': yes : 7 : '7'
'8': yes : 8 : '8'
'9': yes : 9 : '9'
'a': no : * : *
'b': no : * : *
'c': no : * : *
'd': no : * : *
'e': no : * : *
'f': no : * : *
'g': no : * : *
'h': no : * : *
'i': no : * : *
'j': no : * : *
'k': no : * : *
'l': no : * : *
'm': no : * : *
'n': no : * : *
'o': no : * : *
'p': no : * : *
'q': no : * : *
'r': no : * : *
's': no : * : *
't': no : * : *
'u': no : * : *
'v': no : * : *
'w': no : * : *
'x': no : * : *
'y': no : * : *
'z': no : * : *
'A': no : * : *
'B': no : * : *
'C': no : * : *
'D': no : * : *
'E': no : * : *
'F': no : * : *
'G': no : * : *
'H': no : * : *
'I': no : * : *
'J': no : * : *
'K': no : * : *
'L': no : * : *
'M': no : * : *
'N': no : * : *
'O': no : * : *
'P': no : * : *
'Q': no : * : *
'R': no : * : *
'S': no : * : *
'T': no : * : *
'U': no : * : *
'V': no : * : *
'W': no : * : *
'X': no : * : *
'Y': no : * : *
'Z': no : * : *
'!': no : * : *
'@': no : * : *
'?': no : * : *
==== testing hex digits ====
'0': yes : 0 : '0'
'1': yes : 1 : '1'
'2': yes : 2 : '2'
'3': yes : 3 : '3'
'4': yes : 4 : '4'
'5': yes : 5 : '5'
'6': yes : 6 : '6'
'7': yes : 7 : '7'
'8': yes : 8 : '8'
'9': yes : 9 : '9'
'a': yes : 10 : 'A'
'b': yes : 11 : 'B'
'c': yes : 12 : 'C'
'd': yes : 13 : 'D'
'e': yes : 14 : 'E'
'f': yes : 15 : 'F'
'g': no : * : *
'h': no : * : *
'i': no : * : *
'j': no : * : *
'k': no : * : *
'l': no : * : *
'm': no : * : *
'n': no : * : *
'o': no : * : *
'p': no : * : *
'q': no : * : *
'r': no : * : *
's': no : * : *
't': no : * : *
'u': no : * : *
'v': no : * : *
'w': no : * : *
'x': no : * : *
'y': no : * : *
'z': no : * : *
'A': yes : 10 : 'A'
'B': yes : 11 : 'B'
'C': yes : 12 : 'C'
'D': yes : 13 : 'D'
'E': yes : 14 : 'E'
'F': yes : 15 : 'F'
'G': no : * : *
'H': no : * : *
'I': no : * : *
'J': no : * : *
'K': no : * : *
'L': no : * : *
'M': no : * : *
'N': no : * : *
'O': no : * : *
'P': no : * : *
'Q': no : * : *
'R': no : * : *
'S': no : * : *
'T': no : * : *
'U': no : * : *
'V': no : * : *
'W': no : * : *
'X': no : * : *
'Y': no : * : *
'Z': no : * : *
'!': no : * : *
'@': no : * : *
'?': no : * : *
==== Testing base-2 digits ====
'0': yes : 0 : '0'
'1': yes : 1 : '1'
'2': no : * : *
'3': no : * : *
'4': no : * : *
'5': no : * : *
'6': no : * : *
'7': no : * : *
'8': no : * : *
'9': no : * : *
'a': no : * : *
'b': no : * : *
'c': no : * : *
'd': no : * : *
'e': no : * : *
'f': no : * : *
'g': no : * : *
'h': no : * : *
'i': no : * : *
'j': no : * : *
'k': no : * : *
'l': no : * : *
'm': no : * : *
'n': no : * : *
'o': no : * : *
'p': no : * : *
'q': no : * : *
'r': no : * : *
's': no : * : *
't': no : * : *
'u': no : * : *
'v': no : * : *
'w': no : * : *
'x': no : * : *
'y': no : * : *
'z': no : * : *
'A': no : * : *
'B': no : * : *
'C': no : * : *
'D': no : * : *
'E': no : * : *
'F': no : * : *
'G': no : * : *
'H': no : * : *
'I': no : * : *
'J': no : * : *
'K': no : * : *
'L': no : * : *
'M': no : * : *
'N': no : * : *
'O': no : * : *
'P': no : * : *
'Q': no : * : *
'R': no : * : *
'S': no : * : *
'T': no : * : *
'U': no : * : *
'V': no : * : *
'W': no : * : *
'X': no : * : *
'Y': no : * : *
'Z': no : * : *
'!': no : * : *
'@': no : * : *
'?': no : * : *
==== Testing base-3 digits ====
'0': yes : 0 : '0'
'1': yes : 1 : '1'
'2': yes : 2 : '2'
'3': no : * : *
'4': no : * : *
'5': no : * : *
'6': no : * : *
'7': no : * : *
'8': no : * : *
'9': no : * : *
'a': no : * : *
'b': no : * : *
'c': no : * : *
'd': no : * : *
'e': no : * : *
'f': no : * : *
'g': no : * : *
'h': no : * : *
'i': no : * : *
'j': no : * : *
'k': no : * : *
'l': no : * : *
'm': no : * : *
'n': no : * : *
'o': no : * : *
'p': no : * : *
'q': no : * : *
'r': no : * : *
's': no : * : *
't': no : * : *
'u': no : * : *
'v': no : * : *
'w': no : * : *
'x': no : * : *
'y': no : * : *
'z': no : * : *
'A': no : * : *
'B': no : * : *
'C': no : * : *
'D': no : * : *
'E': no : * : *
'F': no : * : *
'G': no : * : *
'H': no : * : *
'I': no : * : *
'J': no : * : *
'K': no : * : *
'L': no : * : *
'M': no : * : *
'N': no : * : *
'O': no : * : *
'P': no : * : *
'Q': no : * : *
'R': no : * : *
'S': no : * : *
'T': no : * : *
'U': no : * : *
'V': no : * : *
'W': no : * : *
'X': no : * : *
'Y': no : * : *
'Z': no : * : *
'!': no : * : *
'@': no : * : *
'?': no : * : *
==== Testing base-4 digits ====
'0': yes : 0 : '0'
'1': yes : 1 : '1'
'2': yes : 2 : '2'
'3': yes : 3 : '3'
'4': no : * : *
'5': no : * : *
'6': no : * : *
'7': no : * : *
'8': no : * : *
'9': no : * : *
'a': no : * : *
'b': no : * : *
'c': no : * : *
'd': no : * : *
'e': no : * : *
'f': no : * : *
'g': no : * : *
'h': no : * : *
'i': no : * : *
'j': no : * : *
'k': no : * : *
'l': no : * : *
'm': no : * : *
'n': no : * : *
'o': no : * : *
'p': no : * : *
'q': no : * : *
'r': no : * : *
's': no : * : *
't': no : * : *
'u': no : * : *
'v': no : * : *
'w': no : * : *
'x': no : * : *
'y': no : * : *
'z': no : * : *
'A': no : * : *
'B': no : * : *
'C': no : * : *
'D': no : * : *
'E': no : * : *
'F': no : * : *
'G': no : * : *
'H': no : * : *
'I': no : * : *
'J': no : * : *
'K': no : * : *
'L': no : * : *
'M': no : * : *
'N': no : * : *
'O': no : * : *
'P': no : * : *
'Q': no : * : *
'R': no : * : *
'S': no : * : *
'T': no : * : *
'U': no : * : *
'V': no : * : *
'W': no : * : *
'X': no : * : *
'Y': no : * : *
'Z': no : * : *
'!': no : * : *
'@': no : * : *
'?': no : * : *
==== Testing base-5 digits ====
'0': yes : 0 : '0'
'1': yes : 1 : '1'
'2': yes : 2 : '2'
'3': yes : 3 : '3'
'4': yes : 4 : '4'
'5': no : * : *
'6': no : * : *
'7': no : * : *
'8': no : * : *
'9': no : * : *
'a': no : * : *
'b': no : * : *
'c': no : * : *
'd': no : * : *
'e': no : * : *
'f': no : * : *
'g': no : * : *
'h': no : * : *
'i': no : * : *
'j': no : * : *
'k': no : * : *
'l': no : * : *
'm': no : * : *
'n': no : * : *
'o': no : * : *
'p': no : * : *
'q': no : * : *
'r': no : * : *
's': no : * : *
't': no : * : *
'u': no : * : *
'v': no : * : *
'w': no : * : *
'x': no : * : *
'y': no : * : *
'z': no : * : *
'A': no : * : *
'B': no : * : *
'C': no : * : *
'D': no : * : *
'E': no : * : *
'F': no : * : *
'G': no : * : *
'H': no : * : *
'I': no : * : *
'J': no : * : *
'K': no : * : *
'L': no : * : *
'M': no : * : *
'N': no : * : *
'O': no : * : *
'P': no : * : *
'Q': no : * : *
'R': no : * : *
'S': no : * : *
'T': no : * : *
'U': no : * : *
'V': no : * : *
'W': no : * : *
'X': no : * : *
'Y': no : * : *
'Z': no : * : *
'!': no : * : *
'@': no : * : *
'?': no : * : *
==== Testing base-6 digits ====
'0': yes : 0 : '0'
'1': yes : 1 : '1'
'2': yes : 2 : '2'
'3': yes : 3 : '3'
'4': yes : 4 : '4'
'5': yes : 5 : '5'
'6': no : * : *
'7': no : * : *
'8': no : * : *
'9': no : * : *
'a': no : * : *
'b': no : * : *
'c': no : * : *
'd': no : * : *
'e': no : * : *
'f': no : * : *
'g': no : * : *
'h': no : * : *
'i': no : * : *
'j': no : * : *
'k': no : * : *
'l': no : * : *
'm': no : * : *
'n': no : * : *
'o': no : * : *
'p': no : * : *
'q': no : * : *
'r': no : * : *
's': no : * : *
't': no : * : *
'u': no : * : *
'v': no : * : *
'w': no : * : *
'x': no : * : *
'y': no : * : *
'z': no : * : *
'A': no : * : *
'B': no : * : *
'C': no : * : *
'D': no : * : *
'E': no : * : *
'F': no : * : *
'G': no : * : *
'H': no : * : *
'I': no : * : *
'J': no : * : *
'K': no : * : *
'L': no : * : *
'M': no : * : *
'N': no : * : *
'O': no : * : *
'P': no : * : *
'Q': no : * : *
'R': no : * : *
'S': no : * : *
'T': no : * : *
'U': no : * : *
'V': no : * : *
'W': no : * : *
'X': no : * : *
'Y': no : * : *
'Z': no : * : *
'!': no : * : *
'@': no : * : *
'?': no : * : *
==== Testing base-7 digits ====
'0': yes : 0 : '0'
'1': yes : 1 : '1'
'2': yes : 2 : '2'
'3': yes : 3 : '3'
'4': yes : 4 : '4'
'5': yes : 5 : '5'
'6': yes : 6 : '6'
'7': no : * : *
'8': no : * : *
'9': no : * : *
'a': no : * : *
'b': no : * : *
'c': no : * : *
'd': no : * : *
'e': no : * : *
'f': no : * : *
'g': no : * : *
'h': no : * : *
'i': no : * : *
'j': no : * : *
'k': no : * : *
'l': no : * : *
'm': no : * : *
'n': no : * : *
'o': no : * : *
'p': no : * : *
'q': no : * : *
'r': no : * : *
's': no : * : *
't': no : * : *
'u': no : * : *
'v': no : * : *
'w': no : * : *
'x': no : * : *
'y': no : * : *
'z': no : * : *
'A': no : * : *
'B': no : * : *
'C': no : * : *
'D': no : * : *
'E': no : * : *
'F': no : * : *
'G': no : * : *
'H': no : * : *
'I': no : * : *
'J': no : * : *
'K': no : * : *
'L': no : * : *
'M': no : * : *
'N': no : * : *
'O': no : * : *
'P': no : * : *
'Q': no : * : *
'R': no : * : *
'S': no : * : *
'T': no : * : *
'U': no : * : *
'V': no : * : *
'W': no : * : *
'X': no : * : *
'Y': no : * : *
'Z': no : * : *
'!': no : * : *
'@': no : * : *
'?': no : * : *
==== Testing base-8 digits ====
'0': yes : 0 : '0'
'1': yes : 1 : '1'
'2': yes : 2 : '2'
'3': yes : 3 : '3'
'4': yes : 4 : '4'
'5': yes : 5 : '5'
'6': yes : 6 : '6'
'7': yes : 7 : '7'
'8': no : * : *
'9': no : * : *
'a': no : * : *
'b': no : * : *
'c': no : * : *
'd': no : * : *
'e': no : * : *
'f': no : * : *
'g': no : * : *
'h': no : * : *
'i': no : * : *
'j': no : * : *
'k': no : * : *
'l': no : * : *
'm': no : * : *
'n': no : * : *
'o': no : * : *
'p': no : * : *
'q': no : * : *
'r': no : * : *
's': no : * : *
't': no : * : *
'u': no : * : *
'v': no : * : *
'w': no : * : *
'x': no : * : *
'y': no : * : *
'z': no : * : *
'A': no : * : *
'B': no : * : *
'C': no : * : *
'D': no : * : *
'E': no : * : *
'F': no : * : *
'G': no : * : *
'H': no : * : *
'I': no : * : *
'J': no : * : *
'K': no : * : *
'L': no : * : *
'M': no : * : *
'N': no : * : *
'O': no : * : *
'P': no : * : *
'Q': no : * : *
'R': no : * : *
'S': no : * : *
'T': no : * : *
'U': no : * : *
'V': no : * : *
'W': no : * : *
'X': no : * : *
'Y': no : * : *
'Z': no : * : *
'!': no : * : *
'@': no : * : *
'?': no : * : *
==== Testing base-9 digits ====
'0': yes : 0 : '0'
'1': yes : 1 : '1'
'2': yes : 2 : '2'
'3': yes : 3 : '3'
'4': yes : 4 : '4'
'5': yes : 5 : '5'
'6': yes : 6 : '6'
'7': yes : 7 : '7'
'8': yes : 8 : '8'
'9': no : * : *
'a': no : * : *
'b': no : * : *
'c': no : * : *
'd': no : * : *
'e': no : * : *
'f': no : * : *
'g': no : * : *
'h': no : * : *
'i': no : * : *
'j': no : * : *
'k': no : * : *
'l': no : * : *
'm': no : * : *
'n': no : * : *
'o': no : * : *
'p': no : * : *
'q': no : * : *
'r': no : * : *
's': no : * : *
't': no : * : *
'u': no : * : *
'v': no : * : *
'w': no : * : *
'x': no : * : *
'y': no : * : *
'z': no : * : *
'A': no : * : *
'B': no : * : *
'C': no : * : *
'D': no : * : *
'E': no : * : *
'F': no : * : *
'G': no : * : *
'H': no : * : *
'I': no : * : *
'J': no : * : *
'K': no : * : *
'L': no : * : *
'M': no : * : *
'N': no : * : *
'O': no : * : *
'P': no : * : *
'Q': no : * : *
'R': no : * : *
'S': no : * : *
'T': no : * : *
'U': no : * : *
'V': no : * : *
'W': no : * : *
'X': no : * : *
'Y': no : * : *
'Z': no : * : *
'!': no : * : *
'@': no : * : *
'?': no : * : *
==== Testing base-10 digits ====
'0': yes : 0 : '0'
'1': yes : 1 : '1'
'2': yes : 2 : '2'
'3': yes : 3 : '3'
'4': yes : 4 : '4'
'5': yes : 5 : '5'
'6': yes : 6 : '6'
'7': yes : 7 : '7'
'8': yes : 8 : '8'
'9': yes : 9 : '9'
'a': no : * : *
'b': no : * : *
'c': no : * : *
'd': no : * : *
'e': no : * : *
'f': no : * : *
'g': no : * : *
'h': no : * : *
'i': no : * : *
'j': no : * : *
'k': no : * : *
'l': no : * : *
'm': no : * : *
'n': no : * : *
'o': no : * : *
'p': no : * : *
'q': no : * : *
'r': no : * : *
's': no : * : *
't': no : * : *
'u': no : * : *
'v': no : * : *
'w': no : * : *
'x': no : * : *
'y': no : * : *
'z': no : * : *
'A': no : * : *
'B': no : * : *
'C': no : * : *
'D': no : * : *
'E': no : * : *
'F': no : * : *
'G': no : * : *
'H': no : * : *
'I': no : * : *
'J': no : * : *
'K': no : * : *
'L': no : * : *
'M': no : * : *
'N': no : * : *
'O': no : * : *
'P': no : * : *
'Q': no : * : *
'R': no : * : *
'S': no : * : *
'T': no : * : *
'U': no : * : *
'V': no : * : *
'W': no : * : *
'X': no : * : *
'Y': no : * : *
'Z': no : * : *
'!': no : * : *
'@': no : * : *
'?': no : * : *
==== Testing base-11 digits ====
'0': yes : 0 : '0'
'1': yes : 1 : '1'
'2': yes : 2 : '2'
'3': yes : 3 : '3'
'4': yes : 4 : '4'
'5': yes : 5 : '5'
'6': yes : 6 : '6'
'7': yes : 7 : '7'
'8': yes : 8 : '8'
'9': yes : 9 : '9'
'a': yes : 10 : 'A'
'b': no : * : *
'c': no : * : *
'd': no : * : *
'e': no : * : *
'f': no : * : *
'g': no : * : *
'h': no : * : *
'i': no : * : *
'j': no : * : *
'k': no : * : *
'l': no : * : *
'm': no : * : *
'n': no : * : *
'o': no : * : *
'p': no : * : *
'q': no : * : *
'r': no : * : *
's': no : * : *
't': no : * : *
'u': no : * : *
'v': no : * : *
'w': no : * : *
'x': no : * : *
'y': no : * : *
'z': no : * : *
'A': yes : 10 : 'A'
'B': no : * : *
'C': no : * : *
'D': no : * : *
'E': no : * : *
'F': no : * : *
'G': no : * : *
'H': no : * : *
'I': no : * : *
'J': no : * : *
'K': no : * : *
'L': no : * : *
'M': no : * : *
'N': no : * : *
'O': no : * : *
'P': no : * : *
'Q': no : * : *
'R': no : * : *
'S': no : * : *
'T': no : * : *
'U': no : * : *
'V': no : * : *
'W': no : * : *
'X': no : * : *
'Y': no : * : *
'Z': no : * : *
'!': no : * : *
'@': no : * : *
'?': no : * : *
==== Testing base-12 digits ====
'0': yes : 0 : '0'
'1': yes : 1 : '1'
'2': yes : 2 : '2'
'3': yes : 3 : '3'
'4': yes : 4 : '4'
'5': yes : 5 : '5'
'6': yes : 6 : '6'
'7': yes : 7 : '7'
'8': yes : 8 : '8'
'9': yes : 9 : '9'
'a': yes : 10 : 'A'
'b': yes : 11 : 'B'
'c': no : * : *
'd': no : * : *
'e': no : * : *
'f': no : * : *
'g': no : * : *
'h': no : * : *
'i': no : * : *
'j': no : * : *
'k': no : * : *
'l': no : * : *
'm': no : * : *
'n': no : * : *
'o': no : * : *
'p': no : * : *
'q': no : * : *
'r': no : * : *
's': no : * : *
't': no : * : *
'u': no : * : *
'v': no : * : *
'w': no : * : *
'x': no : * : *
'y': no : * : *
'z': no : * : *
'A': yes : 10 : 'A'
'B': yes : 11 : 'B'
'C': no : * : *
'D': no : * : *
'E': no : * : *
'F': no : * : *
'G': no : * : *
'H': no : * : *
'I': no : * : *
'J': no : * : *
'K': no : * : *
'L': no : * : *
'M': no : * : *
'N': no : * : *
'O': no : * : *
'P': no : * : *
'Q': no : * : *
'R': no : * : *
'S': no : * : *
'T': no : * : *
'U': no : * : *
'V': no : * : *
'W': no : * : *
'X': no : * : *
'Y': no : * : *
'Z': no : * : *
'!': no : * : *
'@': no : * : *
'?': no : * : *
==== Testing base-13 digits ====
'0': yes : 0 : '0'
'1': yes : 1 : '1'
'2': yes : 2 : '2'
'3': yes : 3 : '3'
'4': yes : 4 : '4'
'5': yes : 5 : '5'
'6': yes : 6 : '6'
'7': yes : 7 : '7'
'8': yes : 8 : '8'
'9': yes : 9 : '9'
'a': yes : 10 : 'A'
'b': yes : 11 : 'B'
'c': yes : 12 : 'C'
'd': no : * : *
'e': no : * : *
'f': no : * : *
'g': no : * : *
'h': no : * : *
'i': no : * : *
'j': no : * : *
'k': no : * : *
'l': no : * : *
'm': no : * : *
'n': no : * : *
'o': no : * : *
'p': no : * : *
'q': no : * : *
'r': no : * : *
's': no : * : *
't': no : * : *
'u': no : * : *
'v': no : * : *
'w': no : * : *
'x': no : * : *
'y': no : * : *
'z': no : * : *
'A': yes : 10 : 'A'
'B': yes : 11 : 'B'
'C': yes : 12 : 'C'
'D': no : * : *
'E': no : * : *
'F': no : * : *
'G': no : * : *
'H': no : * : *
'I': no : * : *
'J': no : * : *
'K': no : * : *
'L': no : * : *
'M': no : * : *
'N': no : * : *
'O': no : * : *
'P': no : * : *
'Q': no : * : *
'R': no : * : *
'S': no : * : *
'T': no : * : *
'U': no : * : *
'V': no : * : *
'W': no : * : *
'X': no : * : *
'Y': no : * : *
'Z': no : * : *
'!': no : * : *
'@': no : * : *
'?': no : * : *
==== Testing base-14 digits ====
'0': yes : 0 : '0'
'1': yes : 1 : '1'
'2': yes : 2 : '2'
'3': yes : 3 : '3'
'4': yes : 4 : '4'
'5': yes : 5 : '5'
'6': yes : 6 : '6'
'7': yes : 7 : '7'
'8': yes : 8 : '8'
'9': yes : 9 : '9'
'a': yes : 10 : 'A'
'b': yes : 11 : 'B'
'c': yes : 12 : 'C'
'd': yes : 13 : 'D'
'e': no : * : *
'f': no : * : *
'g': no : * : *
'h': no : * : *
'i': no : * : *
'j': no : * : *
'k': no : * : *
'l': no : * : *
'm': no : * : *
'n': no : * : *
'o': no : * : *
'p': no : * : *
'q': no : * : *
'r': no : * : *
's': no : * : *
't': no : * : *
'u': no : * : *
'v': no : * : *
'w': no : * : *
'x': no : * : *
'y': no : * : *
'z': no : * : *
'A': yes : 10 : 'A'
'B': yes : 11 : 'B'
'C': yes : 12 : 'C'
'D': yes : 13 : 'D'
'E': no : * : *
'F': no : * : *
'G': no : * : *
'H': no : * : *
'I': no : * : *
'J': no : * : *
'K': no : * : *
'L': no : * : *
'M': no : * : *
'N': no : * : *
'O': no : * : *
'P': no : * : *
'Q': no : * : *
'R': no : * : *
'S': no : * : *
'T': no : * : *
'U': no : * : *
'V': no : * : *
'W': no : * : *
'X': no : * : *
'Y': no : * : *
'Z': no : * : *
'!': no : * : *
'@': no : * : *
'?': no : * : *
==== Testing base-15 digits ====
'0': yes : 0 : '0'
'1': yes : 1 : '1'
'2': yes : 2 : '2'
'3': yes : 3 : '3'
'4': yes : 4 : '4'
'5': yes : 5 : '5'
'6': yes : 6 : '6'
'7': yes : 7 : '7'
'8': yes : 8 : '8'
'9': yes : 9 : '9'
'a': yes : 10 : 'A'
'b': yes : 11 : 'B'
'c': yes : 12 : 'C'
'd': yes : 13 : 'D'
'e': yes : 14 : 'E'
'f': no : * : *
'g': no : * : *
'h': no : * : *
'i': no : * : *
'j': no : * : *
'k': no : * : *
'l': no : * : *
'm': no : * : *
'n': no : * : *
'o': no : * : *
'p': no : * : *
'q': no : * : *
'r': no : * : *
's': no : * : *
't': no : * : *
'u': no : * : *
'v': no : * : *
'w': no : * : *
'x': no : * : *
'y': no : * : *
'z': no : * : *
'A': yes : 10 : 'A'
'B': yes : 11 : 'B'
'C': yes : 12 : 'C'
'D': yes : 13 : 'D'
'E': yes : 14 : 'E'
'F': no : * : *
'G': no : * : *
'H': no : * : *
'I': no : * : *
'J': no : * : *
'K': no : * : *
'L': no : * : *
'M': no : * : *
'N': no : * : *
'O': no : * : *
'P': no : * : *
'Q': no : * : *
'R': no : * : *
'S': no : * : *
'T': no : * : *
'U': no : * : *
'V': no : * : *
'W': no : * : *
'X': no : * : *
'Y': no : * : *
'Z': no : * : *
'!': no : * : *
'@': no : * : *
'?': no : * : *
==== Testing base-16 digits ====
'0': yes : 0 : '0'
'1': yes : 1 : '1'
'2': yes : 2 : '2'
'3': yes : 3 : '3'
'4': yes : 4 : '4'
'5': yes : 5 : '5'
'6': yes : 6 : '6'
'7': yes : 7 : '7'
'8': yes : 8 : '8'
'9': yes : 9 : '9'
'a': yes : 10 : 'A'
'b': yes : 11 : 'B'
'c': yes : 12 : 'C'
'd': yes : 13 : 'D'
'e': yes : 14 : 'E'
'f': yes : 15 : 'F'
'g': no : * : *
'h': no : * : *
'i': no : * : *
'j': no : * : *
'k': no : * : *
'l': no : * : *
'm': no : * : *
'n': no : * : *
'o': no : * : *
'p': no : * : *
'q': no : * : *
'r': no : * : *
's': no : * : *
't': no : * : *
'u': no : * : *
'v': no : * : *
'w': no : * : *
'x': no : * : *
'y': no : * : *
'z': no : * : *
'A': yes : 10 : 'A'
'B': yes : 11 : 'B'
'C': yes : 12 : 'C'
'D': yes : 13 : 'D'
'E': yes : 14 : 'E'
'F': yes : 15 : 'F'
'G': no : * : *
'H': no : * : *
'I': no : * : *
'J': no : * : *
'K': no : * : *
'L': no : * : *
'M': no : * : *
'N': no : * : *
'O': no : * : *
'P': no : * : *
'Q': no : * : *
'R': no : * : *
'S': no : * : *
'T': no : * : *
'U': no : * : *
'V': no : * : *
'W': no : * : *
'X': no : * : *
'Y': no : * : *
'Z': no : * : *
'!': no : * : *
'@': no : * : *
'?': no : * : *
==== Testing base-17 digits ====
'0': yes : 0 : '0'
'1': yes : 1 : '1'
'2': yes : 2 : '2'
'3': yes : 3 : '3'
'4': yes : 4 : '4'
'5': yes : 5 : '5'
'6': yes : 6 : '6'
'7': yes : 7 : '7'
'8': yes : 8 : '8'
'9': yes : 9 : '9'
'a': yes : 10 : 'A'
'b': yes : 11 : 'B'
'c': yes : 12 : 'C'
'd': yes : 13 : 'D'
'e': yes : 14 : 'E'
'f': yes : 15 : 'F'
'g': yes : 16 : 'G'
'h': no : * : *
'i': no : * : *
'j': no : * : *
'k': no : * : *
'l': no : * : *
'm': no : * : *
'n': no : * : *
'o': no : * : *
'p': no : * : *
'q': no : * : *
'r': no : * : *
's': no : * : *
't': no : * : *
'u': no : * : *
'v': no : * : *
'w': no : * : *
'x': no : * : *
'y': no : * : *
'z': no : * : *
'A': yes : 10 : 'A'
'B': yes : 11 : 'B'
'C': yes : 12 : 'C'
'D': yes : 13 : 'D'
'E': yes : 14 : 'E'
'F': yes : 15 : 'F'
'G': yes : 16 : 'G'
'H': no : * : *
'I': no : * : *
'J': no : * : *
'K': no : * : *
'L': no : * : *
'M': no : * : *
'N': no : * : *
'O': no : * : *
'P': no : * : *
'Q': no : * : *
'R': no : * : *
'S': no : * : *
'T': no : * : *
'U': no : * : *
'V': no : * : *
'W': no : * : *
'X': no : * : *
'Y': no : * : *
'Z': no : * : *
'!': no : * : *
'@': no : * : *
'?': no : * : *
==== Testing base-18 digits ====
'0': yes : 0 : '0'
'1': yes : 1 : '1'
'2': yes : 2 : '2'
'3': yes : 3 : '3'
'4': yes : 4 : '4'
'5': yes : 5 : '5'
'6': yes : 6 : '6'
'7': yes : 7 : '7'
'8': yes : 8 : '8'
'9': yes : 9 : '9'
'a': yes : 10 : 'A'
'b': yes : 11 : 'B'
'c': yes : 12 : 'C'
'd': yes : 13 : 'D'
'e': yes : 14 : 'E'
'f': yes : 15 : 'F'
'g': yes : 16 : 'G'
'h': yes : 17 : 'H'
'i': no : * : *
'j': no : * : *
'k': no : * : *
'l': no : * : *
'm': no : * : *
'n': no : * : *
'o': no : * : *
'p': no : * : *
'q': no : * : *
'r': no : * : *
's': no : * : *
't': no : * : *
'u': no : * : *
'v': no : * : *
'w': no : * : *
'x': no : * : *
'y': no : * : *
'z': no : * : *
'A': yes : 10 : 'A'
'B': yes : 11 : 'B'
'C': yes : 12 : 'C'
'D': yes : 13 : 'D'
'E': yes : 14 : 'E'
'F': yes : 15 : 'F'
'G': yes : 16 : 'G'
'H': yes : 17 : 'H'
'I': no : * : *
'J': no : * : *
'K': no : * : *
'L': no : * : *
'M': no : * : *
'N': no : * : *
'O': no : * : *
'P': no : * : *
'Q': no : * : *
'R': no : * : *
'S': no : * : *
'T': no : * : *
'U': no : * : *
'V': no : * : *
'W': no : * : *
'X': no : * : *
'Y': no : * : *
'Z': no : * : *
'!': no : * : *
'@': no : * : *
'?': no : * : *
==== Testing base-19 digits ====
'0': yes : 0 : '0'
'1': yes : 1 : '1'
'2': yes : 2 : '2'
'3': yes : 3 : '3'
'4': yes : 4 : '4'
'5': yes : 5 : '5'
'6': yes : 6 : '6'
'7': yes : 7 : '7'
'8': yes : 8 : '8'
'9': yes : 9 : '9'
'a': yes : 10 : 'A'
'b': yes : 11 : 'B'
'c': yes : 12 : 'C'
'd': yes : 13 : 'D'
'e': yes : 14 : 'E'
'f': yes : 15 : 'F'
'g': yes : 16 : 'G'
'h': yes : 17 : 'H'
'i': yes : 18 : 'I'
'j': no : * : *
'k': no : * : *
'l': no : * : *
'm': no : * : *
'n': no : * : *
'o': no : * : *
'p': no : * : *
'q': no : * : *
'r': no : * : *
's': no : * : *
't': no : * : *
'u': no : * : *
'v': no : * : *
'w': no : * : *
'x': no : * : *
'y': no : * : *
'z': no : * : *
'A': yes : 10 : 'A'
'B': yes : 11 : 'B'
'C': yes : 12 : 'C'
'D': yes : 13 : 'D'
'E': yes : 14 : 'E'
'F': yes : 15 : 'F'
'G': yes : 16 : 'G'
'H': yes : 17 : 'H'
'I': yes : 18 : 'I'
'J': no : * : *
'K': no : * : *
'L': no : * : *
'M': no : * : *
'N': no : * : *
'O': no : * : *
'P': no : * : *
'Q': no : * : *
'R': no : * : *
'S': no : * : *
'T': no : * : *
'U': no : * : *
'V': no : * : *
'W': no : * : *
'X': no : * : *
'Y': no : * : *
'Z': no : * : *
'!': no : * : *
'@': no : * : *
'?': no : * : *
==== Testing base-20 digits ====
'0': yes : 0 : '0'
'1': yes : 1 : '1'
'2': yes : 2 : '2'
'3': yes : 3 : '3'
'4': yes : 4 : '4'
'5': yes : 5 : '5'
'6': yes : 6 : '6'
'7': yes : 7 : '7'
'8': yes : 8 : '8'
'9': yes : 9 : '9'
'a': yes : 10 : 'A'
'b': yes : 11 : 'B'
'c': yes : 12 : 'C'
'd': yes : 13 : 'D'
'e': yes : 14 : 'E'
'f': yes : 15 : 'F'
'g': yes : 16 : 'G'
'h': yes : 17 : 'H'
'i': yes : 18 : 'I'
'j': yes : 19 : 'J'
'k': no : * : *
'l': no : * : *
'm': no : * : *
'n': no : * : *
'o': no : * : *
'p': no : * : *
'q': no : * : *
'r': no : * : *
's': no : * : *
't': no : * : *
'u': no : * : *
'v': no : * : *
'w': no : * : *
'x': no : * : *
'y': no : * : *
'z': no : * : *
'A': yes : 10 : 'A'
'B': yes : 11 : 'B'
'C': yes : 12 : 'C'
'D': yes : 13 : 'D'
'E': yes : 14 : 'E'
'F': yes : 15 : 'F'
'G': yes : 16 : 'G'
'H': yes : 17 : 'H'
'I': yes : 18 : 'I'
'J': yes : 19 : 'J'
'K': no : * : *
'L': no : * : *
'M': no : * : *
'N': no : * : *
'O': no : * : *
'P': no : * : *
'Q': no : * : *
'R': no : * : *
'S': no : * : *
'T': no : * : *
'U': no : * : *
'V': no : * : *
'W': no : * : *
'X': no : * : *
'Y': no : * : *
'Z': no : * : *
'!': no : * : *
'@': no : * : *
'?': no : * : *
==== Testing base-21 digits ====
'0': yes : 0 : '0'
'1': yes : 1 : '1'
'2': yes : 2 : '2'
'3': yes : 3 : '3'
'4': yes : 4 : '4'
'5': yes : 5 : '5'
'6': yes : 6 : '6'
'7': yes : 7 : '7'
'8': yes : 8 : '8'
'9': yes : 9 : '9'
'a': yes : 10 : 'A'
'b': yes : 11 : 'B'
'c': yes : 12 : 'C'
'd': yes : 13 : 'D'
'e': yes : 14 : 'E'
'f': yes : 15 : 'F'
'g': yes : 16 : 'G'
'h': yes : 17 : 'H'
'i': yes : 18 : 'I'
'j': yes : 19 : 'J'
'k': yes : 20 : 'K'
'l': no : * : *
'm': no : * : *
'n': no : * : *
'o': no : * : *
'p': no : * : *
'q': no : * : *
'r': no : * : *
's': no : * : *
't': no : * : *
'u': no : * : *
'v': no : * : *
'w': no : * : *
'x': no : * : *
'y': no : * : *
'z': no : * : *
'A': yes : 10 : 'A'
'B': yes : 11 : 'B'
'C': yes : 12 : 'C'
'D': yes : 13 : 'D'
'E': yes : 14 : 'E'
'F': yes : 15 : 'F'
'G': yes : 16 : 'G'
'H': yes : 17 : 'H'
'I': yes : 18 : 'I'
'J': yes : 19 : 'J'
'K': yes : 20 : 'K'
'L': no : * : *
'M': no : * : *
'N': no : * : *
'O': no : * : *
'P': no : * : *
'Q': no : * : *
'R': no : * : *
'S': no : * : *
'T': no : * : *
'U': no : * : *
'V': no : * : *
'W': no : * : *
'X': no : * : *
'Y': no : * : *
'Z': no : * : *
'!': no : * : *
'@': no : * : *
'?': no : * : *
==== Testing base-22 digits ====
'0': yes : 0 : '0'
'1': yes : 1 : '1'
'2': yes : 2 : '2'
'3': yes : 3 : '3'
'4': yes : 4 : '4'
'5': yes : 5 : '5'
'6': yes : 6 : '6'
'7': yes : 7 : '7'
'8': yes : 8 : '8'
'9': yes : 9 : '9'
'a': yes : 10 : 'A'
'b': yes : 11 : 'B'
'c': yes : 12 : 'C'
'd': yes : 13 : 'D'
'e': yes : 14 : 'E'
'f': yes : 15 : 'F'
'g': yes : 16 : 'G'
'h': yes : 17 : 'H'
'i': yes : 18 : 'I'
'j': yes : 19 : 'J'
'k': yes : 20 : 'K'
'l': yes : 21 : 'L'
'm': no : * : *
'n': no : * : *
'o': no : * : *
'p': no : * : *
'q': no : * : *
'r': no : * : *
's': no : * : *
't': no : * : *
'u': no : * : *
'v': no : * : *
'w': no : * : *
'x': no : * : *
'y': no : * : *
'z': no : * : *
'A': yes : 10 : 'A'
'B': yes : 11 : 'B'
'C': yes : 12 : 'C'
'D': yes : 13 : 'D'
'E': yes : 14 : 'E'
'F': yes : 15 : 'F'
'G': yes : 16 : 'G'
'H': yes : 17 : 'H'
'I': yes : 18 : 'I'
'J': yes : 19 : 'J'
'K': yes : 20 : 'K'
'L': yes : 21 : 'L'
'M': no : * : *
'N': no : * : *
'O': no : * : *
'P': no : * : *
'Q': no : * : *
'R': no : * : *
'S': no : * : *
'T': no : * : *
'U': no : * : *
'V': no : * : *
'W': no : * : *
'X': no : * : *
'Y': no : * : *
'Z': no : * : *
'!': no : * : *
'@': no : * : *
'?': no : * : *
==== Testing base-23 digits ====
'0': yes : 0 : '0'
'1': yes : 1 : '1'
'2': yes : 2 : '2'
'3': yes : 3 : '3'
'4': yes : 4 : '4'
'5': yes : 5 : '5'
'6': yes : 6 : '6'
'7': yes : 7 : '7'
'8': yes : 8 : '8'
'9': yes : 9 : '9'
'a': yes : 10 : 'A'
'b': yes : 11 : 'B'
'c': yes : 12 : 'C'
'd': yes : 13 : 'D'
'e': yes : 14 : 'E'
'f': yes : 15 : 'F'
'g': yes : 16 : 'G'
'h': yes : 17 : 'H'
'i': yes : 18 : 'I'
'j': yes : 19 : 'J'
'k': yes : 20 : 'K'
'l': yes : 21 : 'L'
'm': yes : 22 : 'M'
'n': no : * : *
'o': no : * : *
'p': no : * : *
'q': no : * : *
'r': no : * : *
's': no : * : *
't': no : * : *
'u': no : * : *
'v': no : * : *
'w': no : * : *
'x': no : * : *
'y': no : * : *
'z': no : * : *
'A': yes : 10 : 'A'
'B': yes : 11 : 'B'
'C': yes : 12 : 'C'
'D': yes : 13 : 'D'
'E': yes : 14 : 'E'
'F': yes : 15 : 'F'
'G': yes : 16 : 'G'
'H': yes : 17 : 'H'
'I': yes : 18 : 'I'
'J': yes : 19 : 'J'
'K': yes : 20 : 'K'
'L': yes : 21 : 'L'
'M': yes : 22 : 'M'
'N': no : * : *
'O': no : * : *
'P': no : * : *
'Q': no : * : *
'R': no : * : *
'S': no : * : *
'T': no : * : *
'U': no : * : *
'V': no : * : *
'W': no : * : *
'X': no : * : *
'Y': no : * : *
'Z': no : * : *
'!': no : * : *
'@': no : * : *
'?': no : * : *
==== Testing base-24 digits ====
'0': yes : 0 : '0'
'1': yes : 1 : '1'
'2': yes : 2 : '2'
'3': yes : 3 : '3'
'4': yes : 4 : '4'
'5': yes : 5 : '5'
'6': yes : 6 : '6'
'7': yes : 7 : '7'
'8': yes : 8 : '8'
'9': yes : 9 : '9'
'a': yes : 10 : 'A'
'b': yes : 11 : 'B'
'c': yes : 12 : 'C'
'd': yes : 13 : 'D'
'e': yes : 14 : 'E'
'f': yes : 15 : 'F'
'g': yes : 16 : 'G'
'h': yes : 17 : 'H'
'i': yes : 18 : 'I'
'j': yes : 19 : 'J'
'k': yes : 20 : 'K'
'l': yes : 21 : 'L'
'm': yes : 22 : 'M'
'n': yes : 23 : 'N'
'o': no : * : *
'p': no : * : *
'q': no : * : *
'r': no : * : *
's': no : * : *
't': no : * : *
'u': no : * : *
'v': no : * : *
'w': no : * : *
'x': no : * : *
'y': no : * : *
'z': no : * : *
'A': yes : 10 : 'A'
'B': yes : 11 : 'B'
'C': yes : 12 : 'C'
'D': yes : 13 : 'D'
'E': yes : 14 : 'E'
'F': yes : 15 : 'F'
'G': yes : 16 : 'G'
'H': yes : 17 : 'H'
'I': yes : 18 : 'I'
'J': yes : 19 : 'J'
'K': yes : 20 : 'K'
'L': yes : 21 : 'L'
'M': yes : 22 : 'M'
'N': yes : 23 : 'N'
'O': no : * : *
'P': no : * : *
'Q': no : * : *
'R': no : * : *
'S': no : * : *
'T': no : * : *
'U': no : * : *
'V': no : * : *
'W': no : * : *
'X': no : * : *
'Y': no : * : *
'Z': no : * : *
'!': no : * : *
'@': no : * : *
'?': no : * : *
==== Testing base-25 digits ====
'0': yes : 0 : '0'
'1': yes : 1 : '1'
'2': yes : 2 : '2'
'3': yes : 3 : '3'
'4': yes : 4 : '4'
'5': yes : 5 : '5'
'6': yes : 6 : '6'
'7': yes : 7 : '7'
'8': yes : 8 : '8'
'9': yes : 9 : '9'
'a': yes : 10 : 'A'
'b': yes : 11 : 'B'
'c': yes : 12 : 'C'
'd': yes : 13 : 'D'
'e': yes : 14 : 'E'
'f': yes : 15 : 'F'
'g': yes : 16 : 'G'
'h': yes : 17 : 'H'
'i': yes : 18 : 'I'
'j': yes : 19 : 'J'
'k': yes : 20 : 'K'
'l': yes : 21 : 'L'
'm': yes : 22 : 'M'
'n': yes : 23 : 'N'
'o': yes : 24 : 'O'
'p': no : * : *
'q': no : * : *
'r': no : * : *
's': no : * : *
't': no : * : *
'u': no : * : *
'v': no : * : *
'w': no : * : *
'x': no : * : *
'y': no : * : *
'z': no : * : *
'A': yes : 10 : 'A'
'B': yes : 11 : 'B'
'C': yes : 12 : 'C'
'D': yes : 13 : 'D'
'E': yes : 14 : 'E'
'F': yes : 15 : 'F'
'G': yes : 16 : 'G'
'H': yes : 17 : 'H'
'I': yes : 18 : 'I'
'J': yes : 19 : 'J'
'K': yes : 20 : 'K'
'L': yes : 21 : 'L'
'M': yes : 22 : 'M'
'N': yes : 23 : 'N'
'O': yes : 24 : 'O'
'P': no : * : *
'Q': no : * : *
'R': no : * : *
'S': no : * : *
'T': no : * : *
'U': no : * : *
'V': no : * : *
'W': no : * : *
'X': no : * : *
'Y': no : * : *
'Z': no : * : *
'!': no : * : *
'@': no : * : *
'?': no : * : *
==== Testing base-26 digits ====
'0': yes : 0 : '0'
'1': yes : 1 : '1'
'2': yes : 2 : '2'
'3': yes : 3 : '3'
'4': yes : 4 : '4'
'5': yes : 5 : '5'
'6': yes : 6 : '6'
'7': yes : 7 : '7'
'8': yes : 8 : '8'
'9': yes : 9 : '9'
'a': yes : 10 : 'A'
'b': yes : 11 : 'B'
'c': yes : 12 : 'C'
'd': yes : 13 : 'D'
'e': yes : 14 : 'E'
'f': yes : 15 : 'F'
'g': yes : 16 : 'G'
'h': yes : 17 : 'H'
'i': yes : 18 : 'I'
'j': yes : 19 : 'J'
'k': yes : 20 : 'K'
'l': yes : 21 : 'L'
'm': yes : 22 : 'M'
'n': yes : 23 : 'N'
'o': yes : 24 : 'O'
'p': yes : 25 : 'P'
'q': no : * : *
'r': no : * : *
's': no : * : *
't': no : * : *
'u': no : * : *
'v': no : * : *
'w': no : * : *
'x': no : * : *
'y': no : * : *
'z': no : * : *
'A': yes : 10 : 'A'
'B': yes : 11 : 'B'
'C': yes : 12 : 'C'
'D': yes : 13 : 'D'
'E': yes : 14 : 'E'
'F': yes : 15 : 'F'
'G': yes : 16 : 'G'
'H': yes : 17 : 'H'
'I': yes : 18 : 'I'
'J': yes : 19 : 'J'
'K': yes : 20 : 'K'
'L': yes : 21 : 'L'
'M': yes : 22 : 'M'
'N': yes : 23 : 'N'
'O': yes : 24 : 'O'
'P': yes : 25 : 'P'
'Q': no : * : *
'R': no : * : *
'S': no : * : *
'T': no : * : *
'U': no : * : *
'V': no : * : *
'W': no : * : *
'X': no : * : *
'Y': no : * : *
'Z': no : * : *
'!': no : * : *
'@': no : * : *
'?': no : * : *
==== Testing base-27 digits ====
'0': yes : 0 : '0'
'1': yes : 1 : '1'
'2': yes : 2 : '2'
'3': yes : 3 : '3'
'4': yes : 4 : '4'
'5': yes : 5 : '5'
'6': yes : 6 : '6'
'7': yes : 7 : '7'
'8': yes : 8 : '8'
'9': yes : 9 : '9'
'a': yes : 10 : 'A'
'b': yes : 11 : 'B'
'c': yes : 12 : 'C'
'd': yes : 13 : 'D'
'e': yes : 14 : 'E'
'f': yes : 15 : 'F'
'g': yes : 16 : 'G'
'h': yes : 17 : 'H'
'i': yes : 18 : 'I'
'j': yes : 19 : 'J'
'k': yes : 20 : 'K'
'l': yes : 21 : 'L'
'm': yes : 22 : 'M'
'n': yes : 23 : 'N'
'o': yes : 24 : 'O'
'p': yes : 25 : 'P'
'q': yes : 26 : 'Q'
'r': no : * : *
's': no : * : *
't': no : * : *
'u': no : * : *
'v': no : * : *
'w': no : * : *
'x': no : * : *
'y': no : * : *
'z': no : * : *
'A': yes : 10 : 'A'
'B': yes : 11 : 'B'
'C': yes : 12 : 'C'
'D': yes : 13 : 'D'
'E': yes : 14 : 'E'
'F': yes : 15 : 'F'
'G': yes : 16 : 'G'
'H': yes : 17 : 'H'
'I': yes : 18 : 'I'
'J': yes : 19 : 'J'
'K': yes : 20 : 'K'
'L': yes : 21 : 'L'
'M': yes : 22 : 'M'
'N': yes : 23 : 'N'
'O': yes : 24 : 'O'
'P': yes : 25 : 'P'
'Q': yes : 26 : 'Q'
'R': no : * : *
'S': no : * : *
'T': no : * : *
'U': no : * : *
'V': no : * : *
'W': no : * : *
'X': no : * : *
'Y': no : * : *
'Z': no : * : *
'!': no : * : *
'@': no : * : *
'?': no : * : *
==== Testing base-28 digits ====
'0': yes : 0 : '0'
'1': yes : 1 : '1'
'2': yes : 2 : '2'
'3': yes : 3 : '3'
'4': yes : 4 : '4'
'5': yes : 5 : '5'
'6': yes : 6 : '6'
'7': yes : 7 : '7'
'8': yes : 8 : '8'
'9': yes : 9 : '9'
'a': yes : 10 : 'A'
'b': yes : 11 : 'B'
'c': yes : 12 : 'C'
'd': yes : 13 : 'D'
'e': yes : 14 : 'E'
'f': yes : 15 : 'F'
'g': yes : 16 : 'G'
'h': yes : 17 : 'H'
'i': yes : 18 : 'I'
'j': yes : 19 : 'J'
'k': yes : 20 : 'K'
'l': yes : 21 : 'L'
'm': yes : 22 : 'M'
'n': yes : 23 : 'N'
'o': yes : 24 : 'O'
'p': yes : 25 : 'P'
'q': yes : 26 : 'Q'
'r': yes : 27 : 'R'
's': no : * : *
't': no : * : *
'u': no : * : *
'v': no : * : *
'w': no : * : *
'x': no : * : *
'y': no : * : *
'z': no : * : *
'A': yes : 10 : 'A'
'B': yes : 11 : 'B'
'C': yes : 12 : 'C'
'D': yes : 13 : 'D'
'E': yes : 14 : 'E'
'F': yes : 15 : 'F'
'G': yes : 16 : 'G'
'H': yes : 17 : 'H'
'I': yes : 18 : 'I'
'J': yes : 19 : 'J'
'K': yes : 20 : 'K'
'L': yes : 21 : 'L'
'M': yes : 22 : 'M'
'N': yes : 23 : 'N'
'O': yes : 24 : 'O'
'P': yes : 25 : 'P'
'Q': yes : 26 : 'Q'
'R': yes : 27 : 'R'
'S': no : * : *
'T': no : * : *
'U': no : * : *
'V': no : * : *
'W': no : * : *
'X': no : * : *
'Y': no : * : *
'Z': no : * : *
'!': no : * : *
'@': no : * : *
'?': no : * : *
==== Testing base-29 digits ====
'0': yes : 0 : '0'
'1': yes : 1 : '1'
'2': yes : 2 : '2'
'3': yes : 3 : '3'
'4': yes : 4 : '4'
'5': yes : 5 : '5'
'6': yes : 6 : '6'
'7': yes : 7 : '7'
'8': yes : 8 : '8'
'9': yes : 9 : '9'
'a': yes : 10 : 'A'
'b': yes : 11 : 'B'
'c': yes : 12 : 'C'
'd': yes : 13 : 'D'
'e': yes : 14 : 'E'
'f': yes : 15 : 'F'
'g': yes : 16 : 'G'
'h': yes : 17 : 'H'
'i': yes : 18 : 'I'
'j': yes : 19 : 'J'
'k': yes : 20 : 'K'
'l': yes : 21 : 'L'
'm': yes : 22 : 'M'
'n': yes : 23 : 'N'
'o': yes : 24 : 'O'
'p': yes : 25 : 'P'
'q': yes : 26 : 'Q'
'r': yes : 27 : 'R'
's': yes : 28 : 'S'
't': no : * : *
'u': no : * : *
'v': no : * : *
'w': no : * : *
'x': no : * : *
'y': no : * : *
'z': no : * : *
'A': yes : 10 : 'A'
'B': yes : 11 : 'B'
'C': yes : 12 : 'C'
'D': yes : 13 : 'D'
'E': yes : 14 : 'E'
'F': yes : 15 : 'F'
'G': yes : 16 : 'G'
'H': yes : 17 : 'H'
'I': yes : 18 : 'I'
'J': yes : 19 : 'J'
'K': yes : 20 : 'K'
'L': yes : 21 : 'L'
'M': yes : 22 : 'M'
'N': yes : 23 : 'N'
'O': yes : 24 : 'O'
'P': yes : 25 : 'P'
'Q': yes : 26 : 'Q'
'R': yes : 27 : 'R'
'S': yes : 28 : 'S'
'T': no : * : *
'U': no : * : *
'V': no : * : *
'W': no : * : *
'X': no : * : *
'Y': no : * : *
'Z': no : * : *
'!': no : * : *
'@': no : * : *
'?': no : * : *
==== Testing base-30 digits ====
'0': yes : 0 : '0'
'1': yes : 1 : '1'
'2': yes : 2 : '2'
'3': yes : 3 : '3'
'4': yes : 4 : '4'
'5': yes : 5 : '5'
'6': yes : 6 : '6'
'7': yes : 7 : '7'
'8': yes : 8 : '8'
'9': yes : 9 : '9'
'a': yes : 10 : 'A'
'b': yes : 11 : 'B'
'c': yes : 12 : 'C'
'd': yes : 13 : 'D'
'e': yes : 14 : 'E'
'f': yes : 15 : 'F'
'g': yes : 16 : 'G'
'h': yes : 17 : 'H'
'i': yes : 18 : 'I'
'j': yes : 19 : 'J'
'k': yes : 20 : 'K'
'l': yes : 21 : 'L'
'm': yes : 22 : 'M'
'n': yes : 23 : 'N'
'o': yes : 24 : 'O'
'p': yes : 25 : 'P'
'q': yes : 26 : 'Q'
'r': yes : 27 : 'R'
's': yes : 28 : 'S'
't': yes : 29 : 'T'
'u': no : * : *
'v': no : * : *
'w': no : * : *
'x': no : * : *
'y': no : * : *
'z': no : * : *
'A': yes : 10 : 'A'
'B': yes : 11 : 'B'
'C': yes : 12 : 'C'
'D': yes : 13 : 'D'
'E': yes : 14 : 'E'
'F': yes : 15 : 'F'
'G': yes : 16 : 'G'
'H': yes : 17 : 'H'
'I': yes : 18 : 'I'
'J': yes : 19 : 'J'
'K': yes : 20 : 'K'
'L': yes : 21 : 'L'
'M': yes : 22 : 'M'
'N': yes : 23 : 'N'
'O': yes : 24 : 'O'
'P': yes : 25 : 'P'
'Q': yes : 26 : 'Q'
'R': yes : 27 : 'R'
'S': yes : 28 : 'S'
'T': yes : 29 : 'T'
'U': no : * : *
'V': no : * : *
'W': no : * : *
'X': no : * : *
'Y': no : * : *
'Z': no : * : *
'!': no : * : *
'@': no : * : *
'?': no : * : *
==== Testing base-31 digits ====
'0': yes : 0 : '0'
'1': yes : 1 : '1'
'2': yes : 2 : '2'
'3': yes : 3 : '3'
'4': yes : 4 : '4'
'5': yes : 5 : '5'
'6': yes : 6 : '6'
'7': yes : 7 : '7'
'8': yes : 8 : '8'
'9': yes : 9 : '9'
'a': yes : 10 : 'A'
'b': yes : 11 : 'B'
'c': yes : 12 : 'C'
'd': yes : 13 : 'D'
'e': yes : 14 : 'E'
'f': yes : 15 : 'F'
'g': yes : 16 : 'G'
'h': yes : 17 : 'H'
'i': yes : 18 : 'I'
'j': yes : 19 : 'J'
'k': yes : 20 : 'K'
'l': yes : 21 : 'L'
'm': yes : 22 : 'M'
'n': yes : 23 : 'N'
'o': yes : 24 : 'O'
'p': yes : 25 : 'P'
'q': yes : 26 : 'Q'
'r': yes : 27 : 'R'
's': yes : 28 : 'S'
't': yes : 29 : 'T'
'u': yes : 30 : 'U'
'v': no : * : *
'w': no : * : *
'x': no : * : *
'y': no : * : *
'z': no : * : *
'A': yes : 10 : 'A'
'B': yes : 11 : 'B'
'C': yes : 12 : 'C'
'D': yes : 13 : 'D'
'E': yes : 14 : 'E'
'F': yes : 15 : 'F'
'G': yes : 16 : 'G'
'H': yes : 17 : 'H'
'I': yes : 18 : 'I'
'J': yes : 19 : 'J'
'K': yes : 20 : 'K'
'L': yes : 21 : 'L'
'M': yes : 22 : 'M'
'N': yes : 23 : 'N'
'O': yes : 24 : 'O'
'P': yes : 25 : 'P'
'Q': yes : 26 : 'Q'
'R': yes : 27 : 'R'
'S': yes : 28 : 'S'
'T': yes : 29 : 'T'
'U': yes : 30 : 'U'
'V': no : * : *
'W': no : * : *
'X': no : * : *
'Y': no : * : *
'Z': no : * : *
'!': no : * : *
'@': no : * : *
'?': no : * : *
==== Testing base-32 digits ====
'0': yes : 0 : '0'
'1': yes : 1 : '1'
'2': yes : 2 : '2'
'3': yes : 3 : '3'
'4': yes : 4 : '4'
'5': yes : 5 : '5'
'6': yes : 6 : '6'
'7': yes : 7 : '7'
'8': yes : 8 : '8'
'9': yes : 9 : '9'
'a': yes : 10 : 'A'
'b': yes : 11 : 'B'
'c': yes : 12 : 'C'
'd': yes : 13 : 'D'
'e': yes : 14 : 'E'
'f': yes : 15 : 'F'
'g': yes : 16 : 'G'
'h': yes : 17 : 'H'
'i': yes : 18 : 'I'
'j': yes : 19 : 'J'
'k': yes : 20 : 'K'
'l': yes : 21 : 'L'
'm': yes : 22 : 'M'
'n': yes : 23 : 'N'
'o': yes : 24 : 'O'
'p': yes : 25 : 'P'
'q': yes : 26 : 'Q'
'r': yes : 27 : 'R'
's': yes : 28 : 'S'
't': yes : 29 : 'T'
'u': yes : 30 : 'U'
'v': yes : 31 : 'V'
'w': no : * : *
'x': no : * : *
'y': no : * : *
'z': no : * : *
'A': yes : 10 : 'A'
'B': yes : 11 : 'B'
'C': yes : 12 : 'C'
'D': yes : 13 : 'D'
'E': yes : 14 : 'E'
'F': yes : 15 : 'F'
'G': yes : 16 : 'G'
'H': yes : 17 : 'H'
'I': yes : 18 : 'I'
'J': yes : 19 : 'J'
'K': yes : 20 : 'K'
'L': yes : 21 : 'L'
'M': yes : 22 : 'M'
'N': yes : 23 : 'N'
'O': yes : 24 : 'O'
'P': yes : 25 : 'P'
'Q': yes : 26 : 'Q'
'R': yes : 27 : 'R'
'S': yes : 28 : 'S'
'T': yes : 29 : 'T'
'U': yes : 30 : 'U'
'V': yes : 31 : 'V'
'W': no : * : *
'X': no : * : *
'Y': no : * : *
'Z': no : * : *
'!': no : * : *
'@': no : * : *
'?': no : * : *
==== Testing base-33 digits ====
'0': yes : 0 : '0'
'1': yes : 1 : '1'
'2': yes : 2 : '2'
'3': yes : 3 : '3'
'4': yes : 4 : '4'
'5': yes : 5 : '5'
'6': yes : 6 : '6'
'7': yes : 7 : '7'
'8': yes : 8 : '8'
'9': yes : 9 : '9'
'a': yes : 10 : 'A'
'b': yes : 11 : 'B'
'c': yes : 12 : 'C'
'd': yes : 13 : 'D'
'e': yes : 14 : 'E'
'f': yes : 15 : 'F'
'g': yes : 16 : 'G'
'h': yes : 17 : 'H'
'i': yes : 18 : 'I'
'j': yes : 19 : 'J'
'k': yes : 20 : 'K'
'l': yes : 21 : 'L'
'm': yes : 22 : 'M'
'n': yes : 23 : 'N'
'o': yes : 24 : 'O'
'p': yes : 25 : 'P'
'q': yes : 26 : 'Q'
'r': yes : 27 : 'R'
's': yes : 28 : 'S'
't': yes : 29 : 'T'
'u': yes : 30 : 'U'
'v': yes : 31 : 'V'
'w': yes : 32 : 'W'
'x': no : * : *
'y': no : * : *
'z': no : * : *
'A': yes : 10 : 'A'
'B': yes : 11 : 'B'
'C': yes : 12 : 'C'
'D': yes : 13 : 'D'
'E': yes : 14 : 'E'
'F': yes : 15 : 'F'
'G': yes : 16 : 'G'
'H': yes : 17 : 'H'
'I': yes : 18 : 'I'
'J': yes : 19 : 'J'
'K': yes : 20 : 'K'
'L': yes : 21 : 'L'
'M': yes : 22 : 'M'
'N': yes : 23 : 'N'
'O': yes : 24 : 'O'
'P': yes : 25 : 'P'
'Q': yes : 26 : 'Q'
'R': yes : 27 : 'R'
'S': yes : 28 : 'S'
'T': yes : 29 : 'T'
'U': yes : 30 : 'U'
'V': yes : 31 : 'V'
'W': yes : 32 : 'W'
'X': no : * : *
'Y': no : * : *
'Z': no : * : *
'!': no : * : *
'@': no : * : *
'?': no : * : *
==== Testing base-34 digits ====
'0': yes : 0 : '0'
'1': yes : 1 : '1'
'2': yes : 2 : '2'
'3': yes : 3 : '3'
'4': yes : 4 : '4'
'5': yes : 5 : '5'
'6': yes : 6 : '6'
'7': yes : 7 : '7'
'8': yes : 8 : '8'
'9': yes : 9 : '9'
'a': yes : 10 : 'A'
'b': yes : 11 : 'B'
'c': yes : 12 : 'C'
'd': yes : 13 : 'D'
'e': yes : 14 : 'E'
'f': yes : 15 : 'F'
'g': yes : 16 : 'G'
'h': yes : 17 : 'H'
'i': yes : 18 : 'I'
'j': yes : 19 : 'J'
'k': yes : 20 : 'K'
'l': yes : 21 : 'L'
'm': yes : 22 : 'M'
'n': yes : 23 : 'N'
'o': yes : 24 : 'O'
'p': yes : 25 : 'P'
'q': yes : 26 : 'Q'
'r': yes : 27 : 'R'
's': yes : 28 : 'S'
't': yes : 29 : 'T'
'u': yes : 30 : 'U'
'v': yes : 31 : 'V'
'w': yes : 32 : 'W'
'x': yes : 33 : 'X'
'y': no : * : *
'z': no : * : *
'A': yes : 10 : 'A'
'B': yes : 11 : 'B'
'C': yes : 12 : 'C'
'D': yes : 13 : 'D'
'E': yes : 14 : 'E'
'F': yes : 15 : 'F'
'G': yes : 16 : 'G'
'H': yes : 17 : 'H'
'I': yes : 18 : 'I'
'J': yes : 19 : 'J'
'K': yes : 20 : 'K'
'L': yes : 21 : 'L'
'M': yes : 22 : 'M'
'N': yes : 23 : 'N'
'O': yes : 24 : 'O'
'P': yes : 25 : 'P'
'Q': yes : 26 : 'Q'
'R': yes : 27 : 'R'
'S': yes : 28 : 'S'
'T': yes : 29 : 'T'
'U': yes : 30 : 'U'
'V': yes : 31 : 'V'
'W': yes : 32 : 'W'
'X': yes : 33 : 'X'
'Y': no : * : *
'Z': no : * : *
'!': no : * : *
'@': no : * : *
'?': no : * : *
==== Testing base-35 digits ====
'0': yes : 0 : '0'
'1': yes : 1 : '1'
'2': yes : 2 : '2'
'3': yes : 3 : '3'
'4': yes : 4 : '4'
'5': yes : 5 : '5'
'6': yes : 6 : '6'
'7': yes : 7 : '7'
'8': yes : 8 : '8'
'9': yes : 9 : '9'
'a': yes : 10 : 'A'
'b': yes : 11 : 'B'
'c': yes : 12 : 'C'
'd': yes : 13 : 'D'
'e': yes : 14 : 'E'
'f': yes : 15 : 'F'
'g': yes : 16 : 'G'
'h': yes : 17 : 'H'
'i': yes : 18 : 'I'
'j': yes : 19 : 'J'
'k': yes : 20 : 'K'
'l': yes : 21 : 'L'
'm': yes : 22 : 'M'
'n': yes : 23 : 'N'
'o': yes : 24 : 'O'
'p': yes : 25 : 'P'
'q': yes : 26 : 'Q'
'r': yes : 27 : 'R'
's': yes : 28 : 'S'
't': yes : 29 : 'T'
'u': yes : 30 : 'U'
'v': yes : 31 : 'V'
'w': yes : 32 : 'W'
'x': yes : 33 : 'X'
'y': yes : 34 : 'Y'
'z': no : * : *
'A': yes : 10 : 'A'
'B': yes : 11 : 'B'
'C': yes : 12 : 'C'
'D': yes : 13 : 'D'
'E': yes : 14 : 'E'
'F': yes : 15 : 'F'
'G': yes : 16 : 'G'
'H': yes : 17 : 'H'
'I': yes : 18 : 'I'
'J': yes : 19 : 'J'
'K': yes : 20 : 'K'
'L': yes : 21 : 'L'
'M': yes : 22 : 'M'
'N': yes : 23 : 'N'
'O': yes : 24 : 'O'
'P': yes : 25 : 'P'
'Q': yes : 26 : 'Q'
'R': yes : 27 : 'R'
'S': yes : 28 : 'S'
'T': yes : 29 : 'T'
'U': yes : 30 : 'U'
'V': yes : 31 : 'V'
'W': yes : 32 : 'W'
'X': yes : 33 : 'X'
'Y': yes : 34 : 'Y'
'Z': no : * : *
'!': no : * : *
'@': no : * : *
'?': no : * : *
==== Testing base-36 digits ====
'0': yes : 0 : '0'
'1': yes : 1 : '1'
'2': yes : 2 : '2'
'3': yes : 3 : '3'
'4': yes : 4 : '4'
'5': yes : 5 : '5'
'6': yes : 6 : '6'
'7': yes : 7 : '7'
'8': yes : 8 : '8'
'9': yes : 9 : '9'
'a': yes : 10 : 'A'
'b': yes : 11 : 'B'
'c': yes : 12 : 'C'
'd': yes : 13 : 'D'
'e': yes : 14 : 'E'
'f': yes : 15 : 'F'
'g': yes : 16 : 'G'
'h': yes : 17 : 'H'
'i': yes : 18 : 'I'
'j': yes : 19 : 'J'
'k': yes : 20 : 'K'
'l': yes : 21 : 'L'
'm': yes : 22 : 'M'
'n': yes : 23 : 'N'
'o': yes : 24 : 'O'
'p': yes : 25 : 'P'
'q': yes : 26 : 'Q'
'r': yes : 27 : 'R'
's': yes : 28 : 'S'
't': yes : 29 : 'T'
'u': yes : 30 : 'U'
'v': yes : 31 : 'V'
'w': yes : 32 : 'W'
'x': yes : 33 : 'X'
'y': yes : 34 : 'Y'
'z': yes : 35 : 'Z'
'A': yes : 10 : 'A'
'B': yes : 11 : 'B'
'C': yes : 12 : 'C'
'D': yes : 13 : 'D'
'E': yes : 14 : 'E'
'F': yes : 15 : 'F'
'G': yes : 16 : 'G'
'H': yes : 17 : 'H'
'I': yes : 18 : 'I'
'J': yes : 19 : 'J'
'K': yes : 20 : 'K'
'L': yes : 21 : 'L'
'M': yes : 22 : 'M'
'N': yes : 23 : 'N'
'O': yes : 24 : 'O'
'P': yes : 25 : 'P'
'Q': yes : 26 : 'Q'
'R': yes : 27 : 'R'
'S': yes : 28 : 'S'
'T': yes : 29 : 'T'
'U': yes : 30 : 'U'
'V': yes : 31 : 'V'
'W': yes : 32 : 'W'
'X': yes : 33 : 'X'
'Y': yes : 34 : 'Y'
'Z': yes : 35 : 'Z'
'!': no : * : *
'@': no : * : *
'?': no : * : *