
// SleepAcc.java
// Andrew Davison, April 2005, ad@fivedots.coe.psu.ac.th

/* Měří přesnost metody sleep() pomocí časovače z knihovny Java 3D.
*/


import java.text.DecimalFormat;
import com.sun.j3d.utils.timer.J3DTimer;


/*  Příklad výstupu:

Win 98
Doba spánku: 1000 ms  J3D: 1002.89 ms  Chyba: -0.29 %
Doba spánku: 500 ms  J3D: 496.62 ms  Chyba: 0.68 %
Doba spánku: 200 ms  J3D: 199.73 ms  Chyba: 0.14 %
Doba spánku: 100 ms  J3D: 98.86 ms  Chyba: 1.15 %
Doba spánku: 50 ms  J3D: 50.6 ms  Chyba: -1.19 %
Doba spánku: 20 ms  J3D: 24.74 ms  Chyba: -19.16 %
Doba spánku: 10 ms  J3D: 14.75 ms  Chyba: -32.19 %
Doba spánku: 5 ms  J3D: 5.79 ms  Chyba: -13.59 %
Doba spánku: 1 ms  J3D: 0.31 ms  Chyba: 219.92 %

Win 2000
Doba spánku: 1000 ms  J3D: 995.95 ms  Chyba: 0.41 %
Doba spánku: 500 ms  J3D: 497.59 ms  Chyba: 0.48 %
Doba spánku: 200 ms  J3D: 199.21 ms  Chyba: 0.4 %
Doba spánku: 100 ms  J3D: 99.11 ms  Chyba: 0.9 %
Doba spánku: 50 ms  J3D: 49.11 ms  Chyba: 1.82 %
Doba spánku: 20 ms  J3D: 19.95 ms  Chyba: 0.25 %
Doba spánku: 10 ms  J3D: 8.97 ms  Chyba: 11.45 %
Doba spánku: 5 ms  J3D: 18.24 ms  Chyba: -72.59 %
Doba spánku: 1 ms  J3D: 18.86 ms  Chyba: -94.7 %

  Při každém spuštění jsou výsledky velmi proměnlivé.
  vliv má teké použitý operační systém a počítač.
*/


public class SleepAcc
{
  private static DecimalFormat df;

  public static void main(String args[])
  {
    df = new DecimalFormat("0.##");  // 2 dm

    // test various sleep values
    sleepTest(1000);
    sleepTest(500);
    sleepTest(200);
    sleepTest(100);
    sleepTest(50);
    sleepTest(20);
    sleepTest(10);
    sleepTest(5);
    sleepTest(1);
  } // konec metody: main()


  private static void sleepTest(int delay)
  {
    long timeStart = J3DTimer.getValue();

    try {
      Thread.sleep(delay);
    }
    catch(InterruptedException e) {}

    double timeDiff = ((double)(J3DTimer.getValue() - timeStart))/(1000000L);
    double err = ((delay - timeDiff)/timeDiff) * 100;

    System.out.println("Doba spánku: " + delay + " ms  J3D: " + 
                          df.format(timeDiff) + " ms  Chyba: " +
                          df.format(err) + " %" );
  }  // konec metody: sleepTest()

} // konec třídy: SleepAcc
