package Ġcom . mb velop . k finance Ċ Ċ import Ġcom . mb velop . k finance . enums . Payment Schedule . BEGIN Ċ import Ġio . kot est . matchers . double s . plus Or Minus Ċ import Ġio . kot est . matchers . shouldBe Ċ import Ġorg . junit . jupiter . api . Nested Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġkotlin . Double . Companion . POSITIVE _ INFINITY Ċ import Ġkotlin . math . pow Ċ Ċ class ĠK Finance Kt Test Ġ{ ĊĊĠĠĠ Ġ@ Nested ĊĠĠĠ Ġinner Ġclass ĠTotal Payment Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġtotal Payment Basic () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġtotal Payment ( 0 . 0 8 Ġ/ Ġ 1 2 , Ġ 5 Ġ* Ġ 1 2 . 0 , Ġ 1 5 0 0 0 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult ĠshouldBe Ġ(- 3 0 4 . 1 4 5 9 1 4 3 2 6 2 0 5 2 3 7 0 3 3 8 7 0 1 4 9 4 Ġplus Or Minus Ġ 1 0 . 0 . pow (- 1 0 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġtotal Payment Rate 0 () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġtotal Payment ( 0 . 0 , Ġ 5 Ġ* Ġ 1 2 . 0 , Ġ 1 5 0 0 0 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult ĠshouldBe Ġ(- 2 5 0 . 0 Ġplus Or Minus Ġ 1 0 . 0 . pow (- 1 0 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġtotal Payment Payment Schedule Begin () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġtotal Payment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 0 8 Ġ/ Ġ 1 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 5 Ġ* Ġ 1 2 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 5 0 0 0 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpayment Schedule Ġ= ĠBEGIN ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult ĠshouldBe Ġ(- 3 0 2 . 1 3 1 7 0 2 9 Ġplus Or Minus Ġ 1 0 . 0 . pow (- 7 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġtotal Payment Additional Input Values () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġtotal Payment ( 0 . 0 , Ġ 1 2 . 0 , Ġ 2 0 0 0 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult ĠshouldBe Ġ(- 1 6 6 . 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 Ġplus Or Minus Ġ 1 0 . 0 . pow (- 1 0 )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġtotal Payment ( 0 . 3 , Ġ 1 2 . 0 , Ġ 2 0 0 0 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult ĠshouldBe Ġ(- 6 2 6 . 9 0 8 1 4 0 1 7 0 0 7 5 7 7 4 8 4 0 2 5 8 6 6 Ġplus Or Minus Ġ 1 0 . 0 . pow (- 1 0 )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġtotal Payment ( 0 . 8 , Ġ 3 . 0 , Ġ 2 0 0 0 0 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult ĠshouldBe Ġ(- 1 9 3 1 1 . 2 5 8 2 7 8 1 4 5 6 9 5 3 6 4 2 3 8 4 1 0 6 0 Ġplus Or Minus Ġ 1 0 . 0 . pow (- 1 0 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Nested ĊĠĠĠ Ġinner Ġclass ĠFuture Value Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġfuture Value Basic () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġfuture Value ( 0 . 0 7 5 , Ġ 2 0 . 0 , Ġ- 2 0 0 0 . 0 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult ĠshouldBe Ġ( 8 6 6 0 9 . 3 6 2 6 7 3 0 4 2 9 2 4 Ġplus Or Minus Ġ 1 0 . 0 . pow (- 1 0 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġfuture Value Payment Schedule Begin () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġfuture Value ( 0 . 0 7 5 , Ġ 2 0 . 0 , Ġ- 2 0 0 0 . 0 , Ġpayment Schedule Ġ= ĠBEGIN ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult ĠshouldBe Ġ( 9 3 1 0 5 . 0 6 4 8 7 4 Ġplus Or Minus Ġ 1 0 . 0 . pow (- 6 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġfuture Value Additional Input Values () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġfuture Value ( 0 . 1 , Ġ 5 . 0 , Ġ 1 0 0 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult ĠshouldBe Ġ(- 6 1 0 . 5 1 0 0 0 0 Ġplus Or Minus Ġ 1 0 . 0 . pow (- 1 0 )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġfuture Value ( 0 . 2 , Ġ 5 . 0 , Ġ 1 0 0 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult ĠshouldBe Ġ(- 7 4 4 . 1 6 0 0 0 0 Ġplus Or Minus Ġ 1 0 . 0 . pow (- 1 0 )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġfuture Value ( 0 . 1 , Ġ 5 . 0 , Ġ 1 0 0 . 0 , Ġpayment Schedule Ġ= ĠBEGIN ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult ĠshouldBe Ġ(- 6 7 1 . 5 6 1 0 0 0 Ġplus Or Minus Ġ 1 0 . 0 . pow (- 1 0 )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġfuture Value ( 0 . 2 , Ġ 5 . 0 , Ġ 1 0 0 . 0 , Ġpayment Schedule Ġ= ĠBEGIN ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult ĠshouldBe Ġ(- 8 9 2 . 9 9 2 0 0 0 Ġplus Or Minus Ġ 1 0 . 0 . pow (- 1 0 )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġfuture Value ( 0 . 0 , Ġ 5 . 0 , Ġ 1 0 0 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult ĠshouldBe Ġ(- 5 0 0 . 0 Ġplus Or Minus Ġ 1 0 . 0 . pow (- 1 0 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Nested ĊĠĠĠ Ġinner Ġclass ĠNet Present Value Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġnet Present Value Basic () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġnet Present Value ( 0 . 0 8 , Ġdouble ArrayOf (- 4 0 0 0 0 . 0 , Ġ 5 0 0 0 . 0 , Ġ 8 0 0 0 . 0 , Ġ 1 2 0 0 0 . 0 , Ġ 3 0 0 0 0 . 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult ĠshouldBe Ġ( 3 0 6 5 . 2 2 2 6 7 Ġplus Or Minus Ġ 1 0 . 0 . pow (- 5 )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġnet Present Value ( 0 . 0 8 , Ġdouble ArrayOf ( 0 . 0 , Ġ 5 0 0 0 . 0 , Ġ 8 0 0 0 . 0 , Ġ 1 2 0 0 0 . 0 , Ġ 3 0 0 0 0 . 0 ), Ġ- 4 0 0 0 0 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult ĠshouldBe Ġ( 3 0 6 5 . 2 2 2 6 7 Ġplus Or Minus Ġ 1 0 . 0 . pow (- 5 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Nested ĊĠĠĠ Ġinner Ġclass ĠNumber Of Periodic Payments Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun ĠnumberOf Periodic Payments Basic () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= ĠnumberOf Periodic Payments ( 0 . 0 , Ġ- 2 0 0 0 . 0 , Ġ 0 . 0 , Ġ 1 0 0 0 0 0 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult ĠshouldBe Ġ( 5 0 . 0 Ġplus Or Minus Ġ 1 0 . 0 . pow (- 5 )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= ĠnumberOf Periodic Payments ( 0 . 0 7 5 , Ġ- 2 0 0 0 . 0 , Ġ 0 . 0 , Ġ 1 0 0 0 0 0 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult ĠshouldBe Ġ( 2 1 . 5 4 4 9 4 4 Ġplus Or Minus Ġ 1 0 . 0 . pow (- 5 )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= ĠnumberOf Periodic Payments ( 0 . 1 , Ġ 0 . 0 , Ġ- 5 0 0 . 0 , Ġ 1 5 0 0 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult ĠshouldBe Ġ( 1 1 . 5 2 6 7 0 4 6 1 Ġplus Or Minus Ġ 1 0 . 0 . pow (- 6 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun ĠnumberOf Periodic Payments Payment Schedule Begin () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠnumberOf Periodic Payments ( 0 . 0 7 5 , Ġ- 2 0 0 0 . 0 , Ġ 0 . 0 , Ġ 1 0 0 0 0 0 . 0 , Ġpayment Schedule Ġ= ĠBEGIN ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult ĠshouldBe Ġ( 2 0 . 7 6 1 5 6 4 4 1 Ġplus Or Minus Ġ 1 0 . 0 . pow (- 8 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun ĠnumberOf Periodic Payments Infinite Payments () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠnumberOf Periodic Payments ( 0 . 0 , Ġ- 0 . 0 , Ġ 1 0 0 0 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult ĠshouldBe ĠPOS ITIVE _ INFINITY ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun ĠnumberOf Periodic Payments No Interest () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠnumberOf Periodic Payments ( 0 . 0 , Ġ- 1 0 0 . 0 , Ġ 1 0 0 0 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult ĠshouldBe Ġ( 1 0 . 0 Ġplus Or Minus Ġ 1 0 . 0 . pow (- 1 0 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Nested ĊĠĠĠ Ġinner Ġclass ĠPresent Value Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġpresent Value Basic () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġpresent Value ( 0 . 0 7 , Ġ 2 0 . 0 , Ġ 1 2 0 0 0 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult ĠshouldBe Ġ(- 1 2 7 1 2 8 . 1 7 0 9 4 6 1 9 3 9 3 2 7 2 9 5 2 2 2 0 0 5 Ġplus Or Minus Ġ 1 0 . 0 . pow (- 1 0 )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġpresent Value ( 0 . 0 7 5 , Ġ 2 0 . 0 , Ġ- 2 0 0 0 . 0 , Ġ 8 6 6 0 9 . 3 6 2 6 7 3 0 4 2 9 2 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult ĠshouldBe Ġ( 0 . 0 Ġplus Or Minus Ġ 1 0 . 0 . pow (- 1 0 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġpresent Value Payment Schedule Begin () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġpresent Value ( 0 . 0 7 5 , Ġ 2 0 . 0 , Ġ- 2 0 0 0 . 0 , Ġ 9 3 1 0 5 . 0 6 4 8 7 4 , ĠBEGIN ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult ĠshouldBe Ġ( 0 . 0 Ġplus Or Minus Ġ 1 0 . 0 . pow (- 6 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġpresent Value Additional Input Values () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġpresent Value ( 0 . 1 , Ġ 5 . 0 , Ġ 1 0 0 . 0 , Ġ- 6 1 0 . 5 1 0 0 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult ĠshouldBe Ġ( 0 . 0 Ġplus Or Minus Ġ 1 0 . 0 . pow (- 1 0 )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġpresent Value ( 0 . 2 , Ġ 5 . 0 , Ġ 1 0 0 . 0 , Ġ- 7 4 4 . 1 6 0 0 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult ĠshouldBe Ġ( 0 . 0 Ġplus Or Minus Ġ 1 0 . 0 . pow (- 1 0 )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġpresent Value ( 0 . 1 , Ġ 5 . 0 , Ġ 1 0 0 . 0 , Ġ- 6 7 1 . 5 6 1 0 0 0 , ĠBEGIN ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult ĠshouldBe Ġ( 0 . 0 Ġplus Or Minus Ġ 1 0 . 0 . pow (- 1 0 )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġpresent Value ( 0 . 2 , Ġ 5 . 0 , Ġ 1 0 0 . 0 , Ġ- 8 9 2 . 9 9 2 0 0 0 , ĠBEGIN ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult ĠshouldBe Ġ( 0 . 0 Ġplus Or Minus Ġ 1 0 . 0 . pow (- 1 0 )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġpresent Value ( 0 . 0 , Ġ 5 . 0 , Ġ 1 0 0 . 0 , Ġ- 5 0 0 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult ĠshouldBe Ġ( 0 . 0 Ġplus Or Minus Ġ 1 0 . 0 . pow (- 1 0 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ