Référence de la classe Benchmark

Liste de tous les membres

Fonctions membres publiques statiques

static boolean doConcatenation (int parameter)
 Concaténation de n chaines en une seule.
static boolean doDouble (int parameter)
 Calculs sur les doubles.
static boolean doException (int parameter)
 Génére un nombre important d'exceptions dans une boucle.
static boolean doHash (int parameter)
 Ici on cré une table de hash<int,int> initialisé à FACTOR*parameter valeurs entières.
static boolean doInteger (int parameter)
 Calculs sur les entiers.
static boolean doIO (int parameter) throws IOException
 Ecriture d'un fichier d'un pattern composé d'une ligne de lettres contenant des caractères accentués.
static boolean doLong (int parameter)
 Calculs sur les entiers longs.
static boolean doLoop (int parameter)
 6 boucles imbriquées.
static boolean doMatrix (int parameter)
 Simple multiplication de deux matrices carrées.
static boolean doSort (int n)
 Tri d'un tableau d'ordre inversé par rapport à l'objectif.
static boolean doThreads (int parameter)
 Composition d'un anneau de N threads servant de relai de signal.
static boolean doTrigo (int parameter)
 Fonctions mathématiques et trigonométriques.
static boolean doVector (int parameter)
 Création de deux vecteurs et divers opérations pour passer des éléments de l'un à l'autre.
static void main (String[] args) throws Exception
 Procédure principale de lancement d'un test.

Classes

class  Node
 Classe utilisée pour le test doTreads. Plus de détails...


Documentation des fonctions membres

static boolean doConcatenation ( int  parameter  )  [static]

Concaténation de n chaines en une seule.

Pour être plus juste par rapport à l'immutabilité des chaînes dans les langages Java et C#, ce sont les versions bufferisées qui sont utilisées.

Paramètres:
parameter nombre de concaténations.
Renvoie:
true si c'est ok
00094                                                        {
00095     final String PATTERN = "éàôabcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefgh";
00096     StringBuffer result = new StringBuffer();
00097     for (int i = 0; i < parameter; i++) {
00098       result.append(PATTERN);
00099     }
00100     return result.length() == parameter * PATTERN.length()
00101         && result.substring(result.length() - PATTERN.length()).equals(PATTERN);
00102   }

Voici le graphe d'appel pour cette fonction :

static boolean doDouble ( int  parameter  )  [static]

Calculs sur les doubles.

Paramètres:
parameter Nombre d'itérations
Renvoie:
True si le test est validé.
00111                                                 {
00112     double result = 1;
00113     for (int i = 1; i < parameter; i++) {
00114       result -= i;
00115       result += i;
00116       result *= i;
00117       result /= i;
00118     }
00119     return result == 1;
00120   }

Voici le graphe d'appel pour cette fonction :

static boolean doException ( int  parameter  )  [static]

Génére un nombre important d'exceptions dans une boucle.

Paramètres:
parameter nombre d'itérations.
Renvoie:
true si le test est validé.
00128                                                    {
00129     int counter = 0;
00130     for (int i = 0; i < parameter; i++) {
00131       if (i % 2 == 0) {
00132         try {
00133           throw new Exception();
00134         } catch (Exception e) {
00135           counter++;
00136         }
00137       }
00138     }
00139     return counter == parameter / 2;
00140   }

Voici le graphe d'appel pour cette fonction :

static boolean doHash ( int  parameter  )  [static]

Ici on cré une table de hash<int,int> initialisé à FACTOR*parameter valeurs entières.

Ensuite on énumère ces valeurs pour les ajouter dans une seconde hash avec une clef % FACTOR.

Paramètres:
parameter La taille de la hash / FACTOR
Renvoie:
true si ok
00149                                               {
00150     final int FACTOR = 100;
00151     final int ITEMS = parameter * FACTOR;
00152     HashMap hash1 = new HashMap();
00153     HashMap hash2 = new HashMap();
00154 
00155     Integer integer;
00156     for (int i = 0; i < ITEMS; i++) {
00157       integer = new Integer(i);
00158       hash1.put(integer, integer);
00159     }
00160 
00161     Iterator iterator = hash1.entrySet().iterator();
00162 
00163     while (iterator.hasNext()) {
00164       Map.Entry entry = (Map.Entry) iterator.next();
00165       int key = ((Integer) entry.getKey()).intValue();
00166       int key2 = key % FACTOR;
00167       int v1 = ((Integer) entry.getValue()).intValue();
00168       Integer v2 = (Integer) hash2.get(new Integer(key2));
00169       if (v2 != null) {
00170         v1 += v2.intValue();
00171       }
00172       hash2.put(new Integer(key2), new Integer(v1));
00173     }
00174     return hash2.size() == FACTOR;
00175   }

Voici le graphe d'appel pour cette fonction :

static boolean doInteger ( int  parameter  )  [static]

Calculs sur les entiers.

Paramètres:
parameter Nombre d'itérations
Renvoie:
True si le test est validé.
00183                                                  {
00184     int result = 1;
00185     for (int i = 1; i < parameter; i++) {
00186       result -= i;
00187       result += i;
00188       result *= i;
00189       result /= i;
00190     }
00191     return result == 1;
00192   }

Voici le graphe d'appel pour cette fonction :

static boolean doIO ( int  parameter  )  throws IOException [static]

Ecriture d'un fichier d'un pattern composé d'une ligne de lettres contenant des caractères accentués.

Ensuite relecture du même fichier ligne par ligne.

Paramètres:
parameter Nombre d'itérations
Renvoie:
True si le test est validé.
00201                                                                {
00202     final String PATTERN = "éàôabcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefgh";
00203     final File FILENAME = new File("../tmp/TestJava.txt");
00204 
00205     // long time = System.currentTimeMillis();
00206     BufferedOutputStream writer = new BufferedOutputStream(new FileOutputStream(FILENAME));
00207     byte[] bytes = (PATTERN + "\n").getBytes();
00208     for (int i = 0; i < parameter; i++) {
00209       writer.write(bytes);
00210     }
00211     writer.close();
00212     // System.out.println(System.currentTimeMillis() - time);
00213     // time = System.currentTimeMillis();
00214     BufferedReader reader = new BufferedReader(new FileReader(FILENAME));
00215     String line = "";
00216     for (int i = 0; i < parameter; i++) {
00217       line = reader.readLine();
00218       if (!line.equals(PATTERN)) {
00219         return false;
00220       }
00221     }
00222     reader.close();
00223     // System.out.println(System.currentTimeMillis() - time);
00224     return true;
00225 
00226   }

Voici le graphe d'appel pour cette fonction :

static boolean doLong ( int  parameter  )  [static]

Calculs sur les entiers longs.

Paramètres:
parameter Nombre d'itérations
Renvoie:
True si le test est validé.
00234                                               {
00235     long result = 1;
00236     for (int i = 1; i < parameter; i++) {
00237       result -= i;
00238       result += i;
00239       result *= i;
00240       result /= i;
00241     }
00242     return result == 1;
00243   }

Voici le graphe d'appel pour cette fonction :

static boolean doLoop ( int  parameter  )  [static]

6 boucles imbriquées.

Paramètres:
parameter nombre d'itérations à chaque étage
Renvoie:
True si le test est validé
00251                                               {
00252     int a, b, c, d, e, f;
00253     double x = 0;
00254     for (a = 0; a <= parameter; a++) {
00255       for (b = 0; b <= parameter; b++) {
00256         for (c = 0; c <= parameter; c++) {
00257           for (d = 0; d <= parameter; d++) {
00258             for (e = 0; e <= parameter; e++) {
00259               for (f = 0; f <= parameter; f++) {
00260                 x = a + b + c + d + e + f;
00261               }
00262             }
00263           }
00264         }
00265       }
00266     }
00267     return x == 6 * parameter;
00268   }

Voici le graphe d'appel pour cette fonction :

static boolean doMatrix ( int  parameter  )  [static]

Simple multiplication de deux matrices carrées.

Paramètres:
parameter taille de la matrice
Renvoie:
true si tout est ok
00276                                                 {
00277     // Create the the matrix
00278     int[][] m1 = new int[parameter][parameter];
00279     int[][] m2 = new int[parameter][parameter];
00280     int count = 1;
00281     for (int i = 0; i < parameter; i++) {
00282       for (int j = 0; j < parameter; j++) {
00283         m1[i][j] = count;
00284         m2[i][j] = 0;
00285         count++;
00286       }
00287     }
00288 
00289     // Create inversion matrix
00290     for (int i = 0; i < parameter; i++) {
00291       m2[i][parameter - i - 1] = 1;
00292     }
00293 
00294     // Multiply them
00295     int[][] mm = new int[parameter][parameter];
00296     for (int i = 0; i < parameter; i++) {
00297       for (int j = 0; j < parameter; j++) {
00298         int val = 0;
00299         for (int k = 0; k < parameter; k++) {
00300           val += m1[i][k] * m2[k][j];
00301         }
00302         mm[i][j] = val;
00303       }
00304     }
00305 
00306     // Check inversion
00307     for (int i = 0; i < parameter; i++) {
00308       for (int j = 0; j < parameter; j++) {
00309         if (mm[i][j] != m1[i][parameter - j - 1]) {
00310           return false;
00311         }
00312       }
00313     }
00314     return true;
00315   }

Voici le graphe d'appel pour cette fonction :

static boolean doSort ( int  n  )  [static]

Tri d'un tableau d'ordre inversé par rapport à l'objectif.

Paramètres:
n Taille du tableau
Renvoie:
true si le test est validé.
00323                                       {
00324     int ra[] = new int[n + 1];
00325     for (int i = 0; i <= n; i++) {
00326       ra[i] = n - i;
00327     }
00328     int i, j;
00329     int ir = n;
00330     int l = (n >> 1) + 1;
00331     int rra;
00332 
00333     for (;;) {
00334       if (l > 1) {
00335         rra = ra[--l];
00336       } else {
00337         rra = ra[ir];
00338         ra[ir] = ra[1];
00339         if (--ir == 1) {
00340           ra[1] = rra;
00341           break;
00342         }
00343       }
00344       i = l;
00345       j = l << 1;
00346       while (j <= ir) {
00347         if (j < ir && ra[j] < ra[j + 1]) {
00348           ++j;
00349         }
00350         if (rra < ra[j]) {
00351           ra[i] = ra[j];
00352           j += i = j;
00353         } else {
00354           j = ir + 1;
00355         }
00356       }
00357       ra[i] = rra;
00358     }
00359     for (i = 1; i < n; i++) {
00360       if (ra[i] > ra[i + 1]) {
00361         return false;
00362       }
00363     }
00364     return true;
00365   }

Voici le graphe d'appel pour cette fonction :

static boolean doThreads ( int  parameter  )  [static]

Composition d'un anneau de N threads servant de relai de signal.

Le signal en question est un entier dont la valeur est 1000xNombreThreads. Le message est passé d'un thread à l'autre en étant à chaque fois décrémenté. Lorsqu'un thread reçoit une valeur de signal négative, il le passe à son voisin et meurt.

Paramètres:
n Nombre de threads
Renvoie:
true si le test est validé.
00376                                                  {
00377     int threadCount = parameter - 1;
00378     int factor = 1000;
00379     int signal = factor * parameter;
00380     Node firstNode = new Node();
00381 
00382     // Make the ring
00383     Node previousNode = firstNode;
00384     for (int iNode = 0; iNode < threadCount; iNode++) {
00385       Node currentNode = new Node();
00386       if (previousNode != null) {
00387         currentNode.setNextNode(previousNode);
00388       } else {
00389         firstNode = currentNode;
00390       }
00391       currentNode.start();
00392       previousNode = currentNode;
00393     }
00394 
00395     // Close the ring
00396     firstNode.setNextNode(previousNode);
00397 
00398     while (true) {
00399       if (Node.ALIVES.size() == threadCount) {
00400         break;
00401       }
00402       try {
00403         Thread.sleep(1);
00404       } catch (InterruptedException e) {
00405         e.printStackTrace();
00406       }
00407     }
00408     firstNode.initialize(signal);
00409     return firstNode.received == factor + 1;
00410   }

Voici le graphe d'appel pour cette fonction :

Voici le graphe d'appel pour cette fonction :

static boolean doTrigo ( int  parameter  )  [static]

Fonctions mathématiques et trigonométriques.

Paramètres:
parameter itéartions sur le test
Renvoie:
true si ok
00418                                                {
00419     double sine = 0.0D;
00420     double cosine = 0.0D;
00421     double tangent = 0.0D;
00422     double logarithm = 0.0D;
00423     double squareRoot = 0.0D;
00424     double cumul = 0;
00425     double full = 2 * StrictMath.PI;
00426     for (int i = 0; i < parameter; i++) {
00427       double angle = 0;
00428       while (angle < full) {
00429         sine = StrictMath.sin(angle);
00430         cosine = StrictMath.cos(angle);
00431         tangent = StrictMath.tan(angle);
00432         cumul += sine + cosine + tangent;
00433         angle++;
00434       }
00435       logarithm = StrictMath.log(i + 1);
00436       squareRoot = StrictMath.sqrt(i + 1);
00437       cumul += logarithm + squareRoot;
00438     }
00439     return cumul != 0;
00440   }

Voici le graphe d'appel pour cette fonction :

static boolean doVector ( int  parameter  )  [static]

Création de deux vecteurs et divers opérations pour passer des éléments de l'un à l'autre.

Paramètres:
parameter taille des vecteurs.
Renvoie:
true si le test est validé.
00448                                                 {
00449     ArrayList Li1 = new ArrayList();
00450     for (int i = 0; i < parameter; i++) {
00451       Li1.add(new Integer(i));
00452     }
00453 
00454     ArrayList Li2 = new ArrayList(Li1);
00455     ArrayList Li3 = new ArrayList();
00456 
00457     while (!Li2.isEmpty()) {
00458       Li3.add(Li2.remove(0));
00459     }
00460 
00461     while (!Li3.isEmpty()) {
00462       int i = Li3.size() - 1;
00463       Li2.add(Li3.get(i));
00464       Li3.remove(i);
00465     }
00466 
00467     ArrayList tmp = new ArrayList();
00468     while (!Li1.isEmpty()) {
00469       tmp.add(0, Li1.remove(0));
00470     }
00471 
00472     Li1 = tmp;
00473 
00474     return ((Integer) Li1.get(0)).intValue() == parameter - 1;
00475   }

Voici le graphe d'appel pour cette fonction :

static void main ( String[]  args  )  throws Exception [static]

Procédure principale de lancement d'un test.

00480                                                           {
00481     int parameter = Integer.parseInt(args[1]);
00482     String testName = args[0];
00483     boolean result = false;
00484     long startTime = System.currentTimeMillis();
00485     if (testName.equals("Threads")) {
00486       result = doThreads(parameter);
00487     } else if (testName.equals("Double")) {
00488       result = doDouble(parameter);
00489     } else if (testName.equals("Long")) {
00490       result = doLong(parameter);
00491     } else if (testName.equals("Integer")) {
00492       result = doInteger(parameter);
00493     } else if (testName.equals("Trigo")) {
00494       result = doTrigo(parameter);
00495     } else if (testName.equals("Loop")) {
00496       result = doLoop(parameter);
00497     } else if (testName.equals("IO")) {
00498       result = doIO(parameter);
00499     } else if (testName.equals("Exception")) {
00500       result = doException(parameter);
00501     } else if (testName.equals("Hash")) {
00502       result = doHash(parameter);
00503     } else if (testName.equals("Concatenation")) {
00504       result = doConcatenation(parameter);
00505     } else if (testName.equals("Vector")) {
00506       result = doVector(parameter);
00507     } else if (testName.equals("Matrix")) {
00508       result = doMatrix(parameter);
00509     } else if (testName.equals("Sort")) {
00510       result = doSort(parameter);
00511     }
00512     long stopTime = System.currentTimeMillis();
00513     if (!result) {
00514       System.out.println("-1");
00515     } else {
00516       long delay = stopTime - startTime;
00517       System.out.println(delay);
00518     }
00519     System.exit(0);
00520   }

Voici le graphe d'appel pour cette fonction :


La documentation de cette classe a été générée à partir du fichier suivant :

Généré le Fri Jun 27 14:52:07 2008 par  doxygen 1.5.5