mirror of
https://github.com/JackHopkins/factorio-learning-environment.git
synced 2025-09-06 13:23:58 +00:00

Some checks failed
Lint and Format / lint (push) Has been cancelled
* 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
58 lines
1.9 KiB
Python
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
|