提交 39817b4e 编写于 作者: I igerasim

8194412: Adding 256 units of IsoFields.QUARTER_YEARS broken

Reviewed-by: scolebourne, rriggs
上级 2bc2c017
/*
* Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
......@@ -692,9 +692,8 @@ public final class IsoFields {
return (R) temporal.with(WEEK_BASED_YEAR,
Math.addExact(temporal.get(WEEK_BASED_YEAR), amount));
case QUARTER_YEARS:
// no overflow (256 is multiple of 4)
return (R) temporal.plus(amount / 256, YEARS)
.plus((amount % 256) * 3, MONTHS);
return (R) temporal.plus(amount / 4, YEARS)
.plus((amount % 4) * 3, MONTHS);
default:
throw new IllegalStateException("Unreachable");
}
......
/*
* Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
......@@ -67,6 +67,7 @@ import static org.testng.Assert.assertTrue;
import java.time.LocalDate;
import java.time.Month;
import java.time.temporal.ChronoUnit;
import java.time.temporal.IsoFields;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.DataProvider;
......@@ -444,4 +445,40 @@ public class TestLocalDate extends AbstractTest {
}
}
@DataProvider(name="quarterYearsToAdd")
Object[][] provider_quarterYearsToAdd() {
return new Object[][] {
{Long.valueOf(-1000000000)},
{Long.valueOf(-256)},
{Long.valueOf(-255)},
{Long.valueOf(-1)},
{Long.valueOf(0)},
{Long.valueOf(1)},
{Long.valueOf(255)},
{Long.valueOf(256)},
{Long.valueOf(1000000000)},
};
}
@Test(dataProvider="quarterYearsToAdd")
public void test_plus_QuarterYears(long quarterYears) {
LocalDate t0 = TEST_2007_07_15
.plus(quarterYears, IsoFields.QUARTER_YEARS);
LocalDate t1 = TEST_2007_07_15
.plus(quarterYears, ChronoUnit.MONTHS)
.plus(quarterYears, ChronoUnit.MONTHS)
.plus(quarterYears, ChronoUnit.MONTHS);
assertEquals(t0, t1);
}
@Test(dataProvider="quarterYearsToAdd")
public void test_minus_QuarterYears(long quarterYears) {
LocalDate t0 = TEST_2007_07_15
.minus(quarterYears, IsoFields.QUARTER_YEARS);
LocalDate t1 = TEST_2007_07_15
.minus(quarterYears, ChronoUnit.MONTHS)
.minus(quarterYears, ChronoUnit.MONTHS)
.minus(quarterYears, ChronoUnit.MONTHS);
assertEquals(t0, t1);
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册