lib/aubio/slicing.py: allow any regions, overlaping or not, add more tests
[aubio.git] / python / tests / test_slicing.py
index 986918f..8151d61 100755 (executable)
@@ -9,7 +9,7 @@ from utils import *
 import tempfile
 import shutil
 
-n_slices = 8
+n_slices = 4
 
 class aubio_slicing_test_case(TestCase):
 
@@ -33,7 +33,6 @@ class aubio_slicing_test_case(TestCase):
     def test_slice_start_every_blocksize(self):
         hopsize = 200
         regions_start = [i*hopsize for i in range(1, n_slices)]
-        regions_start += [count_samples_in_file(self.source_file) + 1000]
         slice_source_at_stamps(self.source_file, regions_start, output_dir = self.output_dir,
                 hopsize = 200)
 
@@ -47,6 +46,55 @@ class aubio_slicing_test_case(TestCase):
             "number of samples written different from number of original samples")
         shutil.rmtree(self.output_dir)
 
+class aubio_slicing_with_ends_test_case(TestCase):
+
+    def setUp(self):
+        self.source_file = get_default_test_sound(self)
+        self.output_dir = tempfile.mkdtemp(suffix = 'aubio_slicing_test_case')
+
+    def test_slice_start_and_ends_no_gap(self):
+        regions_start = [i*1000 for i in range(n_slices)]
+        regions_ends = [start - 1 for start in regions_start[1:]] + [1e120]
+        slice_source_at_stamps(self.source_file, regions_start, regions_ends,
+                output_dir = self.output_dir)
+        original_samples = count_samples_in_file(self.source_file)
+        written_samples = count_samples_in_directory(self.output_dir)
+        total_files = count_files_in_directory(self.output_dir)
+        assert_equal(n_slices, total_files,
+            "number of slices created different from expected")
+        assert_equal(written_samples, original_samples,
+            "number of samples written different from number of original samples")
+
+    def test_slice_start_and_ends_200_gap(self):
+        regions_start = [i*1000 for i in range(n_slices)]
+        regions_ends = [start + 199 for start in regions_start]
+        slice_source_at_stamps(self.source_file, regions_start, regions_ends,
+                output_dir = self.output_dir)
+        expected_samples = 200 * n_slices
+        written_samples = count_samples_in_directory(self.output_dir)
+        total_files = count_files_in_directory(self.output_dir)
+        assert_equal(n_slices, total_files,
+            "number of slices created different from expected")
+        assert_equal(written_samples, expected_samples,
+            "number of samples written different from number of original samples")
+
+    def test_slice_start_and_ends_overlaping(self):
+        regions_start = [i*1000 for i in range(n_slices)]
+        regions_ends = [start + 1199 for start in regions_start]
+        slice_source_at_stamps(self.source_file, regions_start, regions_ends,
+                output_dir = self.output_dir)
+        expected_samples = 1200 * n_slices
+        written_samples = count_samples_in_directory(self.output_dir)
+        total_files = count_files_in_directory(self.output_dir)
+        assert_equal(n_slices, total_files,
+            "number of slices created different from expected")
+        assert_equal(written_samples, expected_samples,
+            "number of samples written different from number of original samples")
+
+    def tearDown(self):
+        shutil.rmtree(self.output_dir)
+
+
 class aubio_slicing_wrong_starts_test_case(TestCase):
 
     def setUp(self):
@@ -86,6 +134,9 @@ class aubio_slicing_wrong_ends_test_case(TestCase):
         regions_end = None
         slice_source_at_stamps (self.source_file, regions_start, regions_end,
                 output_dir = self.output_dir)
+        total_files = count_files_in_directory(self.output_dir)
+        assert_equal(n_slices, total_files,
+            "number of slices created different from expected")
         original_samples = count_samples_in_file(self.source_file)
         written_samples = count_samples_in_directory(self.output_dir)
         assert_equal(written_samples, original_samples,