Fonctions membres publiques statiques | |
| static bool | doInteger (int parameter) |
| Calculs sur les entiers. | |
| static bool | doLong (int parameter) |
| Calculs sur les entiers longs. | |
| static bool | doDouble (int parameter) |
| Calculs sur les doubles. | |
| static bool | doIO (int parameter) |
| Ecriture d'un fichier d'un pattern composé d'une ligne de lettres contenant des caractères accentués. | |
| static bool | doConcatenation (int parameter) |
| Concaténation de n chaines en une seule. | |
| static bool | doMatrix (int parameter) |
| Simple multiplication de deux matrices carrées. | |
| static bool | doSort (int n) |
| Tri d'un tableau d'ordre inversé par rapport à l'objectif. | |
| static bool | doHash (int parameter) |
| Ici on cré une table de hash<int,int> initialisé à FACTOR*parameter valeurs entières. | |
| static bool | doException (int parameter) |
| Génére un nombre important d'exceptions dans une boucle. | |
| static bool | doTrigo (int parameter) |
| Fonctions mathématiques et trigonométriques. | |
| static bool | doLoop (int parameter) |
| 6 boucles imbriquées. | |
| static bool | doVector (int parameter) |
| Création de deux vecteurs et divers opérations pour passer des éléments de l'un à l'autre. | |
| static bool | doThreads (int parameter) |
| Composition d'un anneau de N threads servant de relai de signal. | |
| static bool doInteger | ( | int | parameter | ) | [static] |
Calculs sur les entiers.
| parameter | Nombre d'itérations |
00081 { 00082 int result = 1; 00083 00084 for (int i = 1; i < parameter; i++) { 00085 result -= i; 00086 result += i; 00087 result *= i; 00088 result /= i; 00089 } 00090 return result == 1; 00091 }
| static bool doLong | ( | int | parameter | ) | [static] |
Calculs sur les entiers longs.
| parameter | Nombre d'itérations |
00100 { 00101 long result = 1; 00102 00103 for (int i = 1; i < parameter; i++) { 00104 result -= i; 00105 result += i; 00106 result *= i; 00107 result /= i; 00108 } 00109 return result == 1; 00110 }
| static bool doDouble | ( | int | parameter | ) | [static] |
Calculs sur les doubles.
| parameter | Nombre d'itérations |
00119 { 00120 double result = 1; 00121 00122 for (int i = 1; i < parameter; i++) { 00123 result -= i; 00124 result += i; 00125 result *= i; 00126 result /= i; 00127 } 00128 return result == 1; 00129 }
| static bool doIO | ( | int | parameter | ) | [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 |
00139 { 00140 const String PATTERN = "éàôabcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefgh"; 00141 const String FILE_NAME = "../tmp/test_csharp.txt"; 00142 00143 StreamWriter streamWriter = new StreamWriter (FILE_NAME); 00144 00145 for (int i = 0; i < parameter; i++) { 00146 streamWriter.WriteLine (PATTERN); 00147 } 00148 streamWriter.Close (); 00149 00150 StreamReader streamReader = new StreamReader (FILE_NAME); 00151 String line = ""; 00152 for (int i = 0; i < parameter; i++) { 00153 line = streamReader.ReadLine (); 00154 if (!line.Equals (PATTERN)) { 00155 return false; 00156 } 00157 } 00158 return true; 00159 }
| static bool 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. |
00169 { 00170 StringBuilder buffer = new StringBuilder(); 00171 const String PATTERN = "éàôabcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefgh"; 00172 00173 for (int j = 0; j < parameter; j++) { 00174 buffer.Append(PATTERN); 00175 } 00176 00177 return buffer.Length == PATTERN.Length * parameter && 00178 buffer.ToString().Substring (buffer.Length - PATTERN.Length).Equals (PATTERN); 00179 }
| static bool doMatrix | ( | int | parameter | ) | [static] |
Simple multiplication de deux matrices carrées.
| parameter | taille de la matrice |
00188 { 00189 // Create the the matrix 00190 int [,] m1 = new int [parameter, parameter]; 00191 int [,] m2 = new int [parameter, parameter]; 00192 int count = 1; 00193 for (int i = 0; i < parameter; i++) { 00194 for (int j = 0; j < parameter; j++) { 00195 m1 [i, j] = count; 00196 m2 [i, j] = 0; 00197 count++; 00198 } 00199 } 00200 00201 // Create inversion matrix 00202 for (int i = 0; i < parameter; i++) { 00203 m2 [i, parameter - i - 1] = 1; 00204 } 00205 00206 // Multiply them 00207 int [,] mm = new int [parameter, parameter]; 00208 for (int i = 0; i < parameter; i++) { 00209 for (int j = 0; j < parameter; j++) { 00210 int val = 0; 00211 for (int k = 0; k < parameter; k++) { 00212 val += m1 [i, k] * m2 [k, j]; 00213 } 00214 mm [i, j] = val; 00215 } 00216 } 00217 00218 // Check inversion 00219 for (int i = 0; i < parameter; i++) { 00220 for (int j = 0; j < parameter; j++) { 00221 if (mm [i, j] != m1 [i, parameter - j - 1]) { 00222 return false; 00223 } 00224 } 00225 } 00226 return true; 00227 }
| static bool doSort | ( | int | n | ) | [static] |
Tri d'un tableau d'ordre inversé par rapport à l'objectif.
| n | Taille du tableau |
00236 { 00237 int i, j; 00238 00239 int[] ra = new int [n + 1]; 00240 for (i = 0; i <= n; i++) { 00241 ra [i] = n - i; 00242 } 00243 int ir = n; 00244 int l = (n >> 1) + 1; 00245 int rra; 00246 00247 for (;;) { 00248 if (l> 1) { 00249 rra = ra [--l]; 00250 } 00251 else { 00252 rra = ra [ir]; 00253 ra [ir] = ra [1]; 00254 if (--ir == 1) { 00255 ra [1] = rra; 00256 break; 00257 } 00258 } 00259 i = l; 00260 j = l << 1; 00261 while (j <= ir) { 00262 if (j < ir && ra [j] < ra [j + 1]) { 00263 ++j; 00264 } 00265 if (rra < ra [j]) { 00266 ra [i] = ra [j]; 00267 j += i = j; 00268 } 00269 else { 00270 j = ir + 1; 00271 } 00272 } 00273 ra [i] = rra; 00274 } 00275 for (i = 1; i < n; i++) { 00276 if (ra [i]> ra [i + 1]) { 00277 return false; 00278 } 00279 } 00280 return true; 00281 }
| static bool 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 |
00291 { 00292 const int FACTOR = 100; 00293 int ITEMS = parameter * FACTOR; 00294 Hashtable hash1 = new Hashtable (); 00295 Hashtable hash2 = new Hashtable (); 00296 00297 for (int i = 0; i < ITEMS; i++) { 00298 hash1.Add (i, i); 00299 } 00300 00301 IDictionaryEnumerator it = hash1.GetEnumerator (); 00302 while (it.MoveNext ()) { 00303 int key = (int)it.Key; 00304 int key2 = key % FACTOR; 00305 int v1 = (int)it.Value; 00306 object v2 = hash2 [key2]; 00307 if (v2 != null) { 00308 v1 += (int)v2; 00309 hash2 [key2] = v1; 00310 } 00311 else { 00312 hash2.Add (key2, v1); 00313 } 00314 //hash1.Remove(key); 00315 } 00316 return hash2.Count == FACTOR; 00317 }
| static bool doException | ( | int | parameter | ) | [static] |
Génére un nombre important d'exceptions dans une boucle.
| parameter | nombre d'itérations. |
00326 { 00327 int counter = 0; 00328 00329 for (int i = 0; i < parameter; i++) { 00330 if (i % 2 == 0) { 00331 try { 00332 throw new System.Exception (); 00333 } catch (Exception e) { 00334 counter++; 00335 } 00336 } 00337 } 00338 00339 return counter == parameter / 2; 00340 }
| static bool doTrigo | ( | int | parameter | ) | [static] |
Fonctions mathématiques et trigonométriques.
| parameter | itéartions sur le test |
00349 { 00350 double sine = 0.0D; 00351 double cosine = 0.0D; 00352 double tangent = 0.0D; 00353 double logarithm = 0.0D; 00354 double squareRoot = 0.0D; 00355 double cumul = 0; 00356 double full = 2 * Math.PI; 00357 00358 for (int i = 0; i < parameter; i++) { 00359 double angle = 0; 00360 while (angle < full) { 00361 sine = Math.Sin (angle); 00362 cosine = Math.Cos (angle); 00363 tangent = Math.Tan (angle); 00364 cumul += sine + cosine + tangent; 00365 angle++; 00366 } 00367 logarithm = Math.Log (i + 1); 00368 squareRoot = Math.Sqrt (i + 1); 00369 cumul += logarithm + squareRoot; 00370 } 00371 return cumul != 0; 00372 }
| static bool doLoop | ( | int | parameter | ) | [static] |
6 boucles imbriquées.
| parameter | nombre d'itérations à chaque étage |
00381 { 00382 int a, b, c, d, e, f; 00383 double x = 0; 00384 00385 for (a = 0; a <= parameter; a++) { 00386 for (b = 0; b <= parameter; b++) { 00387 for (c = 0; c <= parameter; c++) { 00388 for (d = 0; d <= parameter; d++) { 00389 for (e = 0; e <= parameter; e++) { 00390 for (f = 0; f <= parameter; f++) { 00391 x = a + b + c + d + e + f; 00392 } 00393 } 00394 } 00395 } 00396 } 00397 } 00398 return x == 6 * parameter; 00399 }
| static bool 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. |
00409 { 00410 ArrayList Li1 = new ArrayList (); 00411 00412 for (int i = 0; i < parameter; i++) { 00413 Li1.Insert (Li1.Count, i); 00414 } 00415 00416 ArrayList Li2 = new ArrayList (Li1); 00417 ArrayList Li3 = new ArrayList (); 00418 00419 while (Li2.Count> 0) { 00420 Li3.Insert (Li3.Count, Li2 [0]); 00421 Li2.RemoveAt (0); 00422 } 00423 00424 while (Li3.Count> 0) { 00425 Li2.Insert (Li2.Count, Li3 [Li3.Count - 1]); 00426 Li3.RemoveAt (Li3.Count - 1); 00427 } 00428 00429 ArrayList tmp = new ArrayList (); 00430 while (Li1.Count> 0) { 00431 tmp.Insert (0, Li1 [0]); 00432 Li1.RemoveAt (0); 00433 } 00434 Li1 = tmp; 00435 00436 return((int)(Li1 [0]) == parameter - 1); 00437 }
| static bool 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 |
00449 { 00450 int threadCount = parameter - 1; 00451 int factor = 1000; 00452 int signal = factor * parameter; 00453 Node firstNode = new Node (); 00454 00455 // Make the ring 00456 Node previousNode = firstNode; 00457 00458 for (int iNode = 0; iNode < threadCount; iNode++) { 00459 Node currentNode = new Node (); 00460 if (previousNode != null) { 00461 currentNode.setNextNode (previousNode); 00462 } 00463 else { 00464 firstNode = currentNode; 00465 } 00466 currentNode.start (); 00467 previousNode = currentNode; 00468 } 00469 00470 // Close the ring 00471 firstNode.setNextNode (previousNode); 00472 00473 while (true) { 00474 if (Node.ALIVES.Count == threadCount) { 00475 break; 00476 } 00477 Thread.Sleep (1); 00478 } 00479 00480 firstNode.initialize (signal); 00481 return firstNode.received == factor+1; 00482 }

1.5.5