1 package org.apache.lucene.index;
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
11 * http://www.apache.org/licenses/LICENSE-2.0
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.
20 import java.util.ArrayList;
21 import java.util.Collections;
22 import java.util.Iterator;
23 import java.util.List;
25 import java.util.TreeSet;
27 import org.apache.lucene.util.LuceneTestCase;
28 import org.apache.lucene.util._TestUtil;
30 public class TestPrefixCodedTerms extends LuceneTestCase {
32 public void testEmpty() {
33 PrefixCodedTerms.Builder b = new PrefixCodedTerms.Builder();
34 PrefixCodedTerms pb = b.finish();
35 assertFalse(pb.iterator().hasNext());
38 public void testOne() {
39 Term term = new Term("foo", "bogus");
40 PrefixCodedTerms.Builder b = new PrefixCodedTerms.Builder();
42 PrefixCodedTerms pb = b.finish();
43 Iterator<Term> iterator = pb.iterator();
44 assertTrue(iterator.hasNext());
45 assertEquals(term, iterator.next());
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));
56 PrefixCodedTerms.Builder b = new PrefixCodedTerms.Builder();
57 for (Term ref: terms) {
60 PrefixCodedTerms pb = b.finish();
62 Iterator<Term> expected = terms.iterator();
64 assertTrue(expected.hasNext());
65 assertEquals(expected.next(), t);
67 assertFalse(expected.hasNext());
70 public void testMergeEmpty() {
71 List<Iterator<Term>> subs = Collections.emptyList();
72 assertFalse(CoalescedDeletes.mergedIterator(subs).hasNext());
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());
81 public void testMergeOne() {
82 Term t1 = new Term("foo", "a");
83 PrefixCodedTerms.Builder b1 = new PrefixCodedTerms.Builder();
85 PrefixCodedTerms pb1 = b1.finish();
87 Term t2 = new Term("foo", "b");
88 PrefixCodedTerms.Builder b2 = new PrefixCodedTerms.Builder();
90 PrefixCodedTerms pb2 = b2.finish();
92 List<Iterator<Term>> subs = new ArrayList<Iterator<Term>>();
93 subs.add(pb1.iterator());
94 subs.add(pb2.iterator());
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());
103 public void testMergeRandom() {
104 PrefixCodedTerms pb[] = new PrefixCodedTerms[_TestUtil.nextInt(random, 2, 10)];
105 Set<Term> superSet = new TreeSet<Term>();
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));
114 superSet.addAll(terms);
116 PrefixCodedTerms.Builder b = new PrefixCodedTerms.Builder();
117 for (Term ref: terms) {
123 List<Iterator<Term>> subs = new ArrayList<Iterator<Term>>();
124 for (int i = 0; i < pb.length; i++) {
125 subs.add(pb[i].iterator());
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());
134 assertFalse(expected.hasNext());