import a1
import sound
import unittest

#For each of these examples, element 0 is the list used to generate the
#input sample and element 1 is the list used to generate the expected output

fade1end = [
[[-999, -999]] * 5 + [[20,40], [40,0], [-20,-40],[-40,0], [-40, 20]],
[[-999, -999]] * 5 + [[16, 32],[24, 0], [-8, -16], [-8, 0], [0, 0]]]

fade2end = [
[[20,40], [40,0], [-20,-40],[-40,0], [-40, 20]],
[[16, 32], [24, 0], [-8, -16], [-8, 0], [0, 0]]]

fade3end = [
[[20,40], [40,0], [-20,-40],[-40,100]],
[[15, 30], [20, 0], [-5, -10], [0, 0]]]


fade4end = [
[[-999, -999]] * 5 + [[20,0], [40,0], [-20,0],[-40,0], [30, 0]],
[[-999, -999]] * 5 + [[16, 0],[24, 0], [-8, 0], [-8, 0], [0, 0]]]


fade5end = [
[[-999, -999]] * 5 + [[0,20], [0,40], [0, -20],[0, -40], [0, 30]],
[[-999, -999]] * 5 + [[0, 16],[0, 24], [0, -8], [0, -8], [0, 0]]]

def make_sound (lst):
  '''Return a sound object from List lst of sample values. Each element of
  lst is a 2-element list where the first is the left channel value and 
  the second is the right channel value. '''

  snd = sound.create_sound (len(lst))
  for i in range(len(lst)):
    samp = sound.get_sample (snd, i)
    sound.set_left (samp, lst[i][0])
    sound.set_right (samp, lst[i][1])
  return snd
  


class TestCases(unittest.TestCase):

  def setUp(self):
    pass
  
  def test_fade_out_basic(self):
    '''Test fading out over 5 of 10 samples.'''

    snd = make_sound (fade1end[0])
    sol = make_sound (fade1end[1])
    student = a1.fade_out(snd, 5)
    self.assertEqual (student, sol)


  def test_fade_out_full_len(self):
    '''Test fading out over 5 of 5 samples.'''

    snd = make_sound (fade2end[0])
    sol = make_sound (fade2end[1])
    student = a1.fade_out(snd, 5)
    self.assertEqual (student, sol)


  def test_fade_out_full_len2(self):
    '''Test fading out over 4 of 4 samples.'''

    snd = make_sound (fade3end[0])
    sol = make_sound (fade3end[1])
    student = a1.fade_out(snd, 4)
    self.assertEqual (student, sol)


  def test_fade_out_left_only(self):
    '''Test fading out on left channel over 5 of 10 samples.'''

    snd = make_sound (fade4end[0])
    sol = make_sound (fade4end[1])
    student = a1.fade_out(snd, 5)
    self.assertEqual (student, sol)


  def test_fade_out_right_only(self):
    '''Test fading out on right channel over 5 of 10 samples.'''

    snd = make_sound (fade5end[0])
    sol = make_sound (fade5end[1])
    student = a1.fade_out(snd, 5)
    self.assertEqual (student, sol)

if __name__ == '__main__':
    unittest.main()

