MATH-1608: Remove random string generator.
Functionality is out-of-scope (cf. "Commons Codec").
diff --git a/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/random/RandomUtils.java b/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/random/RandomUtils.java
index 1387a4c..35b8585 100644
--- a/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/random/RandomUtils.java
+++ b/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/random/RandomUtils.java
@@ -63,120 +63,6 @@
}
/**
- * Generates a random string of hex characters of length {@code len}.
- *
- * <strong>Algorithm Description:</strong> how hexadecimal strings are
- * generated depends on the value of the {@code useSha1} argument.
- *
- * <ul>
- * <li>If {@code useSha1 == false}, a 2-step process is used:
- * <ol>
- * <li>
- * {@code len / 2 + 1} binary bytes are generated using the underlying
- * generator.
- * </li>
- * <li>
- * Each binary byte is translated into 2 hex digits.
- * </li>
- * </ol>
- * </li>
- * <li>
- * If {@code useSha1 == true}, hex strings are generated in 40-byte
- * segments using a 3-step process:
- * <ol>
- * <li>
- * 20 random bytes are generated using the underlying generator.
- * </li>
- * <li>
- * SHA-1 hash is applied to yield a 20-byte binary digest.
- * </li>
- * <li>
- * Each byte of the binary digest is converted to 2 hex digits.
- * </li>
- * </ol>
- * </li>
- * </ul>
- *
- * @param len Length of the generated string.
- * @param useSha1 Whether to use a digest.
- * If {@code true} (resp. {@code false}), the 3-step (resp. 2-step)
- * process will be used.
- * @return the random string.
- * @throws NotStrictlyPositiveException if {@code len <= 0}.
- */
- public String nextHexString(int len,
- boolean useSha1) {
- if (len <= 0) {
- throw new NotStrictlyPositiveException(LocalizedFormats.LENGTH, len);
- }
-
- // Initialize output buffer.
- final StringBuilder outBuffer = new StringBuilder();
-
- if (!useSha1) {
- // Generate int(len/2)+1 random bytes.
- final byte[] randomBytes = new byte[(len / 2) + 1];
- rng.nextBytes(randomBytes);
-
- // Convert each byte to 2 hex digits.
- for (int i = 0; i < randomBytes.length; i++) {
- final Integer c = Integer.valueOf(randomBytes[i]);
-
- // Add 128 to byte value to make interval 0-255 before
- // conversion to hex.
- // This guarantees <= 2 hex digits from "toHexString".
- // "toHexString" would otherwise add 2^32 to negative arguments.
- String hex = Integer.toHexString(c.intValue() + 128);
-
- // Make sure we add 2 hex digits for each byte.
- if (hex.length() == 1) {
- hex = "0" + hex;
- }
- outBuffer.append(hex);
- }
- } else {
- MessageDigest alg = null;
- try {
- alg = MessageDigest.getInstance("SHA-1");
- } catch (NoSuchAlgorithmException ex) {
- // Should never happen.
- throw new MathInternalError(ex);
- }
- alg.reset();
-
- // Compute number of iterations required (40 bytes each).
- final int numIter = (len / 40) + 1;
-
- for (int iter = 1; iter < numIter + 1; iter++) {
- final byte[] randomBytes = new byte[40];
- rng.nextBytes(randomBytes);
- alg.update(randomBytes);
-
- // Create 20-byte binary hash.
- final byte[] hash = alg.digest();
-
- // Loop over the hash, converting each byte to 2 hex digits
- for (int i = 0; i < hash.length; i++) {
- final Integer c = Integer.valueOf(hash[i]);
-
- // Add 128 to byte value to make interval 0-255.
- // This guarantees <= 2 hex digits from "toHexString".
- // "toHexString" would otherwise add 2^32 to negative arguments.
- String hex = Integer.toHexString(c.intValue() + 128);
-
- // Keep strings uniform length: guarantees 40 bytes.
- if (hex.length() == 1) {
- hex = "0" + hex;
- }
- outBuffer.append(hex);
- }
- }
- }
-
- return outBuffer.toString().substring(0, len);
- }
-
- /**
* Generates a uniformly distributed random long integer between {@code lower}
* and {@code upper} (endpoints included).
*
diff --git a/commons-math-legacy/src/test/java/org/apache/commons/math4/legacy/random/RandomUtilsDataGeneratorAbstractTest.java b/commons-math-legacy/src/test/java/org/apache/commons/math4/legacy/random/RandomUtilsDataGeneratorAbstractTest.java
index ec25174..1edb371 100644
--- a/commons-math-legacy/src/test/java/org/apache/commons/math4/legacy/random/RandomUtilsDataGeneratorAbstractTest.java
+++ b/commons-math-legacy/src/test/java/org/apache/commons/math4/legacy/random/RandomUtilsDataGeneratorAbstractTest.java
@@ -136,65 +136,6 @@
(((double) upper) - ((double) lower));
Assert.assertTrue(ratio > 0.99999);
}
-
- /** Test dispersion and failure modes for "nextHex". */
- @Test
- public void testNextHexWithoutSha1() {
- checkNextHex(false);
- }
- @Test
- public void testNextHexWithSha1() {
- checkNextHex(true);
- }
-
- /**
- * @param useSha1 Alternative.
- */
- private void checkNextHex(boolean useSha1) {
- try {
- randomData.nextHexString(-1, useSha1);
- Assert.fail("negative length supplied -- MathIllegalArgumentException expected");
- } catch (MathIllegalArgumentException ex) {
- // ignored
- }
- try {
- randomData.nextHexString(0, useSha1);
- Assert.fail("zero length supplied -- MathIllegalArgumentException expected");
- } catch (MathIllegalArgumentException ex) {
- // ignored
- }
- String hexString = randomData.nextHexString(3, useSha1);
- if (hexString.length() != 3) {
- Assert.fail("incorrect length for generated string");
- }
- hexString = randomData.nextHexString(1, useSha1);
- if (hexString.length() != 1) {
- Assert.fail("incorrect length for generated string");
- }
- try {
- hexString = randomData.nextHexString(0, useSha1);
- Assert.fail("zero length requested -- expecting MathIllegalArgumentException");
- } catch (MathIllegalArgumentException ex) {
- // ignored
- }
- Frequency<String> f = new Frequency<>();
- for (int i = 0; i < smallSampleSize; i++) {
- hexString = randomData.nextHexString(100, useSha1);
- if (hexString.length() != 100) {
- Assert.fail("incorrect length for generated string");
- }
- for (int j = 0; j < hexString.length(); j++) {
- f.addValue(hexString.substring(j, j + 1));
- }
- }
- double[] expected = new double[16];
- long[] observed = new long[16];
- for (int i = 0; i < 16; i++) {
- expected[i] = (double) smallSampleSize * 100 / 16;
- observed[i] = f.getCount(hex[i]);
- }
- TestUtils.assertChiSquareAccept(expected, observed, 0.001);
- }
@Test
public void testNextUniformIAE() {