 (defn smallest-report
   "Custom generational report."
   [best population generation error-function report-simplifications]
-  (let [best-program (not-lazy (:program best))
-        best-test-errors (error-function best-program :test)
+  (let [best-test-errors (:test-errors (error-function best :test))
         best-total-test-error (apply +' best-test-errors)]
     (println ";;******************************")
     (printf ";; -*- Smallest problem report - generation %s\n" generation)(flush)

        (println (format "Test Case  %3d | Error: %s" i (str error)))))
    (println ";;------------------------------")
    (println "Outputs of best individual on training cases:")
    (error-function best-program :train true)
    (println ";;******************************")
    )) ;; To do validation, could have this function return an altered best individual
       ;; with total-error > 0 if it had error of zero on train but not on validation

   :uniform-mutation-rate 0.01
   :problem-specific-report smallest-report
   :problem-specific-initial-report smallest-initial-report
   :report-simplifications 0
   :final-report-simplifications 5000
   :max-error 1
