Clover Coverage Report
Coverage timestamp: Fri May 9 2008 10:54:27 EST
68   194   27   7.56
28   128   0.4   4.5
9     3  
2    
 
  TestMultiThreadTermVectors       Line # 34 35 15 94.5% 0.94545454
  MultiThreadTermVectorsReader       Line # 123 33 12 90% 0.9
 
  (1)
 
1    package org.apache.lucene.search;
2   
3    /**
4    * Copyright 2004 The Apache Software Foundation
5    *
6    * Licensed under the Apache License, Version 2.0 (the "License");
7    * you may not use this file except in compliance with the License.
8    * You may obtain a copy of the License at
9    *
10    * http://www.apache.org/licenses/LICENSE-2.0
11    *
12    * Unless required by applicable law or agreed to in writing, software
13    * distributed under the License is distributed on an "AS IS" BASIS,
14    * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15    * See the License for the specific language governing permissions and
16    * limitations under the License.
17    */
18   
19    import junit.framework.TestCase;
20    import org.apache.lucene.analysis.SimpleAnalyzer;
21    import org.apache.lucene.document.*;
22    import org.apache.lucene.index.IndexReader;
23    import org.apache.lucene.index.IndexWriter;
24    import org.apache.lucene.index.TermFreqVector;
25    import org.apache.lucene.store.RAMDirectory;
26    import org.apache.lucene.util.English;
27   
28    import java.io.IOException;
29   
30    /**
31    * @author Bernhard Messer
32    * @version $rcs = ' $Id: TestMultiThreadTermVectors.java 413201 2006-06-10 01:23:22Z gsingers $ ' ;
33    */
 
34    public class TestMultiThreadTermVectors extends TestCase {
35    private RAMDirectory directory = new RAMDirectory();
36    public int numDocs = 100;
37    public int numThreads = 3;
38   
 
39  1 toggle public TestMultiThreadTermVectors(String s) {
40  1 super(s);
41    }
42   
 
43  1 toggle public void setUp() throws Exception {
44  1 IndexWriter writer
45    = new IndexWriter(directory, new SimpleAnalyzer(), true);
46    //writer.setUseCompoundFile(false);
47    //writer.infoStream = System.out;
48  101 for (int i = 0; i < numDocs; i++) {
49  100 Document doc = new Document();
50  100 Fieldable fld = new Field("field", English.intToEnglish(i), Field.Store.YES, Field.Index.UN_TOKENIZED, Field.TermVector.YES);
51  100 doc.add(fld);
52  100 writer.addDocument(doc);
53    }
54  1 writer.close();
55   
56    }
57   
 
58  1 toggle public void test() {
59   
60  1 IndexReader reader = null;
61   
62  1 try {
63  1 reader = IndexReader.open(directory);
64  4 for(int i = 1; i <= numThreads; i++)
65  3 testTermPositionVectors(reader, i);
66   
67   
68    }
69    catch (IOException ioe) {
70  0 fail(ioe.getMessage());
71    }
72    finally {
73  1 if (reader != null) {
74  1 try {
75    /** close the opened reader */
76  1 reader.close();
77    } catch (IOException ioe) {
78  0 ioe.printStackTrace();
79    }
80    }
81    }
82    }
83   
 
84  3 toggle public void testTermPositionVectors(final IndexReader reader, int threadCount) {
85  3 MultiThreadTermVectorsReader[] mtr = new MultiThreadTermVectorsReader[threadCount];
86  9 for (int i = 0; i < threadCount; i++) {
87  6 mtr[i] = new MultiThreadTermVectorsReader();
88  6 mtr[i].init(reader);
89    }
90   
91   
92    /** run until all threads finished */
93  3 int threadsAlive = mtr.length;
94  66 while (threadsAlive > 0) {
95  63 try {
96    //System.out.println("Threads alive");
97  63 Thread.sleep(10);
98  63 threadsAlive = mtr.length;
99  71 for (int i = 0; i < mtr.length; i++) {
100  68 if (mtr[i].isAlive() == true) {
101  60 break;
102    }
103   
104  8 threadsAlive--;
105   
106    }
107   
108    } catch (InterruptedException ie) {}
109    }
110   
111  3 long totalTime = 0L;
112  9 for (int i = 0; i < mtr.length; i++) {
113  6 totalTime += mtr[i].timeElapsed;
114  6 mtr[i] = null;
115    }
116   
117    //System.out.println("threadcount: " + mtr.length + " average term vector time: " + totalTime/mtr.length);
118   
119    }
120   
121    }
122   
 
123    class MultiThreadTermVectorsReader implements Runnable {
124   
125    private IndexReader reader = null;
126    private Thread t = null;
127   
128    private final int runsToDo = 100;
129    long timeElapsed = 0;
130   
131   
 
132  6 toggle public void init(IndexReader reader) {
133  6 this.reader = reader;
134  6 timeElapsed = 0;
135  6 t=new Thread(this);
136  6 t.start();
137    }
138   
 
139  68 toggle public boolean isAlive() {
140  0 if (t == null) return false;
141   
142  68 return t.isAlive();
143    }
144   
 
145  6 toggle public void run() {
146  6 try {
147    // run the test 100 times
148  606 for (int i = 0; i < runsToDo; i++)
149  600 testTermVectors();
150    }
151    catch (Exception e) {
152  0 e.printStackTrace();
153    }
154  6 return;
155    }
156   
 
157  600 toggle private void testTermVectors() throws Exception {
158    // check:
159  600 int numDocs = reader.numDocs();
160  600 long start = 0L;
161  60587 for (int docId = 0; docId < numDocs; docId++) {
162  59998 start = System.currentTimeMillis();
163  59991 TermFreqVector [] vectors = reader.getTermFreqVectors(docId);
164  59996 timeElapsed += System.currentTimeMillis()-start;
165   
166    // verify vectors result
167  59997 verifyVectors(vectors, docId);
168   
169  59975 start = System.currentTimeMillis();
170  59974 TermFreqVector vector = reader.getTermFreqVector(docId, "field");
171  59999 timeElapsed += System.currentTimeMillis()-start;
172   
173  60000 vectors = new TermFreqVector[1];
174  60000