import pytest
from Q3 import find_longest_sublist

def test_empty_list():
    assert find_longest_sublist([]) == 0

def test_single_element_list():
    assert find_longest_sublist([1]) == 1
    assert find_longest_sublist([0]) == 1
    assert find_longest_sublist([-1]) == 1

def test_unique_elements():
    assert find_longest_sublist([1, 2, 3, 4, 5]) == 5
    assert find_longest_sublist([5, 4, 3, 2, 1]) == 5

def test_duplicate_elements_at_start():
    assert find_longest_sublist([1, 1, 2, 3, 4]) == 4

def test_duplicate_elements_at_end():
    assert find_longest_sublist([1, 2, 3, 4, 4]) == 4

def test_duplicate_elements_in_middle():
    assert find_longest_sublist([1, 2, 3, 2, 4]) == 3

def test_long_list():
    assert find_longest_sublist(list(range(1000))) == 1000

def test_longest_sublist_at_end():
    assert find_longest_sublist([1, 2, 3, 4, 5, 1, 2, 3]) == 5

def test_longest_sublist_in_middle():
    assert find_longest_sublist([1, 2, 3, 1, 2, 3, 4, 5]) == 5

def test_negative_numbers():
    assert find_longest_sublist([-1, -2, -3, -4, -5]) == 5
    assert find_longest_sublist([-5, -4, -3, -2, -1]) == 5

def test_mixed_positive_and_negative_numbers():
    assert find_longest_sublist([-1, 2, -3, 4, -5]) == 5
    assert find_longest_sublist([-1, 2, -3, 4, -5, 6, -7, 8]) == 8
