def find_all_indexes(text=str, pattern=str) -> list:
    """Return a list of starting indexes of all occurrences of pattern in text,
    or an empty list if not found.
    - Best case: O(1) If there is no pattern and one char in the text
    - Worse Case: O(n) if we have to loop to the end
    - If there is a pattern:
        - O(n*j) - n being the outer loop and j being the inner loop"""
    assert isinstance(text, str), 'text is not a string: {}'.format(text)
    assert isinstance(pattern, str), 'pattern is not a string: {}'.format(text)

    if not pattern:
        return [i for i in range(len(text))]

    # * \\ Does not utilize string slicing (FASTER IN THE LONG RUN) // *
    index_pos = []
    for i in range(len(text) - len(pattern) + 1):
        for j in range(len(pattern)):
            if text[i+j] != pattern[j]:
                break
        else:
            index_pos.append(i)
    return index_pos

    # * \\ Utilizes string slicing (SLOWER because it has to slice)// *
    # for i in range(len(text) - len(pattern) + 1):
    #     if text[i:(i + len(pattern))] == pattern:
    #         index_pos.append(i)
    #         continue
    # return index_pos