From 96788e7244a11ee4fcc9fe69891b2ea3fccd521a Mon Sep 17 00:00:00 2001 From: Yuelin Wang Date: Thu, 9 Jul 2026 10:58:56 +0200 Subject: [PATCH] =?UTF-8?q?TEST=5FLINIENZUG=20in=20eigene=20tests/test=5Fl?= =?UTF-8?q?inienzug.lsp=20auslagern=20+=20eigenen=20Menuepunkt=20Foerderer?= =?UTF-8?q?-Linienzug=20anlegen=20(Foerderer-Eintrag=20zurueckgesetzt),=20?= =?UTF-8?q?Men=C3=BC=20neu=20laden=20n=C3=B6tig,=20damit=20Foerderer-Linie?= =?UTF-8?q?nzug=20in=20Men=C3=BC=20erscheint.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- menu/SSG_LIB.mnu | 3 +- tests/test_foerderer.lsp | 153 -------------------------------------- tests/test_linienzug.lsp | 156 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 158 insertions(+), 154 deletions(-) create mode 100644 tests/test_linienzug.lsp diff --git a/menu/SSG_LIB.mnu b/menu/SSG_LIB.mnu index 7962e0a..0c1f2e3 100644 --- a/menu/SSG_LIB.mnu +++ b/menu/SSG_LIB.mnu @@ -122,7 +122,8 @@ [Alle Tests ausfuehren]^C^C(load (strcat (getenv "DXFMAKRO") "/tests/test_run_all.lsp")) SSG_RUN_ALL_TESTS [--] [Kreisel]^C^C(load (strcat (getenv "DXFMAKRO") "/tests/test_kreisel.lsp")) TEST_KREISEL -[Foerderer]^C^C(load (strcat (getenv "DXFMAKRO") "/tests/test_foerderer.lsp")) TEST_FOERDERER TEST_LINIENZUG +[Foerderer]^C^C(load (strcat (getenv "DXFMAKRO") "/tests/test_foerderer.lsp")) TEST_FOERDERER +[Foerderer-Linienzug]^C^C(load (strcat (getenv "DXFMAKRO") "/tests/test_linienzug.lsp")) TEST_LINIENZUG [Omniflo]^C^C(load (strcat (getenv "DXFMAKRO") "/tests/test_omniflo.lsp")) TEST_OMNIFLO [Gefaellestrecke]^C^C(load (strcat (getenv "DXFMAKRO") "/tests/test_gefaellestrecke.lsp")) TEST_GEFAELLESTRECKE [<-Export CSV/Sivas ALL]^C^C(load (strcat (getenv "DXFMAKRO") "/tests/test_export_all.lsp")) TEST_EXPORT_ALL diff --git a/tests/test_foerderer.lsp b/tests/test_foerderer.lsp index c443f2c..b3812ce 100644 --- a/tests/test_foerderer.lsp +++ b/tests/test_foerderer.lsp @@ -276,156 +276,3 @@ (princ "\n================================================================") (princ) ) - - -;; ============================================================ -;; C:TEST_LINIENZUG - Regressionstest fuer den VF-Linienzug (Modus 1) -;; ------------------------------------------------------------ -;; EIGENSTAENDIG: beruehrt weder c:TEST_FOERDERER noch dessen Funktionen. -;; ============================================================ -;; Der VF-Linienzug (vf-linienzug-modus) ist stark interaktiv (getpoint / -;; getstring / getint / getreal). Dieser Test spielt eine reale Session als -;; Skript ab: die vier Eingabe-Funktionen werden NUR waehrend des Testlaufs -;; durch Mocks ersetzt (mit Save/Restore), danach wieder hergestellt. -;; -;; Repliziertes Szenario (aus manuellem Test): -;; Start Z=4500, AS rechts -;; -> Neue Linie (Ab, Ziel-Z=1800, Winkel 45 Grad), GF ganz am Einlauf -;; -> Horizontal 900 mm mit Separator VOR + NACH (beide horizontal, 0 Grad) -;; -> Vario-Kurve 90 links aussen -;; -> Horizontal 250 mm (ohne Separatoren) -;; -> Vario-Kurve 90 links aussen -;; -> Option 3 (Kettenende definieren): Ziel-Z=4500, Winkel 45 Grad, ES rechts -;; -;; Erwartetes Ergebnis (Ist-Ziel-Report): -;; dX ~ 0, dZ ~ 0 (Ziel exakt getroffen), -;; dY ~ 637 mm = seitlicher Fussabdruck des ES_Element_90 (90-Grad-Schwenk; -;; KEIN Baufehler, sondern die Bauform des ES-Elements). -;; -;; Aufruf in BricsCAD: -;; (load (strcat (getenv "DXFMAKRO") "/tests/test_foerderer.lsp")) -;; TEST_LINIENZUG -;; ============================================================ - -;; Naechste Skript-Antwort liefern (FIFO). Bei leerer Queue Warnung + "". -(defun tlz-pop ( / v) - (if *tlz-q* - (progn (setq v (car *tlz-q*)) (setq *tlz-q* (cdr *tlz-q*)) v) - (progn (princ "\n [TEST_LINIENZUG] WARNUNG: Skript-Queue leer - unerwartete Abfrage!") "") - ) -) - -;; Mock-Eingabefunktionen. getpoint erhaelt als 1. Argument den Basispunkt -;; (p-akt) bei Folge-Segmenten bzw. einen Prompt-String beim Startpunkt. -;; Skript-Eintrag (A x y z) -> absoluter Punkt -;; Skript-Eintrag (P dL hz) -> Basispunkt + dL entlang Richtung hz (Grad), -;; sodass die Projektion in vfl-neue-linie-messen -;; exakt dL ergibt. -(defun tlz-getpoint (a b / spec base rad) - (setq spec (tlz-pop)) - (setq base (if (and a (listp a)) a '(0.0 0.0 0.0))) - (if (and (listp spec) (= (car spec) 'A)) - (list (float (cadr spec)) (float (caddr spec)) (float (cadddr spec))) - (progn - (setq rad (* (float (caddr spec)) (/ pi 180.0))) - (list (+ (car base) (* (float (cadr spec)) (cos rad))) - (+ (cadr base) (* (float (cadr spec)) (sin rad))) - (caddr base)) - ) - ) -) -(defun tlz-getstring (a) (tlz-pop)) -(defun tlz-getint (a) (tlz-pop)) -(defun tlz-getreal (a) (tlz-pop)) - -(defun c:TEST_LINIENZUG ( / old-vgp old-gs old-gi old-gr err) - (if (or (not *lib-initialized*) (null bogen-auf)) (init-bibliothek)) - (if (null (car (atoms-family 1 '("VF-LINIENZUG-MODUS")))) - (progn - (alert (strcat "vf-linienzug-modus nicht geladen!\n" - "Bitte Menue/Module laden (VarioFoerderer + Gefaellestrecke).")) - (exit) - ) - ) - - (princ "\n================================================================") - (princ "\n TEST_LINIENZUG - VF-Linienzug Replay-Test") - (princ "\n================================================================") - - (ssg-start "TEST_LINIENZUG" '(("OSMODE") ("ATTREQ") ("ATTDIA"))) - (setvar "OSMODE" 0) - (setvar "ATTREQ" 0) - (setvar "ATTDIA" 0) - - ;; --- Skript der Eingaben in exakter Aufruf-Reihenfolge --- - (setq *tlz-q* - (list - (list 'A 0 0 0) ; getpoint Startpunkt der Kette - 4500.0 ; getreal Hoehe (Z) Startpunkt - "2" ; getstring AS-Seite (rechts) - "1" ; getstring Naechstes Element (Neue Linie) - (list 'P 5500 0) ; getpoint Endpunkt Linie (frei, +X, dL=5500) - 1800.0 ; getreal Hoehe (Z) Linienendpunkt - 1 ; getint Winkelwahl (45 Grad) - "2" ; getstring GF-Verteilung (alles am Einlauf) - "2" ; getstring Ist Endpunkt? (Nein) - "1" ; getstring Naechstes im VF (Horizontal) - (list 'P 900 0) ; getpoint Horizontal-Endpunkt (dL=900, hz=0) - "1" ; getstring Separator VOR? (Ja) - "1" ; getstring Separator NACH? (Ja) - "2" ; getstring Ist Endpunkt? (Nein) - "2" ; getstring Naechstes (Vario-Kurve) - 1 ; getint Kurve-Winkel (90) - "1" ; getstring Kurve-Seite (links) - "1" ; getstring Kurve-Variante (aussen) - "2" ; getstring Ist Endpunkt? (Nein) - "1" ; getstring Naechstes (Horizontal) - (list 'P 250 90) ; getpoint Horizontal-Endpunkt (dL=250, hz=90) - "2" ; getstring Separator VOR? (Nein) - "2" ; getstring Separator NACH? (Nein) - "2" ; getstring Ist Endpunkt? (Nein) - "2" ; getstring Naechstes (Vario-Kurve) - 1 ; getint Kurve-Winkel (90) - "1" ; getstring Kurve-Seite (links) - "1" ; getstring Kurve-Variante (aussen) - "3" ; getstring Ist Endpunkt? (Option 3 - Kettenende) - (list 'P 6215 180) ; getpoint Option-3-Endpunkt (dL=6215, hz=180) - 4500.0 ; getreal Hoehe (Z) Kettenende (ES) - 2 ; getint Option-3-Winkelwahl (45 Grad) - "2" ; getstring ES-Seite (rechts) - ) - ) - - ;; --- Eingabe-Funktionen sichern und durch Mocks ersetzen --- - ;; Punkte ueber den Produktions-Wrapper vfl-getpoint (feste 2-Arity), - ;; getstring/getint/getreal (alle 1-argumentig) direkt. - (setq old-vgp vfl-getpoint old-gs getstring old-gi getint old-gr getreal) - (setq vfl-getpoint tlz-getpoint - getstring tlz-getstring - getint tlz-getint - getreal tlz-getreal) - - ;; --- Linienzug-Modus abspielen (Fehler abfangen, damit Restore sicher laeuft) --- - (setq err (vl-catch-all-apply 'vf-linienzug-modus '())) - - ;; --- Eingabe-Funktionen wiederherstellen (IMMER) --- - (setq vfl-getpoint old-vgp getstring old-gs getint old-gi getreal old-gr) - - (princ "\n================================================================") - (if (vl-catch-all-error-p err) - (princ (strcat "\n TEST_LINIENZUG: FEHLER -> " - (vl-catch-all-error-message err))) - (progn - (princ "\n TEST_LINIENZUG: Kette gebaut.") - (if *tlz-q* - (princ (strcat "\n WARNUNG: " (itoa (length *tlz-q*)) - " Skript-Eintraege NICHT verbraucht (Ablauf weicht ab).")) - (princ "\n Alle Skript-Eingaben verbraucht (Ablauf wie erwartet).")) - (princ "\n Erwartung Ist-Ziel: dX~0, dZ~0, dY~637 mm (ES_90-Seitenversatz).") - ) - ) - (princ "\n================================================================") - - (ssg-end) - (princ) -) diff --git a/tests/test_linienzug.lsp b/tests/test_linienzug.lsp new file mode 100644 index 0000000..b417ccb --- /dev/null +++ b/tests/test_linienzug.lsp @@ -0,0 +1,156 @@ +;; ============================================================ +;; test_linienzug.lsp - Regressionstest fuer den VF-Linienzug (Modus 1) +;; +;; Eigenstaendige Testdatei (getrennt von test_foerderer.lsp). +;; +;; Der VF-Linienzug (vf-linienzug-modus) ist stark interaktiv (getpoint / +;; getstring / getint / getreal). Dieser Test spielt eine reale Session als +;; Skript ab: die vier Eingabe-Funktionen werden NUR waehrend des Testlaufs +;; durch Mocks ersetzt (mit Save/Restore), danach wieder hergestellt. +;; +;; Voraussetzungen: +;; - SSG_LIB geladen (VarioFoerderer.lsp inkl. vf_linienzug.lsp mit +;; vfl-getpoint, Gefaellestrecke.lsp, ssg_core.lsp) +;; - Umgebungsvariable DXFMAKRO gesetzt +;; +;; Repliziertes Szenario (aus manuellem Test): +;; Start Z=4500, AS rechts +;; -> Neue Linie (Ab, Ziel-Z=1800, Winkel 45 Grad), GF ganz am Einlauf +;; -> Horizontal 900 mm mit Separator VOR + NACH (beide horizontal, 0 Grad) +;; -> Vario-Kurve 90 links aussen +;; -> Horizontal 250 mm (ohne Separatoren) +;; -> Vario-Kurve 90 links aussen +;; -> Option 3 (Kettenende definieren): Ziel-Z=4500, Winkel 45 Grad, ES rechts +;; +;; Erwartetes Ergebnis (Ist-Ziel-Report): +;; dX ~ 0, dZ ~ 0 (Ziel exakt getroffen), +;; dY ~ 637 mm = seitlicher Fussabdruck des ES_Element_90 (90-Grad-Schwenk; +;; KEIN Baufehler, sondern die Bauform des ES-Elements). +;; +;; Aufruf in BricsCAD: +;; (load (strcat (getenv "DXFMAKRO") "/tests/test_linienzug.lsp")) +;; TEST_LINIENZUG +;; ============================================================ + +;; Naechste Skript-Antwort liefern (FIFO). Bei leerer Queue Warnung + "". +(defun tlz-pop ( / v) + (if *tlz-q* + (progn (setq v (car *tlz-q*)) (setq *tlz-q* (cdr *tlz-q*)) v) + (progn (princ "\n [TEST_LINIENZUG] WARNUNG: Skript-Queue leer - unerwartete Abfrage!") "") + ) +) + +;; Mock-Eingabefunktionen. getpoint erhaelt als 1. Argument den Basispunkt +;; (p-akt) bei Folge-Segmenten bzw. einen Prompt-String beim Startpunkt. +;; Skript-Eintrag (A x y z) -> absoluter Punkt +;; Skript-Eintrag (P dL hz) -> Basispunkt + dL entlang Richtung hz (Grad), +;; sodass die Projektion in vfl-neue-linie-messen +;; exakt dL ergibt. +(defun tlz-getpoint (a b / spec base rad) + (setq spec (tlz-pop)) + (setq base (if (and a (listp a)) a '(0.0 0.0 0.0))) + (if (and (listp spec) (= (car spec) 'A)) + (list (float (cadr spec)) (float (caddr spec)) (float (cadddr spec))) + (progn + (setq rad (* (float (caddr spec)) (/ pi 180.0))) + (list (+ (car base) (* (float (cadr spec)) (cos rad))) + (+ (cadr base) (* (float (cadr spec)) (sin rad))) + (caddr base)) + ) + ) +) +(defun tlz-getstring (a) (tlz-pop)) +(defun tlz-getint (a) (tlz-pop)) +(defun tlz-getreal (a) (tlz-pop)) + +(defun c:TEST_LINIENZUG ( / old-vgp old-gs old-gi old-gr err) + (if (or (not *lib-initialized*) (null bogen-auf)) (init-bibliothek)) + (if (null (car (atoms-family 1 '("VF-LINIENZUG-MODUS")))) + (progn + (alert (strcat "vf-linienzug-modus nicht geladen!\n" + "Bitte Menue/Module laden (VarioFoerderer + Gefaellestrecke).")) + (exit) + ) + ) + + (princ "\n================================================================") + (princ "\n TEST_LINIENZUG - VF-Linienzug Replay-Test") + (princ "\n================================================================") + + (ssg-start "TEST_LINIENZUG" '(("OSMODE") ("ATTREQ") ("ATTDIA"))) + (setvar "OSMODE" 0) + (setvar "ATTREQ" 0) + (setvar "ATTDIA" 0) + + ;; --- Skript der Eingaben in exakter Aufruf-Reihenfolge --- + (setq *tlz-q* + (list + (list 'A 0 0 0) ; getpoint Startpunkt der Kette + 4500.0 ; getreal Hoehe (Z) Startpunkt + "2" ; getstring AS-Seite (rechts) + "1" ; getstring Naechstes Element (Neue Linie) + (list 'P 5500 0) ; getpoint Endpunkt Linie (frei, +X, dL=5500) + 1800.0 ; getreal Hoehe (Z) Linienendpunkt + 1 ; getint Winkelwahl (45 Grad) + "2" ; getstring GF-Verteilung (alles am Einlauf) + "2" ; getstring Ist Endpunkt? (Nein) + "1" ; getstring Naechstes im VF (Horizontal) + (list 'P 900 0) ; getpoint Horizontal-Endpunkt (dL=900, hz=0) + "1" ; getstring Separator VOR? (Ja) + "1" ; getstring Separator NACH? (Ja) + "2" ; getstring Ist Endpunkt? (Nein) + "2" ; getstring Naechstes (Vario-Kurve) + 1 ; getint Kurve-Winkel (90) + "1" ; getstring Kurve-Seite (links) + "1" ; getstring Kurve-Variante (aussen) + "2" ; getstring Ist Endpunkt? (Nein) + "1" ; getstring Naechstes (Horizontal) + (list 'P 250 90) ; getpoint Horizontal-Endpunkt (dL=250, hz=90) + "2" ; getstring Separator VOR? (Nein) + "2" ; getstring Separator NACH? (Nein) + "2" ; getstring Ist Endpunkt? (Nein) + "2" ; getstring Naechstes (Vario-Kurve) + 1 ; getint Kurve-Winkel (90) + "1" ; getstring Kurve-Seite (links) + "1" ; getstring Kurve-Variante (aussen) + "3" ; getstring Ist Endpunkt? (Option 3 - Kettenende) + (list 'P 6215 180) ; getpoint Option-3-Endpunkt (dL=6215, hz=180) + 4500.0 ; getreal Hoehe (Z) Kettenende (ES) + 2 ; getint Option-3-Winkelwahl (45 Grad) + "2" ; getstring ES-Seite (rechts) + ) + ) + + ;; --- Eingabe-Funktionen sichern und durch Mocks ersetzen --- + ;; Punkte ueber den Produktions-Wrapper vfl-getpoint (feste 2-Arity), + ;; getstring/getint/getreal (alle 1-argumentig) direkt. + (setq old-vgp vfl-getpoint old-gs getstring old-gi getint old-gr getreal) + (setq vfl-getpoint tlz-getpoint + getstring tlz-getstring + getint tlz-getint + getreal tlz-getreal) + + ;; --- Linienzug-Modus abspielen (Fehler abfangen, damit Restore sicher laeuft) --- + (setq err (vl-catch-all-apply 'vf-linienzug-modus '())) + + ;; --- Eingabe-Funktionen wiederherstellen (IMMER) --- + (setq vfl-getpoint old-vgp getstring old-gs getint old-gi getreal old-gr) + + (princ "\n================================================================") + (if (vl-catch-all-error-p err) + (princ (strcat "\n TEST_LINIENZUG: FEHLER -> " + (vl-catch-all-error-message err))) + (progn + (princ "\n TEST_LINIENZUG: Kette gebaut.") + (if *tlz-q* + (princ (strcat "\n WARNUNG: " (itoa (length *tlz-q*)) + " Skript-Eintraege NICHT verbraucht (Ablauf weicht ab).")) + (princ "\n Alle Skript-Eingaben verbraucht (Ablauf wie erwartet).")) + (princ "\n Erwartung Ist-Ziel: dX~0, dZ~0, dY~637 mm (ES_90-Seitenversatz).") + ) + ) + (princ "\n================================================================") + + (ssg-end) + (princ) +)