add --shared
[pylucene.git] / lucene-java-3.4.0 / lucene / src / test / org / apache / lucene / index / TestPrefixCodedTerms.java
1 package org.apache.lucene.index;
2
3 /**
4  * Licensed to the Apache Software Foundation (ASF) under one or more
5  * contributor license agreements.  See the NOTICE file distributed with
6  * this work for additional information regarding copyright ownership.
7  * The ASF licenses this file to You under the Apache License, Version 2.0
8  * (the "License"); you may not use this file except in compliance with
9  * the License.  You may obtain a copy of the License at
10  *
11  *     http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  */
19
20 import java.util.ArrayList;
21 import java.util.Collections;
22 import java.util.Iterator;
23 import java.util.List;
24 import java.util.Set;
25 import java.util.TreeSet;
26
27 import org.apache.lucene.util.LuceneTestCase;
28 import org.apache.lucene.util._TestUtil;
29
30 public class TestPrefixCodedTerms extends LuceneTestCase {
31   
32   public void testEmpty() {
33     PrefixCodedTerms.Builder b = new PrefixCodedTerms.Builder();
34     PrefixCodedTerms pb = b.finish();
35     assertFalse(pb.iterator().hasNext());
36   }
37   
38   public void testOne() {
39     Term term = new Term("foo", "bogus");
40     PrefixCodedTerms.Builder b = new PrefixCodedTerms.Builder();
41     b.add(term);
42     PrefixCodedTerms pb = b.finish();
43     Iterator<Term> iterator = pb.iterator();
44     assertTrue(iterator.hasNext());
45     assertEquals(term, iterator.next());
46   }
47   
48   public void testRandom() {
49     Set<Term> terms = new TreeSet<Term>();
50     int nterms = atLeast(10000);
51     for (int i = 0; i < nterms; i++) {
52       Term term = new Term(_TestUtil.randomUnicodeString(random, 2), _TestUtil.randomUnicodeString(random));
53       terms.add(term);
54     }    
55     
56     PrefixCodedTerms.Builder b = new PrefixCodedTerms.Builder();
57     for (Term ref: terms) {
58       b.add(ref);
59     }
60     PrefixCodedTerms pb = b.finish();
61     
62     Iterator<Term> expected = terms.iterator();
63     for (Term t : pb) {
64       assertTrue(expected.hasNext());
65       assertEquals(expected.next(), t);
66     }
67     assertFalse(expected.hasNext());
68   }
69   
70   public void testMergeEmpty() {
71     List<Iterator<Term>> subs = Collections.emptyList();
72     assertFalse(CoalescedDeletes.mergedIterator(subs).hasNext());
73
74     subs = new ArrayList<Iterator<Term>>();
75     subs.add(new PrefixCodedTerms.Builder().finish().iterator());
76     subs.add(new PrefixCodedTerms.Builder().finish().iterator());
77     Iterator<Term> merged = CoalescedDeletes.mergedIterator(subs);
78     assertFalse(merged.hasNext());
79   }
80
81   public void testMergeOne() {
82     Term t1 = new Term("foo", "a");
83     PrefixCodedTerms.Builder b1 = new PrefixCodedTerms.Builder();
84     b1.add(t1);
85     PrefixCodedTerms pb1 = b1.finish();
86     
87     Term t2 = new Term("foo", "b");
88     PrefixCodedTerms.Builder b2 = new PrefixCodedTerms.Builder();
89     b2.add(t2);
90     PrefixCodedTerms pb2 = b2.finish();
91     
92     List<Iterator<Term>> subs = new ArrayList<Iterator<Term>>();
93     subs.add(pb1.iterator());
94     subs.add(pb2.iterator());
95     
96     Iterator<Term> merged = CoalescedDeletes.mergedIterator(subs);
97     assertTrue(merged.hasNext());
98     assertEquals(t1, merged.next());
99     assertTrue(merged.hasNext());
100     assertEquals(t2, merged.next());
101   }
102
103   public void testMergeRandom() {
104     PrefixCodedTerms pb[] = new PrefixCodedTerms[_TestUtil.nextInt(random, 2, 10)];
105     Set<Term> superSet = new TreeSet<Term>();
106     
107     for (int i = 0; i < pb.length; i++) {
108       Set<Term> terms = new TreeSet<Term>();
109       int nterms = _TestUtil.nextInt(random, 0, 10000);
110       for (int j = 0; j < nterms; j++) {
111         Term term = new Term(_TestUtil.randomUnicodeString(random, 2), _TestUtil.randomUnicodeString(random, 4));
112         terms.add(term);
113       }
114       superSet.addAll(terms);
115     
116       PrefixCodedTerms.Builder b = new PrefixCodedTerms.Builder();
117       for (Term ref: terms) {
118         b.add(ref);
119       }
120       pb[i] = b.finish();
121     }
122     
123     List<Iterator<Term>> subs = new ArrayList<Iterator<Term>>();
124     for (int i = 0; i < pb.length; i++) {
125       subs.add(pb[i].iterator());
126     }
127     
128     Iterator<Term> expected = superSet.iterator();
129     Iterator<Term> actual = CoalescedDeletes.mergedIterator(subs);
130     while (actual.hasNext()) {
131       assertTrue(expected.hasNext());
132       assertEquals(expected.next(), actual.next());
133     }
134     assertFalse(expected.hasNext());
135   }
136 }