#ifndef TEST_DM1 #define TEST_DM1 #include #include double fraction (int a, int b); bool bissextile (int a); double evalue (double* arr, int size, double x); int ecartmin (int* arr, int size); int extraire (char* str); double sommemajo (double* arr, int size); int nbdiff (char* str); bool palindromeint(int a); bool palindrome2 (char* str); int sommeentiers(char* str); #define FLOAT_PRECISION 0.001 inline static bool f_cmp(double f1, double f2){ return (f1-f2 < FLOAT_PRECISION && f1-f2 > -FLOAT_PRECISION); } #define COLOR_RED "\033[0;31m" #define COLOR_BLUE "\033[0;36m" #define COLOR_YELLOW "\033[0;33m" #define COLOR_RESET "\033[0m" #define MSG_TEST(EX) printf("Lancement des tests sur l'exercice %d ...\n", EX); #define MSG_RES(a, b) \ if (a!=b) printf(COLOR_YELLOW);\ else printf(COLOR_BLUE);\ printf("Résultats: %d/%d" COLOR_RESET, a, b); // Pour les tests: si A n'est pas égal à B alors affiche A (format: %d le plus souvent) et la valeur supposée #define TEST(A, B, format) \ j+=1;\ if (A!=B) \ printf(COLOR_RED "\tEchec du test: "#A" à retourné "#format" au lieu de "#B".\n" COLOR_RESET, A);\ else i+=1; // Pour les tests sur des flotants #define TEST_F(A, B) \ j+=1;\ if (!f_cmp((A), (B))) {\ printf(COLOR_RED "\tEchec du test: "#A" à retourné %f au lieu de "#B" .\n" COLOR_RESET, A);\ } else i+=1; #define NEW_TEST(F,N, CORPS)\ static void F(){\ MSG_TEST((int) N);\ int i=0; int j=0;\ {CORPS} \ MSG_RES(i, j);\ printf("\n");\ } NEW_TEST(TEST_EX1, 1, TEST_F(fraction(2, 1), 2.0); TEST_F(fraction(5, 2), 2.5); TEST_F(fraction(5, -2), -2.5); TEST_F(fraction(-5, -2), 2.5); TEST_F(fraction(75, 25), 3.0); TEST_F(fraction(-1, 3), -0.33333); ) NEW_TEST( TEST_EX2, 2, TEST(bissextile(2200), false, %d); TEST(bissextile(2001), false, %d); TEST(bissextile(2016), true, %d); TEST(bissextile(2052), true, %d); ) NEW_TEST( TEST_EX3, 3, TEST_F(evalue((double[]){3.5, 6.2, -9, 1}, 4, 1), 1.7); TEST_F(evalue((double[]){3.5, 6.2, -9, 1}, 4, -5), -377.5); TEST_F(evalue((double[]){3.5, 6.2, -9, 1}, 4, 3), -31.9); TEST_F(evalue((double[]){-1}, 1, 30), -1.0); TEST_F(evalue((double[]){0, 0, 1}, 3, 4), 16); TEST_F(evalue((double[]){0, 0, 1}, 3, -4), 16); ) NEW_TEST( TEST_EX4, 4, TEST(ecartmin((int[]){-5, -7, 7}, 3), 2, %d); TEST(ecartmin((int[]){0, -7, 5}, 3), 7, %d); TEST(ecartmin((int[]){-2, 7, 20}, 3), 9, %d); TEST(ecartmin((int[]){0, 1}, 2), 1, %d); TEST(ecartmin((int[]){-1, 1}, 2), 2, %d); ) NEW_TEST( TEST_EX5, 5, TEST(extraire("1"), 1, %d); TEST(extraire("-1"), -1, %d); TEST(extraire("jaoefjsaeijfoi-4t5f ej"), -4, %d); TEST(extraire("f ejosijf - feauhf --5"), -5, %d); TEST(extraire("f e- 5"), 5, %d); TEST(extraire("120000"), 120000, %d); TEST(extraire("-09"), -9,%d); ) NEW_TEST( TEST_EX6, 6, TEST_F(sommemajo((double[]){-5, 2, -1, 5}, 4), 0); TEST_F(sommemajo((double[]){}, 0), 0); TEST_F(sommemajo((double[]){-5, 2, -1}, 3), -6); TEST_F(sommemajo((double[]){-5, 0, 4}, 3), 0); TEST_F(sommemajo((double[]){5, 0, 4}, 3), 9); ) NEW_TEST( TEST_EX7, 7, TEST(nbdiff(""), 0, %d); TEST(nbdiff("Aa"), 2, %d); TEST(nbdiff("ab!de\tghijklmnopqrstuvwxyz123"), 29, %d); TEST(nbdiff("aaaaaaabeabbaa"), 3, %d); TEST(nbdiff("123 abcABC"), 10, %d); ) NEW_TEST( TEST_EX8, 8, TEST(palindromeint(1), true, %d); TEST(palindromeint(12), false, %d); TEST(palindromeint(111), true, %d); TEST(palindromeint(0), true, %d); TEST(palindromeint(101), true, %d); TEST(palindromeint(110), false, %d); TEST(palindromeint(53735), true, %d); TEST(palindromeint(120944212), false, %d); ) NEW_TEST( TEST_EX9, 9, TEST(palindrome2(""), true, %d); TEST(palindrome2("a"), true, %d); TEST(palindrome2("1"), true, %d); TEST(palindrome2("aba"), true, %d); TEST(palindrome2("aaa"), true, %d); TEST(palindrome2("aa"), true, %d); TEST(palindrome2("a1"), false, %d); TEST(palindrome2("a|aj"), false, %d); TEST(palindrome2("a|a"), true, %d); TEST(palindrome2("aajj"), false, %d); TEST(palindrome2("agoijseioj"), false, %d); ) NEW_TEST(TEST_EX10, 10, TEST(sommeentiers("5-8"), -3,%d); TEST(sommeentiers("5-8+4"), 1,%d); TEST(sommeentiers("-5 faoeih 6 87.2 -280"), -190,%d); TEST(sommeentiers("-09 + ++-+ 0.3"), -6,%d); ) void RUN_TESTS(){ TEST_EX1(); TEST_EX2(); TEST_EX3(); TEST_EX4(); TEST_EX5(); TEST_EX6(); TEST_EX7(); TEST_EX8(); TEST_EX9(); TEST_EX10(); return; } #endif // TEST_DM1