Q3 et 4
This commit is contained in:
3
.vscode/settings.json
vendored
Normal file
3
.vscode/settings.json
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"java.debug.settings.onBuildFailureProceed": true
|
||||||
|
}
|
||||||
@@ -4,7 +4,6 @@ import java.util.ArrayDeque;
|
|||||||
import java.util.Deque;
|
import java.util.Deque;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Queue;
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
public class StringUtils {
|
public class StringUtils {
|
||||||
@@ -27,39 +26,19 @@ public class StringUtils {
|
|||||||
public static boolean isBalanced(String str) {
|
public static boolean isBalanced(String str) {
|
||||||
Deque<Character> balancedQueue = new ArrayDeque<Character>();
|
Deque<Character> balancedQueue = new ArrayDeque<Character>();
|
||||||
|
|
||||||
return reqIsBalanced(str, balancedQueue);
|
for(int i = 0; i<str.length(); i++){
|
||||||
}
|
char c = str.charAt(i);
|
||||||
|
if(OPEN.contains(c)){
|
||||||
|
balancedQueue.push(c);
|
||||||
public static boolean reqIsBalanced(String str,Deque<Character> balancedQueue){
|
}
|
||||||
int nbRemove = 1;
|
else if(CLOSE.contains(c)){
|
||||||
if(str.length()>0){
|
if(balancedQueue.isEmpty() || CONVERT.get(balancedQueue.pollFirst()) != c){ //vérifie et retire en même temps
|
||||||
char c=str.charAt(0);
|
return false;
|
||||||
while(true){
|
|
||||||
if(OPEN.contains(c)){
|
|
||||||
balancedQueue.push(c);
|
|
||||||
|
|
||||||
return reqIsBalanced(str.substring(nbRemove), balancedQueue);
|
|
||||||
}
|
}
|
||||||
else if(CLOSE.contains(c)){
|
|
||||||
if(balancedQueue.isEmpty()){
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
else if(CONVERT.get(balancedQueue.pollFirst()) == c){
|
|
||||||
return reqIsBalanced(str.substring(nbRemove),balancedQueue);
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if(nbRemove<str.length()){
|
|
||||||
c = str.charAt(nbRemove);
|
|
||||||
nbRemove++;
|
|
||||||
}
|
|
||||||
else return balancedQueue.isEmpty();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return balancedQueue.isEmpty();
|
return balancedQueue.isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -8,6 +8,12 @@ import static org.junit.jupiter.api.Assertions.*;
|
|||||||
class StringUtilsTest {
|
class StringUtilsTest {
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testEmpty(){
|
||||||
|
String prog1 = "";
|
||||||
|
assertTrue(isBalanced(prog1));
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testBalancedSimple(){
|
public void testBalancedSimple(){
|
||||||
String prog1 = "()";
|
String prog1 = "()";
|
||||||
@@ -31,16 +37,9 @@ class StringUtilsTest {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testEmpty(){
|
|
||||||
String prog1 = "";
|
|
||||||
assertTrue(isBalanced(prog1));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testOnlyText(){
|
public void testOnlyText(){
|
||||||
String prog1 = "abc";
|
String prog1 = "test";
|
||||||
String prog2 = "abc'éhçfez_énrui";
|
String prog2 = "abc'éhçfez_énrui";
|
||||||
assertTrue(isBalanced(prog1));
|
assertTrue(isBalanced(prog1));
|
||||||
assertTrue(isBalanced(prog2));
|
assertTrue(isBalanced(prog2));
|
||||||
@@ -49,8 +48,8 @@ class StringUtilsTest {
|
|||||||
@Test
|
@Test
|
||||||
public void testBalancedSimpleWithText(){
|
public void testBalancedSimpleWithText(){
|
||||||
String prog1 = "(abc)";
|
String prog1 = "(abc)";
|
||||||
String prog2 = "abc'[éhçfez]_énrui";
|
String prog2 = "a[b]";
|
||||||
String prog3 = "abc'{éhçfez_énrui<}";
|
String prog3 = "aaa{aaaa}aa";
|
||||||
assertTrue(isBalanced(prog1));
|
assertTrue(isBalanced(prog1));
|
||||||
assertTrue(isBalanced(prog2));
|
assertTrue(isBalanced(prog2));
|
||||||
assertTrue(isBalanced(prog3));
|
assertTrue(isBalanced(prog3));
|
||||||
@@ -83,20 +82,19 @@ class StringUtilsTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testBalancedFull(){
|
public void testBalancedFull(){
|
||||||
String prog1 = "for(int i = 0;i<10; i++){System.out.println(\"tab[i]\");}";
|
String prog1 = "white(true){println(\"Tester c\'est pas douter\");}";
|
||||||
assertTrue(isBalanced(prog1));
|
assertTrue(isBalanced(prog1));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testnotBalancedFullForgotClose(){
|
public void testnotBalancedFullForgotClose(){
|
||||||
String prog1 = "for(int i = 0;i<10; i++{System.out.println(\"tab[i]\");}";
|
String prog1 = "white(true){println(\"Tester c\'est pas douter\";}";
|
||||||
assertFalse(isBalanced(prog1));
|
assertFalse(isBalanced(prog1));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testnotBalancedFullFrogotOpen(){
|
public void testnotBalancedFullFrogotOpen(){
|
||||||
String prog1 = "forint i = 0;i<10; i++){System.out.println(\"tab[i]\");}";
|
String prog1 = "white(true){println\"Tester c\'est pas douter\");}";
|
||||||
assertFalse(isBalanced(prog1));
|
assertFalse(isBalanced(prog1));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -28,31 +28,41 @@ Use the project in [tp3-balanced-strings](../code/tp3-balanced-strings) to compl
|
|||||||
|
|
||||||
1.
|
1.
|
||||||
Test simple true:
|
Test simple true:
|
||||||
"{}","[]","()","(a)","a[b]","" et "test"
|
"()", "{}", "[]", "(abc)", "a[b]", "aaa{aaaa}aa", "" et "test"
|
||||||
|
|
||||||
des test simple false :
|
des test simple false :
|
||||||
"{]","(}","[)","a{]","(b}"
|
"(]", "{)", "[}", ")(", "a{]", "a()b[c]{)}"
|
||||||
|
|
||||||
des Test avec des parenthèsé qui se suivent :
|
des Test avec des parenthèsé qui se suivent :
|
||||||
"{}()a[a]"
|
"a()b[c]{}"
|
||||||
|
|
||||||
La même chose avec des erreur :
|
La même chose avec des erreur :
|
||||||
"{}()a[a}"
|
"a()b[c]{)}"
|
||||||
|
|
||||||
des Test avec des parenthèse imbriqué :
|
des Test avec des parenthèse imbriqué :
|
||||||
"white(true){println("Tester c'est pas douter")}
|
"white(true){println("Tester c'est pas douter");}"
|
||||||
|
|
||||||
des Test avec des oublies, d'ouverture et fermeture:
|
des Test avec des oublies, d'ouverture et fermeture:
|
||||||
"whitetrue){println("Tester c'est pas douter")}",
|
"white(true){println("Tester c'est pas douter";}",
|
||||||
"white(true{println("Tester c'est pas douter")}"
|
"white(true){println"Tester c'est pas douter");}"
|
||||||
|
|
||||||
|
|
||||||
2.
|
2.
|
||||||
avec ses tests la couverture est à 100%
|
avec ses tests la couverture est à 100%
|
||||||
|
|
||||||
3.
|
3.
|
||||||
toutes les conditions n'ont qu'un seul opérateur boolean
|
if(balancedQueue.isEmpty() || CONVERT.get(balancedQueue.pollFirst()) != c)
|
||||||
|
if(A||B)
|
||||||
|
|
||||||
|
B est exécuté que si A est vrai, sinon B lèverait une exception
|
||||||
|
|
||||||
|
on a donc que 3 cas possibles :
|
||||||
|
A B
|
||||||
|
1 1 1
|
||||||
|
1 0 0
|
||||||
|
0 err 0
|
||||||
|
|
||||||
|
|
||||||
4.
|
4.
|
||||||
|
```mvn test-compile org.pitest:pitest-maven:mutationCoverage```
|
||||||
un mutant qui remplacé un return par un return true, il s'agit du cas ou le programme avec une erreur de parenthésage fini par des caractère, ex : "(a" on peut donc le rajouter dans les "test simple"
|
Tout les mutants on été tué.
|
||||||
@@ -53,3 +53,30 @@ Use the project in [tp3-date](../code/tp3-date) to complete this exercise.
|
|||||||
|
|
||||||
## Answer
|
## Answer
|
||||||
|
|
||||||
|
1.
|
||||||
|
isLeapYear : une année bissextile est un multiple de 4, on a juste à tester un multiple de 4 et un non multiple de 4
|
||||||
|
|
||||||
|
isValidDate : on a plusieurs choses à tester :
|
||||||
|
mois valide entre 1 et 12 : on teste donc le mois 0, le mois 10, et le mois 13
|
||||||
|
jour valide entre 1 et 28,29,30 ou 31 : on doit donc avoir plusieurs catégories de test :
|
||||||
|
-le jour 0, le jour 32, le jour 10
|
||||||
|
-bissextile
|
||||||
|
-non bissextile :
|
||||||
|
-mois en 30
|
||||||
|
-mois en 31
|
||||||
|
|
||||||
|
constructeur Date : il doit vérifier qu'une date non valide génère une Exception, et une valide n'en génère pas
|
||||||
|
|
||||||
|
nextDate : dans le même principe que isValidDate, on doit vérifier dans les mêmes cas
|
||||||
|
|
||||||
|
previousDate : pareil que nextDate
|
||||||
|
|
||||||
|
compareTo : On teste une différence pour un jour différent, un mois différent et une année différente.
|
||||||
|
|
||||||
|
2.
|
||||||
|
Avec la coverage, on a pu détecter une vérification redondante et une condition inutile qui généraient du code mort, et une opération boolean inutile dans une condition
|
||||||
|
3.
|
||||||
|
La coverage précédent nous apermis de detecter un opérateur inutile. Les autre condition n'on qu'un seul opérateure.
|
||||||
|
|
||||||
|
4.
|
||||||
|
En lançant PIT, tous les mutants générés ont été tués.
|
||||||
Reference in New Issue
Block a user