/**
* Copyright (C) 2011 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.analytics.financial.forex.derivative;
import static org.testng.AssertJUnit.assertEquals;
import static org.testng.AssertJUnit.assertFalse;
import static org.testng.AssertJUnit.assertTrue;
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 related to the construction of ForexNonDeliverableForward.
*/
@Test(groups = TestGroup.UNIT)
public class ForexNonDeliverableForwardTest {
private static final Currency KRW = Currency.of("KRW");
private static final Currency USD = Currency.USD;
private static final ZonedDateTime FIXING_DATE = DateUtils.getUTCDate(2012, 5, 2);
private static final ZonedDateTime PAYMENT_DATE = DateUtils.getUTCDate(2012, 5, 4);
private static final double NOMINAL_USD = 1000000; // 1m
private static final double FX_RATE = 1123.45;
private static final ZonedDateTime REFERENCE_DATE = DateUtils.getUTCDate(2011, 11, 10);
private static final double FIXING_TIME = TimeCalculator.getTimeBetween(REFERENCE_DATE, FIXING_DATE);
private static final double PAYMENT_TIME = TimeCalculator.getTimeBetween(REFERENCE_DATE, PAYMENT_DATE);
private static final String KRW_DSC = "Discounting KRW";
private static final String USD_DSC = "Discounting USD";
private static final ForexNonDeliverableForward NDF = new ForexNonDeliverableForward(KRW, USD, NOMINAL_USD, FX_RATE, FIXING_TIME, PAYMENT_TIME);
@SuppressWarnings("deprecation")
@Test(expectedExceptions = IllegalArgumentException.class)
public void nullCurrency1Deprecated() {
new ForexNonDeliverableForward(null, USD, NOMINAL_USD, FX_RATE, FIXING_TIME, PAYMENT_TIME, KRW_DSC, USD_DSC);
}
@SuppressWarnings("deprecation")
@Test(expectedExceptions = IllegalArgumentException.class)
public void nullCurrency2Deprecated() {
new ForexNonDeliverableForward(KRW, null, NOMINAL_USD, FX_RATE, FIXING_TIME, PAYMENT_TIME, KRW_DSC, USD_DSC);
}
@SuppressWarnings("deprecation")
@Test(expectedExceptions = IllegalArgumentException.class)
public void wrongDateOrderDeprecated() {
new ForexNonDeliverableForward(KRW, USD, NOMINAL_USD, FX_RATE, PAYMENT_TIME, FIXING_TIME, KRW_DSC, USD_DSC);
}
@SuppressWarnings("deprecation")
@Test(expectedExceptions = IllegalArgumentException.class)
public void sameCurrencyDeprecated() {
new ForexNonDeliverableForward(USD, USD, NOMINAL_USD, FX_RATE, FIXING_TIME, PAYMENT_TIME, KRW_DSC, USD_DSC);
}
@Test(expectedExceptions = IllegalArgumentException.class)
public void nullCurrency1() {
new ForexNonDeliverableForward(null, USD, NOMINAL_USD, FX_RATE, FIXING_TIME, PAYMENT_TIME);
}
@Test(expectedExceptions = IllegalArgumentException.class)
public void nullCurrency2() {
new ForexNonDeliverableForward(KRW, null, NOMINAL_USD, FX_RATE, FIXING_TIME, PAYMENT_TIME);
}
@Test(expectedExceptions = IllegalArgumentException.class)
public void wrongDateOrder() {
new ForexNonDeliverableForward(KRW, USD, NOMINAL_USD, FX_RATE, PAYMENT_TIME, FIXING_TIME);
}
@Test(expectedExceptions = IllegalArgumentException.class)
public void sameCurrency() {
new ForexNonDeliverableForward(USD, USD, NOMINAL_USD, FX_RATE, FIXING_TIME, PAYMENT_TIME);
}
@Test
/**
* Tests the class getters.
*/
public void getter() {
assertEquals("Forex NDF getter", KRW, NDF.getCurrency1());
assertEquals("Forex NDF getter", USD, NDF.getCurrency2());
assertEquals("Forex NDF getter", FIXING_TIME, NDF.getFixingTime());
assertEquals("Forex NDF getter", PAYMENT_TIME, NDF.getPaymentTime());
assertEquals("Forex NDF getter", NOMINAL_USD, NDF.getNotionalCurrency2());
assertEquals("Forex NDF getter", FX_RATE, NDF.getExchangeRate());
}
@SuppressWarnings("deprecation")
@Test
/**
* Tests the class equal and hashCode
*/
public void equalHashDeprecated() {
final ForexNonDeliverableForward newNdf = new ForexNonDeliverableForward(KRW, USD, NOMINAL_USD, FX_RATE, FIXING_TIME, PAYMENT_TIME, KRW_DSC, USD_DSC);
assertTrue(NDF.equals(newNdf));
assertTrue(NDF.hashCode() == newNdf.hashCode());
ForexNonDeliverableForward modifiedNdf;
modifiedNdf = new ForexNonDeliverableForward(Currency.EUR, USD, NOMINAL_USD, FX_RATE, FIXING_TIME, PAYMENT_TIME, KRW_DSC, USD_DSC);
assertFalse("Forex NDF: equal - hash code", NDF.equals(modifiedNdf));
modifiedNdf = new ForexNonDeliverableForward(KRW, Currency.EUR, NOMINAL_USD, FX_RATE, FIXING_TIME, PAYMENT_TIME, KRW_DSC, USD_DSC);
assertFalse("Forex NDF: equal - hash code", NDF.equals(modifiedNdf));
modifiedNdf = new ForexNonDeliverableForward(KRW, USD, NOMINAL_USD + 100.0, FX_RATE, FIXING_TIME, PAYMENT_TIME, KRW_DSC, USD_DSC);
assertFalse("Forex NDF: equal - hash code", NDF.equals(modifiedNdf));
modifiedNdf = new ForexNonDeliverableForward(KRW, USD, NOMINAL_USD, FX_RATE + 1.0, FIXING_TIME, PAYMENT_TIME, KRW_DSC, USD_DSC);
assertFalse("Forex NDF: equal - hash code", NDF.equals(modifiedNdf));
modifiedNdf = new ForexNonDeliverableForward(KRW, USD, NOMINAL_USD, FX_RATE, FIXING_TIME - 0.01, PAYMENT_TIME, KRW_DSC, USD_DSC);
assertFalse("Forex NDF: equal - hash code", NDF.equals(modifiedNdf));
modifiedNdf = new ForexNonDeliverableForward(KRW, USD, NOMINAL_USD, FX_RATE, FIXING_TIME, PAYMENT_TIME + 0.01, KRW_DSC, USD_DSC);
assertFalse("Forex NDF: equal - hash code", NDF.equals(modifiedNdf));
assertFalse(NDF.equals(USD));
assertFalse(NDF.equals(null));
}
@Test
/**
* Tests the class equal and hashCode
*/
public void equalHash() {
final ForexNonDeliverableForward newNdf = new ForexNonDeliverableForward(KRW, USD, NOMINAL_USD, FX_RATE, FIXING_TIME, PAYMENT_TIME);
assertTrue(NDF.equals(newNdf));
assertTrue(NDF.hashCode() == newNdf.hashCode());
ForexNonDeliverableForward modifiedNdf;
modifiedNdf = new ForexNonDeliverableForward(Currency.EUR, USD, NOMINAL_USD, FX_RATE, FIXING_TIME, PAYMENT_TIME);
assertFalse("Forex NDF: equal - hash code", NDF.equals(modifiedNdf));
modifiedNdf = new ForexNonDeliverableForward(KRW, Currency.EUR, NOMINAL_USD, FX_RATE, FIXING_TIME, PAYMENT_TIME);
assertFalse("Forex NDF: equal - hash code", NDF.equals(modifiedNdf));
modifiedNdf = new ForexNonDeliverableForward(KRW, USD, NOMINAL_USD + 100.0, FX_RATE, FIXING_TIME, PAYMENT_TIME);
assertFalse("Forex NDF: equal - hash code", NDF.equals(modifiedNdf));
modifiedNdf = new ForexNonDeliverableForward(KRW, USD, NOMINAL_USD, FX_RATE + 1.0, FIXING_TIME, PAYMENT_TIME);
assertFalse("Forex NDF: equal - hash code", NDF.equals(modifiedNdf));
modifiedNdf = new ForexNonDeliverableForward(KRW, USD, NOMINAL_USD, FX_RATE, FIXING_TIME - 0.01, PAYMENT_TIME);
assertFalse("Forex NDF: equal - hash code", NDF.equals(modifiedNdf));
modifiedNdf = new ForexNonDeliverableForward(KRW, USD, NOMINAL_USD, FX_RATE, FIXING_TIME, PAYMENT_TIME + 0.01);
assertFalse("Forex NDF: equal - hash code", NDF.equals(modifiedNdf));
assertFalse(NDF.equals(USD));
assertFalse(NDF.equals(null));
}
}