Files
factorio-learning-environment/tests/actions/test_connect_entities_dry_run.py
Harshit Sharma 8143457e55
Some checks failed
Lint and Format / lint (push) Has been cancelled
Faster ci cd (#311)
* sessions based

* try out caching + no sleep

* update fixture usage

* better reset usge

* state less on tech, probably breaking change

* better fixtures + decouple resets

* use pytest-xdist w 2 servers

* using diff grouping for dep

* formatting

* formatting

* caching for image

* formatting

* formatting

* use uv

* use uv caching

* remove docker caching (its slower)

* how about 4 workers?

* no redundant resets

* parameterize

* change names

* update all_technologies_researched usage

change log:

- used uv and cache dependencies
- used 2 factorio headless server instances
- added pytest-xdist & used 2 pytest workers
- parametrized the slowest test -- `test_sleep.py` so as to balance it across workers
- clarified resets in `instance.py` so separate instances arent needed for research testing
- better fixture usage, with autouse reset
- added configure_game callback for per test file setup of inventories & research state.
- updated task abc all_technologies_researched usage, its now a param for reset
- using 4 workers instead of 2, can probably double it again lol
- pytest parameterized a slow test
- fixed redundant reset in conftest

final speedup: 9m 4s -> 1m, ≈9.07× faster
2025-08-21 17:31:28 +05:30

58 lines
1.9 KiB
Python

import pytest
from fle.env.entities import Position
from fle.env.game_types import Prototype
@pytest.fixture()
def game(configure_game):
return configure_game(inventory={"transport-belt": 12})
def test_dry_run(game):
position_1 = Position(x=3, y=1)
position_2 = Position(x=2, y=4)
belts = game.connect_entities(
position_1, position_2, Prototype.TransportBelt, dry_run=True
)
assert game.inspect_inventory()[Prototype.TransportBelt] == 12
assert len(game.get_entities()) == 0
assert isinstance(belts, dict)
assert belts["number_of_entities_available"] == 12
assert belts["number_of_entities_required"] < 12
position_1 = Position(x=0, y=0)
position_2 = Position(x=0, y=25)
belts = game.connect_entities(
position_1, position_2, Prototype.TransportBelt, dry_run=True
)
assert game.inspect_inventory()[Prototype.TransportBelt] == 12
assert len(game.get_entities()) == 0
assert isinstance(belts, dict)
assert belts["number_of_entities_available"] == 12
assert belts["number_of_entities_required"] > 12
def test_connect_without_enough(game):
position_1 = Position(x=0, y=0)
position_2 = Position(x=0, y=25)
try:
belts = game.connect_entities(position_1, position_2, Prototype.TransportBelt)
except Exception as e:
exception_message = str(e)
assert (
"You do not have enough transport-belt in you inventory to complete this connection. Required number - 26, Available in inventory - 12"
in exception_message
)
pass
assert game.inspect_inventory()[Prototype.TransportBelt] == 12
assert len(game.get_entities()) == 0
position_1 = Position(x=3, y=1)
position_2 = Position(x=0, y=4)
belts = game.connect_entities(position_1, position_2, Prototype.TransportBelt)
assert game.inspect_inventory()[Prototype.TransportBelt] < 12
assert len(game.get_entities()) != 0
assert len(belts.belts) != 0