/* DroidFish - An Android chess program. Copyright (C) 2011 Peter Ă–sterlund, peterosterlund2@gmail.com This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.petero.droidfish.gamelogic; import junit.framework.TestCase; public class TimeControlTest extends TestCase { public TimeControlTest() { } public void testElapsedTime() { TimeControl tc = new TimeControl(); long totTime = 5 * 60 * 1000; long t0 = 1000; tc.setTimeControl(totTime, 0, 0); tc.setCurrentMove(1, true, totTime, totTime); assertEquals(0, tc.getMovesToTC()); assertEquals(0, tc.getIncrement()); assertEquals(totTime, tc.getRemainingTime(true, 0)); tc.startTimer(t0); int remain = tc.moveMade(t0 + 1000, true); assertEquals(totTime - 1000, remain); tc.setCurrentMove(2, true, totTime - 1000, totTime); assertEquals(0, tc.getMovesToTC()); assertEquals(totTime - 1000, tc.getRemainingTime(true, t0 + 4711)); assertEquals(totTime, tc.getRemainingTime(false, t0 + 4711)); tc.setCurrentMove(1, false, totTime - 1000, totTime); assertEquals(0, tc.getMovesToTC()); assertEquals(totTime - 1000, tc.getRemainingTime(true, t0 + 4711)); assertEquals(totTime, tc.getRemainingTime(false, t0 + 4711)); tc.startTimer(t0 + 3000); assertEquals(totTime - 1000, tc.getRemainingTime(true, t0 + 5000)); assertEquals(totTime - 2000, tc.getRemainingTime(false, t0 + 5000)); tc.stopTimer(t0 + 8000); assertEquals(totTime - 1000, tc.getRemainingTime(true, t0 + 4711)); assertEquals(totTime - 5000, tc.getRemainingTime(false, t0 + 4711)); remain = tc.moveMade(t0 + 8000, true); assertEquals(totTime - 5000, remain); tc.setCurrentMove(2, true, totTime - 1000, totTime - 5000); assertEquals(totTime - 1000, tc.getRemainingTime(true, t0 + 4711)); assertEquals(totTime - 5000, tc.getRemainingTime(false, t0 + 4711)); } /** Test getMovesToTC */ public void testTimeControl() { TimeControl tc = new TimeControl(); tc.setTimeControl(2 * 60 * 1000, 40, 0); tc.setCurrentMove(1, true, 0, 0); assertEquals(40, tc.getMovesToTC()); tc.setCurrentMove(1, false, 0, 0); assertEquals(40, tc.getMovesToTC()); tc.setCurrentMove(2, true, 0, 0); assertEquals(39, tc.getMovesToTC()); tc.setCurrentMove(40, true, 0, 0); assertEquals(1, tc.getMovesToTC()); tc.setCurrentMove(41, true, 0, 0); assertEquals(40, tc.getMovesToTC()); tc.setCurrentMove(80, true, 0, 0); assertEquals(1, tc.getMovesToTC()); tc.setCurrentMove(81, true, 0, 0); assertEquals(40, tc.getMovesToTC()); } public void testExtraTime() { TimeControl tc = new TimeControl(); final long timeCont = 60 * 1000; int wBaseTime = (int)timeCont; int bBaseTime = (int)timeCont; final long inc = 700; tc.setTimeControl(timeCont, 5, inc); tc.setCurrentMove(5, true, wBaseTime, bBaseTime); long t0 = 1342134; assertEquals(timeCont, tc.getRemainingTime(true, t0 + 4711)); assertEquals(timeCont, tc.getRemainingTime(false, t0 + 4711)); tc.startTimer(t0 + 1000); wBaseTime = tc.moveMade(t0 + 2000, true); tc.setCurrentMove(5, false, wBaseTime, bBaseTime); assertEquals(timeCont - 1000 + timeCont + inc, tc.getRemainingTime(true, t0 + 4711)); assertEquals(timeCont, tc.getRemainingTime(false, t0 + 4711)); tc.startTimer(t0 + 2000); bBaseTime = tc.moveMade(t0 + 6000, true); tc.setCurrentMove(6, true, wBaseTime, bBaseTime); assertEquals(timeCont - 1000 + timeCont + inc, tc.getRemainingTime(true, t0 + 4711)); assertEquals(timeCont - 4000 + timeCont + inc, tc.getRemainingTime(false, t0 + 4711)); tc.startTimer(t0 + 6000); wBaseTime = tc.moveMade(t0 + 9000, true); tc.setCurrentMove(6, false, wBaseTime, bBaseTime); assertEquals(timeCont - 1000 + timeCont + inc - 3000 + inc, tc.getRemainingTime(true, t0 + 4711)); assertEquals(timeCont - 4000 + timeCont + inc, tc.getRemainingTime(false, t0 + 4711)); // No increment when move made int paused mode, ie analysis mode tc.startTimer(t0 + 9000); bBaseTime = tc.moveMade(t0 + 10000, false); tc.setCurrentMove(7, true, wBaseTime, bBaseTime); assertEquals(timeCont - 1000 + timeCont + inc - 3000 + inc, tc.getRemainingTime(true, t0 + 4711)); assertEquals(timeCont - 4000 + timeCont + inc - 1000, tc.getRemainingTime(false, t0 + 4711)); // No extra time when passing time control in analysis mode tc.setTimeControl(timeCont, 1, inc); wBaseTime = bBaseTime = (int)timeCont; tc.setCurrentMove(1, true, wBaseTime, bBaseTime); tc.startTimer(t0 + 1000); wBaseTime = tc.moveMade(t0 + 3000, false); tc.setCurrentMove(1, false, wBaseTime, bBaseTime); assertEquals(timeCont - 2000 + (timeCont + inc)*0, tc.getRemainingTime(true, t0 + 4711)); assertEquals(timeCont, tc.getRemainingTime(false, t0 + 4711)); } }