class WaveformThreadTest(unittest.TestCase): # np.set_printoptions(threshold='nan') def setUp(self): self.settings = ExperimentSettings() self.lp = LightPulse(self.settings) def test_init(self, mock_waveform_thread): WaveformThread( waveform=self.lp.create_waveform(), Channel='ao1', Time=np.float64(1.011), input_voltage_range=10.0, output_voltage_range=self.settings.output_voltage_range, input_sample_rate=self.settings.sample_rate, output_sample_rate=self.settings.output_sample_rate )
class MeasurementHandlerTest(unittest.TestCase): # np.set_printoptions(threshold='nan') def setUp(self): self.settings = ExperimentSettings() self.lp = LightPulse(self.settings) def test__run_thread(self, mock_waveform_thread): mock_waveform_thread.return_value.time = 3 mock_waveform_thread.return_value.Read_Data = np.array([]) handler = MeasurementHandler() handler.add_to_queue(self.lp.create_waveform(), self.settings) # handler._run_thread() def test_single_measurement_no_averaging(self, mock_waveform_thread): handler = MeasurementHandler() handler.add_to_queue(self.lp.create_waveform(), self.settings) return_tuple = (np.array([1, 2, 3, 4, 5, 6]), np.array([0, 1])) with patch.object(handler, '_run_thread', return_value=return_tuple) as method: test_dataset = handler.single_measurement() self.assertEqual(1, method.call_count) np.testing.assert_array_equal( test_dataset, np.array([[0, 1, 3, 5], [1, 2, 4, 6]]) ) self.assertEqual(len(handler._queue), 0) def test_single_measurement_with_averaging(self, mock_waveform_thread): # setup settings = ExperimentSettings() settings.averaging = 2 handler = MeasurementHandler() return_tuple = [ (np.array([2, 3, 4, 5, 6, 7]), np.array([0, 1])), (np.array([3, 4, 5, 6, 7, 8]), np.array([0, 1])), ] handler.add_to_queue(self.lp.create_waveform(), settings) with patch.object(handler, '_run_thread', side_effect=return_tuple) as method: # perform test_dataset = handler.single_measurement() # assert self.assertEqual(2, method.call_count) np.testing.assert_array_equal( test_dataset, np.array([[0, 2.5, 4.5, 6.5], [1, 3.5, 5.5, 7.5]]) ) self.assertEqual(len(handler._queue), 0) def test_add_to_queue(self, mock_waveform_thread): handler = MeasurementHandler() handler.add_to_queue(self.lp.create_waveform(), self.settings) self.assertEqual(len(handler._queue), 1) @log_capture() def test_series_measurement_empty_queue(self, mock_waveform_thread, log_checker): handler = MeasurementHandler() observed_data_list = handler.series_measurement() self.assertEqual( len(observed_data_list), 0) log_checker.check( ('root', 'INFO', 'Total: 0 measurements performed'), ) @log_capture() def test_series_measurement_one_in_queue(self, mock_waveform_thread, log_checker): # setup handler = MeasurementHandler() print(handler._queue) handler.add_to_queue(self.lp.create_waveform(), self.settings) side_effect_array = [ np.array([[0, 2.5, 4.5, 6.5], [1, 3.5, 5.5, 7.5]]) ] with patch.object(handler, 'single_measurement', side_effect=side_effect_array) as method: # perform observed_data_list = handler.series_measurement() # assert for observed_data in observed_data_list: np.testing.assert_array_equal( observed_data, np.array([[0, 2.5, 4.5, 6.5], [1, 3.5, 5.5, 7.5]]) ) log_checker.check( ('root', 'INFO', 'Measurement #1 complete'), ('root', 'INFO', 'Total: 1 measurements performed'), ) @log_capture() def test_series_measurement_multiple_queue(self, mock_waveform_thread, log_checker): side_effect_array = [ np.array([[0, 2.5, 4.5, 6.5], [1, 3.5, 5.5, 7.5]]), np.array([[0, 2.5, 4.5, 6.5], [1, 3.5, 5.5, 7.5]]), np.array([[0, 2.5, 4.5, 6.5], [1, 3.5, 5.5, 7.5]]) ] handler = MeasurementHandler() handler.add_to_queue(self.lp.create_waveform(), self.settings) handler.add_to_queue(self.lp.create_waveform(), self.settings) handler.add_to_queue(self.lp.create_waveform(), self.settings) with patch.object(handler, 'single_measurement', side_effect=side_effect_array) as method: observed_data_list = handler.series_measurement() for observed_data in observed_data_list: np.testing.assert_array_equal( observed_data, np.array([[0, 2.5, 4.5, 6.5], [1, 3.5, 5.5, 7.5]]) ) log_checker.check( ('root', 'INFO', 'Measurement #1 complete'), ('root', 'INFO', 'Measurement #2 complete'), ('root', 'INFO', 'Measurement #3 complete'), ('root', 'INFO', 'Total: 3 measurements performed'), )
class LightPulseTest(unittest.TestCase): # np.set_printoptions(threshold='nan') def setUp(self): self.lp = LightPulse(ExperimentSettings()) # def test_init_ def test_can_create_pulse_array(self): pulse_array = self.lp.create_waveform() self.assertTrue(np.any(pulse_array)) # make value self.assertTrue(np.any(np.amax(pulse_array) < 150.0)) self.assertTrue(self.lp.A > 0) initial_offset = int(1.2) np.testing.assert_array_equal(np.zeros(initial_offset), pulse_array[:initial_offset]) final_offset = int(12.0) np.testing.assert_array_equal(np.zeros(final_offset), pulse_array[-final_offset:]) self.assertEqual(len(pulse_array[initial_offset:-final_offset]), 1200) def test_scale_to_threshold(self): # setup tests self.lp.Voltage_Threshold = 0.08152173913043478 voltage_waveform = 6 * np.ones(10) test_array = np.array([ 5.83695652174, 5.83695652174, 5.83695652174, 5.83695652174, 5.83695652174, 5.83695652174, 5.83695652174, 5.83695652174, 5.83695652174, 5.83695652174 ]) # scaled_array = self.lp.scale_to_threshold(voltage_waveform) # assertions np.testing.assert_almost_equal(scaled_array, test_array, decimal=11, verbose=True) def test_final_pulse_array_function(self): example_array = np.loadtxt( "test/data/sample_sin_waveformthread_write_data.csv") self.lp.Waveform = "Sin" pulse_array = self.lp.create_waveform() np.savetxt('test_sine_array', pulse_array) np.testing.assert_almost_equal(pulse_array, example_array) def test_sin_function(self): pulse_array = self.lp.Sin(np.linspace(0, 1, 1200), 0.5) t = np.linspace(0, 1, 1200) amp = 0.5 pi = np.pi np.testing.assert_array_equal(pulse_array, -(amp) * np.abs(np.sin(pi * t / t[-1]))) def test_square_function(self): pulse_array = self.lp.Square(np.linspace(0, 5, 5), -6) self.assertTrue(np.all(pulse_array == (6 * np.ones(5)))) # def test_cos_function(self): # pass def test_triangle_function(self): pulse_array = self.lp.Triangle(np.arange(5), -4) self.assertTrue(np.all(pulse_array == np.array([0, 2, 4, 2, 0])))