8194412: Adding 256 units of IsoFields.QUARTER_YEARS broken
Reviewed-by: scolebourne, rriggs
This commit is contained in:
parent
9392abce27
commit
b9ecb2e95b
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2012, 2017, 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
|
||||
@ -708,9 +708,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");
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* 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);
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user