3 juin 2022
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.zipPolynome
.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
.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); }
unitTests/unitTests.cpp
en renommant des tests si le compilateur repère des conflits de nom avec vos propres tests. 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, définissez un flag de compilation dans Polynome.h
:
#define VECTOR_IMPLEMENTATION 0
class Polynome {
private:
#if (VECTOR_IMPLEMENTATION == 1)
std::vectordouble> coef;
#else // (VECTOR_IMPLEMENTATION == 1)
std::map<int, double> coef;
#endif // (VECTOR_IMPLEMENTATION == 1)
public:
Puis, dans Polynome.cpp
, encadrez toutes vos méthodes de Polynome à base de vector
(respectivement map
) entre : #if (VECTOR_IMPLEMENTATION == 1)
et #else // (VECTOR_IMPLEMENTATION == 1)
Enfin, implémentez toutes vos méthodes à base de map
(respectivement vector
) entre : #else // (VECTOR_IMPLEMENTATION == 1)
et #endif // (VECTOR_IMPLEMENTATION == 1)
Corrigé (à exploiter selon la procédure cmake
de ce document).