load all tests from python test directory, add pitchdetection test
authorPaul Brossier <piem@piem.org>
Tue, 30 Oct 2007 02:28:08 +0000 (03:28 +0100)
committerPaul Brossier <piem@piem.org>
Tue, 30 Oct 2007 02:28:08 +0000 (03:28 +0100)
python/test/all_tests.py
python/test/pitchdetection.py [new file with mode: 0644]

index a066ca3afba8caf026baa3badd48817a1a1b1300..7211df6ad7a4aa217c1952e009720f5a6ce2b660 100755 (executable)
@@ -8,8 +8,11 @@ sys.path.append(os.path.join('..','aubio','.libs'))
 
 import unittest
 
-modules_to_test = ['aubiomodule', 'fvec', 'cvec']
+from glob import glob
+modules_to_test = [i.split('.')[0] for i in glob('*.py')]
 
 if __name__ == '__main__':
-  for module in modules_to_test: exec('from %s import *' % module)
+  for module in modules_to_test: 
+    if module != 'all_tests': # (not actually needed)
+      exec('from %s import *' % module)
   unittest.main()
diff --git a/python/test/pitchdetection.py b/python/test/pitchdetection.py
new file mode 100644 (file)
index 0000000..c2114fb
--- /dev/null
@@ -0,0 +1,106 @@
+import unittest
+
+from aubio.aubiowrapper import *
+
+buf_size = 4096
+hop_size = 512
+channels = 1
+samplerate = 44100.
+
+class pitchdetection_test_case(unittest.TestCase):
+
+  def setUp(self, type = aubio_pitch_yinfft, mode = aubio_pitchm_freq):
+    self.create(type=type)
+  
+  def create(self, type = aubio_pitch_yinfft,
+      mode = aubio_pitchm_freq):
+    self.type = type
+    self.o = new_aubio_pitchdetection(buf_size, hop_size,
+        channels, int(samplerate), type, mode)
+
+  def tearDown(self):
+    del_aubio_pitchdetection(self.o)
+
+  def test_pitchdetection(self):
+    """ create and delete pitchdetection """
+    pass
+
+  def test_pitchdetection_run_zeroes(self):
+    """ run pitchdetection on an empty buffer """
+    vec = new_fvec(buf_size, channels)
+    for i in range(100):
+      self.assertEqual(aubio_pitchdetection(self.o,vec),0.)
+    del vec
+
+  def test_pitchdetection_run_4_impulses(self):
+    """ run pitchdetection on a train of 4 impulses """
+    vec = new_fvec(buf_size, channels)
+    fvec_write_sample(vec,-1.,0,  0)
+    fvec_write_sample(vec, 1.,0,  buf_size/4)
+    fvec_write_sample(vec,-1.,0,  buf_size/2)
+    fvec_write_sample(vec, 1.,0,3*buf_size/4)
+    frequency = samplerate/2*4/buf_size
+    for i in range(100):
+      self.assertEqual(aubio_pitchdetection(self.o,vec),frequency)
+    del vec
+
+  def test_pitchdetection_run_4_positive_impulses(self):
+    """ run pitchdetection on a train of 4 positive impulses of arbitrary size """
+    vec = new_fvec(buf_size, channels)
+    frequency = samplerate/2*8/buf_size
+    for i in range(100):
+      fvec_write_sample(vec, 2.-.01*i,0,  0)
+      fvec_write_sample(vec, 2.-.01*i,0,  buf_size/4)
+      fvec_write_sample(vec, 2.-.01*i,0,  buf_size/2)
+      fvec_write_sample(vec, 2.-.01*i,0,3*buf_size/4)
+      self.assertAlmostEqual(aubio_pitchdetection(self.o,vec),frequency,1)
+    del vec
+
+  def test_pitchdetection_run_4_negative_impulses(self):
+    """ run pitchdetection on a train of 4 negative impulses of arbitrary size """
+    vec = new_fvec(buf_size, channels)
+    frequency = samplerate/2*8/buf_size
+    for i in range(1,100):
+      fvec_write_sample(vec,-.01*i,0,  0)
+      fvec_write_sample(vec,-.01*i,0,  buf_size/4)
+      fvec_write_sample(vec,-.01*i,0,  buf_size/2)
+      fvec_write_sample(vec,-.01*i,0,3*buf_size/4)
+      self.assertAlmostEqual(aubio_pitchdetection(self.o,vec),frequency,1)
+    del vec
+
+  def test_pitchdetection_run_8_impulses(self):
+    """ run pitchdetection on a train of 8 impulses """
+    vec = new_fvec(buf_size, channels)
+    fvec_write_sample(vec, 1.,0,  0)
+    fvec_write_sample(vec,-1.,0,  buf_size/8)
+    fvec_write_sample(vec, 1.,0,  buf_size/4)
+    fvec_write_sample(vec,-1.,0,3*buf_size/8)
+    fvec_write_sample(vec, 1.,0,  buf_size/2)
+    fvec_write_sample(vec,-1.,0,5*buf_size/8)
+    fvec_write_sample(vec, 1.,0,3*buf_size/4)
+    fvec_write_sample(vec,-1.,0,7*buf_size/8)
+    for i in range(100):
+      self.assertAlmostEqual(aubio_pitchdetection(self.o,vec),
+        samplerate/2/buf_size*8, 1) 
+    del vec
+
+"""
+class pitchdetection_yin_test_case(pitchdetection_test_case):
+  def setUp(self, type = aubio_pitch_yin):
+    self.create(type=type)
+
+class pitchdetection_fcomb_test_case(pitchdetection_test_case):
+  def setUp(self, type = aubio_pitch_fcomb):
+    self.create(type=type)
+
+class pitchdetection_mcomb_test_case(pitchdetection_test_case):
+  def setUp(self, type = aubio_pitch_mcomb):
+    self.create(type=type)
+
+class pitchdetection_schmitt_test_case(pitchdetection_test_case):
+  def setUp(self, type = aubio_pitch_schmitt):
+    self.create(type=type)
+"""
+
+if __name__ == '__main__':
+  unittest.main()