#![allow(unused_variables)]
#![allow(unused_imports)]
#![allow(dead_code)]
use finance_solution::*;
use num_format::{Locale};
pub fn main() {
retirement_problem_1();
}
fn pv_problem_1() {
let future_value = 140_000;
let periods = 13;
let rate = 0.14;
let pv_problem_1 = present_value_solution(rate, periods, future_value, false);
dbg!(&pv_problem_1); dbg!(pv_problem_1.present_value()); dbg!(present_value(rate, periods, future_value, false)); assert_rounded_2(25_489.71, pv_problem_1.present_value());
}
fn fv_problem_1() {
let present_value = 247_000;
let periods = 9;
let rate = 0.11;
let fv_problem_1 = future_value_solution(rate, periods, present_value, false);
dbg!(&fv_problem_1); dbg!(fv_problem_1.future_value()); dbg!(future_value(rate, periods, present_value, false)); assert_rounded_2(631_835.12, fv_problem_1.future_value());
}
fn nper_problem_1() {
let present_value = 136_000;
let future_value = 468_000;
let rate = 0.08;
let nper_problem_1 = periods_solution(rate, present_value, future_value, false);
dbg!(&nper_problem_1); dbg!(nper_problem_1.periods()); dbg!(nper_problem_1.fractional_periods()); dbg!(periods(rate, present_value, future_value, false)); assert_rounded_2(16.06, nper_problem_1.fractional_periods());
}
fn rate_problem_1() {
let pv = 137_000;
let fv = 475_000;
let periods = 14;
let rate_problem_1 = rate_solution(periods, pv, fv, false);
dbg!(&rate_problem_1);
dbg!(&rate_problem_1.rate());
assert_rounded_4(0.0929, rate_problem_1.rate());
}
fn pv_problem_2() {
let years = 5;
let apr = 0.13;
let fv = 197_000;
let ear = convert_apr_to_ear(apr, 2);
dbg!(apr, ear);
assert!(ear > apr);
let periods = years;
let pv_problem_2_ear = present_value_solution(ear, periods, fv, false);
dbg!(&pv_problem_2_ear);
assert_rounded_2(104_947.03, pv_problem_2_ear.present_value());
let epr = convert_apr_to_epr(apr, 2);
dbg!(apr, ear, epr);
assert_approx_equal!(apr / 2.0, epr);
let periods = years * 2;
let pv_problem_2_epr = present_value_solution(epr, periods, fv, false);
dbg!(&pv_problem_2_epr);
assert_rounded_2!(104_947.03, pv_problem_2_epr.present_value());
assert_approx_equal!(pv_problem_2_ear.present_value(), pv_problem_2_epr.present_value());
}
fn fv_problem_2() {
let pv = 153_000;
}
fn periods_problem_2() {
let present_value = 197_000;
let future_value = 554_000;
let apr = 0.08;
let rate = convert_apr_to_epr(apr, 12);
let months = periods(rate, present_value, future_value, false);
dbg!(months);
let years = months / 12.0;
dbg!(years);
}
fn rate_problem_2() {
let present_value = 134_000.0;
let future_value = 459_000.0;
let years = 15;
let periods_per_year = 52;
let periods = years * periods_per_year;
let weekly_rate = rate(periods, present_value, future_value, false);
dbg!(weekly_rate);
let apr = convert_epr_to_apr(weekly_rate, periods_per_year);
dbg!(apr);
let ear = convert_apr_to_ear(apr, periods_per_year);
let check_future_value = finance_solution::future_value(ear, years, present_value, false);
dbg!(check_future_value);
assert_rounded_4(check_future_value, future_value as f64);
}
fn rate_conversion_problem_1() {
let apr = 0.013;
let compounding_periods_per_year = 4;
}
fn pv_annuity_problem_1() {
let annuity = -24_000; let periods = 11;
let rate = 0.13;
let pv_annuity_problem_1 = present_value_annuity_solution(rate, periods, annuity, false);
dbg!(pv_annuity_problem_1);
}
fn fv_annuity_problem_1() {
let rate= 0.14;
let periods = 12;
let payment = -16_000; let fv_annuity_problem_1 = future_value_annuity_solution(rate, periods, payment, false);
dbg!(&fv_annuity_problem_1);
}
fn retirement_problem_1() {
let retire_in = 33;
let live_how_many_years_after_retirement = 27;
let retirement_income = 180_000;
let total_inheritance = 2_500_000;
let rate_before_retire = 0.12;
let rate_after_retire = 0.06;
let due_at_beginning = true;
let value_at_retirement_for_income= present_value_annuity(rate_after_retire, live_how_many_years_after_retirement, -retirement_income, due_at_beginning);
dbg!(value_at_retirement_for_income);
let value_at_retirement_for_inheritance = present_value(rate_after_retire, live_how_many_years_after_retirement, total_inheritance, false);
dbg!(value_at_retirement_for_inheritance);
let total_at_retirement = value_at_retirement_for_income + value_at_retirement_for_inheritance;
dbg!(total_at_retirement);
let due_at_beginning = false;
let payment_before_retirement = payment_solution(rate_before_retire, retire_in, 0, total_at_retirement, due_at_beginning);
dbg!(&payment_before_retirement);
assert_rounded_2(-8_874.79, payment_before_retirement.payment());
let payment = payment_before_retirement.payment();
let due_at_beginning = false;
let check_value_at_retirement = future_value_annuity(rate_before_retire, retire_in, payment, due_at_beginning);
dbg!(total_at_retirement, check_value_at_retirement);
assert_approx_equal!(total_at_retirement, check_value_at_retirement);
let rate = rate_after_retire;
let periods = live_how_many_years_after_retirement;
let present_value = check_value_at_retirement;
let future_value = -total_inheritance;
let due_at_beginning = true;
let check_payment_after_retirement = payment_solution(rate, periods, present_value, future_value, due_at_beginning);
dbg!(&check_payment_after_retirement);
assert_approx_equal!(-retirement_income as f64, check_payment_after_retirement.payment());
}