3 mai 2024
Cet exercice a pour but de :
Pour ce faire, vous allez coder une classe permettant de gérer les polynômes en vous inspirant de Fraction1.cpp
, Fraction2.cpp
et Fraction3.cpp
.
cmake
de ce document au canevas SampleGoogleTest.zip.Polynome
.Polynome
aura deux constructeurs :
Polynome p1{ {1.2, 3, 4, 5} };
crée le polynôme 1.2 + 3X + 4X^2 + 5X^4
Polynome p2{ {{0,1.2}, {1,3}, {2000,4}} };
crée le polynôme 1.2 + 3X + 4X^2000
unitTests/unitTests.cpp
, écrivez le test TEST(Creation, AvecCoefsNonNuls)
(cf. code ci-dessous) et modifiez src/Polynome.h
et src/Polynome.cpp
pour que ce test soit OK. NB : Ce test suppose que vous avez défini, dans src/Polynome.h
, la méthode : bool operator==(const Polynome&) const = default;
TEST(Creation, AvecCoefsNonNuls) {1.2, 3, 4, 5} };
Polynome p1{ {0,1.2}, {1,3}, {2,4}, {3,5}} };
Polynome p2{ {{
EXPECT_EQ(p1, p2); }
<<
pour votre classe polynôme et, pour vérifier que votre affichage est correct, affichez un polynôme grâce à du code écrit dans src/myMain.cpp
.TEST(Creation, AvecCoefsNuls)
pour voir comment votre code résiste à des coefficients nuls.Cliquez pour obtenir de l’aide
TEST(Creation, AvecCoefsNuls) {0,1}, {1,0}, {2,3}, {3,4}, {2000,0}} };
Polynome p1{ {{0,1}, {2,3}, {3,4}, } };
Polynome p2{ {{
EXPECT_EQ(p1, p2); }
Cliquez pour des exemples de tests de somme
Cliquez pour plus de détails sur ces exemples de somme
TEST(Somme, SommeSansRienDeParticulier) {1, 0, 2, 1} };
Polynome p1{ {1, 2, 0, 1} };
Polynome p2{ {2, 2, 2, 2} };
Polynome somme_ref{ {
EXPECT_EQ(p1 + p2, somme_ref);
EXPECT_EQ(p2 + p1, somme_ref);
}
TEST(Somme, SommeOuCoefsSAnnulent) {1, 0, 2, 1} };
Polynome p1{ {1, 2, 0, -1} };
Polynome p2{ {2, 2, 2} };
Polynome somme_ref{ {
EXPECT_EQ(p1 + p2, somme_ref);
EXPECT_EQ(p2 + p1, somme_ref);
}
TEST(Somme, SommeAvecPolynomeNul) {1, 0, 2, 1} };
Polynome p{ {
Polynome p_nul;
EXPECT_EQ(p + p_nul, p);
EXPECT_EQ(p_nul + p, p); }
Polynome operator+(...)
) :
TEST(Somme, SommeAvecConstante) {0, 0, 2, 1} };
Polynome p{ {double d{ 1.2 };
1.2, 0, 2, 1} };
Polynome somme_ref{ {
EXPECT_EQ(p + d, somme_ref);
EXPECT_EQ(d + p, somme_ref); }
Cliquez pour obtenir de l’aide
Polynome(double const d);
(sans mentionner le mot-clé explicit
devant !).unitTests/unitTests.cpp
. Vérifiez que tous les tests sont OK et améliorez votre code si ce n’est pas le cas.Si vous avez réalisé une implémentation à base de vector
(respectivement map
), faites l’implémentation à base de map
(respectivement vecteur
). Pour ce faire :
Renommez Polynome.cpp
en PolynomeVersionVector.cpp
(respectivement PolynomeVersionMap.cpp
)
Modifiez votre CMakeLists.txt
pour qu’il ne contienne désormais que ces lignes :
add_library(src myMain.cpp myMain.h
Polynome.h PolynomeVersionVector.cpp)target_include_directories(src PUBLIC ./)
Vérifiez que votre programme compile toujours et que vos tests sont toujours corrects.
Passons maintenant à la nouvelle implémentation :
Polynome.h
, remplacez std::vector<double> coef;
par std::map<unsigned int, double> coef;
(ou vice-versa).PolynomeVersionVector.cpp
en PolynomeVersionMap.cpp
ou vice-versa.CMakeLists.txt
, remplacez PolynomeVersionVector
par PolynomeVersionVector
(ou vice-versa)..cpp
jusqu’à sa compilation et les tests soient OK.NB :
Corrigé (à exploiter selon la procédure cmake
de ce document).