OpenJDK / jdk / hs
changeset 29816:43ad6bf3975b
8076442: Cannot fully read BitSet.stream() if bit Integer.MAX_VALUE is set
Reviewed-by: alanb, henryjen
author | chegar |
---|---|
date | Tue, 07 Apr 2015 10:33:08 +0100 |
parents | a50c9d80a80f |
children | f2832da6a04a |
files | jdk/src/java.base/share/classes/java/util/BitSet.java jdk/test/java/util/BitSet/BitSetStreamTest.java |
diffstat | 2 files changed, 5 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/jdk/src/java.base/share/classes/java/util/BitSet.java Mon Apr 06 13:41:10 2015 -0700 +++ b/jdk/src/java.base/share/classes/java/util/BitSet.java Tue Apr 07 10:33:08 2015 +0100 @@ -1229,7 +1229,7 @@ public int nextInt() { if (next != -1) { int ret = next; - next = nextSetBit(next+1); + next = (next == Integer.MAX_VALUE) ? -1 : nextSetBit(next+1); return ret; } else { throw new NoSuchElementException();
--- a/jdk/test/java/util/BitSet/BitSetStreamTest.java Mon Apr 06 13:41:10 2015 -0700 +++ b/jdk/test/java/util/BitSet/BitSetStreamTest.java Tue Apr 07 10:33:08 2015 +0100 @@ -43,7 +43,7 @@ /** * @test * @summary test BitSet stream - * @bug 8012645 + * @bug 8012645 8076442 * @run testng BitSetStreamTest */ public class BitSetStreamTest { @@ -70,6 +70,7 @@ { "step 5", IntStream.range(0, 255).map(f -> f * 5) }, { "step 7", IntStream.range(0, 255).map(f -> f * 7) }, { "1, 10, 100, 1000", IntStream.of(1, 10, 100, 1000) }, + { "max int", IntStream.of(Integer.MAX_VALUE) }, { "25 fibs", IntStream.generate(new Fibs()).limit(25) } }; @@ -106,6 +107,8 @@ for (int i = bs.nextSetBit(0); i >= 0; i = bs.nextSetBit(i+1)) { assertTrue(it.hasNext()); assertEquals(it.nextInt(), i); + if (i == Integer.MAX_VALUE) + break; // or (i+1) would overflow } assertFalse(it.hasNext()); }