From c3e71240b362d4436b06b83e4d6f76737c0fd3ef Mon Sep 17 00:00:00 2001
From: fheinrich <fheinrich@techfak.uni-bielefeld.de>
Date: Mon, 4 Dec 2023 13:54:30 +0100
Subject: [PATCH] Test for player registration and simulator frequency timing

---
 overcooked_simulator/main.py              |  4 +-
 overcooked_simulator/simulation_runner.py |  8 ++--
 tests/test_start.py                       | 47 +++++++++++++++++++++--
 3 files changed, 50 insertions(+), 9 deletions(-)

diff --git a/overcooked_simulator/main.py b/overcooked_simulator/main.py
index 3029f193..b783eaa3 100644
--- a/overcooked_simulator/main.py
+++ b/overcooked_simulator/main.py
@@ -1,10 +1,10 @@
 from player import Player
 import sys
 from simulation_runner import Simulator
-
+from overcooked_environment import Environment
 
 def main():
-    simulator = Simulator()
+    simulator = Simulator(Environment, 300)
 
     simulator.register_player(Player("p1", [100, 200]))
     simulator.register_player(Player("p2", [200, 100]))
diff --git a/overcooked_simulator/simulation_runner.py b/overcooked_simulator/simulation_runner.py
index f2bef142..1808898d 100644
--- a/overcooked_simulator/simulation_runner.py
+++ b/overcooked_simulator/simulation_runner.py
@@ -17,13 +17,13 @@ class Simulator(Thread):
       sim.start()
     """
 
-    def __init__(self):
+    def __init__(self, env_class: type, frequency: int):
         self.finished: bool = False
 
-        self.step_frequency: float = 300
+        self.step_frequency: int = frequency
         self.prefered_sleeptime_ns: float = 1e9 / self.step_frequency
 
-        self.env: Environment = Environment()
+        self.env = env_class()
 
         super().__init__()
 
@@ -59,6 +59,7 @@ class Simulator(Thread):
         return self.env.get_state_json()
 
     def register_player(self, player: Player):
+        print(f"Added player {player.name} to the game.")
         """Adds a player to the environment.
 
             Args:
@@ -98,4 +99,5 @@ class Simulator(Thread):
     def stop(self):
         """Stops the simulator
         """
+        print("Stopping the simulation.")
         self.finished = True
diff --git a/tests/test_start.py b/tests/test_start.py
index 79a1690c..89211c89 100644
--- a/tests/test_start.py
+++ b/tests/test_start.py
@@ -1,6 +1,45 @@
+from overcooked_simulator.simulation_runner import Simulator
+from overcooked_simulator.player import Player
+from overcooked_simulator.overcooked_environment import Environment, Action
+import numpy as np
+import time
 
-def test_dummy():
-    assert "overcooked".startswith("over"), "overcooked does not start with 'over'"
+def test_player_registration():
 
-def test_failure():
-    assert False, "What does happen now?"
+    sim = Simulator()
+    p1 = Player("player", np.array([0, 0]))
+    sim.register_player(p1)
+
+    assert len(sim.env.players) != 0
+    assert len(sim.env.players) == 1
+
+    p2 = Player("player", np.array([100, 100]))
+    sim.register_player(p2)
+
+    assert len(sim.env.players) == 2
+
+    sim.start()
+    sim.stop()
+
+def test_simulator_frequency():
+    class TestEnv:
+        def __init__(self):
+            self.c = 0
+
+        def step(self):
+            self.c += 1
+
+    frequency = 1000
+    running_time_seconds = 5
+
+    sim = Simulator(TestEnv, frequency)
+    sim.start()
+
+    time.sleep(running_time_seconds)
+
+    sim.stop()
+
+    accepted_tolerance = 0.04
+    lower = frequency * running_time_seconds * (1-accepted_tolerance)
+    upper = frequency * running_time_seconds * (1+accepted_tolerance)
+    assert sim.env.c > lower and sim.env.c < upper, "Timing error in the environment at 1000hz"
-- 
GitLab