aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tests/src/com/android/inputmethod/latin/makedict/BinaryDictIOTests.java148
1 files changed, 84 insertions, 64 deletions
diff --git a/tests/src/com/android/inputmethod/latin/makedict/BinaryDictIOTests.java b/tests/src/com/android/inputmethod/latin/makedict/BinaryDictIOTests.java
index 6036562a8..3a21536ac 100644
--- a/tests/src/com/android/inputmethod/latin/makedict/BinaryDictIOTests.java
+++ b/tests/src/com/android/inputmethod/latin/makedict/BinaryDictIOTests.java
@@ -21,6 +21,7 @@ import com.android.inputmethod.latin.makedict.BinaryDictInputOutput;
import com.android.inputmethod.latin.makedict.FusionDictionary;
import com.android.inputmethod.latin.makedict.FusionDictionary.CharGroup;
import com.android.inputmethod.latin.makedict.FusionDictionary.Node;
+import com.android.inputmethod.latin.makedict.FusionDictionary.WeightedString;
import com.android.inputmethod.latin.makedict.PendingAttribute;
import com.android.inputmethod.latin.makedict.UnsupportedFormatException;
@@ -53,14 +54,40 @@ public class BinaryDictIOTests extends AndroidTestCase {
private static final int BIGRAM_FREQ = 50;
private static final int TOLERANCE_OF_BIGRAM_FREQ = 5;
+ private static final List<String> sWords = CollectionUtils.newArrayList();
+ private static final SparseArray<List<Integer>> sEmptyBigrams =
+ CollectionUtils.newSparseArray();
+ private static final SparseArray<List<Integer>> sStarBigrams = CollectionUtils.newSparseArray();
+ private static final SparseArray<List<Integer>> sChainBigrams =
+ CollectionUtils.newSparseArray();
+
private static final BinaryDictInputOutput.FormatOptions VERSION2 =
new BinaryDictInputOutput.FormatOptions(2);
- private static final String[] CHARACTERS =
- {
+ private static final String[] CHARACTERS = {
"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m",
"n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"
- };
+ };
+
+ public BinaryDictIOTests() {
+ super();
+
+ final Random random = new Random(123456);
+ sWords.clear();
+ generateWords(MAX_UNIGRAMS, random);
+
+ for (int i = 0; i < sWords.size(); ++i) {
+ sChainBigrams.put(i, new ArrayList<Integer>());
+ if (i > 0) {
+ sChainBigrams.get(i-1).add(i);
+ }
+ }
+
+ sStarBigrams.put(0, new ArrayList<Integer>());
+ for (int i = 1; i < sWords.size(); ++i) {
+ sStarBigrams.get(0).add(i);
+ }
+ }
// Utilities for test
/**
@@ -77,23 +104,29 @@ public class BinaryDictIOTests extends AndroidTestCase {
return builder.toString();
}
- private List<String> generateWords(final int number, final Random random) {
+ private void generateWords(final int number, final Random random) {
final Set<String> wordSet = CollectionUtils.newHashSet();
while (wordSet.size() < number) {
wordSet.add(generateWord(random.nextInt()));
}
- return new ArrayList<String>(wordSet);
+ sWords.addAll(wordSet);
}
/**
* Adds unigrams to the dictionary.
*/
- private void addUnigrams(final int number,
- final FusionDictionary dict,
- final List<String> words) {
+ private void addUnigrams(final int number, final FusionDictionary dict,
+ final List<String> words, final Map<String, List<String>> shortcutMap) {
for (int i = 0; i < number; ++i) {
final String word = words.get(i);
- dict.add(word, UNIGRAM_FREQ, null, false /* isNotAWord */);
+ final ArrayList<WeightedString> shortcuts = CollectionUtils.newArrayList();
+ if (shortcutMap != null && shortcutMap.containsKey(word)) {
+ for (final String shortcut : shortcutMap.get(word)) {
+ shortcuts.add(new WeightedString(shortcut, UNIGRAM_FREQ));
+ }
+ }
+ dict.add(word, UNIGRAM_FREQ, (shortcutMap == null) ? null : shortcuts,
+ false /* isNotAWord */);
}
}
@@ -130,9 +163,8 @@ public class BinaryDictIOTests extends AndroidTestCase {
return diff;
}
- private void checkDictionary(final FusionDictionary dict,
- final List<String> words,
- final SparseArray<List<Integer>> bigrams) {
+ private void checkDictionary(final FusionDictionary dict, final List<String> words,
+ final SparseArray<List<Integer>> bigrams, final Map<String, List<String>> shortcutMap) {
assertNotNull(dict);
// check unigram
@@ -149,12 +181,23 @@ public class BinaryDictIOTests extends AndroidTestCase {
assertNotNull(words.get(w1) + "," + words.get(w2), cg.getBigram(words.get(w2)));
}
}
+
+ // check shortcut
+ if (shortcutMap != null) {
+ for (final Map.Entry<String, List<String>> entry : shortcutMap.entrySet()) {
+ final CharGroup group = FusionDictionary.findWordInTree(dict.mRoot, entry.getKey());
+ for (final String word : entry.getValue()) {
+ assertNotNull("shortcut not found: " + entry.getKey() + ", " + word,
+ group.getShortcut(word));
+ }
+ }
+ }
}
// Tests for readDictionaryBinary and writeDictionaryBinary
private long timeReadingAndCheckDict(final File file, final List<String> words,
- final SparseArray<List<Integer>> bigrams) {
+ final SparseArray<List<Integer>> bigrams, final Map<String, List<String>> shortcutMap) {
long now, diff = -1;
@@ -165,13 +208,11 @@ public class BinaryDictIOTests extends AndroidTestCase {
FileChannel.MapMode.READ_ONLY, 0, file.length());
now = System.currentTimeMillis();
-
final FusionDictionary dict =
BinaryDictInputOutput.readDictionaryBinary(buffer, null);
-
diff = System.currentTimeMillis() - now;
- checkDictionary(dict, words, bigrams);
+ checkDictionary(dict, words, bigrams, shortcutMap);
return diff;
} catch (IOException e) {
@@ -191,29 +232,27 @@ public class BinaryDictIOTests extends AndroidTestCase {
return diff;
}
+ // Tests for readDictionaryBinary and writeDictionaryBinary
private String runReadAndWrite(final List<String> words,
- final SparseArray<List<Integer>> bigrams,
+ final SparseArray<List<Integer>> bigrams, final Map<String, List<String>> shortcuts,
final String message) {
- final FusionDictionary dict = new FusionDictionary(new Node(),
- new FusionDictionary.DictionaryOptions(
- new HashMap<String,String>(), false, false));
-
File file = null;
try {
file = File.createTempFile("runReadAndWrite", ".dict");
} catch (IOException e) {
Log.e(TAG, "IOException: " + e);
}
-
assertNotNull(file);
- addUnigrams(words.size(), dict, words);
+ final FusionDictionary dict = new FusionDictionary(new Node(),
+ new FusionDictionary.DictionaryOptions(
+ new HashMap<String,String>(), false, false));
+ addUnigrams(words.size(), dict, words, shortcuts);
addBigrams(dict, words, bigrams);
- // check original dictionary
- checkDictionary(dict, words, bigrams);
+ checkDictionary(dict, words, bigrams, shortcuts);
final long write = timeWritingDictToFile(file, dict);
- final long read = timeReadingAndCheckDict(file, words, bigrams);
+ final long read = timeReadingAndCheckDict(file, words, bigrams, shortcuts);
return "PROF: read=" + read + "ms, write=" + write + "ms :" + message;
}
@@ -221,22 +260,9 @@ public class BinaryDictIOTests extends AndroidTestCase {
public void testReadAndWrite() {
final List<String> results = new ArrayList<String>();
- final Random random = new Random(123456);
- final List<String> words = generateWords(MAX_UNIGRAMS, random);
- final SparseArray<List<Integer>> emptyArray = CollectionUtils.newSparseArray();
-
- final SparseArray<List<Integer>> chain = CollectionUtils.newSparseArray();
- for (int i = 0; i < words.size(); ++i) chain.put(i, new ArrayList<Integer>());
- for (int i = 1; i < words.size(); ++i) chain.get(i-1).add(i);
-
- final SparseArray<List<Integer>> star = CollectionUtils.newSparseArray();
- final List<Integer> list0 = CollectionUtils.newArrayList();
- star.put(0, list0);
- for (int i = 1; i < words.size(); ++i) star.get(0).add(i);
-
- results.add(runReadAndWrite(words, emptyArray, "only unigram"));
- results.add(runReadAndWrite(words, chain, "chain"));
- results.add(runReadAndWrite(words, star, "star"));
+ results.add(runReadAndWrite(sWords, sEmptyBigrams, null /* shortcuts */ , "unigram"));
+ results.add(runReadAndWrite(sWords, sChainBigrams, null /* shortcuts */ , "chain"));
+ results.add(runReadAndWrite(sWords, sStarBigrams, null /* shortcuts */ , "star"));
for (final String result : results) {
Log.d(TAG, result);
@@ -329,47 +355,41 @@ public class BinaryDictIOTests extends AndroidTestCase {
return diff;
}
- private void runReadUnigramsAndBigramsBinary(final List<String> words,
- final SparseArray<List<Integer>> bigrams) {
-
- // making the dictionary from lists of words.
- final FusionDictionary dict = new FusionDictionary(new Node(),
- new FusionDictionary.DictionaryOptions(
- new HashMap<String, String>(), false, false));
-
+ private String runReadUnigramsAndBigramsBinary(final List<String> words,
+ final SparseArray<List<Integer>> bigrams, final String message) {
File file = null;
try {
file = File.createTempFile("runReadUnigrams", ".dict");
} catch (IOException e) {
Log.e(TAG, "IOException: " + e);
}
-
assertNotNull(file);
- addUnigrams(words.size(), dict, words);
+ // making the dictionary from lists of words.
+ final FusionDictionary dict = new FusionDictionary(new Node(),
+ new FusionDictionary.DictionaryOptions(
+ new HashMap<String, String>(), false, false));
+ addUnigrams(words.size(), dict, words, null /* shortcutMap */);
addBigrams(dict, words, bigrams);
+
timeWritingDictToFile(file, dict);
long wordMap = timeAndCheckReadUnigramsAndBigramsBinary(file, words, bigrams);
- long fullReading = timeReadingAndCheckDict(file, words, bigrams);
+ long fullReading = timeReadingAndCheckDict(file, words, bigrams, null /* shortcutMap */);
- Log.d(TAG, "read=" + fullReading + ", bytearray=" + wordMap);
+ return "readDictionaryBinary=" + fullReading + ", readUnigramsAndBigramsBinary=" + wordMap
+ + " : " + message;
}
public void testReadUnigramsAndBigramsBinary() {
final List<String> results = new ArrayList<String>();
- final Random random = new Random(123456);
- final List<String> words = generateWords(MAX_UNIGRAMS, random);
- final SparseArray<List<Integer>> emptyArray = CollectionUtils.newSparseArray();
-
- runReadUnigramsAndBigramsBinary(words, emptyArray);
+ results.add(runReadUnigramsAndBigramsBinary(sWords, sEmptyBigrams, "unigram"));
+ results.add(runReadUnigramsAndBigramsBinary(sWords, sChainBigrams, "chain"));
+ results.add(runReadUnigramsAndBigramsBinary(sWords, sStarBigrams, "star"));
- final SparseArray<List<Integer>> star = CollectionUtils.newSparseArray();
- for (int i = 1; i < words.size(); ++i) {
- star.put(i-1, new ArrayList<Integer>());
- star.get(i-1).add(i);
+ for (final String result : results) {
+ Log.d(TAG, result);
}
- runReadUnigramsAndBigramsBinary(words, star);
}
}