mirror of https://github.com/apache/lucene.git
add test case
This commit is contained in:
parent
73de207201
commit
5ec072be9d
|
@ -17,6 +17,8 @@
|
||||||
package org.apache.lucene.util;
|
package org.apache.lucene.util;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
public class TestMSBRadixSorter extends LuceneTestCase {
|
public class TestMSBRadixSorter extends LuceneTestCase {
|
||||||
|
|
||||||
|
@ -117,4 +119,67 @@ public class TestMSBRadixSorter extends LuceneTestCase {
|
||||||
testRandom(TestUtil.nextInt(random(), 1, 30), 2);
|
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());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue