Um conjunto de estruturas de alto nível para manipular objetos e estado no fluxus de uma forma mais limpa e segura.
EndFunctionDoc
#lang racket/base
(require "scratchpad.ss")
(require "help.ss")
(require "camera.ss")
(require mzlib/string)
(provide
self-test
run-scripts)
functions to extract the examples from the helpmap
indeed its a bit messed, im going to take a look at it, but i cant
make any guarantees that it is gonna be any better :).
(define (get-function-list section)
(caddr (car section)))
(define (get-example func)
(cadddr (cadr func)))
(define (get-name func)
(car func))
(define (test-functions section log)
(for-each
(lambda (i)
(unit-test (get-name i) (get-example i) log))
(get-function-list section)))
(define (test-sections helpmap log)
(for-each
(lambda (i)
(when (not (or
(string=? "high-level-scratchpad-docs" (car i))
(string=? "frisbee" (car i))
(string=? "artkp" (car i))
(string=? "video" (car i))
(string=? "ffgl" (car i))
(string=? "fluxa" (car i))
(string=? "renderer" (car i))
(string=? "planetarium" (car i))
(string=? "testing-functions" (car i)) ; would be silly now, wouldn't it...
))
(test-functions (cdr i) log)))
helpmap))
(define errors 0)
(define error-list '())
(define do-log #f)
(define (unit-test name code log)
(clear)
(printf "testing: ~a~n" name)
(when do-log
(fprintf log "testing: ~a~n" name))
(cond
((string=? code "")
(set! errors (+ errors 1))
(set! error-list (cons name error-list)))
(else
(eval-string
code
(lambda (s)
(when do-log
(fprintf log "--------------------~n")
(fprintf log "~a~n" name)
(fprintf log "~a~n" code)
(fprintf log "~a~n" s))
(set! errors (+ errors 1))
(set! error-list (cons name error-list))))))
(sleep 0.1))
(define (go)
(let ((log (open-output-file "log.txt" #:exists 'replace)))
(file-stream-buffer-mode log 'line)
(test-sections (get-helpmap) log)
(close-output-port log)
(printf "testing found ~a errors: ~a ~n" errors error-list)))
StartFunctionDoc-en
self-test do-logging
Returns: void
Description:
Runs all of the function reference scripts in a separate
thread so you can watch it in action. Just checks for syntactic errors in the
scheme, changes in bound C++ function signatures and crashes.
Graphical code is difficult to test for correctness further (that's my excuse). If
do-logging is true it outputs a log text file to the current directory for debugging.
Example: (self-test #t)
EndFunctionDoc
StartFunctionDoc-pt
self-test faz-logar
Retorna: void
Descrição:
Roda todas as funções de referencia nos fluxus em um thread
separado de forma que você possa ver acontecendo. Apenas checa por
erros sintáticos em scheme, mudanças nas assinaturas das funçoes
C++ ligadas e crashes.
Código gráfico é difícil de testar por correção além (essa é nossa
desculpa). Se faz-logar for verdadeiro um arquivo texto de log é
escrito no diretório atual para debugging.
Exemplo: (self-test #t)
EndFunctionDoc
(define (self-test log)
(set! do-log log)
(thread go))
StartFunctionDoc-en
run-scripts path-to-examples seconds-per-script
Returns: void
Description:
Runs all of the example scripts in a separate
thread so you can watch it in action.
Example: (run-scripts path-to-scripts seconds-per-script)
EndFunctionDoc
StartFunctionDoc-pt
run-scripts caminho-para-exemplos segundos-por-script
Retorna: void
Descrição:
Roda todos os scripts de exemplo em um thread separado para você
poder assistir.
Exemplo: (run-scripts path-to-scripts seconds-per-script)
EndFunctionDoc
(define example "")
(define run-time 5)
(define examples-path "")
(define (run-example)
(load (string-append examples-path example)))
(define (run-all)
(for-each
(lambda (filename)
(let* ((filename (path->string filename))
(len (string-length filename)))
(when (and (> len 4) (string=? ".scm" (substring filename (- len 4) len)))
(printf "~a~n" filename)
(set! example filename)
(clear)
(reset-camera)
(let ((thr (thread run-example)))
(sleep run-time)
(kill-thread thr)
(clear))
)))
(directory-list examples-path)))
(define (run-scripts path time)
(set! examples-path path)
(set! run-time time)
(thread run-all))