aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateMultiTouchTests.java134
-rw-r--r--tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateSingleTouchTests.java31
-rw-r--r--tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateTestsBase.java15
-rw-r--r--tests/src/com/android/inputmethod/keyboard/internal/MockKeyboardSwitcher.java34
-rw-r--r--tests/src/com/android/inputmethod/latin/ForgettingCurveTests.java56
5 files changed, 232 insertions, 38 deletions
diff --git a/tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateMultiTouchTests.java b/tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateMultiTouchTests.java
index 0e6caaf87..dc098db1e 100644
--- a/tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateMultiTouchTests.java
+++ b/tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateMultiTouchTests.java
@@ -34,6 +34,26 @@ public class KeyboardStateMultiTouchTests extends KeyboardStateTestsBase {
releaseKey(CODE_SYMBOL, ALPHABET_UNSHIFTED);
}
+ // Chording input in shifted.
+ public void testChordingShifted() {
+ // Press shift key, enter alphabet shifted.
+ pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
+
+ // Press shift key and hold, enter into choring shift state.
+ pressKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED);
+ // Press/release letter key.
+ chordingPressAndReleaseKey('Z', ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
+ // Release shift key, switch back to alphabet shifted.
+ releaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED);
+
+ // Press "?123" key and hold, enter into choring symbols state.
+ pressKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED);
+ // Press/release symbol letter key.
+ chordingPressAndReleaseKey('1', SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+ // Release "123?" key, switch back to alphabet shift unshifted.
+ releaseKey(CODE_SYMBOL, ALPHABET_UNSHIFTED);
+ }
+
// Chording input in shift locked.
public void testChordingShiftLocked() {
// Long press shift key, enter alphabet shift locked.
@@ -206,8 +226,8 @@ public class KeyboardStateMultiTouchTests extends KeyboardStateTestsBase {
// Chording input in automatic upper case.
public void testChordingAutomaticUpperCase() {
- // Set auto caps mode on.
- setAutoCapsMode(AUTO_CAPS);
+ // Set capitalize the first character of all words mode.
+ setAutoCapsMode(CAP_MODE_WORDS);
// Update shift state with auto caps enabled.
pressAndReleaseKey(CODE_AUTO_CAPS_TRIGGER, ALPHABET_UNSHIFTED, ALPHABET_AUTOMATIC_SHIFTED);
@@ -240,4 +260,114 @@ public class KeyboardStateMultiTouchTests extends KeyboardStateTestsBase {
// Release shift key
releaseKey(CODE_SHIFT, ALPHABET_UNSHIFTED);
}
+
+ // Multi touch input in manual shifted.
+ public void testMultiTouchManualShifted() {
+ // Press/release shift key, enter into alphabet shifted.
+ pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
+
+ // Press 'X' key and hold
+ pressKey('X', ALPHABET_MANUAL_SHIFTED);
+ // Press 'z' key and hold, switch back to alphabet unshifted.
+ chordingPressKey('z', ALPHABET_UNSHIFTED);
+ // Release 'X' key
+ releaseKey('X', ALPHABET_UNSHIFTED);
+ // Release 'z' key
+ releaseKey('z', ALPHABET_UNSHIFTED);
+ }
+
+ // Multi touch input in automatic upper case.
+ public void testMultiTouchAutomaticUpperCase() {
+ // Set auto word caps mode on.
+ setAutoCapsMode(CAP_MODE_WORDS);
+ // Update shift state with auto caps enabled.
+ pressAndReleaseKey(CODE_AUTO_CAPS_TRIGGER, ALPHABET_UNSHIFTED, ALPHABET_AUTOMATIC_SHIFTED);
+
+ // Press 'X' key and hold
+ pressKey('X', ALPHABET_AUTOMATIC_SHIFTED);
+ // Press 'z' key and hold, switch back to alphabet unshifted.
+ chordingPressKey('z', ALPHABET_UNSHIFTED);
+ // Release 'X' key
+ releaseKey('X', ALPHABET_UNSHIFTED);
+ // Release 'z' key
+ releaseKey('z', ALPHABET_UNSHIFTED);
+ }
+
+ // Multi touch input in capitalize character mode.
+ public void testMultiTouchCapModeCharacter() {
+ // Set auto character caps mode on.
+ setAutoCapsMode(CAP_MODE_CHARACTERS);
+ // Update shift state with auto caps enabled.
+ pressAndReleaseKey(CODE_AUTO_CAPS_TRIGGER, ALPHABET_UNSHIFTED, ALPHABET_AUTOMATIC_SHIFTED);
+
+ // Press 'X' key and hold
+ pressKey('X', ALPHABET_AUTOMATIC_SHIFTED);
+ // Press 'Z' key and hold, stay in automatic shifted mode.
+ chordingPressKey('Z', ALPHABET_AUTOMATIC_SHIFTED);
+ // Release 'X' key
+ releaseKey('X', ALPHABET_AUTOMATIC_SHIFTED);
+ // Release 'Z' key
+ releaseKey('Z', ALPHABET_AUTOMATIC_SHIFTED);
+ }
+
+ // Multi touch shift chording input in manual shifted.
+ public void testMultiTouchShiftChordingManualShifted() {
+ // Press/release shift key, enter into alphabet shifted.
+ pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
+
+ // Press shift key and hold, stays in alphabet shifted.
+ pressKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED);
+ // Press 'X' key and hold
+ chordingPressKey('X', ALPHABET_MANUAL_SHIFTED);
+ // Press 'Z' key and hold, stays in alphabet shifted.
+ chordingPressKey('Z', ALPHABET_MANUAL_SHIFTED);
+ // Release 'X' key
+ releaseKey('X', ALPHABET_MANUAL_SHIFTED);
+ // Release 'Z' key
+ releaseKey('Z', ALPHABET_MANUAL_SHIFTED);
+ // Release shift key.
+ releaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED);
+ }
+
+ // Multi touch shift chording input in automatic upper case.
+ public void testMultiTouchShiftChordingAutomaticUpperCase() {
+ // Set auto word caps mode on.
+ setAutoCapsMode(CAP_MODE_WORDS);
+ // Update shift state with auto caps enabled.
+ pressAndReleaseKey(CODE_AUTO_CAPS_TRIGGER, ALPHABET_UNSHIFTED, ALPHABET_AUTOMATIC_SHIFTED);
+
+ // Press shift key and hold, switch to alphabet shifted.
+ pressKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED);
+ // Press 'X' key and hold
+ chordingPressKey('X', ALPHABET_MANUAL_SHIFTED);
+ // Press 'Z' key and hold, stays in alphabet shifted.
+ chordingPressKey('Z', ALPHABET_MANUAL_SHIFTED);
+ // Release 'X' key
+ releaseKey('X', ALPHABET_MANUAL_SHIFTED);
+ // Release 'Z' key
+ releaseKey('Z', ALPHABET_MANUAL_SHIFTED);
+ // Release shift key.
+ releaseKey(CODE_SHIFT, ALPHABET_UNSHIFTED);
+ }
+
+ // Multi touch shift chording input in capitalize character mode.
+ public void testMultiTouchShiftChordingCapModeCharacter() {
+ // Set auto character caps mode on.
+ setAutoCapsMode(CAP_MODE_CHARACTERS);
+ // Update shift state with auto caps enabled.
+ pressAndReleaseKey(CODE_AUTO_CAPS_TRIGGER, ALPHABET_UNSHIFTED, ALPHABET_AUTOMATIC_SHIFTED);
+
+ // Press shift key and hold, switch to alphabet shifted.
+ pressKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED);
+ // Press 'X' key and hold
+ chordingPressKey('X', ALPHABET_MANUAL_SHIFTED);
+ // Press 'Z' key and hold, stay in automatic shifted mode.
+ chordingPressKey('Z', ALPHABET_MANUAL_SHIFTED);
+ // Release 'X' key
+ releaseKey('X', ALPHABET_MANUAL_SHIFTED);
+ // Release 'Z' key
+ releaseKey('Z', ALPHABET_MANUAL_SHIFTED);
+ // Release shift key.
+ releaseKey(CODE_SHIFT, ALPHABET_UNSHIFTED);
+ }
}
diff --git a/tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateSingleTouchTests.java b/tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateSingleTouchTests.java
index de2a50fcf..b9f53184a 100644
--- a/tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateSingleTouchTests.java
+++ b/tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateSingleTouchTests.java
@@ -202,8 +202,8 @@ public class KeyboardStateSingleTouchTests extends KeyboardStateTestsBase {
// Automatic upper case test
public void testAutomaticUpperCase() {
- // Set auto caps mode on.
- setAutoCapsMode(AUTO_CAPS);
+ // Set capitalize the first character of all words mode.
+ setAutoCapsMode(CAP_MODE_WORDS);
// Load keyboard, should be in automatic shifted.
loadKeyboard(ALPHABET_AUTOMATIC_SHIFTED);
@@ -239,7 +239,7 @@ public class KeyboardStateSingleTouchTests extends KeyboardStateTestsBase {
// Long press shift key.
public void testLongPressShift() {
// Set auto caps mode off.
- setAutoCapsMode(NO_AUTO_CAPS);
+ setAutoCapsMode(CAP_MODE_OFF);
// Load keyboard, should be in alphabet.
loadKeyboard(ALPHABET_UNSHIFTED);
// Long press shift key, enter alphabet shift locked.
@@ -268,8 +268,8 @@ public class KeyboardStateSingleTouchTests extends KeyboardStateTestsBase {
// Press/release shift key, back to alphabet.
pressAndReleaseKey(CODE_SHIFT, ALPHABET_SHIFT_LOCK_SHIFTED, ALPHABET_UNSHIFTED);
- // Set auto caps mode on.
- setAutoCapsMode(AUTO_CAPS);
+ // Set capitalize the first character of all words mode.
+ setAutoCapsMode(CAP_MODE_WORDS);
// Load keyboard, should be in automatic shifted.
loadKeyboard(ALPHABET_AUTOMATIC_SHIFTED);
// Long press shift key, enter alphabet shift locked.
@@ -303,8 +303,8 @@ public class KeyboardStateSingleTouchTests extends KeyboardStateTestsBase {
// Second shift key tap.
secondPressAndReleaseKey(CODE_SHIFT, ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED);
- // Set auto caps mode on.
- setAutoCapsMode(AUTO_CAPS);
+ // Set capitalize the first character of all words mode.
+ setAutoCapsMode(CAP_MODE_WORDS);
// Load keyboard, should be in automatic shifted.
loadKeyboard(ALPHABET_AUTOMATIC_SHIFTED);
@@ -322,7 +322,7 @@ public class KeyboardStateSingleTouchTests extends KeyboardStateTestsBase {
// Update shift state.
public void testUpdateShiftState() {
// Set auto caps mode off.
- setAutoCapsMode(NO_AUTO_CAPS);
+ setAutoCapsMode(CAP_MODE_OFF);
// Load keyboard, should be in alphabet.
loadKeyboard(ALPHABET_UNSHIFTED);
// Update shift state, remained in alphabet.
@@ -350,8 +350,8 @@ public class KeyboardStateSingleTouchTests extends KeyboardStateTestsBase {
// Update shift state, remained in symbols shifted.
updateShiftState(SYMBOLS_SHIFTED);
- // Set auto caps mode on.
- setAutoCapsMode(AUTO_CAPS);
+ // Set capitalize the first character of all words mode.
+ setAutoCapsMode(CAP_MODE_WORDS);
// Load keyboard, should be in automatic shifted.
loadKeyboard(ALPHABET_AUTOMATIC_SHIFTED);
// Update shift state, remained in automatic shifted.
@@ -592,11 +592,8 @@ public class KeyboardStateSingleTouchTests extends KeyboardStateTestsBase {
// Change focus to auto caps text field.
public void testChangeFocusAutoCaps() {
- // Set auto caps mode on.
- setAutoCapsMode(AUTO_CAPS);
-
- // Update shift state.
- updateShiftState(ALPHABET_AUTOMATIC_SHIFTED);
+ // Set capitalize the first character of all words mode.
+ setAutoCapsMode(CAP_MODE_WORDS);
// Change focus to new text field.
loadKeyboard(ALPHABET_AUTOMATIC_SHIFTED);
@@ -735,8 +732,8 @@ public class KeyboardStateSingleTouchTests extends KeyboardStateTestsBase {
// Rapidly press/release letter key.
secondPressAndReleaseKey('J', ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
- // Set auto caps mode on.
- setAutoCapsMode(AUTO_CAPS);
+ // Set capitalize the first character of all words mode.
+ setAutoCapsMode(CAP_MODE_WORDS);
// Press/release auto caps trigger letter to enter alphabet automatic shifted.
pressAndReleaseKey(CODE_AUTO_CAPS_TRIGGER, ALPHABET_UNSHIFTED, ALPHABET_AUTOMATIC_SHIFTED);
// Press/release shift key
diff --git a/tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateTestsBase.java b/tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateTestsBase.java
index 96a54668c..9472a1fe5 100644
--- a/tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateTestsBase.java
+++ b/tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateTestsBase.java
@@ -29,12 +29,12 @@ public class KeyboardStateTestsBase extends AndroidTestCase
super.setUp();
mSwitcher = new MockKeyboardSwitcher();
- mSwitcher.setAutoCapsMode(NO_AUTO_CAPS);
+ mSwitcher.setAutoCapsMode(CAP_MODE_OFF);
loadKeyboard(ALPHABET_UNSHIFTED);
}
- public void setAutoCapsMode(boolean autoCaps) {
+ public void setAutoCapsMode(int autoCaps) {
mSwitcher.setAutoCapsMode(autoCaps);
}
@@ -64,14 +64,14 @@ public class KeyboardStateTestsBase extends AndroidTestCase
assertLayout(afterRotate, mSwitcher.getLayoutId());
}
- private void pressKeyWithoutTimerExpire(int code, int afterPress) {
- mSwitcher.onPressKey(code);
+ private void pressKeyWithoutTimerExpire(int code, boolean isSinglePointer, int afterPress) {
+ mSwitcher.onPressKey(code, isSinglePointer);
assertLayout(afterPress, mSwitcher.getLayoutId());
}
public void pressKey(int code, int afterPress) {
mSwitcher.expireDoubleTapTimeout();
- pressKeyWithoutTimerExpire(code, afterPress);
+ pressKeyWithoutTimerExpire(code, true, afterPress);
}
public void releaseKey(int code, int afterRelease) {
@@ -86,7 +86,8 @@ public class KeyboardStateTestsBase extends AndroidTestCase
}
public void chordingPressKey(int code, int afterPress) {
- pressKey(code, afterPress);
+ mSwitcher.expireDoubleTapTimeout();
+ pressKeyWithoutTimerExpire(code, false, afterPress);
}
public void chordingReleaseKey(int code, int afterRelease) {
@@ -114,7 +115,7 @@ public class KeyboardStateTestsBase extends AndroidTestCase
}
public void secondPressAndReleaseKey(int code, int afterPress, int afterRelease) {
- pressKeyWithoutTimerExpire(code, afterPress);
+ pressKeyWithoutTimerExpire(code, true, afterPress);
releaseKey(code, afterRelease);
}
}
diff --git a/tests/src/com/android/inputmethod/keyboard/internal/MockKeyboardSwitcher.java b/tests/src/com/android/inputmethod/keyboard/internal/MockKeyboardSwitcher.java
index 999e08a8d..dd4caadf1 100644
--- a/tests/src/com/android/inputmethod/keyboard/internal/MockKeyboardSwitcher.java
+++ b/tests/src/com/android/inputmethod/keyboard/internal/MockKeyboardSwitcher.java
@@ -16,6 +16,8 @@
package com.android.inputmethod.keyboard.internal;
+import android.text.TextUtils;
+
import com.android.inputmethod.keyboard.Keyboard;
public class MockKeyboardSwitcher implements KeyboardState.SwitchActions {
@@ -26,8 +28,10 @@ public class MockKeyboardSwitcher implements KeyboardState.SwitchActions {
// Argument for {@link KeyboardState#onCodeInput}.
public static final boolean SINGLE = true;
public static final boolean MULTI = false;
- public static final boolean NO_AUTO_CAPS = false;
- public static final boolean AUTO_CAPS = true;
+ public static final int CAP_MODE_OFF =
+ com.android.inputmethod.latin.Constants.TextUtils.CAP_MODE_OFF;
+ public static final int CAP_MODE_WORDS = TextUtils.CAP_MODE_WORDS;
+ public static final int CAP_MODE_CHARACTERS = TextUtils.CAP_MODE_CHARACTERS;
public static final int CODE_SHIFT = Keyboard.CODE_SHIFT;
public static final int CODE_SYMBOL = Keyboard.CODE_SWITCH_ALPHA_SYMBOL;
@@ -45,9 +49,9 @@ public class MockKeyboardSwitcher implements KeyboardState.SwitchActions {
private int mLayout = Constants.ALPHABET_UNSHIFTED;
- private boolean mAutoCapsMode = Constants.NO_AUTO_CAPS;
+ private int mAutoCapsMode = Constants.CAP_MODE_OFF;
// Following InputConnection's behavior. Simulating InputType.TYPE_TEXT_FLAG_CAP_WORDS.
- private boolean mAutoCapsState = true;
+ private int mAutoCapsState = Constants.CAP_MODE_OFF;
private boolean mIsInDoubleTapTimeout;
private int mLongPressTimeoutCode;
@@ -71,8 +75,9 @@ public class MockKeyboardSwitcher implements KeyboardState.SwitchActions {
}
}
- public void setAutoCapsMode(boolean autoCaps) {
+ public void setAutoCapsMode(int autoCaps) {
mAutoCapsMode = autoCaps;
+ mAutoCapsState = autoCaps;
}
public void expireDoubleTapTimeout() {
@@ -116,7 +121,7 @@ public class MockKeyboardSwitcher implements KeyboardState.SwitchActions {
@Override
public void requestUpdatingShiftState() {
- mState.onUpdateShiftState(mAutoCapsMode && mAutoCapsState);
+ mState.onUpdateShiftState(mAutoCapsState);
}
@Override
@@ -158,7 +163,7 @@ public class MockKeyboardSwitcher implements KeyboardState.SwitchActions {
}
public void updateShiftState() {
- mState.onUpdateShiftState(mAutoCapsMode && mAutoCapsState);
+ mState.onUpdateShiftState(mAutoCapsState);
}
public void loadKeyboard(String layoutSwitchBackSymbols) {
@@ -169,8 +174,8 @@ public class MockKeyboardSwitcher implements KeyboardState.SwitchActions {
mState.onSaveKeyboardState();
}
- public void onPressKey(int code) {
- mState.onPressKey(code);
+ public void onPressKey(int code, boolean isSinglePointer) {
+ mState.onPressKey(code, isSinglePointer, mAutoCapsState);
}
public void onReleaseKey(int code, boolean withSliding) {
@@ -181,10 +186,15 @@ public class MockKeyboardSwitcher implements KeyboardState.SwitchActions {
}
public void onCodeInput(int code, boolean isSinglePointer) {
- if (Keyboard.isLetterCode(code)) {
- mAutoCapsState = (code == Constants.CODE_AUTO_CAPS_TRIGGER);
+ if (mAutoCapsMode == Constants.CAP_MODE_WORDS) {
+ if (Keyboard.isLetterCode(code)) {
+ mAutoCapsState = (code == Constants.CODE_AUTO_CAPS_TRIGGER)
+ ? mAutoCapsMode : Constants.CAP_MODE_OFF;
+ }
+ } else {
+ mAutoCapsState = mAutoCapsMode;
}
- mState.onCodeInput(code, isSinglePointer, mAutoCapsMode && mAutoCapsState);
+ mState.onCodeInput(code, isSinglePointer, mAutoCapsState);
}
public void onCancelInput(boolean isSinglePointer) {
diff --git a/tests/src/com/android/inputmethod/latin/ForgettingCurveTests.java b/tests/src/com/android/inputmethod/latin/ForgettingCurveTests.java
new file mode 100644
index 000000000..a2e71c11a
--- /dev/null
+++ b/tests/src/com/android/inputmethod/latin/ForgettingCurveTests.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2012 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;
+
+public class ForgettingCurveTests extends AndroidTestCase {
+ public void testFcToFreq() {
+ for (int i = 0; i < Byte.MAX_VALUE; ++i) {
+ final byte fc = (byte)i;
+ final int e = UserHistoryForgettingCurveUtils.fcToElapsedTime(fc);
+ final int c = UserHistoryForgettingCurveUtils.fcToCount(fc);
+ final int l = UserHistoryForgettingCurveUtils.fcToLevel(fc);
+ final byte fc2 = UserHistoryForgettingCurveUtils.calcFc(e, c, l);
+ assertEquals(fc, fc2);
+ }
+ byte fc = 0;
+ int l;
+ for (int i = 0; i < 4; ++i) {
+ for (int j = 0; j < (UserHistoryForgettingCurveUtils.COUNT_MAX + 1); ++j) {
+ fc = UserHistoryForgettingCurveUtils.pushCount(fc, true);
+ }
+ l = UserHistoryForgettingCurveUtils.fcToLevel(fc);
+ assertEquals(l, Math.max(1, Math.min(i + 1, 3)));
+ }
+ fc = 0;
+ for (int i = 0; i < 4; ++i) {
+ for (int j = 0; j < (UserHistoryForgettingCurveUtils.COUNT_MAX + 1); ++j) {
+ fc = UserHistoryForgettingCurveUtils.pushCount(fc, false);
+ }
+ l = UserHistoryForgettingCurveUtils.fcToLevel(fc);
+ assertEquals(l, Math.min(i + 1, 3));
+ }
+ for (int i = 0; i < 4; ++i) {
+ for (int j = 0; j < (UserHistoryForgettingCurveUtils.ELAPSED_TIME_MAX + 1); ++j) {
+ fc = UserHistoryForgettingCurveUtils.pushElapsedTime(fc);
+ }
+ l = UserHistoryForgettingCurveUtils.fcToLevel(fc);
+ assertEquals(l, Math.max(0, 2 - i));
+ }
+ }
+}