test_runner.py 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. import tkinter as tk
  2. import examples.BouncingBalls.PyDEVS.target as target
  3. from sccd.runtime.libs.ui_v2 import UI
  4. from sccd.runtime.DEVS_loop import DEVSSimulator
  5. import time
  6. begin_time = time.time()
  7. class OutputListener:
  8. def __init__(self, model, log_file):
  9. self.model = model
  10. self.log_file = log_file
  11. # Clear the log file when the listener is initialized
  12. with open(self.log_file, 'w') as file:
  13. file.write('') # This will create a new empty file or clear the existing file
  14. def add(self, events):
  15. with open(self.log_file, 'a') as file:
  16. for event in events:
  17. elapsed_time = time.time() - begin_time
  18. file.write(f'{elapsed_time:.3f} {event}\n')
  19. # IMPORTANT: This is here because we add our own inputs but tkinter will not close properly because of this
  20. #if event.name == "destroy_all":
  21. #self.tk.destroy()
  22. if __name__ == '__main__':
  23. model = target.Controller(name="controller")
  24. refs = {"ui": model.in_ui, "field_ui": model.atomic1.field_ui, "button_ui": model.atomic2.button_ui, "ball_ui": model.atomic3.ball_ui}
  25. tkroot = tk.Tk()
  26. tkroot.withdraw()
  27. sim = DEVSSimulator(model, refs)
  28. sim.setRealTimeInputFile("./examples/BouncingBalls/input_trace.txt")
  29. sim.setRealTimePlatformTk(tkroot)
  30. listener = OutputListener(model, "./examples/BouncingBalls/PyDEVS/output.txt")
  31. sim.setListenPorts(model.out_ui, listener.add)
  32. sim.simulate()
  33. tkroot.mainloop()