changeset 221:103458544a8b

Add round function parameter to _duration_to_nb_windows
author Amine Sehili <amine.sehili@gmail.com>
date Tue, 09 Jul 2019 20:59:29 +0100
parents ed25ee654515
children 38d7b281625c
files auditok/core.py tests/test_core.py
diffstat 2 files changed, 20 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/auditok/core.py	Mon Jul 08 21:33:47 2019 +0100
+++ b/auditok/core.py	Tue Jul 09 20:59:29 2019 +0100
@@ -174,7 +174,7 @@
     return region_gen
 
 
-def _duration_to_nb_windows(duration, analysis_window):
+def _duration_to_nb_windows(duration, analysis_window, round_fn=round):
     """
     Converts a given duration into a positive integer of analysis windows.
     if `duration / analysis_window` is not an integer, the result will be
@@ -201,10 +201,7 @@
         raise ValueError(err_msg.format(duration, analysis_window))
     if duration == 0:
         return 0
-    nb_windows, rest = divmod(duration, analysis_window)
-    if rest > 0:
-        nb_windows += 1
-    return int(nb_windows)
+    return int(round_fn(duration / analysis_window))
 
 
 def _make_audio_region(
--- a/tests/test_core.py	Mon Jul 08 21:33:47 2019 +0100
+++ b/tests/test_core.py	Tue Jul 09 20:59:29 2019 +0100
@@ -1,7 +1,8 @@
 import os
-from unittest import TestCase
+import math
 from random import random
 from tempfile import TemporaryDirectory
+from unittest import TestCase
 from genty import genty, genty_dataset
 from auditok import split, AudioRegion, AudioParameterError
 from auditok.core import _duration_to_nb_windows
@@ -31,18 +32,25 @@
 @genty
 class TestFunctions(TestCase):
     @genty_dataset(
-        zero_duration=(0, 1, 0),
-        multiple=(0.3, 0.1, 3),
-        not_multiple=(0.35, 0.1, 4),
-        small_duration=(0.05, 0.1, 1),
+        zero_duration=(0, 1, None, 0),
+        multiple=(0.3, 0.1, round, 3),
+        not_multiple_ceil=(0.35, 0.1, math.ceil, 4),
+        not_multiple_floor=(0.35, 0.1, math.floor, 3),
+        small_duration=(0.05, 0.1, round, 0),
+        small_duration_ceil=(0.05, 0.1, math.ceil, 1),
+        negative_duration=(-0.5, 0.1, math.ceil, ValueError),
+        negative_analysis_window=(0.5, -0.1, math.ceil, ValueError),
     )
-    def test_duration_to_nb_windows(self, duration, analysis_window, expected):
-
-        if issubclass(expected.__class__, Exception):
+    def test_duration_to_nb_windows(
+        self, duration, analysis_window, round_fn, expected
+    ):
+        if expected == ValueError:
             with self.assertRaises(expected):
-                _duration_to_nb_windows(duration, analysis_window)
+                _duration_to_nb_windows(duration, analysis_window, round_fn)
         else:
-            result = _duration_to_nb_windows(duration, analysis_window)
+            result = _duration_to_nb_windows(
+                duration, analysis_window, round_fn
+            )
             self.assertEqual(result, expected)