[FIX] Omniflo TEF einfügen entlang Gerade funktioniert wieder; Omniflo Gerade ist aus dem Menü entfernt worden, da entweder über das Menü Fahrstrecke oder nur als Linie gezeichnet wird
This commit is contained in:
1 parent
afc5dce13a
commit
98106a6af4
17 files changed
+59
-548
No files matched your search
@@ -4,28 +4,25 @@
|
||||
test_omniflo_strecke.py - Validiert den Omniflo-Streckenzug.
|
||||
|
||||
Testfall (tests/testdata/omniflo_strecke_tests.json), aktuelles Datenmodell:
|
||||
7 Elemente: 2x gerade_unten (Fahrtrichtung 0 Grad), 2x gerade_oben
|
||||
(Fahrtrichtung 180 Grad), 2x bogen (echte Omniflo-Boegen), 1x weiche.
|
||||
3 Elemente: 2x bogen (echte Omniflo-Boegen), 1x weiche.
|
||||
|
||||
Prueft (ohne BricsCAD):
|
||||
1. Struktur: 7 Elemente in der richtigen Gruppen-/Typ-Verteilung, seq lueckenlos
|
||||
1. Struktur: 3 Elemente in der richtigen Gruppen-/Typ-Verteilung, seq lueckenlos
|
||||
2. Katalog: die Bogen-SivasNummern (gruppe "bogen") existieren in
|
||||
data/json/omniflo_boegen.json mit passendem Radius/Kurvenwinkel; die
|
||||
Weichen-SivasNummer in data/json/omniflo_weichen.json
|
||||
3. Geometrie: die Geraden haben eine zur Laenge passende Distanz Anfang->Ende
|
||||
und behalten ihre Fahrtrichtung (drehung).
|
||||
|
||||
Hinweis: Boegen/Weichen tragen im aktuellen Testdaten-Modell KEINE Endpunkte
|
||||
(x_ende/y_ende = null) und keine Mittelpunkte - die frueheren Halbkreis-/
|
||||
Verkettungs-Tests (drehung_ende, x_mitte, kurve_180, 12 Elemente) bezogen sich
|
||||
auf ein anderes, nicht mehr vorhandenes Modell und wurden entfernt.
|
||||
auf ein anderes, nicht mehr vorhandenes Modell und wurden entfernt. Die
|
||||
Aluprofil-Geraden (AP60/AP110/APG110) wurden samt Menue und Befehlen entfernt.
|
||||
|
||||
Optional (nach BricsCAD-Lauf c:TEST_OMNIFLO_STRECKE):
|
||||
4. Integrationstest gegen tests/output/omniflo_strecke_results.json
|
||||
3. Integrationstest gegen tests/output/omniflo_strecke_results.json
|
||||
"""
|
||||
|
||||
import json
|
||||
import math
|
||||
import os
|
||||
|
||||
import pytest
|
||||
@@ -103,8 +100,8 @@ def weichen_lookup():
|
||||
class TestStreckeStruktur:
|
||||
|
||||
def test_gesamtzahl(self, strecke):
|
||||
"""4 Geraden + 2 Boegen + 1 Weiche = 7 Elemente."""
|
||||
assert len(strecke) == 7, f"Erwartet 7 Elemente, erhalten {len(strecke)}"
|
||||
"""2 Boegen + 1 Weiche = 3 Elemente."""
|
||||
assert len(strecke) == 3, f"Erwartet 3 Elemente, erhalten {len(strecke)}"
|
||||
|
||||
def test_seq_lueckenlos(self, strecke):
|
||||
"""seq muss lueckenlos bei 1 beginnend aufsteigen."""
|
||||
@@ -112,33 +109,18 @@ class TestStreckeStruktur:
|
||||
assert el["seq"] == i + 1, f"Element {i}: seq={el['seq']}, erwartet {i + 1}"
|
||||
|
||||
def test_gruppen_verteilung(self, strecke):
|
||||
"""Erwartete Gruppen-Verteilung: 2x gerade_unten, 2x gerade_oben,
|
||||
2x bogen, 1x weiche."""
|
||||
"""Erwartete Gruppen-Verteilung: 2x bogen, 1x weiche."""
|
||||
from collections import Counter
|
||||
ist = Counter(el["gruppe"] for el in strecke)
|
||||
erwartet = {"gerade_unten": 2, "gerade_oben": 2, "bogen": 2, "weiche": 1}
|
||||
assert dict(ist) == erwartet, f"Gruppen-Verteilung abweichend:\n Ist: {dict(ist)}\n Soll: {erwartet}"
|
||||
erwartet = {"bogen": 2, "weiche": 1}
|
||||
assert dict(ist) == erwartet, (
|
||||
f"Gruppen-Verteilung abweichend: Ist {dict(ist)}, Soll {erwartet}")
|
||||
|
||||
def test_typen(self, strecke):
|
||||
"""gerade_* -> type 'gerade', bogen/weiche -> type 'bogen'."""
|
||||
"""bogen/weiche -> type 'bogen'."""
|
||||
for el in strecke:
|
||||
erwartet = "gerade" if el["gruppe"].startswith("gerade") else "bogen"
|
||||
assert el["type"] == erwartet, (
|
||||
f"seq {el['seq']}: type={el['type']}, erwartet {erwartet}")
|
||||
|
||||
def test_vier_geraden(self, strecke):
|
||||
"""Vier Geraden gesamt (2 unten + 2 oben)."""
|
||||
assert sum(1 for el in strecke if el["type"] == "gerade") == 4
|
||||
|
||||
def test_geraden_richtungen(self, strecke):
|
||||
"""gerade_unten faehrt 0 Grad, gerade_oben 180 Grad (Gegenrichtung)."""
|
||||
for el in strecke:
|
||||
if el["gruppe"] == "gerade_unten":
|
||||
assert el["drehung"] == pytest.approx(0.0, abs=_TOL), (
|
||||
f"seq {el['seq']}: gerade_unten drehung={el['drehung']}, erwartet 0")
|
||||
elif el["gruppe"] == "gerade_oben":
|
||||
assert el["drehung"] == pytest.approx(180.0, abs=_TOL), (
|
||||
f"seq {el['seq']}: gerade_oben drehung={el['drehung']}, erwartet 180")
|
||||
assert el["type"] == "bogen", (
|
||||
f"seq {el['seq']}: type={el['type']}, erwartet bogen")
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
@@ -174,31 +156,7 @@ class TestStreckeKatalog:
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# 3. Geometrie der Geraden
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
class TestStreckeGeometrie:
|
||||
|
||||
def test_geraden_laenge(self, strecke):
|
||||
"""Die euklidische Distanz Anfang->Ende entspricht der Laenge."""
|
||||
for el in strecke:
|
||||
if el["type"] != "gerade":
|
||||
continue
|
||||
dist = math.hypot(el["x_ende"] - el["x"], el["y_ende"] - el["y"])
|
||||
assert dist == pytest.approx(el["laenge"], abs=0.5), (
|
||||
f"seq {el['seq']}: Distanz {dist:.2f} != Laenge {el['laenge']}")
|
||||
|
||||
def test_geraden_haben_endpunkt(self, strecke):
|
||||
"""Geraden tragen einen Endpunkt (x_ende/y_ende gesetzt)."""
|
||||
for el in strecke:
|
||||
if el["type"] != "gerade":
|
||||
continue
|
||||
assert el.get("x_ende") is not None and el.get("y_ende") is not None, (
|
||||
f"seq {el['seq']}: Gerade ohne Endpunkt")
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# 4. Integrationstest gegen BricsCAD-Ergebnis (optional)
|
||||
# 3. Integrationstest gegen BricsCAD-Ergebnis (optional)
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
class TestStreckeResults:
|
||||
|
||||
Reference in new issue
Block a user