//------------------------------------------------------------------------- // parse the index and default fixed leg day count private static FloatingRateIndex parseIndex(CsvRow row, string leg) { Optional <string> fixedRateOpt = findValue(row, leg, FIXED_RATE_FIELD); Optional <string> indexOpt = findValue(row, leg, INDEX_FIELD); if (fixedRateOpt.Present) { if (indexOpt.Present) { throw new System.ArgumentException("Swap leg must not define both '" + leg + FIXED_RATE_FIELD + "' and '" + leg + INDEX_FIELD + "'"); } return(null); } if (!indexOpt.Present) { throw new System.ArgumentException("Swap leg must define either '" + leg + FIXED_RATE_FIELD + "' or '" + leg + INDEX_FIELD + "'"); } // use FloatingRateName to identify Ibor vs other string indexStr = indexOpt.get(); FloatingRateName frn = FloatingRateName.parse(indexStr); if (frn.Type == FloatingRateType.IBOR) { // re-parse Ibor using tenor, which ensures tenor picked up from indexStr if present Frequency freq = Frequency.parse(getValue(row, leg, FREQUENCY_FIELD)); Tenor iborTenor = freq.Term ? frn.DefaultTenor : Tenor.of(freq.Period); return(FloatingRateIndex.parse(indexStr, iborTenor)); } return(frn.toFloatingRateIndex()); }
public virtual void test_parse() { assertEquals(FloatingRateName.parse("GBP-LIBOR"), FloatingRateNames.GBP_LIBOR); assertEquals(FloatingRateName.parse("GBP-LIBOR-3M"), FloatingRateNames.GBP_LIBOR); assertEquals(FloatingRateName.parse("GBP-SONIA"), FloatingRateNames.GBP_SONIA); assertEquals(FloatingRateName.parse("GB-RPI"), FloatingRateNames.GB_RPI); assertThrowsIllegalArg(() => FloatingRateName.parse(null)); assertThrowsIllegalArg(() => FloatingRateName.parse("NotAnIndex")); }