test_cycle.py 3.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. # coding: utf-8
  2. from synergine2.config import Config
  3. from synergine2.cycle import CycleManager
  4. from synergine2.log import SynergineLogger
  5. from synergine2.share import shared
  6. from synergine2.simulation import Simulation
  7. from synergine2.simulation import Event
  8. from synergine2.simulation import Subject
  9. from synergine2.simulation import Subjects
  10. from synergine2.simulation import SubjectMechanism
  11. from synergine2.simulation import SubjectBehaviour
  12. from tests import BaseTest
  13. class MyEvent(Event):
  14. def __init__(self, value):
  15. self.value = value
  16. class MySubjectMechanism(SubjectMechanism):
  17. def run(self):
  18. return 42
  19. class MySubjectBehavior(SubjectBehaviour):
  20. use = [MySubjectMechanism]
  21. def run(self, data):
  22. class_name = MySubjectMechanism.__name__
  23. if class_name in data and data[class_name] == 42:
  24. return self.subject.id
  25. def action(self, data) -> [Event]:
  26. return [MyEvent(data * 2)]
  27. class MySubject(Subject):
  28. behaviours_classes = [MySubjectBehavior]
  29. class MySubjects(Subjects):
  30. pass
  31. class TestCycle(BaseTest):
  32. # def test_subjects_cycle(self):
  33. # shared.reset()
  34. # config = Config({'core': {'use_x_cores': 2}})
  35. # logger = SynergineLogger(name='test')
  36. #
  37. # simulation = Simulation(config)
  38. # subjects = MySubjects(simulation=simulation)
  39. # simulation.subjects = subjects
  40. #
  41. # # Prepare simulation class index
  42. # simulation.add_to_index(MySubjectBehavior)
  43. # simulation.add_to_index(MySubjectMechanism)
  44. # simulation.add_to_index(MySubject)
  45. #
  46. # for i in range(3):
  47. # subjects.append(MySubject(config, simulation=simulation))
  48. #
  49. # cycle_manager = CycleManager(
  50. # config=config,
  51. # logger=logger,
  52. # simulation=simulation,
  53. # )
  54. #
  55. # events = cycle_manager.next()
  56. # cycle_manager.stop()
  57. #
  58. # assert 3 == len(events)
  59. # event_values = [e.value for e in events]
  60. # assert all([s.id * 2 in event_values for s in subjects])
  61. def test_new_subject(self):
  62. shared.reset()
  63. subject_ids = shared.get('subject_ids')
  64. config = Config({'core': {'use_x_cores': 1}})
  65. logger = SynergineLogger(name='test')
  66. simulation = Simulation(config)
  67. subjects = MySubjects(simulation=simulation)
  68. simulation.subjects = subjects
  69. # Prepare simulation class index
  70. simulation.add_to_index(MySubjectBehavior)
  71. simulation.add_to_index(MySubjectMechanism)
  72. simulation.add_to_index(MySubject)
  73. for i in range(3):
  74. subjects.append(MySubject(config, simulation=simulation))
  75. cycle_manager = CycleManager(
  76. config=config,
  77. logger=logger,
  78. simulation=simulation,
  79. )
  80. events = cycle_manager.next()
  81. assert 3 == len(events)
  82. event_values = [e.value for e in events]
  83. assert all([s.id * 2 in event_values for s in subjects])
  84. subjects.append(MySubject(config, simulation=simulation))
  85. events = cycle_manager.next()
  86. cycle_manager.stop()
  87. assert 4 == len(events)
  88. event_values = [e.value for e in events]
  89. assert all([s.id * 2 in event_values for s in subjects])