Conflicts:
	implementation/mini-meval.lisp
	test-unitaire.lisp
This commit is contained in:
Bertrand BRUN 2010-11-20 00:17:36 +01:00
commit 5c8d0818dc
11 changed files with 82 additions and 64 deletions

View File

@ -19,7 +19,7 @@
;; Exemple de la structure env-stack après création de deux ;; Exemple de la structure env-stack après création de deux
;; environnements en plus du top-level et ajout de plusieurs laisons. ;; environnements en plus du top-level et ajout de plusieurs laisons.
(load "test-unitaire") (require 'test-unitaire "test-unitaire")
(erase-tests environnement) (erase-tests environnement)
(deftestvar environnement exemple-env-stack (deftestvar environnement exemple-env-stack
'(;; Environnement le plus bas (dernières définitions par ordre '(;; Environnement le plus bas (dernières définitions par ordre
@ -148,3 +148,5 @@ l'environnement top-level."
(set-top-level-binding (copy-tree '(("LEVEL2" (X . 42)) ("TOP-LEVEL" (Y . 56)))) (set-top-level-binding (copy-tree '(("LEVEL2" (X . 42)) ("TOP-LEVEL" (Y . 56))))
'Y "42") 'Y "42")
'(("LEVEL2" (X . 42)) ("TOP-LEVEL" (Y . "42")))) '(("LEVEL2" (X . 42)) ("TOP-LEVEL" (Y . "42"))))
(provide 'environnement)

View File

@ -1,6 +1,6 @@
(load "match") (require 'match "match")
(load "util") (require 'util "util")
(load "implementation/lisp2cli") (require 'lisp2cli "implementation/lisp2cli")
(defvar asm-fixnum-size 32) (defvar asm-fixnum-size 32)
(defvar asm-max-fixnum (expt 2 asm-fixnum-size)) (defvar asm-max-fixnum (expt 2 asm-fixnum-size))
@ -136,3 +136,5 @@
;; pop r0 ;; pop r0
;; add r1 r0 ;; add r1 r0
;; retn ;; retn
(provide 'compilation)

View File

@ -371,4 +371,6 @@ Est transformé en :
[get-global-cell-value x] [get-global-cell-value x]
[set-global-cell-value x [pop]] [set-global-cell-value x [pop]]
|# |#
(provide 'lisp2cli)

View File

@ -1,5 +1,5 @@
(load "match") (require 'match "match")
(load "util") (require 'util "util")
;; TODO (dans mini-meval et/ou compilateur) : ;; TODO (dans mini-meval et/ou compilateur) :
;; - match-automaton(tagbody+block) ;; - match-automaton(tagbody+block)
@ -554,3 +554,5 @@ Mini-meval sera appellé sur des morceaux spécifiques du fichier source. Il fau
(deftest (mini-meval block) (deftest (mini-meval block)
(mini-meval '(block foo 1 2)) (mini-meval '(block foo 1 2))
2) 2)
(provide 'mini-meval)

View File

@ -214,18 +214,19 @@
;;Test Unitaire ;;Test Unitaire
;; TODO : Faire deftestvar ;; TODO : Faire deftestvar
;; TODO : Finir le test unitaire ;; TODO : Finir le test unitaire
(load "test-unitaire") (require 'test-unitaire "test-unitaire")
(erase-tests virtual-machine) (erase-tests virtual-machine)
(deftestvar virtual-machine t-r0-value (+ 1 (random 42))) ;; r0 > 0 pour la division. (deftestvar virtual-machine t-r0-value (+ 1 (random-test 42))) ;; r0 > 0 pour la division.
(deftestvar virtual-machine t-r1-value (random 42)) (deftestvar virtual-machine t-r1-value (random-test 42))
(deftestvar virtual-machine t-m-value (random 42)) (deftestvar virtual-machine t-m-value (random-test 42))
(deftestvar virtual-machine t-vm-size (+ 10 (random 10))) (deftestvar virtual-machine t-vm-size (+ 10 (random-test 10)))
(deftestvar virtual-machine t-adress (random t-vm-size)) (deftestvar virtual-machine t-address (random-test t-vm-size))
(deftestvar virtual-machine vm (deftestvar virtual-machine vm
(progn (let ((vm (make-vm t-vm-size)))
(make-vm t-vm-size)
(set-register vm 'R0 t-r0-value) (set-register vm 'R0 t-r0-value)
(set-memory vm t-adress t-m-value))) (set-register vm 'R1 t-r1-value)
(set-memory vm t-address t-m-value)
vm))
(deftest virtual-machine (deftest virtual-machine
(progn (ISN-LOAD vm t-address 'R0) (progn (ISN-LOAD vm t-address 'R0)
@ -259,7 +260,7 @@
(set-register vm 'R0 2) (set-register vm 'R0 2)
(ISN-MULT vm 'R0 'R1) (ISN-MULT vm 'R0 'R1)
(get-register vm 'R1)) (get-register vm 'R1))
(* 2 t-r0-value)) (* 2 t-r1-value))
(deftest virtual-machine (deftest virtual-machine
(progn (ISN-DIV vm 'R0 'R1) ;; R0 > 0 (voir t-r0-value ci-dessus). (progn (ISN-DIV vm 'R0 'R1) ;; R0 > 0 (voir t-r0-value ci-dessus).
@ -279,5 +280,6 @@
(deftest virtual-machine (deftest virtual-machine
(progn (ISN-PUSH vm 'R1) (progn (ISN-PUSH vm 'R1)
(get-memory vm (get-register vm 'SP))) (get-memory vm (get-register vm 'SP)))
(t-r1-value)) t-r1-value)
(provide 'instructions)

View File

@ -1,14 +1,14 @@
(load "util.lisp") (require 'util "util.lisp")
(load "match.lisp") (require 'match "match.lisp")
;; ` ;; `
(defvar my-quasiquote (car '`(,a))) (defvar my-quasiquote nil);(car '`(,a)))
;; , ;; ,
(defvar my-unquote (caaadr '`(,a))) (defvar my-unquote nil);(caaadr '`(,a)))
;; ,@ ;; ,@
(defvar my-unquote-unsplice (caaadr '`(,@a))) (defvar my-unquote-unsplice nil);(caaadr '`(,@a)))
(defun map-lisp2li (expr env) (defun map-lisp2li (expr env)
(mapcar (lambda (x) (lisp2li x env)) expr)) (mapcar (lambda (x) (lisp2li x env)) expr))
@ -258,7 +258,7 @@ par le compilateur et par linterpréteur"
;; TODO : demander au prof comment corriger (or (= n 0) (= n 1)) qui rend nil car il fait 2 macroexpand 1: (COND ((= N 0)) (T (= N 1))) 2: (LET (#1=#:RESULT-7048) (IF (SETQ #1# (= N 0)) #1# (= N 1))) et 2 vaux nil car n != 0 ;; TODO : demander au prof comment corriger (or (= n 0) (= n 1)) qui rend nil car il fait 2 macroexpand 1: (COND ((= N 0)) (T (= N 1))) 2: (LET (#1=#:RESULT-7048) (IF (SETQ #1# (= N 0)) #1# (= N 1))) et 2 vaux nil car n != 0
;; Test unitaire ;; Test unitaire
(load "test-unitaire") (require 'test-unitaire "test-unitaire")
(erase-tests lisp2li) (erase-tests lisp2li)
(deftest (lisp2li make-stat-env) (deftest (lisp2li make-stat-env)
@ -552,3 +552,4 @@ par le compilateur et par linterpréteur"
'(:let 1 (:set-var (0 1) (:const . 2)) '(:let 1 (:set-var (0 1) (:const . 2))
(:call cons (:cvar 0 1) (:cvar 1 1)))) (:call cons (:cvar 0 1) (:cvar 1 1))))
(provide 'lisp2li)

View File

@ -1,8 +1,14 @@
;(setq *print-circle* t) ;; Main
(load "environnement")
;; Chargement de tous les fichiers, dans l'ordre du tri topologique
;; pour tous les re-charger, sans les charger deux fois.
(load "util")
(load "test-unitaire")
(load "instructions") (load "instructions")
(load "match")
(load "lisp2li") (load "lisp2li")
(load "meval") (load "meval")
;; ... (load "implementation/mini-meval")
;(run-tests t)
;(print-env-stack exemple-env-stack) (provide 'main)

View File

@ -1,4 +1,4 @@
(load "util") ;; n-consp (require 'util "util") ;; n-consp
;; Syntaxe : (match <motif> expression) ;; Syntaxe : (match <motif> expression)
;; ex: (match (:a ? :c) '(a b c)) => t ;; ex: (match (:a ? :c) '(a b c)) => t
@ -660,7 +660,7 @@ donc seule la valeur de la dernière expression de la dernière clause est renvo
(go ,to))) (go ,to)))
(_ (go reject)))))))))) (_ (go reject))))))))))
(load "test-unitaire") (require 'test-unitaire "test-unitaire")
(erase-tests match) (erase-tests match)
;;;; Tests de matching (vrai / faux) ;;;; Tests de matching (vrai / faux)
@ -1429,3 +1429,5 @@ donc seule la valeur de la dernière expression de la dernière clause est renvo
(deftest (match defmatch) (deftest (match defmatch)
(test-match-bar 42) (test-match-bar 42)
'i-m-else) 'i-m-else)
(provide 'match)

View File

@ -1,4 +1,4 @@
(load "match") (require 'match "match")
(defun env-size (env) (defun env-size (env)
(if (or (equalp env #()) (eq env nil)) (if (or (equalp env #()) (eq env nil))
@ -168,8 +168,8 @@ darguments dans un certain environnement."
(error "form special ~S not yet implemented" expr)))) (error "form special ~S not yet implemented" expr))))
;; Test unitaire ;; Test unitaire
(load "test-unitaire") (require 'test-unitaire "test-unitaire")
(load "lisp2li") (require 'lisp2li "lisp2li")
(erase-tests meval) (erase-tests meval)
(deftest (meval :const) (deftest (meval :const)
(meval (lisp2li 3 ())) (meval (lisp2li 3 ()))
@ -288,3 +288,5 @@ darguments dans un certain environnement."
env) env)
#(() 42) #(() 42)
#'equalp) #'equalp)
(provide 'meval)

View File

@ -59,33 +59,26 @@
(if a b (not b))) (if a b (not b)))
(defmacro deftest (module test expected &optional (compare #'equal)) (defmacro deftest (module test expected &optional (compare #'equal))
`(test-add-test (let ((vars (test-get-variables-and-above module)))
',module `(test-add-test
(lambda () ',module
(let* ((vars (test-get-variables-and-above ',module)) (lambda ()
(_test ',test) (let* ((state-1 (make-random-state))
(_expected ',expected) (state-2 (make-random-state state-1))
(_compare ,compare) (res (labels ((random-test (n) (random n state-1)))
;; Les "eval" ci-dessous exécutent : (let* ,vars ,@(mapcar #'car vars) ,test)))
;; (let ((var1 val1) (var2 val2) ...) ;; On définit les (exp (labels ((random-test (n) (random n state-2)))
;; ;; variables de deftestvar. (let* ,vars ,@(mapcar #'car vars) ,expected))))
;; var1 var2 ... ;; On "utilise" les variables pour (if (funcall ,compare res exp)
;; ;; éviter le unused variable warning (progn
;; corps-du-test) ;; On évalue le corps du test dans (format t "~& [SUCCESS] ~w~&" ',test)
;; ;; un environement où les deftestvar t)
;; ;; sont accessibles. (progn
(res (eval `(let* ,vars ,@(mapcar #'car vars) ,_test))) (format t "~& [FAILURE] Test : ~w~&" ',test)
(exp (eval `(let* ,vars ,@(mapcar #'car vars) ,_expected)))) (format t "~& got : ~w~&" res)
(if (funcall _compare res exp) (format t "~& expected : ~w~&" exp)
(progn (format t "~& comparison : ~w~&" ,compare)
(format t "~& [SUCCESS] ~w~&" ',test) nil)))))))
t)
(progn
(format t "~& [FAILURE] Test : ~w~&" ',test)
(format t "~& got : ~w~&" res)
(format t "~& expected : ~w~&" exp)
(format t "~& comparison : ~w~&" _compare)
nil))))))
(defvar b '(x x)) (defvar b '(x x))
(defmacro generates-error-p (code) (defmacro generates-error-p (code)
@ -98,7 +91,7 @@
(defmacro deftestvar (module name value) (defmacro deftestvar (module name value)
`(test-add-variable ',module `(test-add-variable ',module
(list ',name (list 'copy-all ',value)))) (list ',name ',value)))
(defvar run-tests-counter 0) (defvar run-tests-counter 0)
@ -167,7 +160,7 @@
(let* ((foo #(a b (1 #(2 4 6) 3) c)) (let* ((foo #(a b (1 #(2 4 6) 3) c))
(copy-of-foo (copy-all foo))) (copy-of-foo (copy-all foo)))
copy-of-foo copy-of-foo
(setf (aref (cadr (aref copy-of-foo 2)) 1) (cons 'MODIFIED (random 42))) (setf (aref (cadr (aref copy-of-foo 2)) 1) (cons 'MODIFIED (random-test 42)))
(equalp foo #(a b (1 #(2 4 6) 3) c))) (equalp foo #(a b (1 #(2 4 6) 3) c)))
t #'booleq) t #'booleq)
@ -194,3 +187,5 @@
;; (run-tests ()) ;; (run-tests ())
;; (run-tests t) ;; (run-tests t)
;; (run-tests) ;; (run-tests)
(provide 'test-unitaire)

View File

@ -170,7 +170,9 @@
(apply #'append (if (symbolp (car expr)) (apply #'append (if (symbolp (car expr))
(list (car expr)) (list (car expr))
nil) nil)
(mapcar #'find-what-is-used (cdr expr))))) (mapcar #'find-what-is-used-1 (cdr expr)))))
(defun find-what-is-used (expr) (defun find-what-is-used (expr)
(remove-duplicates (find-what-is-used-1 expr))) (remove-duplicates (find-what-is-used-1 expr)))
(provide 'util)