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... | |
| 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.
| parameter | nombre de concaténations. |
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 }

| static boolean doDouble | ( | int | parameter | ) | [static] |
Calculs sur les doubles.
| parameter | Nombre d'itérations |
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 }

| static boolean doException | ( | int | parameter | ) | [static] |
Génére un nombre important d'exceptions dans une boucle.
| parameter | nombre d'itérations. |
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 }

| 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.
| parameter | La taille de la hash / FACTOR |
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 }

| static boolean doInteger | ( | int | parameter | ) | [static] |
Calculs sur les entiers.
| parameter | Nombre d'itérations |
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 }

| 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.
| parameter | Nombre d'itérations |
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 }

| static boolean doLong | ( | int | parameter | ) | [static] |
Calculs sur les entiers longs.
| parameter | Nombre d'itérations |
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 }

| static boolean doLoop | ( | int | parameter | ) | [static] |
6 boucles imbriquées.
| parameter | nombre d'itérations à chaque étage |
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 }

| static boolean doMatrix | ( | int | parameter | ) | [static] |
Simple multiplication de deux matrices carrées.
| parameter | taille de la matrice |
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 }

| static boolean doSort | ( | int | n | ) | [static] |
Tri d'un tableau d'ordre inversé par rapport à l'objectif.
| n | Taille du tableau |
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 }

| 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.
| n | Nombre de threads |
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 }


| static boolean doTrigo | ( | int | parameter | ) | [static] |
Fonctions mathématiques et trigonométriques.
| parameter | itéartions sur le test |
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 }

| 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.
| parameter | taille des vecteurs. |
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 }

| 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 }

1.5.5