from sound_functions import *

def generate_test_output(observed, expected):
    observed_list = [s.get_value() for s in get_samples(observed)]
    result = ['FAILED','PASSED']
    return (result[observed_list == expected], expected, observed_list)
    
def test_reverse(testsound):
    observed = reverse(testsound)
    expected = [3,2,1,0]
    return generate_test_output(observed, expected)

def test_mix(test1, test2):
    observed = mix([test1,test2])
    expected = [-2,0,2,4,2,3]
    return generate_test_output(observed, expected)
    
def test_mix_three(test1, test2):
    observed = mix([test1,test2,reverse(test1)])
    expected = [1, 2, 3, 4, 2, 3]
    return generate_test_output(observed, expected)
    
def test_triple_volume(testsound):
    observed = change_volume(testsound,3)
    expected = [0,3,6,9]
    return generate_test_output(observed, expected)
    

def test_half_volume(testsound):
    observed = change_volume(testsound,0.5)
    expected = [0,0,1,1]
    return generate_test_output(observed, expected)

def test_echo(testsound):
    observed = echo(testsound,1)
    expected = [0, 80, 180, 280, 380, 480, 100]
    return generate_test_output(observed, expected)
    
if __name__ == "__main__":
    ts1 = create_sound(4)
    ts2 = create_sound(6)
    ts3 = create_sound(6)
    for i in range(4):
        set_value(get_sample(ts1, i),i)
    for i in range(6):
        set_value(get_sample(ts2, i),i-2)
    for i in range(6):
        set_value(get_sample(ts3, i),i*80)

    
    print "test_reverse: %s\n Observed: %s\n Expected: %s" % test_reverse(ts1)
    print "test_mix %s\n Observed: %s\n Expected: %s" % test_mix(ts1,ts2)
    print "test_mix_three %s\n Observed: %s\n Expected: %s" % test_mix_three(ts1,ts2)
    print "test_triple_volume %s\n Observed: %s\n Expected: %s" % test_triple_volume(ts1)
    print "test_half_volume %s\n Observed: %s\n Expected: %s" % test_half_volume(ts1)
    print "test_echo %s\n Observed: %s\n Expected: %s" % test_echo(ts3)
