import time

# A bunch of nonsense functions whose run-times we can compare.

def one_loop(L):
    for i in range(len(L)):
        L[i] = L[i] +1     
        
def two_loops(L):
    for i in range(len(L)):
        L[i] = L[i] + 1
    for j in range(len(L)):
        L[j] = L[j] + 1
    L[0] = L[0] + 1
    
def nested_loop(L):
    for i in range(len(L)):
        for j in range(len(L)):
            L[i] = L[j] + 1

def big_loop(L):
    sum = 0
    for i in range(100000):
        sum += L[0]
    return sum
            

    
def time_something(f):
    '''f is a function that takes a list as its only parameter.
    Call f on a series of progressively bigger lists and print how long
    it takes to run on each of them.'''
    
    num_sizes = 10
    increment = 1000
    for size in range(increment, (num_sizes + 1) * increment, increment):
        long_list = range(size)
        t1 = time.time()
        f(long_list)
        t2 = time.time()
        print "Size = %d and elapsed time = %.6f" % (size, t2 - t1)      
        
if __name__ == "__main__":
    
    #time_something(one_loop)
    #time_something(two_loops)
    time_something(big_loop)