;; ============================================================ ;; test_foerderer.lsp - Automatischer Integrationstest fuer VarioFoerderer ;; ;; Erzeugt 12 Variofoerderer (6x Auf, 6x Ab) mit deltaL=7000 ;; und verschiedenen Hoehenstufen. Speichert: ;; - tests/output/foerderer_results.json (Ergebnisse) ;; - tests/output/foerderer_tests.dxf (Zeichnung) ;; ;; Voraussetzungen: ;; - SSG_LIB geladen (VarioFoerderer.lsp, ssg_core.lsp) ;; - Umgebungsvariable DXFMAKRO gesetzt ;; ;; Aufruf in BricsCAD: ;; (load (strcat (getenv "DXFMAKRO") "/tests/test_foerderer.lsp")) ;; TEST_FOERDERER ;; ============================================================ ;; --- Ergebnis eines Testfalls als JSON-String erzeugen --- (defun foerderer:test-result-json (test-id richtung deltaL deltaH status winkel L_GF L_VF / json) (setq json (strcat " {\n" " \"test_id\": \"" test-id "\",\n" " \"richtung\": \"" richtung "\",\n" " \"deltaL\": " (rtos deltaL 2 0) ",\n" " \"deltaH\": " (rtos deltaH 2 0) ",\n" " \"status\": \"" status "\"")) (if winkel (setq json (strcat json ",\n" " \"winkel\": " (itoa winkel) ",\n" " \"L_GF\": " (rtos L_GF 2 1) ",\n" " \"L_VF\": " (rtos L_VF 2 1))) ) (setq json (strcat json "\n }")) json ) ;; --- JSON-Export der Foerderer-Testergebnisse --- (defun foerderer:export-results (tests-out-dir / out-json f first) (if (null *foerderer-test-results*) (princ "\n Keine Foerderer-Ergebnisse vorhanden.") (progn (vl-mkdir tests-out-dir) (setq out-json (strcat tests-out-dir "/foerderer_results.json")) (setq f (open out-json "w")) (if f (progn (write-line "[" f) (setq first T) (foreach r *foerderer-test-results* (if (not first) (write-line "," f)) (write-line r f) (setq first nil) ) (write-line "]" f) (close f) (princ (strcat "\n Ergebnisse: " out-json)) ) (princ (strcat "\n FEHLER: Kann " out-json " nicht schreiben!")) ) ) ) ) ;; ============================================================ ;; C:TEST_FOERDERER - Hauptbefehl ;; ============================================================ (defun c:TEST_FOERDERER ( / deltaL deltaH richtung ergebnis best-winkel L_GF L_VF y-offset hoehen-liste idx anz-gebaut anz-nicht-gebaut results-list test-id) ;; Bibliothek initialisieren (laedt Block-Library und extrahiert Masse) (if (not *lib-initialized*) (init-bibliothek) ) (ssg-start "TEST_FOERDERER" '(("OSMODE") ("CECOLOR") ("ATTREQ") ("ATTDIA"))) (setvar "OSMODE" 0) (setvar "ATTREQ" 0) (setvar "ATTDIA" 0) (setq deltaL 7000) (setq hoehen-liste '(0 1000 2000 3000 4000 5000)) (setq y-offset 0) (setq idx 0) (setq results-list '()) (setq anz-gebaut 0) (setq anz-nicht-gebaut 0) (princ "\n") (princ "\n================================================================") (princ "\n TEST_FOERDERER - Variofoerderer Integrationstest") (princ "\n================================================================") (princ (strcat "\n Distanz dL = " (rtos deltaL 2 0) " mm")) (princ "\n Hoehenstufen: 0, 1000, 2000, 3000, 4000, 5000 mm") (princ "\n Richtungen: Auf + Ab") (princ "\n================================================================") ;; ========================================================== ;; TEIL 1: Aufwaerts-Tests (6 Foerderer) ;; ========================================================== (foreach deltaH hoehen-liste (setq idx (1+ idx)) (setq richtung "Auf") (setq test-id (strcat "VF_Auf_" (rtos deltaH 2 0))) (setq ergebnis (berechne-alle-winkel deltaL deltaH richtung)) (setq best-winkel (car ergebnis)) (setq L_GF (cadr ergebnis)) (setq L_VF (caddr ergebnis)) (if (and best-winkel L_GF L_VF (> L_GF 0) (> L_VF 0)) (progn (setq anz-gebaut (1+ anz-gebaut)) (princ (strcat "\n " (itoa idx) ". " test-id " -> GEBAUT " (itoa best-winkel) " Grad L_GF=" (rtos L_GF 2 1) " L_VF=" (rtos L_VF 2 1))) (variofoerderer-einfuegen deltaL deltaH richtung best-winkel (/ L_GF 2.0) (/ L_GF 2.0) L_VF (list 0 y-offset 0) "links" idx 0) (setq results-list (cons (foerderer:test-result-json test-id richtung deltaL deltaH "GEBAUT" best-winkel L_GF L_VF) results-list)) ) (progn (setq anz-nicht-gebaut (1+ anz-nicht-gebaut)) (princ (strcat "\n " (itoa idx) ". " test-id " -> NICHT_GEBAUT")) (setq results-list (cons (foerderer:test-result-json test-id richtung deltaL deltaH "NICHT_GEBAUT" nil nil nil) results-list)) ) ) (setq y-offset (- y-offset 200)) ) ;; ========================================================== ;; TEIL 2: Abwaerts-Tests (6 Foerderer) ;; ========================================================== (foreach deltaH hoehen-liste (setq idx (1+ idx)) (setq richtung "Ab") (setq test-id (strcat "VF_Ab_" (rtos deltaH 2 0))) (if (< deltaH 1) (progn (setq anz-nicht-gebaut (1+ anz-nicht-gebaut)) (princ (strcat "\n " (itoa idx) ". " test-id " -> GEOMETRISCH_UNMOEGLICH")) (setq results-list (cons (foerderer:test-result-json test-id richtung deltaL deltaH "GEOMETRISCH_UNMOEGLICH" nil nil nil) results-list)) ) (progn (setq ergebnis (berechne-alle-winkel deltaL deltaH richtung)) (setq best-winkel (car ergebnis)) (setq L_GF (cadr ergebnis)) (setq L_VF (caddr ergebnis)) (if (and best-winkel L_GF L_VF (> L_GF 0) (> L_VF 0)) (progn (setq anz-gebaut (1+ anz-gebaut)) (princ (strcat "\n " (itoa idx) ". " test-id " -> GEBAUT " (itoa best-winkel) " Grad L_GF=" (rtos L_GF 2 1) " L_VF=" (rtos L_VF 2 1))) (variofoerderer-einfuegen deltaL deltaH richtung best-winkel (/ L_GF 2.0) (/ L_GF 2.0) L_VF (list 0 y-offset 0) "links" idx 0) (setq results-list (cons (foerderer:test-result-json test-id richtung deltaL deltaH "GEBAUT" best-winkel L_GF L_VF) results-list)) ) (progn (setq anz-nicht-gebaut (1+ anz-nicht-gebaut)) (princ (strcat "\n " (itoa idx) ". " test-id " -> NICHT_GEBAUT")) (setq results-list (cons (foerderer:test-result-json test-id richtung deltaL deltaH "NICHT_GEBAUT" nil nil nil) results-list)) ) ) ) ) (setq y-offset (- y-offset 200)) ) ;; ========================================================== ;; Zusammenfassung ;; ========================================================== (princ "\n================================================================") (princ (strcat "\n Ergebnis: " (itoa anz-gebaut) " GEBAUT, " (itoa anz-nicht-gebaut) " NICHT_GEBAUT")) (princ "\n================================================================") ;; Ergebnisse in globaler Variable speichern (setq *foerderer-test-results* (reverse results-list)) (ssg-end) (princ "\n================================================================") (princ "\n TEST_FOERDERER abgeschlossen.") (princ "\n================================================================") (princ) )