--- /dev/null
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.apache.lucene.search.suggest;
+
+import java.io.File;
+
+import org.apache.lucene.search.suggest.Lookup;
+import org.apache.lucene.search.suggest.fst.FSTLookup;
+import org.apache.lucene.search.suggest.jaspell.JaspellLookup;
+import org.apache.lucene.search.suggest.tst.TSTLookup;
+import org.apache.lucene.util.LuceneTestCase;
+
+public class PersistenceTest extends LuceneTestCase {
+ public final String[] keys = new String[] {
+ "one",
+ "two",
+ "three",
+ "four",
+ "oneness",
+ "onerous",
+ "onesimus",
+ "twofold",
+ "twonk",
+ "thrive",
+ "through",
+ "threat",
+ "foundation",
+ "fourier",
+ "fourty"};
+
+ public void testTSTPersistence() throws Exception {
+ runTest(TSTLookup.class, true);
+ }
+
+ public void testJaspellPersistence() throws Exception {
+ runTest(JaspellLookup.class, true);
+ }
+
+ public void testFSTPersistence() throws Exception {
+ runTest(FSTLookup.class, false);
+ }
+
+ private void runTest(Class<? extends Lookup> lookupClass,
+ boolean supportsExactWeights) throws Exception {
+
+ // Add all input keys.
+ Lookup lookup = lookupClass.newInstance();
+ TermFreq[] keys = new TermFreq[this.keys.length];
+ for (int i = 0; i < keys.length; i++)
+ keys[i] = new TermFreq(this.keys[i], (float) i);
+ lookup.build(new TermFreqArrayIterator(keys));
+
+ // Store the suggester.
+ File storeDir = TEMP_DIR;
+ lookup.store(storeDir);
+
+ // Re-read it from disk.
+ lookup = lookupClass.newInstance();
+ lookup.load(storeDir);
+
+ // Assert validity.
+ float previous = Float.NEGATIVE_INFINITY;
+ for (TermFreq k : keys) {
+ Float val = (Float) lookup.get(k.term);
+ assertNotNull(k.term, val);
+
+ if (supportsExactWeights) {
+ assertEquals(k.term, Float.valueOf(k.v), val);
+ } else {
+ assertTrue(val + ">=" + previous, val >= previous);
+ previous = val.floatValue();
+ }
+ }
+ }
+}