IborFutureCurveNode vs IborFixingDepositCurveNode


#1

According to Bloomberg the INT_RATE_FUT_END_DT value for EDGF17 is 2017-04-18 and EDG17 is 2017-05-17 however the following test case seems to suggest that Strata thinks the second date is 2017-05-15 which leads to the situation where you cannot fit a USD 3M curve as of 2017-02-09 with both 3M LIBOR and EDG17 in the curve.

@Test
public void testCurveNodes() {
    final LocalDate valuationDate = LocalDate.of(2017, 2, 9);
    final ReferenceData referenceData = ReferenceData.standard();

    final IborFixingDepositCurveNode fixing = IborFixingDepositCurveNode.of(
            IborFixingDepositTemplate.of(IborIndices.USD_LIBOR_3M),
            QuoteId.of(StandardId.of("Bloomberg-Ticker", "US0003 Index"), FieldName.of("VALUE"))
    );
    final IborFutureCurveNode edf7 = IborFutureCurveNode.of(
            IborFutureTemplate.of(YearMonth.of(2017, 1), ImmutableIborFutureConvention.of(IborIndices.USD_LIBOR_3M, DateSequences.MONTHLY_IMM)),
            QuoteId.of(StandardId.of("Bloomberg-Ticker", "EDF17 Index"), FieldName.of("MID"))
    );
    final IborFutureCurveNode edg7 = IborFutureCurveNode.of(
            IborFutureTemplate.of(YearMonth.of(2017, 2), ImmutableIborFutureConvention.of(IborIndices.USD_LIBOR_3M, DateSequences.MONTHLY_IMM)),
            QuoteId.of(StandardId.of("Bloomberg-Ticker", "EDG17 Index"), FieldName.of("MID"))
    );

    assertEquals(LocalDate.of(2017, 5, 15), fixing.date(valuationDate, referenceData));
    assertEquals(LocalDate.of(2017, 4, 18), edf7.date(valuationDate, referenceData));
    assertEquals(LocalDate.of(2017, 5, 17), edg7.date(valuationDate, referenceData));
}

Is this expected behavior? e.g.
fixing.date(LocalDate.of(2017, 2, 15), referenceData) returns 2017-05-17
but
IborIndices.USD_LIBOR_3M.calculateMaturityFromEffective(LocalDate.of(2017, 2, 15), referenceData) returns 2017-05-15