library("RUnit") root = "//WDSENTINEL/share/CorpCDOs/R" source(file.path(root, "yieldCurve.R")) source(file.path(root, "cds_functions.R")) #unit tests cs <- couponSchedule(as.Date("2012-09-28"), as.Date("2016-04-22"),"Q", "FLOAT", 0.075,0.0703) #test that the curve version gives the same result as the flat version for flat curves h <- rep(0.05, nrow(cs)) dpc <- new("defaultprepaycurve", dates=cs$dates, hazardrates=h) eps <- 1e-6 test.flat <- function() { checkEquals(contingentleg.flat(cs, 0.05, 0.7), contingentleg(cs, dpc, 0.7)) } #test derivative of the flat version test.derivativeflat <- function() { checkEquals((contingentleg.flat(cs, 0.05+eps, 0.7)-contingentleg.flat(cs, 0.05-eps,0.7))/(2*eps), dcontingentleg.flat(cs, 0.05, 0.7)) } #test derivative of the curved version hvec <- c(rep(0.05,5), rep(0.07, 10)) hvecplus <- c(rep(0.05,5), rep(0.07 + eps,10)) hvecminus <- c(rep(0.05, 5), rep(0.07 - eps,10)) index <- c(rep(0,5), rep(1,10)) dpc <- new("defaultprepaycurve", dates=cs$dates, hazardrates=hvec) dpcplus <- new("defaultprepaycurve", dates=cs$dates, hazardrates=hvecplus) dpcminus <- new("defaultprepaycurve", dates=cs$dates, hazardrates=hvecminus) test.derivativecurve <- function() { checkEquals((contingentleg(cs, dpcplus, 0.7) - contingentleg(cs, dpcminus, 0.7))/(2*eps), dcontingentleg(cs, dpc, 0.7, index)) } ## test that the prepay version with 0 prepay is the same as the curved version dpc <- new("defaultprepaycurve", dates=cs$dates, hazardrates=hvec, prepayrates=rep(0,nrow(cs))) test.prepay <- function() { checkEquals(contingentleg(cs, dpc, 0.7), contingentleg.prepay(cs, dpc, 0.7)) } ## test derivative of prepay version dpcplus <- new("defaultprepaycurve", dates=cs$dates, hazardrates=hvecplus, prepayrates=k(hvecplus)) dpcminus <- new("defaultprepaycurve", dates=cs$dates, hazardrates=hvecminus, prepayrates=k(hvecminus)) dpc <- new("defaultprepaycurve", dates=cs$dates, hazardrates=hvec, prepayrates=k(hvec)) (contingentleg.prepay(cs, dpcplus, 0.7)-contingentleg.prepay(cs, dpcminus, 0.7))/(2*bps) dcontingentleg.prepay(cs, dpc, 0.7, index, 15) (couponleg.prepay(cs, dpcplus)-couponleg.prepay(cs, dpcminus, 0.7))/(2*bps) dcouponleg.prepay(cs, dpc, index, 15)