multiplication

This commit is contained in:
WanderingPenwing 2024-12-07 21:56:23 +01:00
parent 5d100ec8f7
commit 61288747ae
2 changed files with 33 additions and 14 deletions

View file

@ -127,17 +127,24 @@ impl Sophie {
pub fn operation(&self, arguments: &str) -> Result<usize, ErreurSophie> { pub fn operation(&self, arguments: &str) -> Result<usize, ErreurSophie> {
let somme_texte: Vec<&str> = arguments.split("plus").collect(); let somme_texte: Vec<&str> = arguments.split("plus").collect();
let mut somme : usize = 0; let mut somme : usize = 0;
for element in somme_texte { for somme_element in somme_texte {
let element_propre: &str = element.trim(); let somme_element_propre: &str = somme_element.trim();
let Some(first_char) = element_propre.chars().next() else { let produit_texte: Vec<&str> = somme_element_propre.split("fois").collect();
return Err(ErreurSophie::MauvaisArgument("il y a un argument vide pour l'operation".to_string()))
}; let mut produit : usize = 1;
let nombre = if first_char.is_uppercase() { for produit_element in produit_texte {
self.variables[element_propre] let produit_element_propre: &str = produit_element.trim();
} else { let Some(first_char) = produit_element_propre.chars().next() else {
nombres::texte_comme_nombre(element_propre)? return Err(ErreurSophie::MauvaisArgument("il y a un argument vide pour l'operation".to_string()))
}; };
somme += nombre; let nombre = if first_char.is_uppercase() {
self.variables[produit_element_propre]
} else {
nombres::texte_comme_nombre(produit_element_propre)?
};
produit *= nombre;
}
somme += produit;
} }
Ok(somme) Ok(somme)
} }
@ -239,4 +246,18 @@ mod tests {
} }
} }
} }
#[test]
fn teste_multiplication() {
let sophie = Sophie::new();
let resultat = sophie.operation("trois fois deux plus quatre fois sept");
match resultat {
Ok(nombre) => {
assert_eq!(nombre, 34, "Echec de la multiplication de 3*2+4*7, got {}", nombre);
}
Err(raison) => {
panic!("Execution échouée pour multiplication, avec l'erreur : {}", raison);
}
}
}
} }

View file

@ -1,3 +1 @@
Modifie Variable avec trois plus douze. Affiche deux fois ouvre la parenthèse quatre plus seize ferme la parenthèse.
Affiche "Resultat : ", Variable.
Affiche "Test : ", Variable plus soixante-dix.