I love how stupid this project is

si units and redefining speed metric as thrust/weight ratio
This commit is contained in:
2026-03-04 16:30:09 -06:00
parent 216879bdd5
commit 00cc8dd9ef
19 changed files with 494 additions and 341 deletions

View File

@@ -13,10 +13,10 @@ def test_compatible_ground_combo(bicycle, human_pedalling, food_calories):
assert result.status != "p1_fail", f"Unexpected block: {result.violations}"
def test_solar_sail_blocks_with_walking(walking, solar_sail, solar_radiation):
"""Walking (ground) + Solar Sail (space) should be blocked by medium mutex."""
def test_solar_sail_blocks_with_road_vehicle(road_vehicle, solar_sail, solar_radiation):
"""Road Vehicle (ground) + Solar Sail (space) should be blocked by medium mutex."""
resolver = ConstraintResolver()
combo = Combination(entities=[walking, solar_sail, solar_radiation])
combo = Combination(entities=[road_vehicle, solar_sail, solar_radiation])
result = resolver.resolve(combo)
assert result.status == "p1_fail"
assert any("mutually exclusive" in v for v in result.violations)
@@ -41,49 +41,6 @@ def test_nuclear_drive_blocks_with_bicycle(bicycle, nuclear_thermal_drive, nucle
assert any("mass" in v.lower() for v in result.violations)
def test_power_density_mismatch_blocks():
"""A platform needing 500 W/kg and a source providing 0.01 W/kg → block."""
platform = Entity(
name="HeavyPlatform", dimension="platform",
dependencies=[
Dependency("force", "power_density_required_w_kg", "500", "W/kg", "range_min"),
],
)
power = Entity(
name="TinyPower", dimension="actuator",
dependencies=[
Dependency("force", "power_density_w_kg", "0.01", "W/kg", "provides"),
],
)
resolver = ConstraintResolver()
combo = Combination(entities=[platform, power])
result = resolver.resolve(combo)
assert result.status == "p1_fail"
assert any("power density deficit" in v for v in result.violations)
def test_power_density_under_powered_warning():
"""Power source slightly below requirement → warning, not block."""
platform = Entity(
name="MedPlatform", dimension="platform",
dependencies=[
Dependency("force", "power_density_required_w_kg", "100", "W/kg", "range_min"),
],
)
power = Entity(
name="WeakPower", dimension="actuator",
dependencies=[
Dependency("force", "power_density_w_kg", "50", "W/kg", "provides"),
],
)
resolver = ConstraintResolver()
combo = Combination(entities=[platform, power])
result = resolver.resolve(combo)
# Under-powered but within 100x → warning, not block
assert result.status != "p1_fail"
assert any("under-powered" in w for w in result.warnings)
def test_requires_vs_excludes():
"""Direct requires/excludes contradiction."""
a = Entity(
@@ -122,17 +79,17 @@ def test_hydrogen_bicycle_valid(bicycle, hydrogen_engine, hydrogen):
def test_energy_density_deficit_blocks():
"""A platform needing 2000 Wh/kg paired with a 200 Wh/kg battery → blocked."""
"""A platform needing 7200000 J/kg paired with a 720000 J/kg battery → blocked."""
platform = Entity(
name="Spaceship", dimension="platform",
dependencies=[
Dependency("physical", "energy_density_wh_kg", "2000", "Wh/kg", "range_min"),
Dependency("physical", "energy_density", "7200000", "J/kg", "range_min"),
],
)
storage = Entity(
name="Battery", dimension="energy_storage",
dependencies=[
Dependency("physical", "energy_density_wh_kg", "200", "Wh/kg", "provides"),
Dependency("physical", "energy_density", "720000", "J/kg", "provides"),
],
)
resolver = ConstraintResolver()
@@ -143,17 +100,17 @@ def test_energy_density_deficit_blocks():
def test_energy_density_under_density_warning():
"""A platform needing 400 Wh/kg paired with a 200 Wh/kg battery → conditional."""
"""A platform needing 1440000 J/kg paired with a 720000 J/kg battery → conditional."""
platform = Entity(
name="Airplane", dimension="platform",
dependencies=[
Dependency("physical", "energy_density_wh_kg", "400", "Wh/kg", "range_min"),
Dependency("physical", "energy_density", "1440000", "J/kg", "range_min"),
],
)
storage = Entity(
name="Battery", dimension="energy_storage",
dependencies=[
Dependency("physical", "energy_density_wh_kg", "200", "Wh/kg", "provides"),
Dependency("physical", "energy_density", "720000", "J/kg", "provides"),
],
)
resolver = ConstraintResolver()
@@ -168,14 +125,14 @@ def test_energy_density_no_constraint_if_no_provider():
platform = Entity(
name="Spaceship", dimension="platform",
dependencies=[
Dependency("physical", "energy_density_wh_kg", "2000", "Wh/kg", "range_min"),
Dependency("physical", "energy_density", "7200000", "J/kg", "range_min"),
],
)
# Solar Sail-style: no energy_density_wh_kg declared
# Solar Sail-style: no energy_density declared
actuator = Entity(
name="Solar Sail", dimension="actuator",
dependencies=[
Dependency("force", "power_density_w_kg", "0.01", "W/kg", "provides"),
Dependency("force", "power_density", "0.01", "W/kg", "provides"),
],
)
resolver = ConstraintResolver()