Skip to content
Snippets Groups Projects
Commit 27729c8f authored by Reinhold Kainhofer's avatar Reinhold Kainhofer
Browse files

Add unit test files for the cash flows and the initializeCosts function

parent f2416b73
Branches
Tags
No related merge requests found
...@@ -45,6 +45,7 @@ Suggests: ...@@ -45,6 +45,7 @@ Suggests:
pander, pander,
kableExtra, kableExtra,
magrittr, magrittr,
tibble tibble,
testthat
VignetteBuilder: knitr VignetteBuilder: knitr
Roxygen: list(markdown = TRUE) Roxygen: list(markdown = TRUE)
library(testthat)
library(LifeInsuranceContracts)
library(MortalityTables)
mortalityTables.load("Austria_Census")
mortalityTables.load("Austria_Annuities_AVOe2005R")
test_check("LifeInsuranceContracts")
test_that("Deferred Annuity Cash Flows", {
library(MortalityTables)
mortalityTables.load("Austria_Annuities_AVOe2005R")
Tarif.DefAnnuity = InsuranceTarif$new(
name = "Example Tariff - Deferred Annuity",
type = "annuity",
tarif = "Life1",
desc = "A deferred annuity (life-long payments start at age 65) with reg. premiums",
policyPeriod = function(params, values) { 120 - params$ContractData$age},
deferralPeriod = function(params, values) { 65 - params$ContractData$age},
premiumPeriod = function(params, values) { 65 - params$ContractData$age},
premiumRefund = 1,
mortalityTable = AVOe2005R.unisex,
i = 0.005
)
Contract.DefAnnuity = InsuranceContract$new(
tarif = Tarif.DefAnnuity,
age = 40, YOB = 1980,
sumInsured = 1200,
contractClosing = as.Date("2020-09-01"),
calculate = "cashflows"
)
expect_equal(Contract.DefAnnuity$Parameters$ContractData$policyPeriod, 80)
expect_equal(Contract.DefAnnuity$Parameters$ContractData$deferralPeriod, 25)
expect_equal(Contract.DefAnnuity$Parameters$ContractData$premiumPeriod, 25)
expect_true(all(Contract.DefAnnuity$Values$cashFlows %>% select(-premiums_advance, -survival_advance, -death_GrossPremium, -death_Refund_past) == 0))
# 25 years premium cash flow
expect_equal(Contract.DefAnnuity$Values$cashFlows$premiums_advance, c(rep(1, 25), rep(0, 56)))
# premium payment start after 25 years
expect_equal(Contract.DefAnnuity$Values$cashFlows$survival_advance, c(rep(0, 25), rep(1, 55),0))
# premium payment start after 25 years
expect_equal(Contract.DefAnnuity$Values$cashFlows$death_GrossPremium, c(1:25, rep(25, 55),0))
# death refund flag
expect_equal(Contract.DefAnnuity$Values$cashFlows$death_Refund_past, c(rep(1, 80), 0))
})
test_that("Annuity Cash Flows", {
library(MortalityTables)
mortalityTables.load("Austria_Annuities_AVOe2005R")
Tarif.Annuity = InsuranceTarif$new(
name = "Example Tariff - Immediate Annuity",
type = "annuity",
tarif = "Ann1",
desc = "An annuity with single-premium",
premiumPeriod = 1,
mortalityTable = AVOe2005R.unisex,
i = 0.005
)
Contract.Annuity = InsuranceContract$new(
tarif = Tarif.Annuity,
age = 65, YOB = 1955,
sumInsured = 1200,
policyPeriod = 55,
contractClosing = as.Date("2020-09-01"),
calculate = "cashflows"
)
expect_equal(Contract.Annuity$Parameters$ContractData$policyPeriod, 55)
expect_equal(Contract.Annuity$Parameters$ContractData$deferralPeriod, 0)
expect_equal(Contract.Annuity$Parameters$ContractData$premiumPeriod, 1)
expect_true(all(Contract.Annuity$Values$cashFlows %>% select(-premiums_advance, -survival_advance) == 0))
# 1 year premium cash flow
expect_equal(Contract.Annuity$Values$cashFlows$premiums_advance, c(1, rep(0, 55)))
# premium payment start immediately for the whole contract period
expect_equal(Contract.Annuity$Values$cashFlows$survival_advance, c(rep(1, 55), 0))
})
test_that("Dread-Disease Cash Flows", {
library(MortalityTables)
mortalityTables.load("Austria_Census")
# An example dread-disease tariff, morbidity is assumed linearly increasing with age
ddTable = mortalityTable.period(name = "Linear dread-disease table",
ages = 0:100, deathProbs = 0:100/500)
Tarif.DreadDisease = InsuranceTarif$new(
name = "Example Tariff - Dread-Disease",
type = "dread-disease",
tarif = "DD1",
desc = "A dread disease insurance with a lump-sum payment upon diagnosis",
sumInsured = 50000,
mortalityTable = mort.AT.census.2011.unisex,
invalidityTable = ddTable,
i = 0.005
)
Contract.DreadDisease = InsuranceContract$new(
tarif = Tarif.DreadDisease,
age = 40, policyPeriod = 20,
sumInsured = 10000,
contractClosing = as.Date("2020-09-01"),
calculate = "cashflows"
)
expect_equal(Contract.DreadDisease$Parameters$ContractData$policyPeriod, 20)
expect_equal(Contract.DreadDisease$Parameters$ContractData$deferralPeriod, 0)
expect_equal(Contract.DreadDisease$Parameters$ContractData$premiumPeriod, 20)
expect_true(all(Contract.DreadDisease$Values$cashFlows %>% select(-premiums_advance, -disease_SumInsured) == 0))
expect_equal(Contract.DreadDisease$Values$cashFlows$premiums_advance, c(rep(1, 20), 0))
expect_equal(Contract.DreadDisease$Values$cashFlows$disease_SumInsured, c(rep(1, 20), 0))
})
""
test_that("Endowment + Dread-Disease Cash Flows", {
library(MortalityTables)
mortalityTables.load("Austria_Census")
# An example dread-disease tariff, morbidity is assumed linearly increasing with age
ddTable = mortalityTable.period(name = "Linear dread-disease table",
ages = 0:100, deathProbs = 0:100/500)
Tarif.EndowDreadDisease = InsuranceTarif$new(
name = "Example Tariff - Endowment + Dread-Disease",
type = "endowment + dread-disease",
tarif = "EnDD1",
desc = "An endowment and dread disease insurance with a lump-sum payment upon diagnosis",
sumInsured = 50000,
mortalityTable = mort.AT.census.2011.unisex,
invalidityTable = ddTable,
invalidityEndsContract = TRUE,
i = 0.005
)
Contract.EndowDreadDisease = InsuranceContract$new(
tarif = Tarif.EndowDreadDisease,
age = 40, policyPeriod = 20,
sumInsured = 10000,
contractClosing = as.Date("2020-09-01"),
calculate = "cashflows"
)
expect_equal(Contract.EndowDreadDisease$Parameters$ContractData$policyPeriod, 20)
expect_equal(Contract.EndowDreadDisease$Parameters$ContractData$deferralPeriod, 0)
expect_equal(Contract.EndowDreadDisease$Parameters$ContractData$premiumPeriod, 20)
expect_true(all(Contract.EndowDreadDisease$Values$cashFlows %>% select(-premiums_advance, -survival_advance, -death_SumInsured, -death_PremiumFree, -disease_SumInsured) == 0))
expect_equal(Contract.EndowDreadDisease$Values$cashFlows$premiums_advance, c(rep(1, 20), 0))
expect_equal(Contract.EndowDreadDisease$Values$cashFlows$survival_advance, c(rep(0, 20), 1))
expect_equal(Contract.EndowDreadDisease$Values$cashFlows$death_SumInsured, c(rep(1, 20), 0))
expect_equal(Contract.EndowDreadDisease$Values$cashFlows$disease_SumInsured, c(rep(1, 20), 0))
expect_equal(Contract.EndowDreadDisease$Values$cashFlows$death_PremiumFree, c(rep(1, 20), 0))
})
test_that("Endowment Cash Flows", {
library(MortalityTables)
mortalityTables.load("Austria_Census")
Tarif.Endowment.SP = InsuranceTarif$new(
name = "Example Tariff - Endowment Single Premium",
type = "endowment",
tarif = "E1-SP",
desc = "An endowment with single premiums (standard tariff)",
premiumPeriod = 1,
mortalityTable = mort.AT.census.2011.unisex,
i = 0.005
)
Contract.Endowment.SP = InsuranceContract$new(
tarif = Tarif.Endowment.SP,
age = 40, policyPeriod = 20,
sumInsured = 10000,
contractClosing = as.Date("2020-09-01"),
calculate = "cashflows"
)
expect_equal(Contract.Endowment.SP$Parameters$ContractData$policyPeriod, 20)
expect_equal(Contract.Endowment.SP$Parameters$ContractData$deferralPeriod, 0)
expect_equal(Contract.Endowment.SP$Parameters$ContractData$premiumPeriod, 1)
expect_true(all(Contract.Endowment.SP$Values$cashFlows %>% select(-premiums_advance, -survival_advance, -death_SumInsured, -death_PremiumFree) == 0))
expect_equal(Contract.Endowment.SP$Values$cashFlows$premiums_advance, c(1, rep(0, 20)))
expect_equal(Contract.Endowment.SP$Values$cashFlows$survival_advance, c(rep(0, 20), 1))
expect_equal(Contract.Endowment.SP$Values$cashFlows$death_SumInsured, c(rep(1, 20),0))
expect_equal(Contract.Endowment.SP$Values$cashFlows$death_PremiumFree, c(rep(1, 20), 0))
})
test_that("Endowment Cash Flows", {
library(MortalityTables)
mortalityTables.load("Austria_Census")
Tarif.Endowment = InsuranceTarif$new(
name = "Example Tariff - Endowment",
type = "endowment",
tarif = "E1-RP",
desc = "An endowment with regular premiums (standard tariff)",
mortalityTable = mort.AT.census.2011.unisex,
i = 0.005
)
Contract.Endowment = InsuranceContract$new(
tarif = Tarif.Endowment,
age = 40, policyPeriod = 20,
sumInsured = 10000,
contractClosing = as.Date("2020-09-01"),
calculate = "cashflows"
)
expect_equal(Contract.Endowment$Parameters$ContractData$policyPeriod, 20)
expect_equal(Contract.Endowment$Parameters$ContractData$deferralPeriod, 0)
expect_equal(Contract.Endowment$Parameters$ContractData$premiumPeriod, 20)
expect_true(all(Contract.Endowment$Values$cashFlows %>% select(-premiums_advance, -survival_advance, -death_SumInsured, -death_PremiumFree) == 0))
expect_equal(Contract.Endowment$Values$cashFlows$premiums_advance, c(rep(1, 20), 0))
expect_equal(Contract.Endowment$Values$cashFlows$survival_advance, c(rep(0, 20), 1))
expect_equal(Contract.Endowment$Values$cashFlows$death_SumInsured, c(rep(1, 20),0))
expect_equal(Contract.Endowment$Values$cashFlows$death_PremiumFree, c(rep(1, 20), 0))
})
test_that("Term Life Cash Flows", {
library(MortalityTables)
mortalityTables.load("Austria_Census")
Tarif.Life = InsuranceTarif$new(
name = "Example Tariff - Whole/Term Life",
type = "wholelife",
tarif = "Life1",
desc = "A whole or term life insurance with regular premiums",
mortalityTable = mort.AT.census.2011.unisex,
i = 0.005
)
Contract.Life = InsuranceContract$new(
tarif = Tarif.Life,
age = 40, policyPeriod = 20,
sumInsured = 10000,
contractClosing = as.Date("2020-09-01"),
calculate = "cashflows"
)
expect_equal(Contract.Life$Parameters$ContractData$policyPeriod, 20)
expect_equal(Contract.Life$Parameters$ContractData$deferralPeriod, 0)
expect_equal(Contract.Life$Parameters$ContractData$premiumPeriod, 20)
expect_true(all(Contract.Life$Values$cashFlows %>% select(-premiums_advance, -death_SumInsured, -death_PremiumFree) == 0))
expect_equal(Contract.Life$Values$cashFlows$premiums_advance, c(rep(1, 20), 0))
expect_equal(Contract.Life$Values$cashFlows$death_SumInsured, c(rep(1, 20), 0))
expect_equal(Contract.Life$Values$cashFlows$death_PremiumFree, c(rep(1, 20), 0))
})
test_that("Pure Endowment Cash Flows", {
library(MortalityTables)
mortalityTables.load("Austria_Census")
Tarif.PureEnd = InsuranceTarif$new(
name = "Example Tariff - Pure Endowment",
type = "pureendowment",
tarif = "PE1-RP",
desc = "A pure endowment with regular premiums (standard tariff)",
mortalityTable = mort.AT.census.2011.unisex,
i = 0.005,
premiumRefund = 1
)
Contract.PureEnd = InsuranceContract$new(
tarif = Tarif.PureEnd,
age = 40, policyPeriod = 20,
sumInsured = 10000,
contractClosing = as.Date("2020-09-01"),
calculate = "cashflows"
)
expect_equal(Contract.PureEnd$Parameters$ContractData$policyPeriod, 20)
expect_equal(Contract.PureEnd$Parameters$ContractData$deferralPeriod, 0)
expect_equal(Contract.PureEnd$Parameters$ContractData$premiumPeriod, 20)
expect_true(all(Contract.PureEnd$Values$cashFlows %>% select(-premiums_advance, -survival_advance, -death_GrossPremium, -death_Refund_past) == 0))
expect_equal(Contract.PureEnd$Values$cashFlows$premiums_advance, c(rep(1, 20), 0))
expect_equal(Contract.PureEnd$Values$cashFlows$survival_advance, c(rep(0, 20), 1))
expect_equal(Contract.PureEnd$Values$cashFlows$death_GrossPremium, c(1:20,0))
expect_equal(Contract.PureEnd$Values$cashFlows$death_Refund_past, c(rep(1, 20), 0))
})
test_that("Termfix Cash Flows", {
library(MortalityTables)
mortalityTables.load("Austria_Census")
Tarif.Termfix = InsuranceTarif$new(
name = "Example Tariff - Terme Fixe",
type = "terme-fix",
tarif = "TF",
desc = "A termfix insurance with regular premiums",
mortalityTable = mort.AT.census.2011.unisex,
i = 0.005
)
Contract.Termfix = InsuranceContract$new(
tarif = Tarif.Termfix,
age = 40, policyPeriod = 20,
sumInsured = 10000,
contractClosing = as.Date("2020-09-01"),
calculate = "cashflows"
)
expect_equal(Contract.Termfix$Parameters$ContractData$policyPeriod, 20)
expect_equal(Contract.Termfix$Parameters$ContractData$deferralPeriod, 0)
expect_equal(Contract.Termfix$Parameters$ContractData$premiumPeriod, 20)
expect_true(all(Contract.Termfix$Values$cashFlows %>% select(-premiums_advance, -guaranteed_advance) == 0))
expect_equal(Contract.Termfix$Values$cashFlows$premiums_advance, c(rep(1, 20), 0))
expect_equal(Contract.Termfix$Values$cashFlows$guaranteed_advance, c(rep(0, 20), 1))
})
test_that("multiplication works", {
c1 = initializeCosts(
alpha = 0.04,
Zillmer = 0.025,
beta = 0.05,
gamma = 0.0005,
gamma.paidUp = 0.001,
gamma.premiumfree = 0.00075,
gamma.contract = 0.002,
unitcosts = 10,
unitcosts.PolicyPeriod = 12
)
# the above is the short form of:
c2 = initializeCosts()
c2[["alpha", "SumPremiums", "once"]] = 0.04
c2[["Zillmer", "SumPremiums", "once"]] = 0.025
c2[["beta", "GrossPremium", "PremiumPeriod"]] = 0.05
c2[["gamma", "SumInsured", "PremiumPeriod"]] = 0.0005
c2[["gamma_nopremiums", "SumInsured", "PolicyPeriod"]] = 0.001
c2[["gamma", "SumInsured", "PremiumFree"]] = 0.00075
c2[["gamma", "SumInsured", "PolicyPeriod"]] = 0.002
c2[["unitcosts", "Constant", "PremiumPeriod"]] = 10
c2[["unitcosts", "Constant", "PolicyPeriod"]] = 12
expect_equal(c1, c2)
expect_equal(c1, initializeCosts(c1))
})
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment