#cython: c_string_type = str
#cython: c_string_encoding = ascii

from libc.string cimport strcmp

def as_objects(char* ascii_data):
    """
    >>> as_objects('abc')
    'abc'
    """
    assert isinstance(<object>ascii_data, str)
    assert isinstance(<bytes>ascii_data, bytes)
    assert isinstance(<str>ascii_data, str)
    assert isinstance(<unicode>ascii_data, unicode)
    return ascii_data

def from_object():
    """
    >>> from_object()
    """
    cdef bytes b = b"abc"
    cdef str s = "abc"
    cdef unicode u = u"abc"
    assert strcmp(<char*>b, "abc") == 0
    assert strcmp(<char*>s, "abc") == 0
    assert strcmp(<char*>u, "abc") == 0

def slice_as_objects(char* ascii_data, int start, int end):
    """
    >>> slice_as_objects('grok', 1, 3)
    'ro'
    """
    assert isinstance(<object>ascii_data[start:end], str)
    assert isinstance(<bytes>ascii_data[start:end], bytes)
    assert isinstance(<str>ascii_data[start:end], str)
    assert isinstance(<unicode>ascii_data[start:end], unicode)
    
    assert isinstance(<object>ascii_data[start:], str)
    assert isinstance(<bytes>ascii_data[start:], bytes)
    assert isinstance(<str>ascii_data[start:], str)
    assert isinstance(<unicode>ascii_data[start:], unicode)
    
    return ascii_data[start:end]