PageRenderTime 46ms CodeModel.GetById 22ms RepoModel.GetById 0ms app.codeStats 0ms

/test/minijava/test_x86.clj

http://github.com/mikedouglas/MiniJava
Clojure | 49 lines | 42 code | 7 blank | 0 comment | 14 complexity | 04a3e25bb9a020cac0a7ef804f4b5c28 MD5 | raw file
  1. (ns minijava.test-x86
  2. (:use clojure.test
  3. minijava.access
  4. minijava.obj
  5. minijava.x86.frame)
  6. (:import [minijava.access InFrame]))
  7. (deftest tests-uni-no-formals
  8. (let [frame (new-x86 0 [] (new-obj []))
  9. vars (for [i (range 4)] (allocLocal frame (str i) (= (mod i 2) 0)))]
  10. (is (zero? (count (formals frame))) "No formals allocated")
  11. (is (apply distinct? vars) "Locals are unique")))
  12. (deftest tests-uni-several-formals
  13. (let [frame (new-x86 0 ["obj" "arg1" "arg2" "arg3"] (new-obj []))
  14. formals (formals frame)
  15. locals (for [i (range 4)] (allocLocal frame (str i) true))
  16. vars (concat formals locals)]
  17. (is (= 4 (count formals)))
  18. (is (apply distinct? vars) "Formals and locals are unique")))
  19. (deftest tests-spacing-of-formals
  20. (let [frame (new-x86 0 ["obj" "arg1" "arg2"] (new-obj []))
  21. spacing (map :offset (formals frame))]
  22. (is (= [8, 12, 16] spacing) "Formals are properly spaced")))
  23. (deftest tests-spacing-of-locals
  24. (let [frame (new-x86 0 [] nil)
  25. locals (for [i (range 3)] (allocLocal frame (str i) true))
  26. spacing (map :offset locals)]
  27. (is (= [-4, -8, -12] spacing) "Locals are properly spaced")))
  28. (deftest tests-location-of-fp-and-rv
  29. (let [frame (new-x86 0 ["obj"] (new-obj []))]
  30. (is (= (InFrame. 4) (rv frame)) "Return address correct")
  31. (is (= (InFrame. 8) (obj frame)) "Object address correct")
  32. (is (= 0 (fp frame)) "Frame pointer correct w/o alloc")
  33. (allocLocal frame "temp" true)
  34. (is (= -4 (fp frame)) "Frame pointer correct w/ alloc")))
  35. (deftest tests-lookup-of-formal
  36. (let [frame (new-x86 0 ["obj" "arg1"] (new-obj []))]
  37. (is (= (obj frame) (lookup frame "obj")) "Object lookup correct")
  38. (is (= (InFrame. 12) (lookup frame "arg1")) "Argument lookup correct")))
  39. (deftest tests-lookup-of-local
  40. (let [frame (new-x86 0 ["obj"] (new-obj []))
  41. local (allocLocal frame "hello" true)]
  42. (is (= local (lookup frame "hello")) "Local lookup correct")))