transcendental-lisp/lisp/finance/interest-compounder-test.lisp

104 lines
4.2 KiB
Common Lisp

(load "../unit/unit-test.lisp")
(load "interest-compounder.lisp")
(unit
(let ((compounder))
(list
(defun principal-initialized ()
(setf compounder (interest-compounder 1000 0))
(assert= 1000 (call compounder :get-principal)))
(defun interest-rate-initialized ()
(setf compounder (interest-compounder 0 10))
(assert= 10 (call compounder :get-interest-rate)))
(defun many-years-with-no-interest-rate ()
(setf compounder (interest-compounder 1000 0))
(call compounder :move-forward-years 83)
(assert= 1000 (call compounder :get-principal)))
(defun no-years-with-positive-interest-rate ()
(setf compounder (interest-compounder 1000 10))
(assert= 1000 (call compounder :get-principal)))
(defun one-year-with-positive-interest-rate ()
(setf compounder (interest-compounder 100000 5))
(call compounder :move-forward-years 1)
(assert= 105000 (call compounder :get-principal)))
(defun two-years-with-positive-interest-rate ()
(setf compounder (interest-compounder 100000 5))
(call compounder :move-forward-years 2)
(assert= 110250 (call compounder :get-principal)))
(defun three-years-with-positive-interest-rate ()
(setf compounder (interest-compounder 100000 5))
(call compounder :move-forward-years 3)
(assert= 115763 (call compounder :get-principal)))
(defun four-years-with-positive-interest-rate ()
(setf compounder (interest-compounder 100000 5))
(call compounder :move-forward-years 4)
(assert= 121551 (call compounder :get-principal)))
(defun one-year-with-negative-interest-rate ()
(setf compounder (interest-compounder 100000 -5))
(call compounder :move-forward-years 1)
(assert= 95000 (call compounder :get-principal)))
(defun two-years-with-negative-interest-rate ()
(setf compounder (interest-compounder 100000 -5))
(call compounder :move-forward-years 2)
(assert= 90250 (call compounder :get-principal)))
(defun three-years-with-negative-interest-rate ()
(setf compounder (interest-compounder 100000 -5))
(call compounder :move-forward-years 3)
(assert= 85737 (call compounder :get-principal)))
(defun four-years-with-negative-interest-rate ()
(setf compounder (interest-compounder 100000 -5))
(call compounder :move-forward-years 4)
(assert= 81450 (call compounder :get-principal)))
(defun negative-number-of-years-does-nothing ()
(setf 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 ()
(setf 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 ()
(setf 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 ()
(setf 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 ()
(setf 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 ()
(setf compounder (interest-compounder 100000 5))
(call compounder :move-forward-years 27)
(call compounder :move-forward-years 0)
(assert= 27 (call compounder :get-years-passed))))))