Merge branch 'master' of https://gitea.schoenenberger.de/m.stangl/dxfmakros
This commit is contained in:
+2
-1
@@ -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
|
||||
|
||||
@@ -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)
|
||||
)
|
||||
|
||||
@@ -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)
|
||||
)
|
||||
Reference in New Issue
Block a user