/**
* Copyright (C) 2015 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.strata.basics.date;
import static com.opengamma.strata.basics.date.HolidayCalendarIds.EUTA;
import static com.opengamma.strata.basics.date.HolidayCalendarIds.GBLO;
import static com.opengamma.strata.collect.TestHelper.assertJodaConvert;
import static com.opengamma.strata.collect.TestHelper.assertSerialization;
import static com.opengamma.strata.collect.TestHelper.assertThrowsIllegalArg;
import static com.opengamma.strata.collect.TestHelper.coverPrivateConstructor;
import static com.opengamma.strata.collect.TestHelper.date;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertSame;
import java.time.LocalDate;
import org.testng.annotations.Test;
import com.opengamma.strata.basics.ReferenceData;
/**
* Test {@link Business252DayCount}.
*/
@Test
public class Business252DayCountTest {
private static final ReferenceData REF_DATA = ReferenceData.standard();
//-------------------------------------------------------------------------
public void test_factory_name() {
DayCount test = DayCount.of("Bus/252 EUTA");
assertEquals(test.getName(), "Bus/252 EUTA");
assertEquals(test.toString(), "Bus/252 EUTA");
assertSame(DayCount.of("Bus/252 EUTA"), test);
assertSame(DayCount.ofBus252(EUTA), test);
}
public void test_factory_nameUpper() {
DayCount test = DayCount.of("BUS/252 EUTA");
assertEquals(test.getName(), "Bus/252 EUTA");
assertEquals(test.toString(), "Bus/252 EUTA");
assertSame(DayCount.of("Bus/252 EUTA"), test);
assertSame(DayCount.ofBus252(EUTA), test);
}
public void test_factory_calendar() {
DayCount test = DayCount.ofBus252(GBLO);
assertEquals(test.getName(), "Bus/252 GBLO");
assertEquals(test.toString(), "Bus/252 GBLO");
assertSame(DayCount.of("Bus/252 GBLO"), test);
assertSame(DayCount.ofBus252(GBLO), test);
}
//-------------------------------------------------------------------------
public void test_yearFraction() {
DayCount test = DayCount.of("Bus/252 EUTA");
LocalDate date1 = date(2014, 12, 1);
LocalDate date2 = date(2014, 12, 1);
for (int i = 0; i < 366; i++) {
assertEquals(test.yearFraction(date1, date2), EUTA.resolve(REF_DATA).daysBetween(date1, date2) / 252d);
date2 = date2.plusDays(1);
}
}
public void test_yearFraction_badOrder() {
DayCount test = DayCount.of("Bus/252 EUTA");
LocalDate date1 = date(2014, 12, 2);
LocalDate date2 = date(2014, 12, 1);
assertThrowsIllegalArg(() -> test.yearFraction(date1, date2));
}
public void test_days() {
DayCount test = DayCount.of("Bus/252 EUTA");
LocalDate date1 = date(2014, 12, 1);
LocalDate date2 = date(2014, 12, 1);
for (int i = 0; i < 366; i++) {
assertEquals(test.days(date1, date2), EUTA.resolve(REF_DATA).daysBetween(date1, date2));
date2 = date2.plusDays(1);
}
}
//-------------------------------------------------------------------------
public void test_equalsHashCode() {
DayCount a = DayCount.of("Bus/252 EUTA");
DayCount b = DayCount.of("Bus/252 GBLO");
assertEquals(a.equals(a), true);
assertEquals(a.equals(b), false);
assertEquals(a.equals("Rubbish"), false);
assertEquals(a.equals(null), false);
assertEquals(a.hashCode(), a.hashCode());
}
//-------------------------------------------------------------------------
public void coverage() {
coverPrivateConstructor(Business252DayCount.class);
}
public void test_serialization() {
assertSerialization(DayCount.ofBus252(EUTA));
}
public void test_jodaConvert() {
assertJodaConvert(DayCount.class, DayCount.ofBus252(EUTA));
}
}