/**
* Copyright (C) 2014 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.analytics.financial.interestrate.payments.derivative;
import static org.testng.AssertJUnit.assertEquals;
import static org.testng.AssertJUnit.assertFalse;
import org.testng.annotations.Test;
import org.threeten.bp.ZonedDateTime;
import com.opengamma.analytics.util.time.TimeCalculator;
import com.opengamma.util.money.Currency;
import com.opengamma.util.test.TestGroup;
import com.opengamma.util.time.DateUtils;
/**
* Tests the constructors and equal/hash for CouponFixedFxReset.
*/
@Test(groups = TestGroup.UNIT)
public class CouponFixedFxResetTest {
/** Details coupon. */
private static final Currency CUR_REF = Currency.EUR;
private static final Currency CUR_PAY = Currency.USD;
private static final ZonedDateTime PAYMENT_DATE = DateUtils.getUTCDate(2011, 4, 6);
private static final ZonedDateTime FX_FIXING_DATE = DateUtils.getUTCDate(2011, 1, 3);
private static final ZonedDateTime FX_DELIVERY_DATE = DateUtils.getUTCDate(2011, 1, 6);
private static final double ACCRUAL_FACTOR = 0.267;
private static final double NOTIONAL = 1000000; //1m
private static final double RATE = 0.04;
private static final ZonedDateTime VALUATION_DATE = DateUtils.getUTCDate(2010, 7, 1);
private static final double PAYMENT_TIME = TimeCalculator.getTimeBetween(VALUATION_DATE, PAYMENT_DATE);
private static final double FX_FIXING_TIME = TimeCalculator.getTimeBetween(VALUATION_DATE, FX_FIXING_DATE);
private static final double FX_DELIVERY_TIME = TimeCalculator.getTimeBetween(VALUATION_DATE, FX_DELIVERY_DATE);
private static final CouponFixedFxReset CPN = new CouponFixedFxReset(CUR_PAY, PAYMENT_TIME, ACCRUAL_FACTOR,
NOTIONAL, RATE, CUR_REF, FX_FIXING_TIME, FX_DELIVERY_TIME);
private static final double FX_FIXING_RATE = 1.40;
private static final double TOLERANCE_AMOUNT = 1.0E-6;
@Test(expectedExceptions = IllegalArgumentException.class)
public void nullReferenceCurrency() {
new CouponFixedFxReset(CUR_PAY, PAYMENT_TIME, ACCRUAL_FACTOR, NOTIONAL, RATE, null, FX_FIXING_TIME, FX_DELIVERY_TIME);
}
@Test
public void getter() {
assertEquals("CouponFixedFxReset: getter", RATE, CPN.getRate());
assertEquals("CouponFixedFxReset: getter", CUR_REF, CPN.getReferenceCurrency());
assertEquals("CouponFixedFxReset: getter", FX_FIXING_TIME, CPN.getFxFixingTime());
assertEquals("CouponFixedFxReset: getter", FX_DELIVERY_TIME, CPN.getFxDeliveryTime());
}
@Test
public void paymentAmount() {
double amountExpected = NOTIONAL * FX_FIXING_RATE * RATE * ACCRUAL_FACTOR;
double amountComputed = CPN.paymentAmount(FX_FIXING_RATE);
assertEquals("CouponFixedFxResetDefinition: paymentAmount", amountExpected, amountComputed, TOLERANCE_AMOUNT);
}
@Test
public void equalHash() {
assertEquals("CouponFixedFxReset: hash-equal", CPN, CPN);
assertFalse("CouponFixedFxReset: hash-equal", CPN.equals(CUR_REF));
CouponFixedFxReset other = new CouponFixedFxReset(CUR_PAY, PAYMENT_TIME, ACCRUAL_FACTOR,
NOTIONAL, RATE, CUR_REF, FX_FIXING_TIME, FX_DELIVERY_TIME);
assertEquals("CouponFixedFxReset: hash-equal", CPN, other);
assertEquals("CouponFixedFxResetDefinition: hash-equal", CPN.hashCode(), other.hashCode());
CouponFixedFxReset modified;
modified = new CouponFixedFxReset(CUR_REF, PAYMENT_TIME, ACCRUAL_FACTOR, NOTIONAL, RATE, CUR_REF, FX_FIXING_TIME,
FX_DELIVERY_TIME);
assertFalse("CouponFixedFxResetDefinition: hash-equal", CPN.equals(modified));
modified = new CouponFixedFxReset(CUR_PAY, PAYMENT_TIME, ACCRUAL_FACTOR, NOTIONAL, 0.01, CUR_REF, FX_FIXING_TIME,
FX_DELIVERY_TIME);
assertFalse("CouponFixedFxResetDefinition: hash-equal", CPN.equals(modified));
modified = new CouponFixedFxReset(CUR_PAY, PAYMENT_TIME, ACCRUAL_FACTOR, NOTIONAL, RATE, Currency.AUD,
FX_FIXING_TIME, FX_DELIVERY_TIME);
assertFalse("CouponFixedFxResetDefinition: hash-equal", CPN.equals(modified));
modified = new CouponFixedFxReset(CUR_PAY, PAYMENT_TIME, ACCRUAL_FACTOR, NOTIONAL, RATE, CUR_REF, 0.0123456,
FX_DELIVERY_TIME);
assertFalse("CouponFixedFxResetDefinition: hash-equal", CPN.equals(modified));
modified = new CouponFixedFxReset(CUR_PAY, PAYMENT_TIME, ACCRUAL_FACTOR, NOTIONAL, RATE, CUR_REF, FX_FIXING_TIME,
0.0123456);
assertFalse("CouponFixedFxResetDefinition: hash-equal", CPN.equals(modified));
}
}