from datastruct import ConsList

list1 = ConsList.EMPTY.with_hd(1)
list2 = list1.with_hd(2)
list3 = list2.with_hd(3)

def test_list_basic():
    assert ConsList.EMPTY.as_list() == []
    assert list1.as_list() == [1]
    assert list2.as_list() == [2, 1]
    assert list3.as_list() == [3, 2, 1]

def test_list_with_tl():
    assert (ConsList.EMPTY + list1) is list1
    assert (list1 + list1).as_list() == [1, 1]
    assert (list2 + list1).as_list() == [2, 1, 1]
    assert (list3 + list2).as_list() == [3, 2, 1, 2, 1]

def test_list_cmp():
    assert (ConsList.EMPTY + list1) is list1
    for l1 in (list1, list2, list3):
        for l2 in (list1, list2, list3):
            ec = cmp(l1.as_list(), l2.as_list())
            assert ec == cmp(l1, l2)
            assert ec == cmp(l1, l2.as_list())

def test_list_eq():
    assert (ConsList.EMPTY + list1) is list1
    assert list1 == [1]
    assert list1 == ConsList.EMPTY.with_hd(1.0)
    assert list2 != list1
    assert list3 == [3.0, 2.0, 1.0]
