def test_long_strings_should_return_negative_1():
    haystack = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
    needle = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaX"

    assert str_str(haystack, needle) == -1
def test_multiple_needles_in_haystack():
    haystack = "mississippi"
    needle = "issi"

    assert str_str(haystack, needle) == 1
def test_should_return_2():
    haystack = "hello"
    needle = "ll"

    assert str_str(haystack, needle) == 2
def test_empty_needle_empty_haystack_should_return_0():
    assert str_str("", "") == 0
def test_needle_greater_than_haystack_should_return_negative_1():
    assert str_str("dfddf", "fdsafadsfasdfadsfadsf") == -1
def test_empty_haystack_should_return_negative_1():
    assert str_str("", "fdafdsfasdf") == -1
def test_empty_needle_should_return_0():
    assert str_str("fghgffdsgfsdgdf", "") == 0
def test_needle_at_end_of_haystack_return_4():
    haystack = "hello"
    needle = "o"

    assert str_str(haystack, needle) == 4
def test_matching_string_at_end_should_return_3():
    haystack = "helllo"
    needle = "llo"

    assert str_str(haystack, needle) == 3
def test_should_return_negative_1():
    haystack = "aaaaaaaaaaaaaa"
    needle = "bba"

    assert str_str(haystack, needle) == -1