/**
* Copyright (C) 2011 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.analytics.financial.instrument.annuity;
import static org.testng.AssertJUnit.assertEquals;
import org.testng.annotations.Test;
import org.threeten.bp.ZonedDateTime;
import com.opengamma.analytics.financial.instrument.payment.PaymentFixedDefinition;
import com.opengamma.analytics.financial.interestrate.annuity.derivative.AnnuityPaymentFixed;
import com.opengamma.analytics.financial.interestrate.payments.derivative.PaymentFixed;
import com.opengamma.analytics.financial.schedule.NoHolidayCalendar;
import com.opengamma.financial.convention.calendar.Calendar;
import com.opengamma.util.money.Currency;
import com.opengamma.util.test.TestGroup;
import com.opengamma.util.time.DateUtils;
/**
* Test.
*/
@Test(groups = TestGroup.UNIT)
public class AnnuityPaymentFixedDefinitionTest {
private static final Calendar CALENDAR = new NoHolidayCalendar();
private static final Currency CUR = Currency.EUR;
private static final ZonedDateTime[] PAYMENT_DATE = new ZonedDateTime[] {DateUtils.getUTCDate(2011, 7, 13), DateUtils.getUTCDate(2011, 10, 13), DateUtils.getUTCDate(2012, 1, 13)};
private static final double[] PAYMENT_AMOUNT = new double[] {100.0, 150.0, 1.0};
@Test(expectedExceptions = IllegalArgumentException.class)
public void testNullPayment() {
new AnnuityPaymentFixedDefinition(null, null);
}
@Test
public void testGetter() {
final PaymentFixedDefinition[] payment = new PaymentFixedDefinition[PAYMENT_DATE.length];
for (int looppay = 0; looppay < PAYMENT_DATE.length; looppay++) {
payment[looppay] = new PaymentFixedDefinition(CUR, PAYMENT_DATE[looppay], PAYMENT_AMOUNT[looppay]);
}
final AnnuityPaymentFixedDefinition annuity = new AnnuityPaymentFixedDefinition(payment, CALENDAR);
assertEquals(CUR, annuity.getCurrency());
}
@Test
public void testConverter() {
final PaymentFixedDefinition[] annuityDefinitions = new PaymentFixedDefinition[PAYMENT_DATE.length];
PaymentFixed[] payment = new PaymentFixed[PAYMENT_DATE.length];
ZonedDateTime date = DateUtils.getUTCDate(2011, 6, 19);
for (int looppay = 0; looppay < PAYMENT_DATE.length; looppay++) {
annuityDefinitions[looppay] = new PaymentFixedDefinition(CUR, PAYMENT_DATE[looppay], PAYMENT_AMOUNT[looppay]);
payment[looppay] = annuityDefinitions[looppay].toDerivative(date);
}
final AnnuityPaymentFixedDefinition definition = new AnnuityPaymentFixedDefinition(annuityDefinitions, CALENDAR);
AnnuityPaymentFixed annuity = new AnnuityPaymentFixed(payment);
assertEquals(annuity, definition.toDerivative(date));
date = DateUtils.getUTCDate(2011, 8, 19);
payment = new PaymentFixed[PAYMENT_DATE.length - 1];
for (int looppay = 0; looppay < PAYMENT_DATE.length; looppay++) {
annuityDefinitions[looppay] = new PaymentFixedDefinition(CUR, PAYMENT_DATE[looppay], PAYMENT_AMOUNT[looppay]);
if (looppay > 0) {
payment[looppay - 1] = annuityDefinitions[looppay].toDerivative(date);
}
}
annuity = new AnnuityPaymentFixed(payment);
assertEquals(annuity, definition.toDerivative(date));
}
}