PyO3 Error temp commit
This commit is contained in:
parent
ce648db852
commit
717a389a22
19 changed files with 1011 additions and 1681 deletions
|
@ -16,8 +16,7 @@ def get_mult(star_type):
|
|||
def gen_pos(p_distrib):
|
||||
p = []
|
||||
for v in p_distrib:
|
||||
v = random.triangular(-v, v)
|
||||
p.append(v)
|
||||
p.append(random.triangular(-v, v))
|
||||
return p
|
||||
|
||||
|
||||
|
@ -107,10 +106,7 @@ def stars_path():
|
|||
csv_writer.writeheader()
|
||||
csv_writer.writerows(rows)
|
||||
tmpfile.close()
|
||||
while True:
|
||||
sys_ids = random.choices(range(num_stars), k=10)
|
||||
if len(set(sys_ids)) == len(sys_ids):
|
||||
break
|
||||
sys_ids = random.sample(range(num_stars), k=10)
|
||||
rand_sys = list(map("System {}".format, sys_ids))
|
||||
yield str(filename.resolve()), rand_sys
|
||||
if filename.exists():
|
||||
|
|
|
@ -3,14 +3,16 @@ import random
|
|||
import pytest
|
||||
import os
|
||||
from flaky import flaky
|
||||
from pytest import approx
|
||||
from glob import glob
|
||||
|
||||
|
||||
if not hasattr(random, "choices"):
|
||||
|
||||
def choices(population, *, k=1):
|
||||
return [random.choice(population) for _ in range(k)]
|
||||
|
||||
random.choices = choices
|
||||
def dist(a, b, m=2):
|
||||
assert len(a) == len(b)
|
||||
s = 0
|
||||
for c1, c2 in zip(a, b):
|
||||
s += (c1 - c2) ** 2
|
||||
return s ** (1 / m)
|
||||
|
||||
|
||||
@pytest.fixture(scope="module")
|
||||
|
@ -27,7 +29,43 @@ def py_router(stars_path):
|
|||
yield router, resolved_systems
|
||||
|
||||
|
||||
class Test_ED_LRR(object): # noqa: H601
|
||||
def idf(name):
|
||||
return lambda val: "{}:{}".format(name, val)
|
||||
|
||||
|
||||
# class Test_PyShip(object):
|
||||
# folder = os.path.dirname(__file__)
|
||||
# ships = glob(os.path.join(folder,"data","ships","*.json"))
|
||||
# ship_data=[]
|
||||
# ship_ids=[]
|
||||
# for ship in ships:
|
||||
# with open(ship,"r",encoding="utf-8") as fh:
|
||||
# ship_data.append(fh.read())
|
||||
# ship_ids.append(os.path.splitext(os.path.basename(ship))[0])
|
||||
|
||||
# @pytest.mark.parametrize("ship_data", ship_data, ids=ship_ids)
|
||||
# def test_ship_from_json(self, ship_data):
|
||||
# import json
|
||||
# from _ed_lrr import PyShip
|
||||
|
||||
# loadout = json.loads(ship_data)
|
||||
# ship = PyShip.from_loadout(ship_data)
|
||||
# ship_dict = ship.to_dict()
|
||||
# booster = ship_dict.get("fsd", {}).get("guardian_booster")
|
||||
# assert booster is not None
|
||||
# rel = None
|
||||
# if booster != approx(0.0):
|
||||
# rel = 0.01
|
||||
# assert ship.max_range() == approx(loadout["MaxJumpRange"], rel)
|
||||
|
||||
|
||||
class Test_PyRouter(object): # noqa: H601
|
||||
|
||||
beam_widths = [256, 512, 1024, 0]
|
||||
greedyness = [0, 0.5, 1]
|
||||
n_workers = [0, 1, 2, os.cpu_count()]
|
||||
ranges = [30, 50]
|
||||
|
||||
@pytest.mark.dependency()
|
||||
@flaky(max_runs=10, min_passes=5)
|
||||
def test_load_and_resolve(self, stars_path):
|
||||
|
@ -42,37 +80,34 @@ class Test_ED_LRR(object): # noqa: H601
|
|||
assert name in resolved_systems, err
|
||||
|
||||
@pytest.mark.dependency(depends=["Test_ED_LRR::test_load_and_resolve"])
|
||||
@flaky(max_runs=10, min_passes=5)
|
||||
def test_zero_range_fails(self, py_router):
|
||||
r, resolved_systems = py_router
|
||||
waypoints = random.choices(list(resolved_systems.values()), k=2)
|
||||
err = pytest.raises(RuntimeError, r.route, waypoints, 0)
|
||||
err.match(r"No route from .* to .* found!")
|
||||
|
||||
beam_widths = [256, 512, 1024, 0]
|
||||
greedyness = [0, 0.5, 1]
|
||||
n_workers = [0, os.cpu_count()]
|
||||
ranges = [30, 50]
|
||||
|
||||
@pytest.mark.dependency(depends=["Test_ED_LRR::test_load_and_resolve"])
|
||||
@flaky(max_runs=10, min_passes=2)
|
||||
@pytest.mark.parametrize("workers", n_workers,
|
||||
ids=lambda v: "workers:{}".format(v))
|
||||
@pytest.mark.parametrize("jump_range", ranges,
|
||||
ids=lambda v: "range:{}".format(v))
|
||||
@pytest.mark.parametrize(
|
||||
"greedyness", greedyness, ids=lambda v: "greedyness:{}".format(v)
|
||||
)
|
||||
@pytest.mark.parametrize(
|
||||
"beam_width", beam_widths, ids=lambda v: "beam_width:{}".format(v)
|
||||
)
|
||||
def test_route(self, py_router, jump_range,
|
||||
workers, greedyness, beam_width):
|
||||
@flaky(max_runs=10, min_passes=5)
|
||||
def test_zero_range_fails(self, py_router, greedyness):
|
||||
r, resolved_systems = py_router
|
||||
waypoints = random.sample(list(resolved_systems.values()), k=2)
|
||||
err = pytest.raises(RuntimeError, r.route, waypoints, 0, greedyness)
|
||||
err.match(r"No route from .* to .* found!")
|
||||
|
||||
@pytest.mark.dependency(depends=["Test_ED_LRR::test_load_and_resolve"])
|
||||
@flaky(max_runs=10, min_passes=2)
|
||||
@pytest.mark.parametrize("workers", n_workers, ids=idf("workers"))
|
||||
@pytest.mark.parametrize("jump_range", ranges, ids=idf("range"))
|
||||
@pytest.mark.parametrize("greedyness", greedyness, ids=idf("greedyness"))
|
||||
@pytest.mark.parametrize("beam_width", beam_widths, ids=idf("beam_width"))
|
||||
def test_route(self, py_router, jump_range, workers, greedyness, beam_width):
|
||||
r, resolved_systems = py_router
|
||||
waypoints = random.choices(list(resolved_systems.values()), k=2)
|
||||
args = waypoints, jump_range, greedyness, beam_width, workers
|
||||
err = "Failed to route for waypoints: {}".format(waypoints)
|
||||
route_len = r.route(*args)
|
||||
assert route_len != 0, err
|
||||
route = r.route(*args)
|
||||
assert len(route) != 0, err
|
||||
del r
|
||||
# TODO: verify hop distance and inclusion of waypoints
|
||||
hops = [h["id"] for h in route]
|
||||
for wp in waypoints:
|
||||
assert wp in hops, "System id {} not found in route".format(wp)
|
||||
for a, b in zip(route, route[1:]):
|
||||
d = dist(a["pos"], b["pos"])
|
||||
msg = "jump from {} to {} seems impossible".format(a["system"], b["system"])
|
||||
assert d <= jump_range * a["mult"], msg
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue