(load "../unit/unit-test.lisp") (load "interest-compounder.lisp") (unit (let ((compounder)) (list (defun principal-initialized () (setq compounder (interest-compounder 1000 0)) (assert= 1000 (call compounder :get-principal))) (defun interest-rate-initialized () (setq compounder (interest-compounder 0 10)) (assert= 10 (call compounder :get-interest-rate))) (defun many-years-with-no-interest-rate () (setq compounder (interest-compounder 1000 0)) (call compounder :move-forward-years 83) (assert= 1000 (call compounder :get-principal))) (defun no-years-with-positive-interest-rate () (setq compounder (interest-compounder 1000 10)) (assert= 1000 (call compounder :get-principal))) (defun one-year-with-positive-interest-rate () (setq compounder (interest-compounder 100000 5)) (call compounder :move-forward-years 1) (assert= 105000 (call compounder :get-principal))) (defun two-years-with-positive-interest-rate () (setq compounder (interest-compounder 100000 5)) (call compounder :move-forward-years 2) (assert= 110250 (call compounder :get-principal))) (defun three-years-with-positive-interest-rate () (setq compounder (interest-compounder 100000 5)) (call compounder :move-forward-years 3) (assert= 115763 (call compounder :get-principal))) (defun four-years-with-positive-interest-rate () (setq compounder (interest-compounder 100000 5)) (call compounder :move-forward-years 4) (assert= 121551 (call compounder :get-principal))) (defun one-year-with-negative-interest-rate () (setq compounder (interest-compounder 100000 -5)) (call compounder :move-forward-years 1) (assert= 95000 (call compounder :get-principal))) (defun two-years-with-negative-interest-rate () (setq compounder (interest-compounder 100000 -5)) (call compounder :move-forward-years 2) (assert= 90250 (call compounder :get-principal))) (defun three-years-with-negative-interest-rate () (setq compounder (interest-compounder 100000 -5)) (call compounder :move-forward-years 3) (assert= 85737 (call compounder :get-principal))) (defun four-years-with-negative-interest-rate () (setq compounder (interest-compounder 100000 -5)) (call compounder :move-forward-years 4) (assert= 81450 (call compounder :get-principal))) (defun negative-number-of-years-does-nothing () (setq compounder (interest-compounder 100000 5)) (call compounder :move-forward-years -4) (assert= 100000 (call compounder :get-principal)) (call compounder :move-forward-years 1) (call compounder :move-forward-years -4) (assert= 105000 (call compounder :get-principal))) (defun zero-number-of-years-does-nothing () (setq compounder (interest-compounder 100000 5)) (call compounder :move-forward-years 0) (assert= 100000 (call compounder :get-principal)) (call compounder :move-forward-years 1) (call compounder :move-forward-years 0) (assert= 105000 (call compounder :get-principal))) (defun variable-interest-rate () (setq compounder (interest-compounder 100000 5)) (call compounder :move-forward-years 2) (call compounder :set-interest-rate 10) (call compounder :move-forward-years 2) (assert= 133403 (call compounder :get-principal))) (defun years-are-updated () (setq compounder (interest-compounder 100000 5)) (call compounder :move-forward-years 27) (assert= 27 (call compounder :get-years-passed))) (defun negative-number-of-years-does-not-update-years () (setq compounder (interest-compounder 100000 5)) (call compounder :move-forward-years 27) (call compounder :move-forward-years -2) (assert= 27 (call compounder :get-years-passed))) (defun zero-number-of-years-does-not-update-years () (setq compounder (interest-compounder 100000 5)) (call compounder :move-forward-years 27) (call compounder :move-forward-years 0) (assert= 27 (call compounder :get-years-passed))) (defun make-contribution () (setq compounder (interest-compounder 100000 5)) (call compounder :make-contribution 2000) (assert= 102000 (call compounder :get-principal))) (defun make-several-contributions () (setq compounder (interest-compounder 100000 5)) (call compounder :make-contribution 2000) (call compounder :make-contribution 2000) (call compounder :make-contribution 1000) (assert= 105000 (call compounder :get-principal))) (defun make-several-contributions-and-earn-interest () (setq compounder (interest-compounder 100000 5)) (call compounder :make-contribution 2000) (call compounder :move-forward-years 2) (call compounder :make-contribution 2000) (call compounder :move-forward-years 2) (assert= 126187 (call compounder :get-principal))))))