# SPDX-License-Identifier: MIT
for value in (0, 1, 65, 127, 128, 233, 955, 2047, 2048, 8364, 55295, 57344, 65535, 65536, 127757, 1114111):
    text = chr(value)
    print(value, ascii(text), text.encode(), ord(text))
print(ascii(chr(False)), ascii(chr(True)), isinstance(chr(65), str))

events = []
def point():
    events.append('point')
    return 955
print(chr(point()), events)
events.clear()
def failed():
    events.append('failed')
    raise ValueError('source failed')
try:
    chr(failed())
except ValueError as error:
    print(type(error).__name__, str(error), events)

convert = chr
print(convert(233), convert(*(127757,)))
def factory(call):
    def apply(value):
        return call(value)
    return apply
captured = factory(convert)
print(captured(8364), ascii(captured(False)))

for value in (-2147483649, -2147483648, -1, 1114112, 2147483647, 2147483648, -100000000000000000000000000000000000000, 100000000000000000000000000000000000000):
    try:
        print(chr(value))
    except (ValueError, OverflowError) as error:
        print(type(error).__name__, str(error))

def wrong():
    events.append('wrong')
    return '65'
events.clear()
try:
    chr(wrong())
except TypeError as error:
    print(type(error).__name__, str(error), events)

class Point:
    def __str__(self):
        events.append('str')
        return '65'
events.clear()
try:
    chr(Point())
except TypeError as error:
    print(type(error).__name__, str(error), events)
