Repository: commons-text
Updated Branches:
  refs/heads/master bc051a360 -> 30a29e2cf


RandomStringGenerator able to pass multiple ranges to .withinRange()


Project: http://git-wip-us.apache.org/repos/asf/commons-text/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-text/commit/beb0b461
Tree: http://git-wip-us.apache.org/repos/asf/commons-text/tree/beb0b461
Diff: http://git-wip-us.apache.org/repos/asf/commons-text/diff/beb0b461

Branch: refs/heads/master
Commit: beb0b4615a94420cc86595c1f060711dd999af91
Parents: 9db7708
Author: Amey Jadiye <ameyjad...@gmail.com>
Authored: Sat Jul 1 20:25:35 2017 +0530
Committer: Amey Jadiye <ameyjad...@gmail.com>
Committed: Sat Jul 1 20:25:35 2017 +0530

----------------------------------------------------------------------
 .../commons/text/RandomStringGenerator.java     | 30 ++++++++++++++++++++
 .../commons/text/RandomStringGeneratorTest.java | 26 +++++++++++++++++
 2 files changed, 56 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-text/blob/beb0b461/src/main/java/org/apache/commons/text/RandomStringGenerator.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/text/RandomStringGenerator.java 
b/src/main/java/org/apache/commons/text/RandomStringGenerator.java
index 0dcf2a1..541bc57 100644
--- a/src/main/java/org/apache/commons/text/RandomStringGenerator.java
+++ b/src/main/java/org/apache/commons/text/RandomStringGenerator.java
@@ -326,6 +326,36 @@ public final class RandomStringGenerator {
 
         /**
          * <p>
+         * Specifies the array of minimum and maximum char allowed in the
+         * generated string.
+         * </p>
+         *
+         * Ex.
+         * char [][] pairs = {{'0','9'}};
+         * char [][] pairs = {{'a','z'}};
+         * char [][] pairs = {{'a','z'},{'0','9'}};
+         *
+         * @param pairs array of charachters array, expected is to pass min, 
max pairs through this arg.
+         * @return {@code this}, to allow method chaining.
+         */
+        public Builder withinRange(final char[] ... pairs) {
+            characterList = new ArrayList<Character>();
+            for (char[] pair :  pairs) {
+                final int minimumCodePoint = pair[0];
+                final int maximumCodePoint = pair[1];
+                Validate.isTrue(minimumCodePoint <= maximumCodePoint,
+                    "Minimum code point %d is larger than maximum code point 
%d", minimumCodePoint, maximumCodePoint);
+
+                for (int index = minimumCodePoint; index <= maximumCodePoint; 
index++) {
+                    characterList.add((char) index);
+                }
+            }
+            return this;
+
+        }
+
+        /**
+         * <p>
          * Limits the characters in the generated string to those that match at
          * least one of the predicates supplied.
          * </p>

http://git-wip-us.apache.org/repos/asf/commons-text/blob/beb0b461/src/test/java/org/apache/commons/text/RandomStringGeneratorTest.java
----------------------------------------------------------------------
diff --git 
a/src/test/java/org/apache/commons/text/RandomStringGeneratorTest.java 
b/src/test/java/org/apache/commons/text/RandomStringGeneratorTest.java
index bf00b5c..c157857 100644
--- a/src/test/java/org/apache/commons/text/RandomStringGeneratorTest.java
+++ b/src/test/java/org/apache/commons/text/RandomStringGeneratorTest.java
@@ -112,6 +112,32 @@ public class RandomStringGeneratorTest {
     }
 
     @Test
+    public void testWithinMultipleRanges() {
+        final int length = 5000;
+        final char [][] pairs = {{'a','z'},{'0','9'}};
+        RandomStringGenerator generator = new 
RandomStringGenerator.Builder().withinRange(pairs).build();
+        String str = generator.generate(length);
+
+        int minimumCodePoint = 0, maximumCodePoint = 0;
+
+        for (char [] pair : pairs ) {
+            minimumCodePoint = Math.min(minimumCodePoint, pair[0]);
+            maximumCodePoint = Math.max(maximumCodePoint, pair[1]);
+        }
+
+        for (char [] pair : pairs ) {
+            int i = 0;
+            do {
+                int codePoint = str.codePointAt(i);
+                assertTrue(codePoint >= minimumCodePoint && codePoint <= 
maximumCodePoint);
+                i += Character.charCount(codePoint);
+            } while (i < str.length());
+        }
+    }
+
+
+
+    @Test
     public void testNoLoneSurrogates() {
         final int length = 5000;
         String str = new 
RandomStringGenerator.Builder().build().generate(length);

Reply via email to