public virtual void test_rate_afterPublication()
        {
            DiscountOvernightIndexRates test = DiscountOvernightIndexRates.of(GBP_SONIA, DFCURVE, SERIES);
            LocalDate startDate     = GBP_SONIA_AFTER.EffectiveDate;
            LocalDate endDate       = GBP_SONIA_AFTER.MaturityDate;
            double    accrualFactor = GBP_SONIA.DayCount.yearFraction(startDate, endDate);
            double    expected      = (DFCURVE.discountFactor(startDate) / DFCURVE.discountFactor(endDate) - 1) / accrualFactor;

            assertEquals(test.rate(GBP_SONIA_AFTER), expected, 1e-8);
        }
        public virtual void test_rate_onValuation_fixing()
        {
            DiscountOvernightIndexRates test = DiscountOvernightIndexRates.of(GBP_SONIA, DFCURVE, SERIES);

            assertEquals(test.rate(GBP_SONIA_VAL), RATE_VAL);
        }
        public virtual void test_rate_beforeValuation_noFixing_notEmptySeries()
        {
            DiscountOvernightIndexRates test = DiscountOvernightIndexRates.of(GBP_SONIA, DFCURVE, SERIES_MINIMAL);

            assertThrowsIllegalArg(() => test.rate(GBP_SONIA_BEFORE));
        }