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

import math

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

'''
#1 - sumAnglesAsDegrees(angles)
Parameters: list of floats
Returns: int
'''

def sumAnglesAsDegrees(angles):
    return


'''
#2 - Mutating and Non-Mutating Functions
'''

'''
findMultiples(lst, num)
Parameters: list of ints, int
Returns: list of ints
'''

def findMultiples(lst, num):
    return

'''
removeNonMultiples(lst, num)
Parameters: list of ints, int
Returns: None
'''

def removeNonMultiples(lst, num):
    return


'''
#3 - recursiveStringToList(s)
Parameters: str
Returns: list of strings
'''

def recursiveStringToList(s):
    return


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

def testSumAnglesAsDegrees():
    print("Testing sumAnglesAsDegrees()...", end="")
    assert(sumAnglesAsDegrees([math.pi/6, math.pi/4, math.pi]) == 255)
    assert(sumAnglesAsDegrees([math.pi/4, math.pi/4, math.pi/4, math.pi/4]) == 180)
    assert(sumAnglesAsDegrees([math.pi/6, math.pi/6]) == 60)
    assert(sumAnglesAsDegrees([math.pi/2]) == 90)
    assert(sumAnglesAsDegrees([math.pi/6, math.pi/3, math.pi/3, math.pi, math.pi/6]) == 360)
    print("... done!")

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

    assert(findMultiples([4, 1, 70, 35, -94], 2) == [4, 70, -94])
    assert(findMultiples([4, 3, 5], 5) == [5])
    assert(findMultiples([7, 14, 21, 28, 35, 42, 49, 56, 63], 7) == [7, 14, 21, 28, 35, 42, 49, 56, 63])
    assert(findMultiples([2, 4, 6, 12, 92, 104], 11) == [ ])
    assert(findMultiples([2, 4, 6, 12, 92, 104], 1) == [2, 4, 6, 12, 92, 104])
    print("... done!")

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

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

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

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

    lst5 = [2, 4, 6, 12, 92, 104]
    assert(removeNonMultiples(lst5, 1) == None)
    assert(lst5 == [2, 4, 6, 12, 92, 104])

    lst6 = [1, 2, 3, 4, 8, 7, 6, 5, 9, 11, 10, 12]
    assert(removeNonMultiples(lst6, 2) == None)
    assert(lst6 == [2, 4, 8, 6, 10, 12])
    print("... done!")

def testRecursiveStringToList():
    print("Testing recursiveStringToList()...", end="")
    assert(recursiveStringToList("hello") == [ "h", "e", "l", "l", "o"])
    assert(recursiveStringToList("How are you?") == [ "H", "o", "w", " ", "a", "r", "e", " ", "y", "o", "u", "?" ])
    assert(recursiveStringToList("abcdefghijklmnopqrstuvwxyz") == [ "a", "b", "c", "d", "e", "f", "g",
                                                                    "h", "i", "j", "k", "l", "m", "n",
                                                                    "o", "p", "q", "r", "s", "t", "u",
                                                                    "v", "w", "x", "y", "z" ])
    assert(recursiveStringToList("!") == [ "!" ])
    assert(recursiveStringToList("") == [])
    print("... done!")


def testAll():
    testSumAnglesAsDegrees()
    testFindMultiples()
    testRemoveNonMultiples()
    testRecursiveStringToList()

testAll()
