diff --git a/test/scripts/dummy_audio_folder.py b/test/scripts/dummy_audio_folder.py index aeeaba0..ae30b76 100644 --- a/test/scripts/dummy_audio_folder.py +++ b/test/scripts/dummy_audio_folder.py @@ -35,8 +35,14 @@ class DummyAudioFolder: return min + (max - min) * np.random.random() * pr.buffer_t def generate_samples(self, folder, name, value, duration): + """Generate sample file. + + The file is generated in the specified folder, with the specified name, + dummy value and duration. + """ for i in range(self.count): - save_audio(join(folder, name.format(i)), np.array([value] * int(duration * pr.sample_rate))) + save_audio(join(folder, name.format(i)), + np.array([value] * int(duration * pr.sample_rate))) def subdir(self, *parts): folder = self.path(*parts) diff --git a/test/scripts/test_combined.py b/test/scripts/test_combined.py index 6d02ead..175a8cc 100644 --- a/test/scripts/test_combined.py +++ b/test/scripts/test_combined.py @@ -26,18 +26,27 @@ def read_content(filename): def test_combined(train_folder, train_script): + """Test a "normal" development cycle, train, evaluate and calc threshold. + """ train_script.run() params_file = train_folder.model + '.params' assert isfile(train_folder.model) assert isfile(params_file) - EvalScript.create(folder=train_folder.root, models=[train_folder.model]).run() + EvalScript.create(folder=train_folder.root, + models=[train_folder.model]).run() + # Ensure that the graph script generates a numpy savez file out_file = train_folder.path('outputs.npz') - graph_script = GraphScript.create(folder=train_folder.root, models=[train_folder.model], output_file=out_file) + graph_script = GraphScript.create(folder=train_folder.root, + models=[train_folder.model], + output_file=out_file) graph_script.run() assert isfile(out_file) + # Esure the params are updated after threshold is calculated params_before = read_content(params_file) - CalcThresholdScript.create(folder=train_folder.root, model=train_folder.model, input_file=out_file).run() + CalcThresholdScript.create(folder=train_folder.root, + model=train_folder.model, + input_file=out_file).run() assert params_before != read_content(params_file) diff --git a/test/scripts/test_engine.py b/test/scripts/test_engine.py index 560548f..09129cd 100755 --- a/test/scripts/test_engine.py +++ b/test/scripts/test_engine.py @@ -36,6 +36,10 @@ class FakeStdout: def test_engine(train_folder, train_script): + """ + Test t hat the output format of the engina matches a decimal form in the + range 0.0 - 1.0. + """ train_script.run() with open(glob.glob(join(train_folder.root, 'wake-word', '*.wav'))[0], 'rb') as f: data = f.read() diff --git a/test/scripts/test_train.py b/test/scripts/test_train.py index 696c5d7..20e1ccb 100644 --- a/test/scripts/test_train.py +++ b/test/scripts/test_train.py @@ -22,15 +22,20 @@ from test.scripts.dummy_audio_folder import DummyAudioFolder class DummyTrainFolder(DummyAudioFolder): def __init__(self, count=10): super().__init__(count) - self.generate_samples(self.subdir('wake-word'), 'ww-{}.wav', 1.0, self.rand(0, 2 * pr.buffer_t)) - self.generate_samples(self.subdir('not-wake-word'), 'nww-{}.wav', 0.0, self.rand(0, 2 * pr.buffer_t)) - self.generate_samples(self.subdir('test', 'wake-word'), 'ww-{}.wav', 1.0, self.rand(0, 2 * pr.buffer_t)) - self.generate_samples(self.subdir('test', 'not-wake-word'), 'nww-{}.wav', 0.0, self.rand(0, 2 * pr.buffer_t)) + self.generate_samples(self.subdir('wake-word'), 'ww-{}.wav', 1.0, + self.rand(0, 2 * pr.buffer_t)) + self.generate_samples(self.subdir('not-wake-word'), 'nww-{}.wav', 0.0, + self.rand(0, 2 * pr.buffer_t)) + self.generate_samples(self.subdir('test', 'wake-word'), 'ww-{}.wav', + 1.0, self.rand(0, 2 * pr.buffer_t)) + self.generate_samples(self.subdir('test', 'not-wake-word'), + 'nww-{}.wav', 0.0, self.rand(0, 2 * pr.buffer_t)) self.model = self.path('model.net') class TestTrain: def test_run_basic(self): + """Run a training and check that a model is generated.""" folders = DummyTrainFolder(10) script = TrainScript.create(model=folders.model, folder=folders.root) script.run()