// -------------------------------------------------------------------------
 public void coverage() {
   ImmutableIborIborSwapConvention test = ImmutableIborIborSwapConvention.of(NAME, IBOR3M, IBOR6M);
   coverImmutableBean(test);
   ImmutableIborIborSwapConvention test2 =
       ImmutableIborIborSwapConvention.of(NAME, IBOR1M, IBOR6M);
   coverBeanEquals(test, test2);
   ImmutableIborIborSwapConvention test3 =
       ImmutableIborIborSwapConvention.of(NAME, IBOR1M, IBOR3M);
   coverBeanEquals(test, test3);
 }
 public void test_expandAllSpecified() {
   ImmutableIborIborSwapConvention test =
       ImmutableIborIborSwapConvention.builder()
           .name(NAME)
           .spreadLeg(IBOR3M)
           .flatLeg(IBOR6M)
           .spotDateOffset(PLUS_ONE_DAY)
           .build()
           .expand();
   assertEquals(test.getSpreadLeg(), IBOR3M.expand());
   assertEquals(test.getFlatLeg(), IBOR6M.expand());
   assertEquals(test.getSpotDateOffset(), PLUS_ONE_DAY);
 }
 // -------------------------------------------------------------------------
 public void test_of() {
   ImmutableIborIborSwapConvention test = ImmutableIborIborSwapConvention.of(NAME, IBOR3M, IBOR6M);
   assertEquals(test.getName(), NAME);
   assertEquals(test.getSpreadLeg(), IBOR3M);
   assertEquals(test.getFlatLeg(), IBOR6M);
   assertEquals(test.getSpotDateOffset(), USD_LIBOR_3M.getEffectiveDateOffset());
 }
 // -------------------------------------------------------------------------
 public void test_toTrade_tenor() {
   IborIborSwapConvention base = ImmutableIborIborSwapConvention.of(NAME, IBOR3M, IBOR6M);
   LocalDate tradeDate = LocalDate.of(2015, 5, 5);
   LocalDate startDate = date(2015, 5, 7);
   LocalDate endDate = date(2025, 5, 7);
   SwapTrade test = base.toTrade(tradeDate, TENOR_10Y, BUY, NOTIONAL_2M, 0.25d);
   Swap expected =
       Swap.of(
           IBOR3M.toLeg(startDate, endDate, PAY, NOTIONAL_2M, 0.25d),
           IBOR6M.toLeg(startDate, endDate, RECEIVE, NOTIONAL_2M));
   assertEquals(test.getTradeInfo().getTradeDate(), Optional.of(tradeDate));
   assertEquals(test.getProduct(), expected);
 }
/**
 * Market standard Ibor-Ibor swap conventions.
 *
 * <p>http://www.opengamma.com/sites/default/files/interest-rate-instruments-and-market-conventions.pdf
 */
final class StandardIborIborSwapConventions {

  /**
   * USD standard LIBOR 3M vs LIBOR 6M swap. The LIBOR 3M leg pays semi-annually with 'Flat'
   * compounding method.
   */
  public static final IborIborSwapConvention USD_LIBOR_3M_LIBOR_6M =
      ImmutableIborIborSwapConvention.of(
          "USD-LIBOR-3M-LIBOR-6M",
          IborRateSwapLegConvention.builder()
              .index(IborIndices.USD_LIBOR_3M)
              .paymentFrequency(Frequency.P6M)
              .compoundingMethod(CompoundingMethod.FLAT)
              .stubConvention(StubConvention.SHORT_INITIAL)
              .build(),
          IborRateSwapLegConvention.of(IborIndices.USD_LIBOR_6M));

  /**
   * USD standard LIBOR 1M vs LIBOR 3M swap. The LIBOR 1M leg pays quarterly with 'Flat' compounding
   * method.
   */
  public static final IborIborSwapConvention USD_LIBOR_1M_LIBOR_3M =
      ImmutableIborIborSwapConvention.of(
          "USD-LIBOR-1M-LIBOR-3M",
          IborRateSwapLegConvention.builder()
              .index(IborIndices.USD_LIBOR_1M)
              .paymentFrequency(Frequency.P3M)
              .compoundingMethod(CompoundingMethod.FLAT)
              .stubConvention(StubConvention.SHORT_INITIAL)
              .build(),
          IborRateSwapLegConvention.of(IborIndices.USD_LIBOR_3M));

  // -------------------------------------------------------------------------
  /** Restricted constructor. */
  private StandardIborIborSwapConventions() {}
}
 // -------------------------------------------------------------------------
 public void test_builder_notEnoughData() {
   assertThrowsIllegalArg(
       () -> ImmutableIborIborSwapConvention.builder().spotDateOffset(NEXT_SAME_BUS_DAY).build());
 }
 public void test_serialization() {
   IborIborSwapConvention test = ImmutableIborIborSwapConvention.of(NAME, IBOR3M, IBOR6M);
   assertSerialization(test);
 }