def setUp(self): self.thread_pool = ThreadPool("TestThreadPool", Psize=2) self.func_generator = FunctionGenerator() self.event = Event() self.listener = Listener() self.func_generator.add_listener(self.listener)
class FuncGeneratorTestCase(TestCase): def setUp(self): self.thread_pool = ThreadPool("TestThreadPool", Psize=2) self.func_generator = FunctionGenerator() self.event = Event() self.listener = Listener() self.func_generator.add_listener(self.listener) def _done(self, _): self.event.set() self.event.clear() def test_sleep(self): delta = 0 if os.name == "nt": delta = 0.02 for i in [0.01, 0.13, 1.2]: stmt = "fg.sleep(%f)" % i setup = "from sardana.util.funcgenerator import FunctionGenerator;\ fg = FunctionGenerator()" period = timeit.timeit(stmt, setup, number=1) period_ok = i msg = "sleep period: %f, expected: %f +/- %f" % (period, period_ok, delta) self.assertAlmostEqual(period, period_ok, delta=0.02, msg=msg) def test_run_time(self): self.func_generator.initial_domain = SynchDomain.Time self.func_generator.set_configuration(configuration_positive) self.func_generator.start() self.thread_pool.add(self.func_generator.run, self._done) self.event.wait(100) active_event_ids = self.listener.active_event_ids active_event_ids_ok = range(0, 10) msg = "Received active event ids: %s, expected: %s" % ( active_event_ids, active_event_ids_ok) self.assertListEqual(active_event_ids, active_event_ids_ok, msg) def test_stop_time(self): self.func_generator.initial_domain = SynchDomain.Time self.func_generator.set_configuration(configuration_positive) self.func_generator.start() self.thread_pool.add(self.func_generator.run, self._done) while not self.func_generator.is_running(): time.sleep(0.01) # starting timer that will stop generation Timer(0.2, self.func_generator.stop).start() self.event.wait(100) self.assertFalse(self.func_generator.is_running(), "Stopping failed") self.listener.init() self.test_run_time() def test_run_position_negative(self): position = Position() position.add_listener(self.func_generator) self.func_generator.initial_domain = SynchDomain.Position self.func_generator.active_domain = SynchDomain.Position self.func_generator.direction = -1 self.func_generator.set_configuration(configuration_negative) self.func_generator.start() self.thread_pool.add(self.func_generator.run, self._done) while not self.func_generator.is_running(): time.sleep(0.1) self.thread_pool.add(position.run, None, 0, -2, -.01) self.event.wait(3) position.remove_listener(self.func_generator) active_event_ids = self.listener.active_event_ids active_event_ids_ok = range(0, 10) msg = "Received active event ids: %s, expected: %s" % ( active_event_ids, active_event_ids_ok) self.assertListEqual(active_event_ids, active_event_ids_ok, msg) def test_run_position_positive(self): position = Position() position.add_listener(self.func_generator) self.func_generator.initial_domain = SynchDomain.Position self.func_generator.active_domain = SynchDomain.Position self.func_generator.direction = 1 self.func_generator.set_configuration(configuration_positive) self.func_generator.start() self.thread_pool.add(self.func_generator.run, self._done) while not self.func_generator.is_running(): time.sleep(0.1) self.thread_pool.add(position.run, None, 0, 2, .01) self.event.wait(3) position.remove_listener(self.func_generator) active_event_ids = self.listener.active_event_ids active_event_ids_ok = range(0, 10) msg = "Received active event ids: %s, expected: %s" % ( active_event_ids, active_event_ids_ok) self.assertListEqual(active_event_ids, active_event_ids_ok, msg) def test_configuration_position(self): self.func_generator.initial_domain = SynchDomain.Position self.func_generator.active_domain = SynchDomain.Position self.func_generator.set_configuration(configuration_negative) active_events = self.func_generator.active_events active_events_ok = numpy.arange(0, -2, -0.2).tolist() msg = "Active events are wrong: %s" % active_events for a, b in zip(active_events, active_events_ok): self.assertAlmostEqual(a, b, 10, msg) passive_events = self.func_generator.passive_events passive_events_ok = numpy.arange(-.1, -2.1, -0.2).tolist() msg = "Passive events are wrong: %s" % passive_events for a, b in zip(passive_events, passive_events_ok): self.assertAlmostEqual(a, b, 10, msg) def test_configuration_time(self): self.func_generator.initial_domain = SynchDomain.Time self.func_generator.active_domain = SynchDomain.Time self.func_generator.set_configuration(configuration_positive) active_events = self.func_generator.active_events active_events_ok = numpy.arange(.3, .5, 0.02).tolist() msg = ("Active events mismatch, received: %s, expected: %s" % (active_events, active_events_ok)) for a, b in zip(active_events, active_events_ok): self.assertAlmostEqual(a, b, 10, msg) passive_events = self.func_generator.passive_events passive_events_ok = numpy.arange(.31, 0.51, 0.02).tolist() msg = ("Passive events mismatch, received: %s, expected: %s" % (passive_events, passive_events_ok)) for a, b in zip(passive_events, passive_events_ok): self.assertAlmostEqual(a, b, 10, msg) def test_configuration_default(self): self.func_generator.set_configuration(configuration_positive) active_events = self.func_generator.active_events active_events_ok = numpy.arange(0, 2, 0.2).tolist() msg = ("Active events mismatch, received: %s, expected: %s" % (active_events, active_events_ok)) for a, b in zip(active_events, active_events_ok): self.assertAlmostEqual(a, b, 10, msg) passive_events = self.func_generator.passive_events passive_events_ok = numpy.arange(.31, .51, 0.02).tolist() msg = ("Passive events mismatch, received: %s, expected: %s" % (passive_events, passive_events_ok)) for a, b in zip(passive_events, passive_events_ok): self.assertAlmostEqual(a, b, 10, msg) def tearDown(self): self.func_generator.remove_listener(self.listener)