package basics.time;

import basics.testing.Test;

public class LongSleep
{
private static final int INTERVAL = 1000;
boolean                  running  = true;

public void stop()
{
   running = false;
}

public void sleep(long sleepTime)
{
   try
   {
      if(sleepTime < INTERVAL)
      {
         Thread.sleep(sleepTime);
      }
      else
      {
         long totalSleepTime = sleepTime;
         while(totalSleepTime > 0 && running)
         {
            if(totalSleepTime > INTERVAL)
            {
               totalSleepTime -= INTERVAL;
               Thread.sleep(INTERVAL);
            }
            else
            {
               Thread.sleep(totalSleepTime);
               totalSleepTime = 0;
            }
         }
      }
   }
   catch(Exception e)
   {
   }
}

public static void unittest()
{
   LongSleep s = new LongSleep();
   long a = System.currentTimeMillis();
   s.sleep(1010);
   long slept = System.currentTimeMillis() - a;
   Test.assertTrue(slept >= 1010, "slept to short");
   Test.assertTrue(slept < 1050, "slept to long");
}
}
