test_terminals.py 1.9KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. import time
  2. from synergine2.terminals import Terminal
  3. from synergine2.terminals import TerminalManager
  4. from tests import BaseTest
  5. class MultiplyTerminal(Terminal):
  6. def receive(self, value):
  7. self.send(value * 2)
  8. self.send(value * 4)
  9. class DivideTerminal(Terminal):
  10. def receive(self, value):
  11. self.send(value / 2)
  12. self.send(value / 4)
  13. class TestTerminals(BaseTest):
  14. def test_terminal_communications(self):
  15. terminals_manager = TerminalManager(
  16. terminals=[
  17. MultiplyTerminal(),
  18. ]
  19. )
  20. terminals_manager.start()
  21. terminals_manager.send(42)
  22. # We wait max 2s (see time.sleep) to consider
  23. # process have finished. If not, it will fail
  24. values = []
  25. for i in range(200):
  26. values.extend(terminals_manager.receive())
  27. if len(values) == 2:
  28. break
  29. time.sleep(0.01)
  30. assert 2 == len(values)
  31. values = [v for v in values]
  32. assert 84 in values
  33. assert 168 in values
  34. terminals_manager.stop() # pytest must execute this if have fail
  35. def test_terminals_communications(self):
  36. terminals_manager = TerminalManager(
  37. terminals=[
  38. MultiplyTerminal(),
  39. DivideTerminal(),
  40. ]
  41. )
  42. terminals_manager.start()
  43. terminals_manager.send(42)
  44. # We wait max 2s (see time.sleep) to consider
  45. # process have finished. If not, it will fail
  46. values = []
  47. for i in range(200):
  48. values.extend(terminals_manager.receive())
  49. if len(values) == 4:
  50. break
  51. time.sleep(0.01)
  52. assert 4 == len(values)
  53. values = [v for v in values]
  54. assert 84 in values
  55. assert 168 in values
  56. assert 21 in values
  57. assert 10.5 in values
  58. terminals_manager.stop() # pytest must execute this if have fail