diff options
Diffstat (limited to 'tests/src/com/android/inputmethod/latin/SuggestPerformanceTests.java')
-rw-r--r-- | tests/src/com/android/inputmethod/latin/SuggestPerformanceTests.java | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/tests/src/com/android/inputmethod/latin/SuggestPerformanceTests.java b/tests/src/com/android/inputmethod/latin/SuggestPerformanceTests.java new file mode 100644 index 000000000..7eb66d502 --- /dev/null +++ b/tests/src/com/android/inputmethod/latin/SuggestPerformanceTests.java @@ -0,0 +1,126 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * 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 com.android.inputmethod.latin; + +import android.test.AndroidTestCase; +import android.util.Log; +import com.android.inputmethod.latin.tests.R; +import java.io.InputStreamReader; +import java.io.InputStream; +import java.io.BufferedReader; +import java.util.StringTokenizer; + +public class SuggestPerformanceTests extends AndroidTestCase { + private static final String TAG = "SuggestPerformanceTests"; + + private String mTestText; + private SuggestHelper sh; + + @Override + protected void setUp() { + // TODO Figure out a way to directly using the dictionary rather than copying it over + + // For testing with real dictionary, TEMPORARILY COPY main dictionary into test directory. + // DO NOT SUBMIT real dictionary under test directory. + //int[] resId = new int[] { R.raw.main0, R.raw.main1, R.raw.main2 }; + + int[] resId = new int[] { R.raw.test }; + + sh = new SuggestHelper(TAG, getTestContext(), resId); + loadString(); + } + + private void loadString() { + try { + InputStream is = getTestContext().getResources().openRawResource(R.raw.testtext); + BufferedReader reader = new BufferedReader(new InputStreamReader(is)); + StringBuilder sb = new StringBuilder(); + String line = reader.readLine(); + while (line != null) { + sb.append(line + " "); + line = reader.readLine(); + } + mTestText = sb.toString(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /************************** Helper functions ************************/ + private int lookForSuggestion(String prevWord, String currentWord) { + for (int i = 1; i < currentWord.length(); i++) { + if (i == 1) { + if (sh.isDefaultNextSuggestion(prevWord, currentWord.substring(0, i), + currentWord)) { + return i; + } + } else { + if (sh.isDefaultNextCorrection(prevWord, currentWord.substring(0, i), + currentWord)) { + return i; + } + } + } + return currentWord.length(); + } + + private double runText(boolean withBigrams) { + StringTokenizer st = new StringTokenizer(mTestText); + String prevWord = null; + int typeCount = 0; + int characterCount = 0; // without space + int wordCount = 0; + while (st.hasMoreTokens()) { + String currentWord = st.nextToken(); + boolean endCheck = false; + if (currentWord.matches("[\\w]*[\\.|?|!|*|@|&|/|:|;]")) { + currentWord = currentWord.substring(0, currentWord.length() - 1); + endCheck = true; + } + if (withBigrams && prevWord != null) { + typeCount += lookForSuggestion(prevWord, currentWord); + } else { + typeCount += lookForSuggestion(null, currentWord); + } + characterCount += currentWord.length(); + if (!endCheck) prevWord = currentWord; + wordCount++; + } + + double result = (double) (characterCount - typeCount) / characterCount * 100; + if (withBigrams) { + Log.i(TAG, "with bigrams -> " + result + " % saved!"); + } else { + Log.i(TAG, "without bigrams -> " + result + " % saved!"); + } + Log.i(TAG, "\ttotal number of words: " + wordCount); + Log.i(TAG, "\ttotal number of characters: " + mTestText.length()); + Log.i(TAG, "\ttotal number of characters without space: " + characterCount); + Log.i(TAG, "\ttotal number of characters typed: " + typeCount); + return result; + } + + + /************************** Performance Tests ************************/ + /** + * Compare the Suggest with and without bigram + * Check the log for detail + */ + public void testSuggestPerformance() { + assertTrue(runText(false) <= runText(true)); + } +} |