/*
* Copyright 2012 Takao Nakaguchi
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.trie4j.doublearray;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
import org.junit.Test;
import org.trie4j.Trie;
import org.trie4j.test.LapTimer;
import org.trie4j.test.WikipediaTitles;
public class TestIO {
private static final int maxCount = 2000000;
@Test
public void testSave() throws Exception{
System.out.println("--- building patricia trie ---");
Trie trie = new org.trie4j.patricia.TailPatriciaTrie();
int c = 0;
LapTimer t1 = new LapTimer();
for(String word : new WikipediaTitles()){
trie.insert(word);
c++;
if(c == maxCount) break;
}
System.out.println("done in " + t1.lapMillis() + " millis.");
System.out.println(c + "entries in ja wikipedia titles.");
System.out.println("-- building double array.");
t1.reset();
TailDoubleArray da = new TailDoubleArray(trie);
trie = null;
System.out.println("done in " + t1.lapMillis() + " millis.");
OutputStream os = new GZIPOutputStream(new FileOutputStream("da.dat"));
try{
System.out.println("-- saving double array.");
t1.reset();
da.save(os);
System.out.println("done in " + t1.lapMillis() + " millis.");
da.dump(new PrintWriter(System.out));
} finally{
os.close();
}
}
@Test
public void testLoad() throws Exception{
TailDoubleArray da = new TailDoubleArray();
LapTimer t = new LapTimer();
System.out.println("-- loading double array.");
da.load(new GZIPInputStream(new FileInputStream("da.dat")));
System.out.println("done in " + t.lapMillis() + " millis.");
da.dump(new PrintWriter(System.out));
verify(da);
System.out.println("---- common prefix search ----");
System.out.println("-- for 東京国際フォーラム");
for(String s : da.commonPrefixSearch("東京国際フォーラム")){
System.out.println(s);
}
System.out.println("-- for 大阪城ホール");
for(String s : da.commonPrefixSearch("大阪城ホール")){
System.out.println(s);
}
System.out.println("---- predictive search ----");
System.out.println("-- for 大阪城");
for(String s : da.predictiveSearch("大阪城")){
System.out.println(s);
}
Thread.sleep(10000);
da.contains("hello");
}
private static void verify(Trie da) throws Exception{
System.out.println("verifying double array...");
int c = 0;
int sum = 0;
LapTimer t1 = new LapTimer();
LapTimer t = new LapTimer();
for(String word : new WikipediaTitles()){
if(c == maxCount) break;
t.reset();
boolean found = da.contains(word);
sum += t.lapMillis();
c++;
if(!found){
System.out.println("verification failed. trie not contains " + c + " th word: [" + word + "]");
break;
}
}
System.out.println("done " + c + "words in " + t1.lapMillis() + " millis.");
System.out.println("contains time: " + sum + " millis.");
}
}