From 84015c90257d5b86745487849e5267008ededc64 Mon Sep 17 00:00:00 2001 From: Dylan F Date: Sun, 4 Jan 2026 15:19:12 -0800 Subject: [PATCH 1/4] schedule event past end time for run until tests. --- tests/test_core.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/test_core.py b/tests/test_core.py index 22da9f8..4882fb9 100644 --- a/tests/test_core.py +++ b/tests/test_core.py @@ -236,13 +236,14 @@ def test_schedule_at_time(self): def test_run_until(self): """Test running until specific time.""" sim = Simulation() + sim.schedule(lambda: None, delay=101.0) # Need at least one event past end time sim.run(until=100.0) assert sim.now == 100.0 def test_run_for_duration(self): """Test running for duration.""" sim = Simulation() - sim.schedule(lambda: None, delay=0) # Need at least one event + sim.schedule(lambda: None, delay=51.0) # Need at least one event past end time sim.run(for_duration=50.0) assert sim.now == 50.0 From 83b6466276a42ce989d95557d1d2f860034495ba Mon Sep 17 00:00:00 2001 From: Dylan F Date: Sun, 4 Jan 2026 15:41:09 -0800 Subject: [PATCH 2/4] import SimulationConfig to fix random_service_time test --- tests/test_resources.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_resources.py b/tests/test_resources.py index a507513..813158d 100644 --- a/tests/test_resources.py +++ b/tests/test_resources.py @@ -3,7 +3,7 @@ """ import pytest -from simcraft.core.simulation import Simulation +from simcraft.core.simulation import Simulation, SimulationConfig from simcraft.core.entity import Entity from simcraft.resources.queue import Queue, PriorityQueue from simcraft.resources.server import Server @@ -161,7 +161,7 @@ def test_queueing(self): def test_random_service_time(self): """Test random service time function.""" - sim = Simulation(config={"seed": 42}) + sim = Simulation(config=SimulationConfig(seed=42)) def random_service(): return sim.rng.exponential(5.0) From df2282588d94fb0d1908a9e0994be8af294d24c2 Mon Sep 17 00:00:00 2001 From: Dylan F Date: Sat, 10 Jan 2026 02:18:33 -0800 Subject: [PATCH 3/4] deleted __pycache__ --- .../resources/__pycache__/queue.cpython-313.pyc | Bin 19924 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 simcraft/resources/__pycache__/queue.cpython-313.pyc diff --git a/simcraft/resources/__pycache__/queue.cpython-313.pyc b/simcraft/resources/__pycache__/queue.cpython-313.pyc deleted file mode 100644 index cd807de44c07e926e0e0f4d57ee1adff07bdacc0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19924 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 From 0defda5f43f592d079c7db78a4bd3f9f890aa9c6 Mon Sep 17 00:00:00 2001 From: Dylan F Date: Sat, 10 Jan 2026 02:19:20 -0800 Subject: [PATCH 4/4] delete tests.__pycache__ --- .../test_resources.cpython-313-pytest-9.0.2.pyc | Bin 60934 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 tests/__pycache__/test_resources.cpython-313-pytest-9.0.2.pyc diff --git a/tests/__pycache__/test_resources.cpython-313-pytest-9.0.2.pyc b/tests/__pycache__/test_resources.cpython-313-pytest-9.0.2.pyc deleted file mode 100644 index e891feed74897a833039a2daae49f1701dc182b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 60934 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