simple test suite / answer key for contributors
This commit is contained in:
		
							
								
								
									
										116
									
								
								src/path_to_answer_sheet.clj
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										116
									
								
								src/path_to_answer_sheet.clj
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,116 @@
 | 
			
		||||
(ns path-to-answer-sheet
 | 
			
		||||
  (:use [path-to-enlightenment :exclude (run)]
 | 
			
		||||
        [clojure.string :only (join split)]
 | 
			
		||||
        clojure.test))
 | 
			
		||||
 | 
			
		||||
(def answers
 | 
			
		||||
  {"equalities" {"__" [true
 | 
			
		||||
                       2
 | 
			
		||||
                       7
 | 
			
		||||
                       5]}
 | 
			
		||||
   "lists" {"__" ["1 2 3 4 5"
 | 
			
		||||
                  1
 | 
			
		||||
                  [2 3 4 5]
 | 
			
		||||
                  "()"
 | 
			
		||||
                  [:a :b :c :d :e]
 | 
			
		||||
                  [0 :a :b :c :d :e]
 | 
			
		||||
                  :a
 | 
			
		||||
                  [:b :c :d :e]
 | 
			
		||||
                  "\"No dice!\""
 | 
			
		||||
                  "()"]}
 | 
			
		||||
   "vectors" {"__" [0
 | 
			
		||||
                    2
 | 
			
		||||
                    [333]
 | 
			
		||||
                    :jelly
 | 
			
		||||
                    :jelly
 | 
			
		||||
                    [:butter :and]]}
 | 
			
		||||
   "sets" {"__" [#{1 2 3 4 5}
 | 
			
		||||
                 #{1 2 3 4 5}
 | 
			
		||||
                 #{2 3}
 | 
			
		||||
                 #{1 4}]}
 | 
			
		||||
   "maps" {"__" [0
 | 
			
		||||
                 1
 | 
			
		||||
                 2
 | 
			
		||||
                 2
 | 
			
		||||
                 1
 | 
			
		||||
                 1
 | 
			
		||||
                 "\"Vancouver\""
 | 
			
		||||
                 true
 | 
			
		||||
                 false
 | 
			
		||||
                 "\"February\""
 | 
			
		||||
                 1 "\"January\""
 | 
			
		||||
                 2006 2010 2014
 | 
			
		||||
                 "\"Vancouver\""]}
 | 
			
		||||
   "functions" {"__" [1024
 | 
			
		||||
                      32 5
 | 
			
		||||
                      1024 2
 | 
			
		||||
                      20 "*"]
 | 
			
		||||
                "___" ["(fn [f] (f 5))"]}
 | 
			
		||||
   "conditionals" {"__" [:a
 | 
			
		||||
                         []
 | 
			
		||||
                         0
 | 
			
		||||
                         :glory
 | 
			
		||||
                         "'doom" 0 ]}
 | 
			
		||||
   "higher_order_functions" {"__" [4 8 12
 | 
			
		||||
                                   "(* x x)"
 | 
			
		||||
                                   [false false true false false]
 | 
			
		||||
                                   "()"
 | 
			
		||||
                                   true
 | 
			
		||||
                                   "(< x 31)"
 | 
			
		||||
                                   "(* 10 x)" "(< x 4)"
 | 
			
		||||
                                   24
 | 
			
		||||
                                   100
 | 
			
		||||
                                   "(count a)" "(count b)"]}
 | 
			
		||||
   "runtime_polymorphism" {"__" ["(str (:name a) \" eats veggies.\")"
 | 
			
		||||
                                 "(str (:name a) \" eats animals.\")"
 | 
			
		||||
                                 "(str \"I don't know what \" (:name a) \" eats.\")"
 | 
			
		||||
                                 "\"Hello World!\""
 | 
			
		||||
                                 "\"Hello, you silly world.\""
 | 
			
		||||
                                 "\"Hello to this group: Peter, Paul, Mary!\"" ]}
 | 
			
		||||
   "sequence_comprehensions" {"__" [[0 1 2 3 4 5]
 | 
			
		||||
                                    "(* index index)"
 | 
			
		||||
                                    "(range 10)"
 | 
			
		||||
                                    "(odd? index)" "(* index index)"
 | 
			
		||||
                                    "[row column]"
 | 
			
		||||
                                    ]}
 | 
			
		||||
   "partial_functions" {"__" [4
 | 
			
		||||
                              :a :b :c :d
 | 
			
		||||
                              :c :d]
 | 
			
		||||
                        "___" ["multiply-by-5"]}
 | 
			
		||||
   })
 | 
			
		||||
 | 
			
		||||
(defn replace-with [s k replacements]
 | 
			
		||||
  (let [unreplaced-texts (split s (re-pattern (str "\\b" k "\\b")))]
 | 
			
		||||
    (join
 | 
			
		||||
      (butlast
 | 
			
		||||
        (interleave
 | 
			
		||||
          unreplaced-texts
 | 
			
		||||
          (concat replacements (repeat k)))))))
 | 
			
		||||
 | 
			
		||||
(defn koan-text [koan]
 | 
			
		||||
  (slurp (str "src/koans/" koan ".clj")))
 | 
			
		||||
 | 
			
		||||
(defn answers-for [koan sym]
 | 
			
		||||
  ((answers koan {}) sym []))
 | 
			
		||||
 | 
			
		||||
(defn fill-in-answers [text koan sym]
 | 
			
		||||
  (replace-with text sym (answers-for koan sym)))
 | 
			
		||||
 | 
			
		||||
(defn run []
 | 
			
		||||
  (try
 | 
			
		||||
    (dorun
 | 
			
		||||
      (map
 | 
			
		||||
        (fn [koan]
 | 
			
		||||
          (load-string
 | 
			
		||||
            (-> (koan-text koan)
 | 
			
		||||
                (fill-in-answers koan "__")
 | 
			
		||||
                (fill-in-answers koan "___"))))
 | 
			
		||||
        ordered-koans))
 | 
			
		||||
 | 
			
		||||
    (println "\nThe answer key checks out!")
 | 
			
		||||
 | 
			
		||||
    (catch Exception e
 | 
			
		||||
      (println "\nAnswer sheet fail: " e)
 | 
			
		||||
      (.printStackTrace e)
 | 
			
		||||
      (println "Answer sheet fail"))))
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										2
									
								
								test.bat
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										2
									
								
								test.bat
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,2 @@
 | 
			
		||||
java -cp lib/clojure-1.2.0-beta1.jar;src clojure.main -e '(load "path_to_answer_sheet")' -e "(do (in-ns 'path-to-answer-sheet) (run))"
 | 
			
		||||
echo
 | 
			
		||||
		Reference in New Issue
	
	Block a user