Créez un nouveau projet nommé tp5
avec la ligne de commande cargo new --lib tp5
.
Vous constaterez que le répertoire src
ne contient pas de fichier main.rs
,
mais un fichier lib.rs
.
Ce projet ne sert pas à créer un fichier exécutable,
mais une bibliothèque réutilisable par d'autres.
Vous constaterez que le fichier lib.rs
contient les lignes suivantes :
#[cfg(test)]
mod tests {
#[test]
fn it_works() {
assert_eq!(2 + 2, 4);
}
}
- La directive
#[cfg(test)]
indique au compilateur que le moduletests
doit être compilé uniquement pour exécuter les tests unitaires. - La directive
#[test]
est utilisée pour indiquer qu'une fonction est un test unitaire. - Un test unitaire est considéré comme un succès s'il ne panique pas.
- La macro
assert_eq!(x, y)
panique si les deux valeurs passées sont différentes. - Une autre macro
assert!(x)
panique si la valeur passée estfalse
.
Ajoutez dans le module tests
la fonction suivante :
#[test]
fn test0() {
assert!(1+1 == 3);
}
Pour lancer les tests, utilisez la commande cargo test
,
et constatez que test0
échoue.
Modifiez le code pour faire en sorte qu'il réussisse, et lancez cargo test
à nouveau.
Votre travail consiste maintenant à définir un type Vecteur
représentant un vecteur dans un espace à deux dimensions.
Pour chacune des méthodes ou fonctionnalités énumérées ci-dessous, vous écrirez des tests unitaires qui vérifient leur bon fonctionnement. Notez qu'une bonne pratique consiste à écrire les tests avant d'implémenter la fonctionnalité.
Implémentez les méthodes suivantes pour le type Vecteur :
fn new(x: f64, y: f64) -> Vecteur
qui crée un nouveau vecteur ;fn mul(self, k: f64) -> Vecteur
qui multiplie un vecteur par un flottant ;fn norm(&self) -> f64
qui retourne la norme (longueur) du vecteur.
Faites ensuite en sorte que ce type implémente les traits suivants
std::debut::Debug
std::clone::Clone
std::marker::Copy
std::cmp::PartialEq
std::ops::Add
std::ops::Sub
Le trait std::ops::Mul
permet d'implémenter la multiplication entre opérateurs de type différent.
Vous pouvez donc remplacer la méthode mul
proposée plus haut par une implémentation de ce trait.