'''
15-110 Check 3
Name:
Andrew ID:
'''

################################################################################

'''
#1 - onlyOdds(lst)
Parameters: list of ints
Returns: list of ints
'''

def onlyOdds(lst):
    return


'''
#2 - removeEvens(lst)
Parameters: list of ints
Returns: None
'''

def removeEvens(lst):
    return


'''
#3 - recursiveReverse(lst)
Parameters: list of values
Returns: list of values
'''

def recursiveReverse(lst):
    return


'''
#4 - recursiveCount(lst, item)
Parameters: list of values, value
Returns: int
'''

def recursiveCount(lst, item):
    return


################################################################################
''' Test Functions '''

def testOnlyOdds():
    print("Testing onlyOdds()...", end="")
    lst = [1, 2, 3, 4, 5, 6]
    lstCopy = lst + [ ]
    assert(onlyOdds(lst) == [1, 3, 5])
    assert(lst == lstCopy) # onlyOdds is non-destructive- don't change the parameter!

    assert(onlyOdds([4, 1, 70, 35, -9]) == [1, 35, -9])
    assert(onlyOdds([4, 3, 5]) == [3, 5])
    assert(onlyOdds([1,5,3,7,9,23,45,67]) == [1, 5, 3, 7, 9, 23, 45, 67])
    assert(onlyOdds([2, 4, 6, 12, 92, 104]) == [ ])
    print("... done!")

def testRemoveEvens():
    print("Testing removeEvens()...", end="")
    lst1 = [1,2,3,4,5,6]
    assert(removeEvens(lst1) == None) # removeEvens is destructive- change the parameter instead of returning!
    assert(lst1 == [1, 3, 5])

    lst2 = [4, 1, 70, 35, -9]
    assert(removeEvens(lst2) == None)
    assert(lst2 == [1, 35, -9])

    lst3 = [4, 3, 5]
    assert(removeEvens(lst3) == None)
    assert(lst3 == [3, 5])

    lst4 = [1,5,3,7,9,23,45,67]
    assert(removeEvens(lst4) == None)
    assert(lst4 == [1, 5, 3, 7, 9, 23, 45, 67])

    lst5 = [2, 4, 6, 12, 92, 104]
    assert(removeEvens(lst5) == None)
    assert(lst5 == [ ])
    print("... done!")

def testRecursiveReverse():
    print("Testing recursiveReverse()...", end="")
    assert(recursiveReverse([1, 2, 3]) == [3,2,1])
    assert(recursiveReverse([3, 4, 5]) == [5,4,3])
    assert(recursiveReverse([4, 3, 5]) == [5,3,4])
    assert(recursiveReverse([1,2,3,4,5,6]) == [6,5,4,3,2,1])
    assert(recursiveReverse([1,5,3,7,9,23,45,67]) == [67,45,23,9,7,3,5,1])
    assert(recursiveReverse(["dog","cat","bird","bear"]) == ["bear","bird","cat","dog"])
    assert(recursiveReverse(["dog","bird","bird","bear"]) == ["bear","bird","bird","dog"])
    assert(recursiveReverse(["mouse","cat","dog","fox"]) == ["fox","dog","cat","mouse"])
    assert(recursiveReverse([]) == [])
    print("... done!")

def testRecursiveCount():
    print("Testing recursiveCount()...", end="")
    assert(recursiveCount([2, 4, 6, 8, 10], 6) == 1)
    assert(recursiveCount([4, 4, 8, 4], 4) == 3)
    assert(recursiveCount([1, 2, 3, 4], 5) == 0)
    assert(recursiveCount([9, 9, 9], 9) == 3)
    assert(recursiveCount([5, 1, 3, 7, 6, 2, 9, 8, 10], 10) == 1)
    assert(recursiveCount([5, 1, 3, 7, 6, 2, 9, 8, 10], 5) == 1)
    assert(recursiveCount([], 4) == 0)
    print("... done!")

def testAll():
    testOnlyOdds()
    testRemoveEvens()
    testRecursiveReverse()
    testRecursiveCount()

testAll()