;; 13 tests for the racket interpreter. ;; You should add at least 3 more! ;; To use this file, run evaluator.rkt in DrRacket, ;; and then at the prompt below, type: ;; (load "evaluator-tests.rkt") (reset-tests) (check-expect (UQL->string (eval-expr '(add (uql 14 3 (meter) ()) (uql 9 4 (meter) ())))) "23.00000~5.00000 meter") (check-expect (UQL->string (eval-expr '(add (uql 60 0 (rpm) ()) (uql 10 0 (radian Hz) ())))) "16.28319 radian / second") (check-expect (UQL->string (eval-expr '(sub (uql 14 3 (meter) ()) (uql 9 4 (meter) ())))) "5.00000~5.00000 meter") (check-expect (UQL->string (eval-expr '(mul (uql 14 0 (ft) ()) (uql 9 0 () (yard))))) "126.00000 ft / yard") (check-expect (UQL->string (eval-expr '(neg (mul (uql 14 0 (ft) ()) (uql 9 0 () (yard)))))) "-126.00000 ft / yard") (check-expect (UQL->string (eval-expr '(norm (mul (uql 14 0 (ft) ()) (uql 9 0 () (yard)))))) "42.00000 ") (check-expect (UQL->string (eval-expr '(div (uql 100 0 (kg) ()) (uql 9 0 () (yard))))) "11.11111 kg yard") (check-expect (UQL->string (eval-expr '(pow (uql 100 1 (yard) ()) 2))) "10000.00000~200.00000 yard yard") (check-expect (UQL->string (eval-expr '(pow (norm (uql 100 0 (yard) ())) 2))) "8361.27360 meter meter") (check-expect (UQL->string (eval-expr '(norm (div (uql 100 0 (kg) ()) (uql 9 0 () (yard)))))) "10.16000 kg meter") (check-expect (begin (interpret-unicalc '(def a (uql 14 3 (meter) ())) ) (interpret-unicalc '(def b (uql 9 4 (meter) ())) ) (UQL->string (eval-expr '(add (uql 1 0 (a) ()) (uql 1 0 (b) ())) ))) "23.00000~5.00000 meter") (check-expect (begin (interpret-unicalc '(def k (uql 14.4 0.3 (foot) ())) ) (UQL->string (eval-expr '(norm (uql 1 0 (k) ())))) ) "4.38912~0.09144 meter") (check-expect (begin (interpret-unicalc '(def w (uql 4.52 0.02 (cm) ())) ) (interpret-unicalc '(def x (uql 2.0 0.2 (cm) ())) ) (interpret-unicalc '(def y (uql 3.0 0.6 (cm) ())) ) (UQL->string (eval-expr '(norm (sub (add (uql 1 0 (x) ()) (uql 1 0 (y) ())) (uql 1 0 (w) ())))))) "0.00480~0.00633 meter") (generate-report)