/** * 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 org.testng.annotations.Test; import com.opengamma.analytics.financial.interestrate.payments.derivative.PaymentFixed; import com.opengamma.analytics.financial.model.option.definition.Barrier; import com.opengamma.analytics.financial.model.option.definition.Barrier.BarrierType; import com.opengamma.analytics.financial.model.option.definition.Barrier.KnockType; import com.opengamma.analytics.financial.model.option.definition.Barrier.ObservationType; import com.opengamma.util.money.Currency; import com.opengamma.util.test.TestGroup; /** * Test. */ @Test(groups = TestGroup.UNIT) public class ForexOptionSingleBarrierTest { private static final Currency CCY1 = Currency.AUD; private static final Currency CCY2 = Currency.CAD; private static final double PAYMENT_TIME = 0.5; private static final double AMOUNT1 = 1000; private static final double AMOUNT2 = -1500; private static final Forex FOREX = new Forex(new PaymentFixed(CCY1, PAYMENT_TIME, AMOUNT1), new PaymentFixed(CCY2, PAYMENT_TIME, AMOUNT2)); private static final double EXPIRY_TIME = 0.49; private static final boolean IS_CALL = true; private static final boolean IS_LONG = true; private static final double REBATE = 0.5; private static final ForexOptionVanilla UNDERLYING = new ForexOptionVanilla(FOREX, EXPIRY_TIME, IS_CALL, IS_LONG); private static final Barrier BARRIER = new Barrier(KnockType.IN, BarrierType.DOWN, ObservationType.CLOSE, 1); private static final ForexOptionSingleBarrier OPTION = new ForexOptionSingleBarrier(UNDERLYING, BARRIER); private static final ForexOptionSingleBarrier OPTION_REBATE = new ForexOptionSingleBarrier(UNDERLYING, BARRIER, REBATE); @Test(expectedExceptions = IllegalArgumentException.class) public void testNullUnderlying() { new ForexOptionSingleBarrier(null, BARRIER); } @Test(expectedExceptions = IllegalArgumentException.class) public void testNullBarrier() { new ForexOptionSingleBarrier(UNDERLYING, null); } @Test public void testObject() { assertEquals(UNDERLYING, OPTION.getUnderlyingOption()); assertEquals(BARRIER, OPTION.getBarrier()); assertEquals(0.0, OPTION.getRebate(), 1.0E-10); assertEquals(REBATE, OPTION_REBATE.getRebate(), 1.0E-10); assertEquals(OPTION, OPTION); ForexOptionSingleBarrier other = new ForexOptionSingleBarrier(UNDERLYING, BARRIER); assertEquals(OPTION, other); assertEquals(OPTION.hashCode(), other.hashCode()); final ForexOptionSingleBarrier otherRebate = new ForexOptionSingleBarrier(UNDERLYING, BARRIER, REBATE); assertEquals(OPTION_REBATE, otherRebate); assertEquals(OPTION_REBATE.hashCode(), otherRebate.hashCode()); other = new ForexOptionSingleBarrier(new ForexOptionVanilla(FOREX, EXPIRY_TIME, !IS_CALL, IS_LONG), BARRIER); assertFalse(other.equals(OPTION)); other = new ForexOptionSingleBarrier(UNDERLYING, new Barrier(KnockType.OUT, BarrierType.DOWN, ObservationType.CLOSE, 1)); assertFalse(other.equals(OPTION)); assertFalse(OPTION_REBATE.equals(OPTION)); assertFalse(other.equals(CCY1)); assertFalse(other.equals(null)); } }