Repository: commons-math Updated Branches: refs/heads/master d9b0be1c9 -> f43069ac6
MATH-1460: Trigger exception as soon as maximal count is reached. Project: http://git-wip-us.apache.org/repos/asf/commons-math/repo Commit: http://git-wip-us.apache.org/repos/asf/commons-math/commit/f43069ac Tree: http://git-wip-us.apache.org/repos/asf/commons-math/tree/f43069ac Diff: http://git-wip-us.apache.org/repos/asf/commons-math/diff/f43069ac Branch: refs/heads/master Commit: f43069ac6d281b8367dad6f78def4b8336a11ff0 Parents: d9b0be1 Author: Gilles <er...@apache.org> Authored: Wed May 2 19:56:51 2018 +0200 Committer: Gilles <er...@apache.org> Committed: Wed May 2 19:56:51 2018 +0200 ---------------------------------------------------------------------- .../commons/math4/util/IntegerSequence.java | 5 ++- .../commons/math4/util/IntegerSequenceTest.java | 39 +++++++++++++++----- 2 files changed, 33 insertions(+), 11 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/commons-math/blob/f43069ac/src/main/java/org/apache/commons/math4/util/IntegerSequence.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/math4/util/IntegerSequence.java b/src/main/java/org/apache/commons/math4/util/IntegerSequence.java index 4712a4b..56dd745 100644 --- a/src/main/java/org/apache/commons/math4/util/IntegerSequence.java +++ b/src/main/java/org/apache/commons/math4/util/IntegerSequence.java @@ -318,10 +318,11 @@ public class IntegerSequence { throw new NotStrictlyPositiveException(nTimes); } + count += nTimes * increment; + if (!canIncrement(0)) { maxCountCallback.trigger(maximalCount); } - count += nTimes * increment; } /** @@ -352,7 +353,7 @@ public class IntegerSequence { @Override public Integer next() { final int value = count; - increment(); + count += increment; return value; } http://git-wip-us.apache.org/repos/asf/commons-math/blob/f43069ac/src/test/java/org/apache/commons/math4/util/IntegerSequenceTest.java ---------------------------------------------------------------------- diff --git a/src/test/java/org/apache/commons/math4/util/IntegerSequenceTest.java b/src/test/java/org/apache/commons/math4/util/IntegerSequenceTest.java index d850729..6023f77 100644 --- a/src/test/java/org/apache/commons/math4/util/IntegerSequenceTest.java +++ b/src/test/java/org/apache/commons/math4/util/IntegerSequenceTest.java @@ -217,6 +217,33 @@ public class IntegerSequenceTest { inc.increment(0); } + @Test + public void testIncrementTooManyTimes() { + final int start = 0; + final int max = 3; + final int step = 1; + + for (int i = 1; i <= max + 4; i++) { + final IntegerSequence.Incrementor inc + = IntegerSequence.Incrementor.create() + .withStart(start) + .withMaximalCount(max) + .withIncrement(step); + + Assert.assertTrue(inc.canIncrement(max - 1)); + Assert.assertFalse(inc.canIncrement(max)); + + try { + inc.increment(i); + } catch (MaxCountExceededException e) { + if (i < max) { + Assert.fail("i=" + i); + } + // Otherwise, the exception is expected. + } + } + } + @Test(expected=ZeroException.class) public void testIncrementZeroStep() { final int step = 0; @@ -269,14 +296,8 @@ public class IntegerSequenceTest { .withIncrement(step) .withCallback(cb); - try { - // One call must succeed. - inc.increment(); - } catch (RuntimeException e) { - Assert.fail("unexpected exception"); - } - - // Second call must fail. - inc.increment(); + Assert.assertTrue(inc.hasNext()); + Assert.assertEquals(start, inc.next().intValue()); + inc.increment(); // Must fail. } }