This is an automated email from the ASF dual-hosted git repository. aherbert pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/commons-rng.git
The following commit(s) were added to refs/heads/master by this push: new 23983b9 Refactor the duplicate code in the XorShiRo generators to the parent. 23983b9 is described below commit 23983b9905893935520d5073df9dbc63308012d6 Author: Alex Herbert <aherb...@apache.org> AuthorDate: Wed Oct 9 21:46:18 2019 +0100 Refactor the duplicate code in the XorShiRo generators to the parent. This implements the common code in the next() generation method in the abstract parent. Concrete implementations now provide a method to get the next output value given the current state. --- .../rng/core/source32/AbstractXoRoShiRo64.java | 24 ++++++++++++++++ .../rng/core/source32/AbstractXoShiRo128.java | 28 +++++++++++++++++++ .../commons/rng/core/source32/XoRoShiRo64Star.java | 12 ++------ .../rng/core/source32/XoRoShiRo64StarStar.java | 12 ++------ .../commons/rng/core/source32/XoShiRo128Plus.java | 17 ++---------- .../rng/core/source32/XoShiRo128PlusPlus.java | 17 ++---------- .../rng/core/source32/XoShiRo128StarStar.java | 17 ++---------- .../rng/core/source64/AbstractXoRoShiRo128.java | 24 ++++++++++++++++ .../rng/core/source64/AbstractXoShiRo256.java | 28 +++++++++++++++++++ .../rng/core/source64/AbstractXoShiRo512.java | 32 ++++++++++++++++++++++ .../rng/core/source64/XoRoShiRo128Plus.java | 12 ++------ .../rng/core/source64/XoRoShiRo128PlusPlus.java | 9 ++++++ .../rng/core/source64/XoRoShiRo128StarStar.java | 12 ++------ .../commons/rng/core/source64/XoShiRo256Plus.java | 17 ++---------- .../rng/core/source64/XoShiRo256PlusPlus.java | 17 ++---------- .../rng/core/source64/XoShiRo256StarStar.java | 17 ++---------- .../commons/rng/core/source64/XoShiRo512Plus.java | 21 ++------------ .../rng/core/source64/XoShiRo512PlusPlus.java | 21 ++------------ .../rng/core/source64/XoShiRo512StarStar.java | 21 ++------------ .../core/source64/XoRoShiRo128PlusPlusTest.java | 10 +++++++ 20 files changed, 181 insertions(+), 187 deletions(-) diff --git a/commons-rng-core/src/main/java/org/apache/commons/rng/core/source32/AbstractXoRoShiRo64.java b/commons-rng-core/src/main/java/org/apache/commons/rng/core/source32/AbstractXoRoShiRo64.java index b3f8b82..03e7582 100644 --- a/commons-rng-core/src/main/java/org/apache/commons/rng/core/source32/AbstractXoRoShiRo64.java +++ b/commons-rng-core/src/main/java/org/apache/commons/rng/core/source32/AbstractXoRoShiRo64.java @@ -94,4 +94,28 @@ abstract class AbstractXoRoShiRo64 extends IntProvider { super.setStateInternal(c[1]); } + + /** {@inheritDoc} */ + @Override + public int next() { + final int result = nextOutput(); + + final int s0 = state0; + int s1 = state1; + + s1 ^= s0; + state0 = Integer.rotateLeft(s0, 26) ^ s1 ^ (s1 << 9); // a, b + state1 = Integer.rotateLeft(s1, 13); // c + + return result; + } + + /** + * Use the current state to compute the next output from the generator. + * The output function shall vary with respect to different generators. + * This method is called from {@link #next()} before the current state is updated. + * + * @return the next output + */ + protected abstract int nextOutput(); } diff --git a/commons-rng-core/src/main/java/org/apache/commons/rng/core/source32/AbstractXoShiRo128.java b/commons-rng-core/src/main/java/org/apache/commons/rng/core/source32/AbstractXoShiRo128.java index 6bcdf78..8a8c94b 100644 --- a/commons-rng-core/src/main/java/org/apache/commons/rng/core/source32/AbstractXoShiRo128.java +++ b/commons-rng-core/src/main/java/org/apache/commons/rng/core/source32/AbstractXoShiRo128.java @@ -130,6 +130,34 @@ abstract class AbstractXoShiRo128 extends IntProvider implements LongJumpableUni super.setStateInternal(c[1]); } + /** {@inheritDoc} */ + @Override + public int next() { + final int result = nextOutput(); + + final int t = state1 << 9; + + state2 ^= state0; + state3 ^= state1; + state1 ^= state2; + state0 ^= state3; + + state2 ^= t; + + state3 = Integer.rotateLeft(state3, 11); + + return result; + } + + /** + * Use the current state to compute the next output from the generator. + * The output function shall vary with respect to different generators. + * This method is called from {@link #next()} before the current state is updated. + * + * @return the next output + */ + protected abstract int nextOutput(); + /** * {@inheritDoc} * diff --git a/commons-rng-core/src/main/java/org/apache/commons/rng/core/source32/XoRoShiRo64Star.java b/commons-rng-core/src/main/java/org/apache/commons/rng/core/source32/XoRoShiRo64Star.java index 762fe0e..72b1211 100644 --- a/commons-rng-core/src/main/java/org/apache/commons/rng/core/source32/XoRoShiRo64Star.java +++ b/commons-rng-core/src/main/java/org/apache/commons/rng/core/source32/XoRoShiRo64Star.java @@ -55,15 +55,7 @@ public class XoRoShiRo64Star extends AbstractXoRoShiRo64 { /** {@inheritDoc} */ @Override - public int next() { - final int s0 = state0; - int s1 = state1; - final int result = s0 * 0x9E3779BB; - - s1 ^= s0; - state0 = Integer.rotateLeft(s0, 26) ^ s1 ^ (s1 << 9); // a, b - state1 = Integer.rotateLeft(s1, 13); // c - - return result; + protected int nextOutput() { + return state0 * 0x9e3779bb; } } diff --git a/commons-rng-core/src/main/java/org/apache/commons/rng/core/source32/XoRoShiRo64StarStar.java b/commons-rng-core/src/main/java/org/apache/commons/rng/core/source32/XoRoShiRo64StarStar.java index a7ca604..7c903a1 100644 --- a/commons-rng-core/src/main/java/org/apache/commons/rng/core/source32/XoRoShiRo64StarStar.java +++ b/commons-rng-core/src/main/java/org/apache/commons/rng/core/source32/XoRoShiRo64StarStar.java @@ -55,15 +55,7 @@ public class XoRoShiRo64StarStar extends AbstractXoRoShiRo64 { /** {@inheritDoc} */ @Override - public int next() { - final int s0 = state0; - int s1 = state1; - final int result = Integer.rotateLeft(s0 * 0x9E3779BB, 5) * 5; - - s1 ^= s0; - state0 = Integer.rotateLeft(s0, 26) ^ s1 ^ (s1 << 9); // a, b - state1 = Integer.rotateLeft(s1, 13); // c - - return result; + protected int nextOutput() { + return Integer.rotateLeft(state0 * 0x9e3779bb, 5) * 5; } } diff --git a/commons-rng-core/src/main/java/org/apache/commons/rng/core/source32/XoShiRo128Plus.java b/commons-rng-core/src/main/java/org/apache/commons/rng/core/source32/XoShiRo128Plus.java index 91a9541..105d5d1 100644 --- a/commons-rng-core/src/main/java/org/apache/commons/rng/core/source32/XoShiRo128Plus.java +++ b/commons-rng-core/src/main/java/org/apache/commons/rng/core/source32/XoShiRo128Plus.java @@ -66,21 +66,8 @@ public class XoShiRo128Plus extends AbstractXoShiRo128 { /** {@inheritDoc} */ @Override - public int next() { - final int result = state0 + state3; - - final int t = state1 << 9; - - state2 ^= state0; - state3 ^= state1; - state1 ^= state2; - state0 ^= state3; - - state2 ^= t; - - state3 = Integer.rotateLeft(state3, 11); - - return result; + protected int nextOutput() { + return state0 + state3; } /** {@inheritDoc} */ diff --git a/commons-rng-core/src/main/java/org/apache/commons/rng/core/source32/XoShiRo128PlusPlus.java b/commons-rng-core/src/main/java/org/apache/commons/rng/core/source32/XoShiRo128PlusPlus.java index 80cfd1e..81e982d 100644 --- a/commons-rng-core/src/main/java/org/apache/commons/rng/core/source32/XoShiRo128PlusPlus.java +++ b/commons-rng-core/src/main/java/org/apache/commons/rng/core/source32/XoShiRo128PlusPlus.java @@ -66,21 +66,8 @@ public class XoShiRo128PlusPlus extends AbstractXoShiRo128 { /** {@inheritDoc} */ @Override - public int next() { - final int result = Integer.rotateLeft(state0 + state3, 7) + state0; - - final int t = state1 << 9; - - state2 ^= state0; - state3 ^= state1; - state1 ^= state2; - state0 ^= state3; - - state2 ^= t; - - state3 = Integer.rotateLeft(state3, 11); - - return result; + protected int nextOutput() { + return Integer.rotateLeft(state0 + state3, 7) + state0; } /** diff --git a/commons-rng-core/src/main/java/org/apache/commons/rng/core/source32/XoShiRo128StarStar.java b/commons-rng-core/src/main/java/org/apache/commons/rng/core/source32/XoShiRo128StarStar.java index 9cb35d6..f636ad3 100644 --- a/commons-rng-core/src/main/java/org/apache/commons/rng/core/source32/XoShiRo128StarStar.java +++ b/commons-rng-core/src/main/java/org/apache/commons/rng/core/source32/XoShiRo128StarStar.java @@ -66,21 +66,8 @@ public class XoShiRo128StarStar extends AbstractXoShiRo128 { /** {@inheritDoc} */ @Override - public int next() { - final int result = Integer.rotateLeft(state0 * 5, 7) * 9; - - final int t = state1 << 9; - - state2 ^= state0; - state3 ^= state1; - state1 ^= state2; - state0 ^= state3; - - state2 ^= t; - - state3 = Integer.rotateLeft(state3, 11); - - return result; + protected int nextOutput() { + return Integer.rotateLeft(state0 * 5, 7) * 9; } /** {@inheritDoc} */ diff --git a/commons-rng-core/src/main/java/org/apache/commons/rng/core/source64/AbstractXoRoShiRo128.java b/commons-rng-core/src/main/java/org/apache/commons/rng/core/source64/AbstractXoRoShiRo128.java index 6530aeb..794eef6 100644 --- a/commons-rng-core/src/main/java/org/apache/commons/rng/core/source64/AbstractXoRoShiRo128.java +++ b/commons-rng-core/src/main/java/org/apache/commons/rng/core/source64/AbstractXoRoShiRo128.java @@ -117,6 +117,30 @@ abstract class AbstractXoRoShiRo128 extends LongProvider implements LongJumpable super.setStateInternal(c[1]); } + /** {@inheritDoc} */ + @Override + public long next() { + final long result = nextOutput(); + + final long s0 = state0; + long s1 = state1; + + s1 ^= s0; + state0 = Long.rotateLeft(s0, 24) ^ s1 ^ (s1 << 16); // a, b + state1 = Long.rotateLeft(s1, 37); // c + + return result; + } + + /** + * Use the current state to compute the next output from the generator. + * The output function shall vary with respect to different generators. + * This method is called from {@link #next()} before the current state is updated. + * + * @return the next output + */ + protected abstract long nextOutput(); + /** * {@inheritDoc} * diff --git a/commons-rng-core/src/main/java/org/apache/commons/rng/core/source64/AbstractXoShiRo256.java b/commons-rng-core/src/main/java/org/apache/commons/rng/core/source64/AbstractXoShiRo256.java index af603ca..12a292e 100644 --- a/commons-rng-core/src/main/java/org/apache/commons/rng/core/source64/AbstractXoShiRo256.java +++ b/commons-rng-core/src/main/java/org/apache/commons/rng/core/source64/AbstractXoShiRo256.java @@ -130,6 +130,34 @@ abstract class AbstractXoShiRo256 extends LongProvider implements LongJumpableUn super.setStateInternal(c[1]); } + /** {@inheritDoc} */ + @Override + public long next() { + final long result = nextOutput(); + + final long t = state1 << 17; + + state2 ^= state0; + state3 ^= state1; + state1 ^= state2; + state0 ^= state3; + + state2 ^= t; + + state3 = Long.rotateLeft(state3, 45); + + return result; + } + + /** + * Use the current state to compute the next output from the generator. + * The output function shall vary with respect to different generators. + * This method is called from {@link #next()} before the current state is updated. + * + * @return the next output + */ + protected abstract long nextOutput(); + /** * {@inheritDoc} * diff --git a/commons-rng-core/src/main/java/org/apache/commons/rng/core/source64/AbstractXoShiRo512.java b/commons-rng-core/src/main/java/org/apache/commons/rng/core/source64/AbstractXoShiRo512.java index d4f5be2..d6ebd05 100644 --- a/commons-rng-core/src/main/java/org/apache/commons/rng/core/source64/AbstractXoShiRo512.java +++ b/commons-rng-core/src/main/java/org/apache/commons/rng/core/source64/AbstractXoShiRo512.java @@ -158,6 +158,38 @@ abstract class AbstractXoShiRo512 extends LongProvider implements LongJumpableUn super.setStateInternal(c[1]); } + /** {@inheritDoc} */ + @Override + public long next() { + final long result = nextOutput(); + + final long t = state1 << 11; + + state2 ^= state0; + state5 ^= state1; + state1 ^= state2; + state7 ^= state3; + state3 ^= state4; + state4 ^= state5; + state0 ^= state6; + state6 ^= state7; + + state6 ^= t; + + state7 = Long.rotateLeft(state7, 21); + + return result; + } + + /** + * Use the current state to compute the next output from the generator. + * The output function shall vary with respect to different generators. + * This method is called from {@link #next()} before the current state is updated. + * + * @return the next output + */ + protected abstract long nextOutput(); + /** * {@inheritDoc} * diff --git a/commons-rng-core/src/main/java/org/apache/commons/rng/core/source64/XoRoShiRo128Plus.java b/commons-rng-core/src/main/java/org/apache/commons/rng/core/source64/XoRoShiRo128Plus.java index f8386fd..ce7c9b5 100644 --- a/commons-rng-core/src/main/java/org/apache/commons/rng/core/source64/XoRoShiRo128Plus.java +++ b/commons-rng-core/src/main/java/org/apache/commons/rng/core/source64/XoRoShiRo128Plus.java @@ -65,16 +65,8 @@ public class XoRoShiRo128Plus extends AbstractXoRoShiRo128 { /** {@inheritDoc} */ @Override - public long next() { - final long s0 = state0; - long s1 = state1; - final long result = s0 + s1; - - s1 ^= s0; - state0 = Long.rotateLeft(s0, 24) ^ s1 ^ (s1 << 16); // a, b - state1 = Long.rotateLeft(s1, 37); // c - - return result; + protected long nextOutput() { + return state0 + state1; } /** {@inheritDoc} */ diff --git a/commons-rng-core/src/main/java/org/apache/commons/rng/core/source64/XoRoShiRo128PlusPlus.java b/commons-rng-core/src/main/java/org/apache/commons/rng/core/source64/XoRoShiRo128PlusPlus.java index d753745..d6c20d9 100644 --- a/commons-rng-core/src/main/java/org/apache/commons/rng/core/source64/XoRoShiRo128PlusPlus.java +++ b/commons-rng-core/src/main/java/org/apache/commons/rng/core/source64/XoRoShiRo128PlusPlus.java @@ -77,6 +77,9 @@ public class XoRoShiRo128PlusPlus extends AbstractXoRoShiRo128 { /** {@inheritDoc} */ @Override public long next() { + // Override the abstract class to use a different state update step. + // Note: This requires different jump coefficients. + final long s0 = state0; long s1 = state1; final long result = Long.rotateLeft(s0 + s1, 17) + s0; @@ -90,6 +93,12 @@ public class XoRoShiRo128PlusPlus extends AbstractXoRoShiRo128 { /** {@inheritDoc} */ @Override + protected long nextOutput() { + throw new UnsupportedOperationException("The PlusPlus algorithm redefines the next() method"); + } + + /** {@inheritDoc} */ + @Override public UniformRandomProvider jump() { // Duplicated from the abstract class to change the jump coefficients final UniformRandomProvider copy = copy(); diff --git a/commons-rng-core/src/main/java/org/apache/commons/rng/core/source64/XoRoShiRo128StarStar.java b/commons-rng-core/src/main/java/org/apache/commons/rng/core/source64/XoRoShiRo128StarStar.java index c926d17..f115fed 100644 --- a/commons-rng-core/src/main/java/org/apache/commons/rng/core/source64/XoRoShiRo128StarStar.java +++ b/commons-rng-core/src/main/java/org/apache/commons/rng/core/source64/XoRoShiRo128StarStar.java @@ -64,16 +64,8 @@ public class XoRoShiRo128StarStar extends AbstractXoRoShiRo128 { /** {@inheritDoc} */ @Override - public long next() { - final long s0 = state0; - long s1 = state1; - final long result = Long.rotateLeft(s0 * 5, 7) * 9; - - s1 ^= s0; - state0 = Long.rotateLeft(s0, 24) ^ s1 ^ (s1 << 16); // a, b - state1 = Long.rotateLeft(s1, 37); // c - - return result; + protected long nextOutput() { + return Long.rotateLeft(state0 * 5, 7) * 9; } /** {@inheritDoc} */ diff --git a/commons-rng-core/src/main/java/org/apache/commons/rng/core/source64/XoShiRo256Plus.java b/commons-rng-core/src/main/java/org/apache/commons/rng/core/source64/XoShiRo256Plus.java index 46591af..838a12c 100644 --- a/commons-rng-core/src/main/java/org/apache/commons/rng/core/source64/XoShiRo256Plus.java +++ b/commons-rng-core/src/main/java/org/apache/commons/rng/core/source64/XoShiRo256Plus.java @@ -66,21 +66,8 @@ public class XoShiRo256Plus extends AbstractXoShiRo256 { /** {@inheritDoc} */ @Override - public long next() { - final long result = state0 + state3; - - final long t = state1 << 17; - - state2 ^= state0; - state3 ^= state1; - state1 ^= state2; - state0 ^= state3; - - state2 ^= t; - - state3 = Long.rotateLeft(state3, 45); - - return result; + protected long nextOutput() { + return state0 + state3; } /** {@inheritDoc} */ diff --git a/commons-rng-core/src/main/java/org/apache/commons/rng/core/source64/XoShiRo256PlusPlus.java b/commons-rng-core/src/main/java/org/apache/commons/rng/core/source64/XoShiRo256PlusPlus.java index 4d43e23..4c398f4 100644 --- a/commons-rng-core/src/main/java/org/apache/commons/rng/core/source64/XoShiRo256PlusPlus.java +++ b/commons-rng-core/src/main/java/org/apache/commons/rng/core/source64/XoShiRo256PlusPlus.java @@ -65,21 +65,8 @@ public class XoShiRo256PlusPlus extends AbstractXoShiRo256 { /** {@inheritDoc} */ @Override - public long next() { - final long result = Long.rotateLeft(state0 + state3, 23) + state0; - - final long t = state1 << 17; - - state2 ^= state0; - state3 ^= state1; - state1 ^= state2; - state0 ^= state3; - - state2 ^= t; - - state3 = Long.rotateLeft(state3, 45); - - return result; + protected long nextOutput() { + return Long.rotateLeft(state0 + state3, 23) + state0; } /** {@inheritDoc} */ diff --git a/commons-rng-core/src/main/java/org/apache/commons/rng/core/source64/XoShiRo256StarStar.java b/commons-rng-core/src/main/java/org/apache/commons/rng/core/source64/XoShiRo256StarStar.java index 2be5ddc..11a4bb5 100644 --- a/commons-rng-core/src/main/java/org/apache/commons/rng/core/source64/XoShiRo256StarStar.java +++ b/commons-rng-core/src/main/java/org/apache/commons/rng/core/source64/XoShiRo256StarStar.java @@ -65,21 +65,8 @@ public class XoShiRo256StarStar extends AbstractXoShiRo256 { /** {@inheritDoc} */ @Override - public long next() { - final long result = Long.rotateLeft(state1 * 5, 7) * 9; - - final long t = state1 << 17; - - state2 ^= state0; - state3 ^= state1; - state1 ^= state2; - state0 ^= state3; - - state2 ^= t; - - state3 = Long.rotateLeft(state3, 45); - - return result; + protected long nextOutput() { + return Long.rotateLeft(state1 * 5, 7) * 9; } /** {@inheritDoc} */ diff --git a/commons-rng-core/src/main/java/org/apache/commons/rng/core/source64/XoShiRo512Plus.java b/commons-rng-core/src/main/java/org/apache/commons/rng/core/source64/XoShiRo512Plus.java index f515e4d..678f5d4 100644 --- a/commons-rng-core/src/main/java/org/apache/commons/rng/core/source64/XoShiRo512Plus.java +++ b/commons-rng-core/src/main/java/org/apache/commons/rng/core/source64/XoShiRo512Plus.java @@ -72,25 +72,8 @@ public class XoShiRo512Plus extends AbstractXoShiRo512 { /** {@inheritDoc} */ @Override - public long next() { - final long result = state0 + state2; - - final long t = state1 << 11; - - state2 ^= state0; - state5 ^= state1; - state1 ^= state2; - state7 ^= state3; - state3 ^= state4; - state4 ^= state5; - state0 ^= state6; - state6 ^= state7; - - state6 ^= t; - - state7 = Long.rotateLeft(state7, 21); - - return result; + protected long nextOutput() { + return state0 + state2; } /** {@inheritDoc} */ diff --git a/commons-rng-core/src/main/java/org/apache/commons/rng/core/source64/XoShiRo512PlusPlus.java b/commons-rng-core/src/main/java/org/apache/commons/rng/core/source64/XoShiRo512PlusPlus.java index 0223944..7989516 100644 --- a/commons-rng-core/src/main/java/org/apache/commons/rng/core/source64/XoShiRo512PlusPlus.java +++ b/commons-rng-core/src/main/java/org/apache/commons/rng/core/source64/XoShiRo512PlusPlus.java @@ -71,25 +71,8 @@ public class XoShiRo512PlusPlus extends AbstractXoShiRo512 { /** {@inheritDoc} */ @Override - public long next() { - final long result = Long.rotateLeft(state0 + state2, 17) + state2; - - final long t = state1 << 11; - - state2 ^= state0; - state5 ^= state1; - state1 ^= state2; - state7 ^= state3; - state3 ^= state4; - state4 ^= state5; - state0 ^= state6; - state6 ^= state7; - - state6 ^= t; - - state7 = Long.rotateLeft(state7, 21); - - return result; + protected long nextOutput() { + return Long.rotateLeft(state0 + state2, 17) + state2; } /** {@inheritDoc} */ diff --git a/commons-rng-core/src/main/java/org/apache/commons/rng/core/source64/XoShiRo512StarStar.java b/commons-rng-core/src/main/java/org/apache/commons/rng/core/source64/XoShiRo512StarStar.java index d997afd..756a7fe 100644 --- a/commons-rng-core/src/main/java/org/apache/commons/rng/core/source64/XoShiRo512StarStar.java +++ b/commons-rng-core/src/main/java/org/apache/commons/rng/core/source64/XoShiRo512StarStar.java @@ -71,25 +71,8 @@ public class XoShiRo512StarStar extends AbstractXoShiRo512 { /** {@inheritDoc} */ @Override - public long next() { - final long result = Long.rotateLeft(state1 * 5, 7) * 9; - - final long t = state1 << 11; - - state2 ^= state0; - state5 ^= state1; - state1 ^= state2; - state7 ^= state3; - state3 ^= state4; - state4 ^= state5; - state0 ^= state6; - state6 ^= state7; - - state6 ^= t; - - state7 = Long.rotateLeft(state7, 21); - - return result; + protected long nextOutput() { + return Long.rotateLeft(state1 * 5, 7) * 9; } /** {@inheritDoc} */ diff --git a/commons-rng-core/src/test/java/org/apache/commons/rng/core/source64/XoRoShiRo128PlusPlusTest.java b/commons-rng-core/src/test/java/org/apache/commons/rng/core/source64/XoRoShiRo128PlusPlusTest.java index dd3af12..b75b5c6 100644 --- a/commons-rng-core/src/test/java/org/apache/commons/rng/core/source64/XoRoShiRo128PlusPlusTest.java +++ b/commons-rng-core/src/test/java/org/apache/commons/rng/core/source64/XoRoShiRo128PlusPlusTest.java @@ -109,4 +109,14 @@ public class XoRoShiRo128PlusPlusTest { public void testLongJump() { RandomAssert.assertLongJumpEquals(EXPECTED_SEQUENCE, EXPECTED_SEQUENCE_AFTER_LONG_JUMP, new XoRoShiRo128PlusPlus(SEED)); } + + /** + * This PlusPlus algorithm uses a different state update step. It overrides next() directly + * and the abstract nextOutput() method should not be used. This test checks the method + * throws an exception if used. + */ + @Test(expected = UnsupportedOperationException.class) + public void testNextOutputThrows() { + new XoRoShiRo128PlusPlus(SEED).nextOutput(); + } }