/*
* ObjectLab, http://www.objectlab.co.uk/open is sponsoring the ObjectLab Kit.
*
* Based in London, we are world leaders in the design and development
* of bespoke applications for the securities financing markets.
*
* <a href="http://www.objectlab.co.uk/open">Click here to learn more</a>
* ___ _ _ _ _ _
* / _ \| |__ (_) ___ ___| |_| | __ _| |__
* | | | | '_ \| |/ _ \/ __| __| | / _` | '_ \
* | |_| | |_) | | __/ (__| |_| |__| (_| | |_) |
* \___/|_.__// |\___|\___|\__|_____\__,_|_.__/
* |__/
*
* www.ObjectLab.co.uk
*
* $Id$
*
* Copyright 2006 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package net.objectlab.kit.datecalc.common;
import java.math.BigDecimal;
import junit.framework.Assert;
import junit.framework.TestCase;
public abstract class AbstractPeriodCountCalculatorTest<E> extends TestCase {
private static final String[][] ACT_365 = {
// name start end period dayDiff yearDiff
{ "0D", "2006-08-08", "2006-08-08", "ACT_365", "0", "0.00" },
{ "1D", "2006-08-08", "2006-08-09", "ACT_365", "1", "0.002740" },
{ "1W", "2006-08-08", "2006-08-15", "ACT_365", "7", "0.019178" },
{ "1M", "2006-08-08", "2006-09-08", "ACT_365", "31", "0.084932" },
{ "3M", "2006-08-08", "2006-11-08", "ACT_365", "92", "0.252055" },
{ "6M", "2006-08-08", "2007-02-08", "ACT_365", "184", "0.504110" },
{ "9M", "2006-08-08", "2007-05-08", "ACT_365", "273", "0.747945" },
{ "1Y", "2006-08-08", "2007-08-08", "ACT_365", "365", "1.000000" },
{ "2Y", "2006-08-08", "2008-08-08", "ACT_365", "731", "2.002740" },
{ "3Y", "2006-08-08", "2009-08-10", "ACT_365", "1098", "3.008219" },
{ "4Y", "2006-08-08", "2010-08-09", "ACT_365", "1462", "4.005479" },
{ "5Y", "2006-08-08", "2011-08-08", "ACT_365", "1826", "5.002740" },
{ "7Y", "2006-08-08", "2013-08-08", "ACT_365", "2557", "7.005479" },
{ "10Y", "2006-08-08", "2016-08-08", "ACT_365", "3653", "10.008219" },
{ "15Y", "2006-08-08", "2021-08-09", "ACT_365", "5480", "15.013699" },
{ "20Y", "2006-08-08", "2026-08-10", "ACT_365", "7307", "20.019178" },
{ "30Y", "2006-08-08", "2036-08-08", "ACT_365", "10958", "30.021918" },
// leap year - funny date...
{ "0D", "2008-02-29", "2008-02-29", "ACT_365", "0", "0.00" },
{ "1D", "2008-02-29", "2008-03-03", "ACT_365", "3", "0.008219" },
{ "1W", "2008-02-29", "2008-03-07", "ACT_365", "7", "0.019178" },
{ "1M", "2008-02-29", "2008-03-31", "ACT_365", "31", "0.084932" },
{ "3M", "2008-02-29", "2008-05-29", "ACT_365", "90", "0.246575" },
{ "6M", "2008-02-29", "2008-08-29", "ACT_365", "182", "0.498630" },
{ "9M", "2008-02-29", "2008-11-28", "ACT_365", "273", "0.747945" },
{ "1Y", "2008-02-29", "2009-02-27", "ACT_365", "364", "0.997260" },
{ "2Y", "2008-02-29", "2010-02-26", "ACT_365", "728", "1.994521" },
{ "3Y", "2008-02-29", "2011-02-28", "ACT_365", "1095", "3.000000" },
{ "4Y", "2008-02-29", "2012-02-29", "ACT_365", "1461", "4.002740" },
{ "5Y", "2008-02-29", "2013-02-28", "ACT_365", "1826", "5.002740" },
{ "7Y", "2008-02-29", "2015-02-27", "ACT_365", "2555", "7.000000" },
{ "10Y", "2008-02-29", "2018-02-28", "ACT_365", "3652", "10.005479" },
{ "15Y", "2008-02-29", "2023-02-28", "ACT_365", "5478", "15.008219" },
{ "20Y", "2008-02-29", "2028-02-29", "ACT_365", "7305", "20.013699" },
{ "30Y", "2008-02-29", "2038-02-26", "ACT_365", "10955", "30.013699" },
// start date end of month...
{ "0D", "1998-12-31", "1998-12-31", "ACT_365", "0", "0.00" }, { "1D", "1998-12-31", "1999-01-01", "ACT_365", "1", "0.002740" },
{ "1W", "1998-12-31", "1999-01-07", "ACT_365", "7", "0.019178" }, { "1M", "1998-12-31", "1999-01-29", "ACT_365", "29", "0.079452" },
{ "3M", "1998-12-31", "1999-03-31", "ACT_365", "90", "0.246575" }, { "6M", "1998-12-31", "1999-06-30", "ACT_365", "181", "0.495890" },
{ "9M", "1998-12-31", "1999-09-30", "ACT_365", "273", "0.747945" }, { "1Y", "1998-12-31", "1999-12-31", "ACT_365", "365", "1.000000" },
{ "2Y", "1998-12-31", "2000-12-29", "ACT_365", "729", "1.997260" }, { "3Y", "1998-12-31", "2001-12-31", "ACT_365", "1096", "3.002740" },
{ "4Y", "1998-12-31", "2002-12-31", "ACT_365", "1461", "4.002740" }, { "5Y", "1998-12-31", "2003-12-31", "ACT_365", "1826", "5.002740" },
{ "7Y", "1998-12-31", "2005-12-30", "ACT_365", "2556", "7.002740" },
{ "10Y", "1998-12-31", "2008-12-31", "ACT_365", "3653", "10.008219" },
{ "15Y", "1998-12-31", "2013-12-31", "ACT_365", "5479", "15.010959" },
{ "20Y", "1998-12-31", "2018-12-31", "ACT_365", "7305", "20.013699" },
{ "30Y", "1998-12-31", "2028-12-29", "ACT_365", "10956", "30.016438" }
// end of set
};
private static final String[][] ACT_360 = {
// name start end period dayDiff yearDiff
{ "0D", "2006-08-08", "2006-08-08", "ACT_360", "0", "0.00" },
{ "1D", "2006-08-08", "2006-08-09", "ACT_360", "1", "0.002778" },
{ "1W", "2006-08-08", "2006-08-15", "ACT_360", "7", "0.019444" },
{ "1M", "2006-08-08", "2006-09-08", "ACT_360", "31", "0.086111" },
{ "3M", "2006-08-08", "2006-11-08", "ACT_360", "92", "0.255556" },
{ "6M", "2006-08-08", "2007-02-08", "ACT_360", "184", "0.511111" },
{ "9M", "2006-08-08", "2007-05-08", "ACT_360", "273", "0.758333" },
{ "1Y", "2006-08-08", "2007-08-08", "ACT_360", "365", "1.013889" },
{ "2Y", "2006-08-08", "2008-08-08", "ACT_360", "731", "2.030556" },
{ "3Y", "2006-08-08", "2009-08-10", "ACT_360", "1098", "3.050000" },
{ "4Y", "2006-08-08", "2010-08-09", "ACT_360", "1462", "4.061111" },
{ "5Y", "2006-08-08", "2011-08-08", "ACT_360", "1826", "5.072222" },
{ "7Y", "2006-08-08", "2013-08-08", "ACT_360", "2557", "7.102778" },
{ "10Y", "2006-08-08", "2016-08-08", "ACT_360", "3653", "10.147222" },
{ "15Y", "2006-08-08", "2021-08-09", "ACT_360", "5480", "15.222222" },
{ "20Y", "2006-08-08", "2026-08-10", "ACT_360", "7307", "20.297222" },
{ "30Y", "2006-08-08", "2036-08-08", "ACT_360", "10958", "30.438889" },
// leap year - funny date...
{ "0D", "2008-02-29", "2008-02-29", "ACT_360", "0", "0.00" },
{ "1D", "2008-02-29", "2008-03-03", "ACT_360", "3", "0.008333" },
{ "1W", "2008-02-29", "2008-03-07", "ACT_360", "7", "0.019444" },
{ "1M", "2008-02-29", "2008-03-31", "ACT_360", "31", "0.086111" },
{ "3M", "2008-02-29", "2008-05-29", "ACT_360", "90", "0.250000" },
{ "6M", "2008-02-29", "2008-08-29", "ACT_360", "182", "0.505556" },
{ "9M", "2008-02-29", "2008-11-28", "ACT_360", "273", "0.758333" },
{ "1Y", "2008-02-29", "2009-02-27", "ACT_360", "364", "1.011111" },
{ "2Y", "2008-02-29", "2010-02-26", "ACT_360", "728", "2.022222" },
{ "3Y", "2008-02-29", "2011-02-28", "ACT_360", "1095", "3.041667" },
{ "4Y", "2008-02-29", "2012-02-29", "ACT_360", "1461", "4.058333" },
{ "5Y", "2008-02-29", "2013-02-28", "ACT_360", "1826", "5.072222" },
{ "7Y", "2008-02-29", "2015-02-27", "ACT_360", "2555", "7.097222" },
{ "10Y", "2008-02-29", "2018-02-28", "ACT_360", "3652", "10.144444" },
{ "15Y", "2008-02-29", "2023-02-28", "ACT_360", "5478", "15.216667" },
{ "20Y", "2008-02-29", "2028-02-29", "ACT_360", "7305", "20.291667" },
{ "30Y", "2008-02-29", "2038-02-26", "ACT_360", "10955", "30.430556" },
// start date end of month...
{ "0D", "1998-12-31", "1998-12-31", "ACT_360", "0", "0.00" }, { "1D", "1998-12-31", "1999-01-01", "ACT_360", "1", "0.002778" },
{ "1W", "1998-12-31", "1999-01-07", "ACT_360", "7", "0.019444" }, { "1M", "1998-12-31", "1999-01-29", "ACT_360", "29", "0.080556" },
{ "3M", "1998-12-31", "1999-03-31", "ACT_360", "90", "0.250000" }, { "6M", "1998-12-31", "1999-06-30", "ACT_360", "181", "0.502778" },
{ "9M", "1998-12-31", "1999-09-30", "ACT_360", "273", "0.758333" }, { "1Y", "1998-12-31", "1999-12-31", "ACT_360", "365", "1.013889" },
{ "2Y", "1998-12-31", "2000-12-29", "ACT_360", "729", "2.025000" }, { "3Y", "1998-12-31", "2001-12-31", "ACT_360", "1096", "3.044444" },
{ "4Y", "1998-12-31", "2002-12-31", "ACT_360", "1461", "4.058333" }, { "5Y", "1998-12-31", "2003-12-31", "ACT_360", "1826", "5.072222" },
{ "7Y", "1998-12-31", "2005-12-30", "ACT_360", "2556", "7.100000" },
{ "10Y", "1998-12-31", "2008-12-31", "ACT_360", "3653", "10.147222" },
{ "15Y", "1998-12-31", "2013-12-31", "ACT_360", "5479", "15.219444" },
{ "20Y", "1998-12-31", "2018-12-31", "ACT_360", "7305", "20.291667" },
{ "30Y", "1998-12-31", "2028-12-29", "ACT_360", "10956", "30.433333" }
// end of set
};
private static final String[][] ACT_ACT = {
// name start end period dayDiff yearDiff
{ "0D", "2006-08-08", "2006-08-08", "ACT_ACT", "0", "0.00" },
{ "1D", "2006-08-08", "2006-08-09", "ACT_ACT", "1", "0.00" },
{ "1W", "2006-08-08", "2006-08-15", "ACT_ACT", "7", "0.00" },
{ "1M", "2006-08-08", "2006-09-08", "ACT_ACT", "31", "0.00" },
{ "3M", "2006-08-08", "2006-11-08", "ACT_ACT", "92", "0.00" },
{ "6M", "2006-08-08", "2007-02-08", "ACT_ACT", "184", "0.504110" },
{ "9M", "2006-08-08", "2007-05-08", "ACT_ACT", "273", "0.747945" },
{ "1Y", "2006-08-08", "2007-08-08", "ACT_ACT", "365", "1.000000" },
{ "2Y", "2006-08-08", "2008-08-08", "ACT_ACT", "731", "2.001093" },
{ "3Y", "2006-08-08", "2009-08-10", "ACT_ACT", "1098", "3.005479" },
{ "4Y", "2006-08-08", "2010-08-09", "ACT_ACT", "1462", "4.002740" },
{ "5Y", "2006-08-08", "2011-08-08", "ACT_ACT", "1826", "5.00" },
{ "7Y", "2006-08-08", "2013-08-08", "ACT_ACT", "2557", "7.00" },
{ "10Y", "2006-08-08", "2016-08-08", "ACT_ACT", "3653", "10.001093" },
{ "15Y", "2006-08-08", "2021-08-09", "ACT_ACT", "5480", "15.002740" },
{ "20Y", "2006-08-08", "2026-08-10", "ACT_ACT", "7307", "20.005479" },
{ "30Y", "2006-08-08", "2036-08-08", "ACT_ACT", "10958", "30.001093" },
// leap year - funny date...
{ "0D", "2008-02-29", "2008-02-29", "ACT_ACT", "0", "0.00" },
{ "1D", "2008-02-29", "2008-03-03", "ACT_ACT", "3", "0.00" },
{ "1W", "2008-02-29", "2008-03-07", "ACT_ACT", "7", "0.00" },
{ "1M", "2008-02-29", "2008-03-31", "ACT_ACT", "31", "0.00" },
{ "3M", "2008-02-29", "2008-05-29", "ACT_ACT", "90", "0.00" },
{ "6M", "2008-02-29", "2008-08-29", "ACT_ACT", "182", "0.00" },
{ "9M", "2008-02-29", "2008-11-28", "ACT_ACT", "273", "0.00" },
{ "1Y", "2008-02-29", "2009-02-27", "ACT_ACT", "364", "0.994962" },
{ "2Y", "2008-02-29", "2010-02-26", "ACT_ACT", "728", "1.992222" },
{ "3Y", "2008-02-29", "2011-02-28", "ACT_ACT", "1095", "2.997702" },
{ "4Y", "2008-02-29", "2012-02-29", "ACT_ACT", "1461", "4.00" },
{ "5Y", "2008-02-29", "2013-02-28", "ACT_ACT", "1826", "4.997702" },
{ "7Y", "2008-02-29", "2015-02-27", "ACT_ACT", "2555", "6.994962" },
{ "10Y", "2008-02-29", "2018-02-28", "ACT_ACT", "3652", "9.997702" },
{ "15Y", "2008-02-29", "2023-02-28", "ACT_ACT", "5478", "14.997702" },
{ "20Y", "2008-02-29", "2028-02-29", "ACT_ACT", "7305", "20.00" },
{ "30Y", "2008-02-29", "2038-02-26", "ACT_ACT", "10955", "29.992222" },
// start date end of month...
{ "0D", "1998-12-31", "1998-12-31", "ACT_ACT", "0", "0.00" }, { "1D", "1998-12-31", "1999-01-01", "ACT_ACT", "1", "0.002740" },
{ "1W", "1998-12-31", "1999-01-07", "ACT_ACT", "7", "0.019178" }, { "1M", "1998-12-31", "1999-01-29", "ACT_ACT", "29", "0.079452" },
{ "3M", "1998-12-31", "1999-03-31", "ACT_ACT", "90", "0.246575" }, { "6M", "1998-12-31", "1999-06-30", "ACT_ACT", "181", "0.495890" },
{ "9M", "1998-12-31", "1999-09-30", "ACT_ACT", "273", "0.747945" }, { "1Y", "1998-12-31", "1999-12-31", "ACT_ACT", "365", "1.000000" },
{ "2Y", "1998-12-31", "2000-12-29", "ACT_ACT", "729", "1.994543" }, { "3Y", "1998-12-31", "2001-12-31", "ACT_ACT", "1096", "3.00" },
{ "4Y", "1998-12-31", "2002-12-31", "ACT_ACT", "1461", "4.00" }, { "5Y", "1998-12-31", "2003-12-31", "ACT_ACT", "1826", "5.00" },
{ "7Y", "1998-12-31", "2005-12-30", "ACT_ACT", "2556", "6.997260" },
{ "10Y", "1998-12-31", "2008-12-31", "ACT_ACT", "3653", "10.000007" }, { "15Y", "1998-12-31", "2013-12-31", "ACT_ACT", "5479", "15.00" },
{ "20Y", "1998-12-31", "2018-12-31", "ACT_ACT", "7305", "20.00" }, { "30Y", "1998-12-31", "2028-12-29", "ACT_ACT", "10956", "29.994543" }
// end of set
};
// -----------------------------------------------------------------------
//
// ObjectLab, world leaders in the design and development of bespoke
// applications for the securities financing markets.
// www.ObjectLab.co.uk
//
// -----------------------------------------------------------------------
private static final String[][] CONV_30_360 = {
// name start end period dayDiff yearDiff
{ "0D", "2006-08-08", "2006-08-08", "CONV_30_360", "0", "0.00" },
{ "1D", "2006-08-08", "2006-08-09", "CONV_30_360", "1", "0.002778" },
{ "1W", "2006-08-08", "2006-08-15", "CONV_30_360", "7", "0.019444" },
{ "1M", "2006-08-08", "2006-09-08", "CONV_30_360", "30", "0.083333" },
{ "3M", "2006-08-08", "2006-11-08", "CONV_30_360", "90", "0.250000" },
{ "6M", "2006-08-08", "2007-02-08", "CONV_30_360", "180", "0.500000" },
{ "9M", "2006-08-08", "2007-05-08", "CONV_30_360", "270", "0.750000" },
{ "1Y", "2006-08-08", "2007-08-08", "CONV_30_360", "360", "1.000000" },
{ "2Y", "2006-08-08", "2008-08-08", "CONV_30_360", "720", "2.000000" },
{ "3Y", "2006-08-08", "2009-08-10", "CONV_30_360", "1082", "3.005556" },
{ "4Y", "2006-08-08", "2010-08-09", "CONV_30_360", "1441", "4.002778" },
{ "5Y", "2006-08-08", "2011-08-08", "CONV_30_360", "1800", "5.000000" },
{ "7Y", "2006-08-08", "2013-08-08", "CONV_30_360", "2520", "7.000000" },
{ "10Y", "2006-08-08", "2016-08-08", "CONV_30_360", "3600", "10.000000" },
{ "15Y", "2006-08-08", "2021-08-09", "CONV_30_360", "5401", "15.002778" },
{ "20Y", "2006-08-08", "2026-08-10", "CONV_30_360", "7202", "20.005556" },
{ "30Y", "2006-08-08", "2036-08-08", "CONV_30_360", "10800", "30.000000" },
// leap year - funny date...
{ "0D", "2008-02-29", "2008-02-29", "CONV_30_360", "0", "0.00" },
{ "1D", "2008-02-29", "2008-03-03", "CONV_30_360", "4", "0.011111" },
{ "1W", "2008-02-29", "2008-03-07", "CONV_30_360", "8", "0.022222" },
{ "1M", "2008-02-29", "2008-03-31", "CONV_30_360", "32", "0.088889" },
{ "3M", "2008-02-29", "2008-05-29", "CONV_30_360", "90", "0.250000" },
{ "6M", "2008-02-29", "2008-08-29", "CONV_30_360", "180", "0.500000" },
{ "9M", "2008-02-29", "2008-11-28", "CONV_30_360", "269", "0.747222" },
{ "1Y", "2008-02-29", "2009-02-27", "CONV_30_360", "358", "0.994444" },
{ "2Y", "2008-02-29", "2010-02-26", "CONV_30_360", "717", "1.991667" },
{ "3Y", "2008-02-29", "2011-02-28", "CONV_30_360", "1079", "2.997222" },
{ "4Y", "2008-02-29", "2012-02-29", "CONV_30_360", "1440", "4.000000" },
{ "5Y", "2008-02-29", "2013-02-28", "CONV_30_360", "1799", "4.997222" },
{ "7Y", "2008-02-29", "2015-02-27", "CONV_30_360", "2518", "6.994444" },
{ "10Y", "2008-02-29", "2018-02-28", "CONV_30_360", "3599", "9.997222" },
{ "15Y", "2008-02-29", "2023-02-28", "CONV_30_360", "5399", "14.997222" },
{ "20Y", "2008-02-29", "2028-02-29", "CONV_30_360", "7200", "20.000000" },
{ "30Y", "2008-02-29", "2038-02-26", "CONV_30_360", "10797", "29.991667" },
// start date end of month...
{ "0D", "1998-12-31", "1998-12-31", "CONV_30_360", "0", "0.000000" },
{ "1D", "1998-12-31", "1999-01-01", "CONV_30_360", "1", "0.002778" },
{ "1W", "1998-12-31", "1999-01-07", "CONV_30_360", "7", "0.019444" },
{ "1M", "1998-12-31", "1999-01-29", "CONV_30_360", "29", "0.080556" },
{ "3M", "1998-12-31", "1999-03-31", "CONV_30_360", "90", "0.250000" },
{ "6M", "1998-12-31", "1999-06-30", "CONV_30_360", "180", "0.500000" },
{ "9M", "1998-12-31", "1999-09-30", "CONV_30_360", "270", "0.750000" },
{ "1Y", "1998-12-31", "1999-12-31", "CONV_30_360", "360", "1.000000" },
{ "2Y", "1998-12-31", "2000-12-29", "CONV_30_360", "719", "1.997222" },
{ "3Y", "1998-12-31", "2001-12-31", "CONV_30_360", "1080", "3.000000" },
{ "4Y", "1998-12-31", "2002-12-31", "CONV_30_360", "1440", "4.000000" },
{ "5Y", "1998-12-31", "2003-12-31", "CONV_30_360", "1800", "5.000000" },
{ "7Y", "1998-12-31", "2005-12-30", "CONV_30_360", "2520", "7.000000" },
{ "10Y", "1998-12-31", "2008-12-31", "CONV_30_360", "3600", "10.000000" },
{ "15Y", "1998-12-31", "2013-12-31", "CONV_30_360", "5400", "15.000000" },
{ "20Y", "1998-12-31", "2018-12-31", "CONV_30_360", "7200", "20.000000" },
{ "30Y", "1998-12-31", "2028-12-29", "CONV_30_360", "10799", "29.997222" }
// end of set
};
private static final String[][] CONV_360E_ISDA = {
// name start end period dayDiff yearDiff
{ "0D", "2006-08-08", "2006-08-08", "CONV_360E_ISDA", "0", "0.00" },
{ "1D", "2006-08-08", "2006-08-09", "CONV_360E_ISDA", "1", "0.002778" },
{ "1W", "2006-08-08", "2006-08-15", "CONV_360E_ISDA", "7", "0.019444" },
{ "1M", "2006-08-08", "2006-09-08", "CONV_360E_ISDA", "30", "0.083333" },
{ "3M", "2006-08-08", "2006-11-08", "CONV_360E_ISDA", "90", "0.250000" },
{ "6M", "2006-08-08", "2007-02-08", "CONV_360E_ISDA", "180", "0.500000" },
{ "9M", "2006-08-08", "2007-05-08", "CONV_360E_ISDA", "270", "0.750000" },
{ "1Y", "2006-08-08", "2007-08-08", "CONV_360E_ISDA", "360", "1.000000" },
{ "2Y", "2006-08-08", "2008-08-08", "CONV_360E_ISDA", "720", "2.000000" },
{ "3Y", "2006-08-08", "2009-08-10", "CONV_360E_ISDA", "1082", "3.005556" },
{ "4Y", "2006-08-08", "2010-08-09", "CONV_360E_ISDA", "1441", "4.002778" },
{ "5Y", "2006-08-08", "2011-08-08", "CONV_360E_ISDA", "1800", "5.000000" },
{ "7Y", "2006-08-08", "2013-08-08", "CONV_360E_ISDA", "2520", "7.000000" },
{ "10Y", "2006-08-08", "2016-08-08", "CONV_360E_ISDA", "3600", "10.000000" },
{ "15Y", "2006-08-08", "2021-08-09", "CONV_360E_ISDA", "5401", "15.002778" },
{ "20Y", "2006-08-08", "2026-08-10", "CONV_360E_ISDA", "7202", "20.005556" },
{ "30Y", "2006-08-08", "2036-08-08", "CONV_360E_ISDA", "10800", "30.000000" },
// leap year - funny date...
{ "0D", "2008-02-29", "2008-02-29", "CONV_360E_ISDA", "0", "0.00" },
{ "1D", "2008-02-29", "2008-03-03", "CONV_360E_ISDA", "3", "0.008333" },
{ "1W", "2008-02-29", "2008-03-07", "CONV_360E_ISDA", "7", "0.019444" },
{ "1M", "2008-02-29", "2008-03-31", "CONV_360E_ISDA", "30", "0.083333" },
{ "3M", "2008-02-29", "2008-05-29", "CONV_360E_ISDA", "89", "0.247222" },
{ "6M", "2008-02-29", "2008-08-29", "CONV_360E_ISDA", "179", "0.497222" },
{ "9M", "2008-02-29", "2008-11-28", "CONV_360E_ISDA", "268", "0.744444" },
{ "1Y", "2008-02-29", "2009-02-27", "CONV_360E_ISDA", "357", "0.991667" },
{ "2Y", "2008-02-29", "2010-02-26", "CONV_360E_ISDA", "716", "1.988889" },
{ "3Y", "2008-02-29", "2011-02-28", "CONV_360E_ISDA", "1078", "2.994444" },
{ "4Y", "2008-02-29", "2012-02-29", "CONV_360E_ISDA", "1439", "3.997222" },
{ "5Y", "2008-02-29", "2013-02-28", "CONV_360E_ISDA", "1798", "4.994444" },
{ "7Y", "2008-02-29", "2015-02-27", "CONV_360E_ISDA", "2517", "6.991667" },
{ "10Y", "2008-02-29", "2018-02-28", "CONV_360E_ISDA", "3598", "9.994444" },
{ "15Y", "2008-02-29", "2023-02-28", "CONV_360E_ISDA", "5398", "14.994444" },
{ "20Y", "2008-02-29", "2028-02-29", "CONV_360E_ISDA", "7199", "19.997222" },
{ "30Y", "2008-02-29", "2038-02-26", "CONV_360E_ISDA", "10796", "29.988889" },
// start date end of month...
{ "0D", "1998-12-31", "1998-12-31", "CONV_360E_ISDA", "0", "0.00" },
{ "1D", "1998-12-31", "1999-01-01", "CONV_360E_ISDA", "1", "0.002778" },
{ "1W", "1998-12-31", "1999-01-07", "CONV_360E_ISDA", "7", "0.019444" },
{ "1M", "1998-12-31", "1999-01-29", "CONV_360E_ISDA", "29", "0.080556" },
{ "3M", "1998-12-31", "1999-03-31", "CONV_360E_ISDA", "90", "0.250000" },
{ "6M", "1998-12-31", "1999-06-30", "CONV_360E_ISDA", "180", "0.500000" },
{ "9M", "1998-12-31", "1999-09-30", "CONV_360E_ISDA", "270", "0.750000" },
{ "1Y", "1998-12-31", "1999-12-31", "CONV_360E_ISDA", "360", "1.000000" },
{ "2Y", "1998-12-31", "2000-12-29", "CONV_360E_ISDA", "719", "1.997222" },
{ "3Y", "1998-12-31", "2001-12-31", "CONV_360E_ISDA", "1080", "3.000000" },
{ "4Y", "1998-12-31", "2002-12-31", "CONV_360E_ISDA", "1440", "4.000000" },
{ "5Y", "1998-12-31", "2003-12-31", "CONV_360E_ISDA", "1800", "5.000000" },
{ "7Y", "1998-12-31", "2005-12-30", "CONV_360E_ISDA", "2520", "7.000000" },
{ "10Y", "1998-12-31", "2008-12-31", "CONV_360E_ISDA", "3600", "10.000000" },
{ "15Y", "1998-12-31", "2013-12-31", "CONV_360E_ISDA", "5400", "15.000000" },
{ "20Y", "1998-12-31", "2018-12-31", "CONV_360E_ISDA", "7200", "20.000000" },
{ "30Y", "1998-12-31", "2028-12-29", "CONV_360E_ISDA", "10799", "29.997222" }
// end of set
};
private static final String[][] CONV_360E_ISMA = {
// name start end period dayDiff yearDiff
{ "0D", "2006-08-08", "2006-08-08", "CONV_360E_ISMA", "0", "0.00" },
{ "1D", "2006-08-08", "2006-08-09", "CONV_360E_ISMA", "1", "0.002778" },
{ "1W", "2006-08-08", "2006-08-15", "CONV_360E_ISMA", "7", "0.019444" },
{ "1M", "2006-08-08", "2006-09-08", "CONV_360E_ISMA", "30", "0.083333" },
{ "3M", "2006-08-08", "2006-11-08", "CONV_360E_ISMA", "90", "0.250000" },
{ "6M", "2006-08-08", "2007-02-08", "CONV_360E_ISMA", "180", "0.500000" },
{ "9M", "2006-08-08", "2007-05-08", "CONV_360E_ISMA", "270", "0.750000" },
{ "1Y", "2006-08-08", "2007-08-08", "CONV_360E_ISMA", "360", "1.000000" },
{ "2Y", "2006-08-08", "2008-08-08", "CONV_360E_ISMA", "720", "2.000000" },
{ "3Y", "2006-08-08", "2009-08-10", "CONV_360E_ISMA", "1082", "3.005556" },
{ "4Y", "2006-08-08", "2010-08-09", "CONV_360E_ISMA", "1441", "4.002778" },
{ "5Y", "2006-08-08", "2011-08-08", "CONV_360E_ISMA", "1800", "5.000000" },
{ "7Y", "2006-08-08", "2013-08-08", "CONV_360E_ISMA", "2520", "7.000000" },
{ "10Y", "2006-08-08", "2016-08-08", "CONV_360E_ISMA", "3600", "10.000000" },
{ "15Y", "2006-08-08", "2021-08-09", "CONV_360E_ISMA", "5401", "15.002778" },
{ "20Y", "2006-08-08", "2026-08-10", "CONV_360E_ISMA", "7202", "20.005556" },
{ "30Y", "2006-08-08", "2036-08-08", "CONV_360E_ISMA", "10800", "30.000000" },
// leap year - funny date...
{ "0D", "2008-02-29", "2008-02-29", "CONV_360E_ISMA", "0", "0.00" },
{ "1D", "2008-02-29", "2008-03-03", "CONV_360E_ISMA", "4", "0.011111" },
{ "1W", "2008-02-29", "2008-03-07", "CONV_360E_ISMA", "8", "0.022222" },
{ "1M", "2008-02-29", "2008-03-31", "CONV_360E_ISMA", "31", "0.086111" },
{ "3M", "2008-02-29", "2008-05-29", "CONV_360E_ISMA", "90", "0.250000" },
{ "6M", "2008-02-29", "2008-08-29", "CONV_360E_ISMA", "180", "0.500000" },
{ "9M", "2008-02-29", "2008-11-28", "CONV_360E_ISMA", "269", "0.747222" },
{ "1Y", "2008-02-29", "2009-02-27", "CONV_360E_ISMA", "358", "0.994444" },
{ "2Y", "2008-02-29", "2010-02-26", "CONV_360E_ISMA", "717", "1.991667" },
{ "3Y", "2008-02-29", "2011-02-28", "CONV_360E_ISMA", "1079", "2.997222" },
{ "4Y", "2008-02-29", "2012-02-29", "CONV_360E_ISMA", "1440", "4.000000" },
{ "5Y", "2008-02-29", "2013-02-28", "CONV_360E_ISMA", "1799", "4.997222" },
{ "7Y", "2008-02-29", "2015-02-27", "CONV_360E_ISMA", "2518", "6.994444" },
{ "10Y", "2008-02-29", "2018-02-28", "CONV_360E_ISMA", "3599", "9.997222" },
{ "15Y", "2008-02-29", "2023-02-28", "CONV_360E_ISMA", "5399", "14.997222" },
{ "20Y", "2008-02-29", "2028-02-29", "CONV_360E_ISMA", "7200", "20.000000" },
{ "30Y", "2008-02-29", "2038-02-26", "CONV_360E_ISMA", "10797", "29.991667" },
// start date end of month...
{ "0D", "1998-12-31", "1998-12-31", "CONV_360E_ISMA", "0", "0.00" },
{ "1D", "1998-12-31", "1999-01-01", "CONV_360E_ISMA", "1", "0.002778" },
{ "1W", "1998-12-31", "1999-01-07", "CONV_360E_ISMA", "7", "0.019444" },
{ "1M", "1998-12-31", "1999-01-29", "CONV_360E_ISMA", "29", "0.080556" },
{ "3M", "1998-12-31", "1999-03-31", "CONV_360E_ISMA", "90", "0.250000" },
{ "6M", "1998-12-31", "1999-06-30", "CONV_360E_ISMA", "180", "0.500000" },
{ "9M", "1998-12-31", "1999-09-30", "CONV_360E_ISMA", "270", "0.750000" },
{ "1Y", "1998-12-31", "1999-12-31", "CONV_360E_ISMA", "360", "1.000000" },
{ "2Y", "1998-12-31", "2000-12-29", "CONV_360E_ISMA", "719", "1.997222" },
{ "3Y", "1998-12-31", "2001-12-31", "CONV_360E_ISMA", "1080", "3.000000" },
{ "4Y", "1998-12-31", "2002-12-31", "CONV_360E_ISMA", "1440", "4.000000" },
{ "5Y", "1998-12-31", "2003-12-31", "CONV_360E_ISMA", "1800", "5.000000" },
{ "7Y", "1998-12-31", "2005-12-30", "CONV_360E_ISMA", "2520", "7.000000" },
{ "10Y", "1998-12-31", "2008-12-31", "CONV_360E_ISMA", "3600", "10.000000" },
{ "15Y", "1998-12-31", "2013-12-31", "CONV_360E_ISMA", "5400", "15.000000" },
{ "20Y", "1998-12-31", "2018-12-31", "CONV_360E_ISMA", "7200", "20.000000" },
{ "30Y", "1998-12-31", "2028-12-29", "CONV_360E_ISMA", "10799", "29.997222" }
// end of set
};
private PeriodCountCalculator<E> cal;
@Override
public void setUp() {
cal = getPeriodCountCalculator();
}
public abstract PeriodCountCalculator<E> getPeriodCountCalculator();
public abstract E parseDate(String string);
public abstract E getDate();
public void testSanity() {
Assert.assertNotNull(cal);
}
public void testConv30EvIsma() {
runtests(CONV_360E_ISMA);
}
public void testConv30Ev360() {
runtests(CONV_360E_ISDA);
}
public void testConv30v360() {
runtests(CONV_30_360);
}
public void testAct365() {
runtests(ACT_365);
}
public void testAct360() {
runtests(ACT_360);
}
public void testActAct() {
runtests(ACT_ACT);
}
private void runtests(final String[][] tests) {
for (final String[] test : tests) {
runtest(cal, test);
}
}
private void runtest(final PeriodCountCalculator<E> cal, final String[] test) {
final String name = test[0];
final E start = parseDate(test[1]);
final E end = parseDate(test[2]);
final PeriodCountBasis pcount = PeriodCountBasis.valueOf(test[3]);
final int dayDiff = Integer.parseInt(test[4]);
Assert.assertEquals(name + " Basis:" + pcount + " start:" + start + " End:" + end + " dayDiff", dayDiff, cal.dayDiff(start, end, pcount));
final BigDecimal yearDiff = new BigDecimal(cal.yearDiff(start, end, pcount)).setScale(6, BigDecimal.ROUND_HALF_UP);
Assert.assertTrue(name + " Basis:" + pcount + " yearDiff expected:" + test[5] + " got:" + yearDiff,
new BigDecimal(test[5]).compareTo(yearDiff) == 0);
}
}
/*
* ObjectLab, http://www.objectlab.co.uk/open is sponsoring the ObjectLab Kit.
*
* Based in London, we are world leaders in the design and development of
* bespoke applications for the securities financing markets.
*
* <a href="http://www.objectlab.co.uk/open">Click here to learn more about
* us</a> ___ _ _ _ _ _ / _ \| |__ (_) ___ ___| |_| | __ _| |__ | | | | '_ \| |/
* _ \/ __| __| | / _` | '_ \ | |_| | |_) | | __/ (__| |_| |__| (_| | |_) |
* \___/|_.__// |\___|\___|\__|_____\__,_|_.__/ |__/
*
* www.ObjectLab.co.uk
*/