/* * 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.util.List; import junit.framework.Assert; import junit.framework.TestCase; public abstract class AbstractIMMDateTest<E> extends TestCase { private IMMDateCalculator<E> cal; @Override public void setUp() { cal = getDateCalculator("bla"); } protected abstract IMMDateCalculator<E> getDateCalculator(String name); protected abstract E parseDate(String string); private void checkImm(final IMMDateCalculator<E> cal, final E date, final boolean expected) { assertEquals("check " + date, expected, cal.isIMMDate(date)); } public void testNextIMM() { E startDate = parseDate("2006-08-01"); Assert.assertEquals("From " + startDate, parseDate("2006-09-20"), cal.getNextIMMDate(startDate)); startDate = parseDate("2006-01-09"); Assert.assertEquals("From " + startDate, parseDate("2006-03-15"), cal.getNextIMMDate(startDate)); startDate = parseDate("2006-02-09"); Assert.assertEquals("From " + startDate, parseDate("2006-03-15"), cal.getNextIMMDate(startDate)); startDate = parseDate("2006-03-09"); Assert.assertEquals("From " + startDate, parseDate("2006-03-15"), cal.getNextIMMDate(startDate)); startDate = parseDate("2006-04-09"); Assert.assertEquals("From " + startDate, parseDate("2006-06-21"), cal.getNextIMMDate(startDate)); startDate = parseDate("2006-05-09"); Assert.assertEquals("From " + startDate, parseDate("2006-06-21"), cal.getNextIMMDate(startDate)); startDate = parseDate("2006-06-09"); Assert.assertEquals("From " + startDate, parseDate("2006-06-21"), cal.getNextIMMDate(startDate)); startDate = parseDate("2006-07-09"); Assert.assertEquals("From " + startDate, parseDate("2006-09-20"), cal.getNextIMMDate(startDate)); startDate = parseDate("2006-08-09"); Assert.assertEquals("From " + startDate, parseDate("2006-09-20"), cal.getNextIMMDate(startDate)); startDate = parseDate("2006-09-09"); Assert.assertEquals("From " + startDate, parseDate("2006-09-20"), cal.getNextIMMDate(startDate)); startDate = parseDate("2006-10-09"); Assert.assertEquals("From " + startDate, parseDate("2006-12-20"), cal.getNextIMMDate(startDate)); startDate = parseDate("2006-11-09"); Assert.assertEquals("From " + startDate, parseDate("2006-12-20"), cal.getNextIMMDate(startDate)); startDate = parseDate("2006-12-09"); Assert.assertEquals("From " + startDate, parseDate("2006-12-20"), cal.getNextIMMDate(startDate)); startDate = parseDate("2006-03-14"); Assert.assertEquals("From " + startDate, parseDate("2006-03-15"), cal.getNextIMMDate(startDate)); startDate = parseDate("2006-03-15"); Assert.assertEquals("From " + startDate, parseDate("2006-06-21"), cal.getNextIMMDate(startDate)); startDate = parseDate("2006-03-16"); Assert.assertEquals("From " + startDate, parseDate("2006-06-21"), cal.getNextIMMDate(startDate)); startDate = parseDate("2006-06-20"); Assert.assertEquals("From " + startDate, parseDate("2006-06-21"), cal.getNextIMMDate(startDate)); startDate = parseDate("2006-06-21"); Assert.assertEquals("From " + startDate, parseDate("2006-09-20"), cal.getNextIMMDate(startDate)); startDate = parseDate("2006-06-22"); Assert.assertEquals("From " + startDate, parseDate("2006-09-20"), cal.getNextIMMDate(startDate)); startDate = parseDate("2006-09-19"); Assert.assertEquals("From " + startDate, parseDate("2006-09-20"), cal.getNextIMMDate(startDate)); startDate = parseDate("2006-09-20"); Assert.assertEquals("From " + startDate, parseDate("2006-12-20"), cal.getNextIMMDate(startDate)); startDate = parseDate("2006-09-21"); Assert.assertEquals("From " + startDate, parseDate("2006-12-20"), cal.getNextIMMDate(startDate)); startDate = parseDate("2006-12-19"); Assert.assertEquals("From " + startDate, parseDate("2006-12-20"), cal.getNextIMMDate(startDate)); startDate = parseDate("2006-12-20"); Assert.assertEquals("From " + startDate, parseDate("2007-03-21"), cal.getNextIMMDate(startDate)); startDate = parseDate("2006-12-21"); Assert.assertEquals("From " + startDate, parseDate("2007-03-21"), cal.getNextIMMDate(startDate)); startDate = parseDate("2006-03-15"); Assert.assertEquals("From " + startDate, parseDate("2006-06-21"), cal.getNextIMMDate(startDate)); } public void testNextIMMWithPeriod() { E startDate = parseDate("2006-08-01"); Assert.assertEquals("From " + startDate, parseDate("2006-09-20"), cal.getNextIMMDate(startDate)); IMMPeriod period = IMMPeriod.QUARTERLY; startDate = parseDate("2006-01-09"); Assert.assertEquals("From " + startDate + " period:" + period, parseDate("2006-03-15"), cal.getNextIMMDate(startDate, period)); period = IMMPeriod.BI_ANNUALY_JUN_DEC; Assert.assertEquals("From " + startDate + " period:" + period, parseDate("2006-06-21"), cal.getNextIMMDate(startDate, period)); period = IMMPeriod.BI_ANNUALY_MAR_SEP; Assert.assertEquals("From " + startDate + " period:" + period, parseDate("2006-03-15"), cal.getNextIMMDate(startDate, period)); period = IMMPeriod.ANNUALLY; Assert.assertEquals("From " + startDate + " period:" + period, parseDate("2007-03-21"), cal.getNextIMMDate(startDate, period)); startDate = parseDate("2006-03-20"); period = IMMPeriod.QUARTERLY; Assert.assertEquals("From " + startDate + " period:" + period, parseDate("2006-06-21"), cal.getNextIMMDate(startDate, period)); period = IMMPeriod.BI_ANNUALY_JUN_DEC; Assert.assertEquals("From " + startDate + " period:" + period, parseDate("2006-06-21"), cal.getNextIMMDate(startDate, period)); period = IMMPeriod.BI_ANNUALY_MAR_SEP; Assert.assertEquals("From " + startDate + " period:" + period, parseDate("2006-09-20"), cal.getNextIMMDate(startDate, period)); period = IMMPeriod.ANNUALLY; Assert.assertEquals("From " + startDate + " period:" + period, parseDate("2007-06-20"), cal.getNextIMMDate(startDate, period)); startDate = parseDate("2006-03-15"); period = IMMPeriod.QUARTERLY; Assert.assertEquals("From " + startDate + " period:" + period, parseDate("2006-06-21"), cal.getNextIMMDate(startDate, period)); period = IMMPeriod.BI_ANNUALY_JUN_DEC; Assert.assertEquals("From " + startDate + " period:" + period, parseDate("2006-06-21"), cal.getNextIMMDate(startDate, period)); period = IMMPeriod.BI_ANNUALY_MAR_SEP; Assert.assertEquals("From " + startDate + " period:" + period, parseDate("2006-09-20"), cal.getNextIMMDate(startDate, period)); startDate = parseDate("2006-03-15"); period = IMMPeriod.ANNUALLY; Assert.assertEquals("From " + startDate + " period:" + period, parseDate("2007-06-20"), cal.getNextIMMDate(startDate, period)); } // ----------------------------------------------------------------------- // // ObjectLab, world leaders in the design and development of bespoke // applications for the securities financing markets. // www.ObjectLab.co.uk // // ----------------------------------------------------------------------- public void testIfIMMDate() { checkImm(cal, parseDate("2006-08-01"), false); checkImm(cal, parseDate("2006-03-14"), false); checkImm(cal, parseDate("2006-03-15"), true); checkImm(cal, parseDate("2006-03-16"), false); checkImm(cal, parseDate("2006-06-20"), false); checkImm(cal, parseDate("2006-06-21"), true); checkImm(cal, parseDate("2006-06-22"), false); checkImm(cal, parseDate("2006-09-19"), false); checkImm(cal, parseDate("2006-09-20"), true); checkImm(cal, parseDate("2006-09-21"), false); checkImm(cal, parseDate("2006-12-19"), false); checkImm(cal, parseDate("2006-12-20"), true); checkImm(cal, parseDate("2006-12-21"), false); } public void testPreviousIMM() { E startDate = parseDate("2006-08-01"); Assert.assertEquals("From " + startDate, parseDate("2006-06-21"), cal.getPreviousIMMDate(startDate)); startDate = parseDate("2006-01-09"); Assert.assertEquals("From " + startDate, parseDate("2005-12-21"), cal.getPreviousIMMDate(startDate)); startDate = parseDate("2006-02-09"); Assert.assertEquals("From " + startDate, parseDate("2005-12-21"), cal.getPreviousIMMDate(startDate)); startDate = parseDate("2006-03-09"); Assert.assertEquals("From " + startDate, parseDate("2005-12-21"), cal.getPreviousIMMDate(startDate)); startDate = parseDate("2006-04-09"); Assert.assertEquals("From " + startDate, parseDate("2006-03-15"), cal.getPreviousIMMDate(startDate)); startDate = parseDate("2006-05-09"); Assert.assertEquals("From " + startDate, parseDate("2006-03-15"), cal.getPreviousIMMDate(startDate)); startDate = parseDate("2006-06-09"); Assert.assertEquals("From " + startDate, parseDate("2006-03-15"), cal.getPreviousIMMDate(startDate)); startDate = parseDate("2006-07-09"); Assert.assertEquals("From " + startDate, parseDate("2006-06-21"), cal.getPreviousIMMDate(startDate)); startDate = parseDate("2006-08-09"); Assert.assertEquals("From " + startDate, parseDate("2006-06-21"), cal.getPreviousIMMDate(startDate)); startDate = parseDate("2006-09-09"); Assert.assertEquals("From " + startDate, parseDate("2006-06-21"), cal.getPreviousIMMDate(startDate)); startDate = parseDate("2006-10-09"); Assert.assertEquals("From " + startDate, parseDate("2006-09-20"), cal.getPreviousIMMDate(startDate)); startDate = parseDate("2006-11-09"); Assert.assertEquals("From " + startDate, parseDate("2006-09-20"), cal.getPreviousIMMDate(startDate)); startDate = parseDate("2006-12-09"); Assert.assertEquals("From " + startDate, parseDate("2006-09-20"), cal.getPreviousIMMDate(startDate)); // close to dates startDate = parseDate("2006-03-14"); Assert.assertEquals("From " + startDate, parseDate("2005-12-21"), cal.getPreviousIMMDate(startDate)); startDate = parseDate("2006-03-15"); Assert.assertEquals("From " + startDate, parseDate("2005-12-21"), cal.getPreviousIMMDate(startDate)); startDate = parseDate("2006-03-16"); Assert.assertEquals("From " + startDate, parseDate("2006-03-15"), cal.getPreviousIMMDate(startDate)); startDate = parseDate("2006-06-20"); Assert.assertEquals("From " + startDate, parseDate("2006-03-15"), cal.getPreviousIMMDate(startDate)); startDate = parseDate("2006-06-21"); Assert.assertEquals("From " + startDate, parseDate("2006-03-15"), cal.getPreviousIMMDate(startDate)); startDate = parseDate("2006-06-22"); Assert.assertEquals("From " + startDate, parseDate("2006-06-21"), cal.getPreviousIMMDate(startDate)); startDate = parseDate("2006-09-19"); Assert.assertEquals("From " + startDate, parseDate("2006-06-21"), cal.getPreviousIMMDate(startDate)); startDate = parseDate("2006-09-20"); Assert.assertEquals("From " + startDate, parseDate("2006-06-21"), cal.getPreviousIMMDate(startDate)); startDate = parseDate("2006-09-21"); Assert.assertEquals("From " + startDate, parseDate("2006-09-20"), cal.getPreviousIMMDate(startDate)); startDate = parseDate("2006-12-19"); Assert.assertEquals("From " + startDate, parseDate("2006-09-20"), cal.getPreviousIMMDate(startDate)); startDate = parseDate("2006-12-20"); Assert.assertEquals("From " + startDate, parseDate("2006-09-20"), cal.getPreviousIMMDate(startDate)); startDate = parseDate("2006-12-21"); Assert.assertEquals("From " + startDate, parseDate("2006-12-20"), cal.getPreviousIMMDate(startDate)); } public void testIMMLists() { final E startDate = parseDate("2005-12-01"); final E endDate = parseDate("2007-03-17"); final List<E> imms = cal.getIMMDates(startDate, endDate); Assert.assertNotNull(imms); Assert.assertTrue("Not empty", !imms.isEmpty()); Assert.assertEquals("Expected number of imms dates", 5, imms.size()); Assert.assertEquals("date 1", parseDate("2005-12-21"), imms.get(0)); Assert.assertEquals("date 2", parseDate("2006-03-15"), imms.get(1)); Assert.assertEquals("date 3", parseDate("2006-06-21"), imms.get(2)); Assert.assertEquals("date 4", parseDate("2006-09-20"), imms.get(3)); Assert.assertEquals("date 5", parseDate("2006-12-20"), imms.get(4)); } public void testEmptyIMMLists() { final E startDate = parseDate("2006-03-16"); final E endDate = parseDate("2006-06-20"); final List<E> imms = cal.getIMMDates(startDate, endDate); Assert.assertNotNull(imms); Assert.assertTrue("empty", imms.isEmpty()); } public void testNext0IMMList() { final E startDate = parseDate("2006-03-16"); final List<E> imms = cal.getNextIMMDates(startDate, 0); Assert.assertNotNull(imms); Assert.assertTrue("empty", imms.isEmpty()); } public void testNext1IMMList() { final E startDate = parseDate("2006-03-16"); final List<E> imms = cal.getNextIMMDates(startDate, 1); Assert.assertNotNull(imms); Assert.assertTrue("empty", !imms.isEmpty()); Assert.assertEquals("Expected number of imms dates", 1, imms.size()); Assert.assertEquals("date 1", parseDate("2006-06-21"), imms.get(0)); } public void testNext5IMMList() { final E startDate = parseDate("2006-03-16"); final List<E> imms = cal.getNextIMMDates(startDate, 5); Assert.assertNotNull(imms); Assert.assertTrue("empty", !imms.isEmpty()); Assert.assertEquals("Expected number of imms dates", 5, imms.size()); Assert.assertEquals("date 1", parseDate("2006-06-21"), imms.get(0)); Assert.assertEquals("date 2", parseDate("2006-09-20"), imms.get(1)); Assert.assertEquals("date 3", parseDate("2006-12-20"), imms.get(2)); Assert.assertEquals("date 4", parseDate("2007-03-21"), imms.get(3)); Assert.assertEquals("date 5", parseDate("2007-06-20"), imms.get(4)); } public void testEndOnIMMDateIMMLists() { final E startDate = parseDate("2006-03-16"); final E endDate = parseDate("2006-06-21"); final List<E> imms = cal.getIMMDates(startDate, endDate); Assert.assertNotNull(imms); Assert.assertTrue("empty", !imms.isEmpty()); Assert.assertEquals("Expected number of imms dates", 1, imms.size()); Assert.assertEquals("date 1", parseDate("2006-06-21"), imms.get(0)); } public void testStartOnIMMDateIMMLists() { final E startDate = parseDate("2006-03-15"); final E endDate = parseDate("2006-06-20"); final List<E> imms = cal.getIMMDates(startDate, endDate); Assert.assertNotNull(imms); Assert.assertTrue("empty", imms.isEmpty()); } } /* * 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 */