Skip to content

Commit

Permalink
CircularBItSet init from oldState with correct order
Browse files Browse the repository at this point in the history
  • Loading branch information
chhsiao90 committed Jul 18, 2016
1 parent efcd0a0 commit 93ca951
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 2 deletions.
Binary file not shown.
13 changes: 11 additions & 2 deletions src/main/java/net/jodah/failsafe/internal/util/CircularBitSet.java
Expand Up @@ -22,8 +22,17 @@ public CircularBitSet(int size, CircularBitSet oldBitSet) {

// Initialize from oldBitSet
if (oldBitSet != null) {
for (int i = 0; i < size && i < oldBitSet.occupiedBits; i++)
setNext(oldBitSet.bitSet.get(i));
initializeFromOldBits(oldBitSet);
}
}

/**
* Initialize bitSet from oldBitSet with correct order
*/
private void initializeFromOldBits(CircularBitSet oldBitSet) {
int startIndex = oldBitSet.occupiedBits <= size ? 0 : oldBitSet.occupiedBits - size;
for (int i = startIndex; i < oldBitSet.occupiedBits; i++) {
setNext(oldBitSet.bitSet.get(i));
}
}

Expand Down
Expand Up @@ -47,4 +47,50 @@ public void shouldCopyBits() {
assertEquals(bs3.positiveRatio(), .5);
assertEquals(bs3.negativeRatio(), .5);
}

public void shouldCopyBitsFromFullOldBitsSetWithCorrectOrder() {
CircularBitSet bs = new CircularBitSet(4, null);
boolean[] prevBits = { true, true, true, false };
for (boolean prevBit : prevBits) {
bs.setNext(prevBit);
}

CircularBitSet bs2 = new CircularBitSet(2, bs);
assertEquals(bs2.occupiedBits(), 2);
assertEquals(bs2.positiveRatio(), .5);
assertEquals(bs2.negativeRatio(), .5);

bs2.setNext(true);
assertEquals(bs2.occupiedBits(), 2);
assertEquals(bs2.positiveRatio(), .5);
assertEquals(bs2.negativeRatio(), .5);

bs2.setNext(true);
assertEquals(bs2.occupiedBits(), 2);
assertEquals(bs2.positiveRatio(), 1.0);
assertEquals(bs2.negativeRatio(), .0);
}

public void shouldCopyBitsFromNonFullOldBitsSetWithCorrectOrder() {
CircularBitSet bs = new CircularBitSet(8, null);
boolean[] prevBits = { true, true, true, false, false, false };
for (boolean prevBit : prevBits) {
bs.setNext(prevBit);
}

CircularBitSet bs2 = new CircularBitSet(4, bs);
assertEquals(bs2.occupiedBits(), 4);
assertEquals(bs2.positiveRatio(), .25);
assertEquals(bs2.negativeRatio(), .75);

bs2.setNext(true);
assertEquals(bs2.occupiedBits(), 4);
assertEquals(bs2.positiveRatio(), .25);
assertEquals(bs2.negativeRatio(), .75);

bs2.setNext(true);
assertEquals(bs2.occupiedBits(), 4);
assertEquals(bs2.positiveRatio(), .5);
assertEquals(bs2.negativeRatio(), .5);
}
}

0 comments on commit 93ca951

Please sign in to comment.