You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by mi...@apache.org on 2016/08/03 18:31:06 UTC
lucene-solr:branch_6x: add test case
Repository: lucene-solr
Updated Branches:
refs/heads/branch_6x 728b4fbcd -> 03138e764
add test case
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/03138e76
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/03138e76
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/03138e76
Branch: refs/heads/branch_6x
Commit: 03138e764dd0c88f6dbeb666eb5d76ef6b91844c
Parents: 728b4fb
Author: Mike McCandless <mi...@apache.org>
Authored: Wed Aug 3 14:30:44 2016 -0400
Committer: Mike McCandless <mi...@apache.org>
Committed: Wed Aug 3 14:30:44 2016 -0400
----------------------------------------------------------------------
.../apache/lucene/util/TestMSBRadixSorter.java | 65 ++++++++++++++++++++
1 file changed, 65 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/03138e76/lucene/core/src/test/org/apache/lucene/util/TestMSBRadixSorter.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/util/TestMSBRadixSorter.java b/lucene/core/src/test/org/apache/lucene/util/TestMSBRadixSorter.java
index c496ff8..52eb494 100644
--- a/lucene/core/src/test/org/apache/lucene/util/TestMSBRadixSorter.java
+++ b/lucene/core/src/test/org/apache/lucene/util/TestMSBRadixSorter.java
@@ -17,6 +17,8 @@
package org.apache.lucene.util;
import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
public class TestMSBRadixSorter extends LuceneTestCase {
@@ -117,4 +119,67 @@ public class TestMSBRadixSorter extends LuceneTestCase {
testRandom(TestUtil.nextInt(random(), 1, 30), 2);
}
}
+
+ public void testRandom2() {
+ // how large our alphabet is
+ int letterCount = TestUtil.nextInt(random(), 2, 10);
+
+ // how many substring fragments to use
+ int substringCount = TestUtil.nextInt(random(), 2, 10);
+ Set<BytesRef> substringsSet = new HashSet<>();
+
+ // how many strings to make
+ int stringCount = atLeast(10000);
+
+ //System.out.println("letterCount=" + letterCount + " substringCount=" + substringCount + " stringCount=" + stringCount);
+ while(substringsSet.size() < substringCount) {
+ int length = TestUtil.nextInt(random(), 2, 10);
+ byte[] bytes = new byte[length];
+ for(int i=0;i<length;i++) {
+ bytes[i] = (byte) random().nextInt(letterCount);
+ }
+ BytesRef br = new BytesRef(bytes);
+ substringsSet.add(br);
+ //System.out.println("add substring count=" + substringsSet.size() + ": " + br);
+ }
+
+ BytesRef[] substrings = substringsSet.toArray(new BytesRef[substringsSet.size()]);
+ double[] chance = new double[substrings.length];
+ double sum = 0.0;
+ for(int i=0;i<substrings.length;i++) {
+ chance[i] = random().nextDouble();
+ sum += chance[i];
+ }
+
+ // give each substring a random chance of occurring:
+ double accum = 0.0;
+ for(int i=0;i<substrings.length;i++) {
+ accum += chance[i]/sum;
+ chance[i] = accum;
+ }
+
+ Set<BytesRef> stringsSet = new HashSet<>();
+ int iters = 0;
+ while (stringsSet.size() < stringCount && iters < stringCount*5) {
+ int count = TestUtil.nextInt(random(), 1, 5);
+ BytesRefBuilder b = new BytesRefBuilder();
+ for(int i=0;i<count;i++) {
+ double v = random().nextDouble();
+ accum = 0.0;
+ for(int j=0;j<substrings.length;j++) {
+ accum += chance[j];
+ if (accum >= v) {
+ b.append(substrings[j]);
+ break;
+ }
+ }
+ }
+ BytesRef br = b.toBytesRef();
+ stringsSet.add(br);
+ //System.out.println("add string count=" + stringsSet.size() + ": " + br);
+ iters++;
+ }
+
+ test(stringsSet.toArray(new BytesRef[stringsSet.size()]), stringsSet.size());
+ }
}