From 5bc391305c7398a3be4d255dfd1f5fffbf310b6d Mon Sep 17 00:00:00 2001 From: Leo Bayer Date: Mon, 16 Apr 2018 18:31:05 +0900 Subject: [PATCH] guarantee that bits is non-null once resize has been called --- .../com/zaxxer/sparsebits/SparseBitSet.java | 2 +- .../zaxxer/sparsebits/InitWithZeroTest.java | 44 +++++++++++++++++++ 2 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 src/test/java/com/zaxxer/sparsebits/InitWithZeroTest.java diff --git a/src/main/java/com/zaxxer/sparsebits/SparseBitSet.java b/src/main/java/com/zaxxer/sparsebits/SparseBitSet.java index b8f1930..81e31eb 100644 --- a/src/main/java/com/zaxxer/sparsebits/SparseBitSet.java +++ b/src/main/java/com/zaxxer/sparsebits/SparseBitSet.java @@ -1714,7 +1714,7 @@ protected final void resize(int index) newSize = MAX_LENGTH1; final int aLength1 = (bits != null ? bits.length : 0); - if (newSize != aLength1) + if (newSize != aLength1 || bits == null) { // only if the size needs to be changed final long[][][] temp = new long[newSize][][]; // Get the new array if (aLength1 != 0) diff --git a/src/test/java/com/zaxxer/sparsebits/InitWithZeroTest.java b/src/test/java/com/zaxxer/sparsebits/InitWithZeroTest.java new file mode 100644 index 0000000..cc4b71c --- /dev/null +++ b/src/test/java/com/zaxxer/sparsebits/InitWithZeroTest.java @@ -0,0 +1,44 @@ +package com.zaxxer.sparsebits; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +public class InitWithZeroTest { + private SparseBitSet bitset; + + @Before + public void setup() { + bitset = new SparseBitSet(0); + } + + @Test + public void testPreviousSetBit() { + Assert.assertEquals(-1, bitset.previousSetBit(0)); + } + + @Test + public void testPreviousClearBit() { + Assert.assertEquals(0, bitset.previousClearBit(0)); + } + + @Test + public void testNextSetBit() { + Assert.assertEquals(-1, bitset.nextSetBit(0)); + } + + @Test + public void testNextClearBit() { + Assert.assertEquals(0, bitset.nextClearBit(0)); + } + + @Test + public void testClone() { + Assert.assertEquals(-1, bitset.clone().nextSetBit(0)); + } + + @Test + public void testAnd() { + bitset.and(new SparseBitSet()); + } +}