From fc0d4005f9e108545e9ebc6c11062779b3312811 Mon Sep 17 00:00:00 2001 From: lpaucot_uclouvain <laurent.paucot@student.uclouvain.be> Date: Wed, 18 Mar 2020 07:41:53 +0100 Subject: [PATCH] test --- Makefile | 14 ++-- projet_3.c | 188 ----------------------------------------------------- projet_3.h | 12 ---- run.c | 72 ++++++++++++++++++++ run.h | 9 +++ test.c | 58 +++++++++-------- 6 files changed, 120 insertions(+), 233 deletions(-) delete mode 100644 projet_3.c delete mode 100644 projet_3.h create mode 100644 run.c create mode 100644 run.h diff --git a/Makefile b/Makefile index a4ce41a..407851d 100644 --- a/Makefile +++ b/Makefile @@ -1,15 +1,15 @@ -all : projet_3 +all : run -projet_3 : projet_3.o test.o - gcc -o projet_3 projet_3.o test.o +run : run.o test.o + gcc -o run run.o test.o -projet_3.o : projet_3.c - gcc -o projet_3.o -c projet_3.c -W -Wall +run.o : run.c + gcc -o run.o -c run.c -W -Wall -test.o : test.c projet_3.h - gcc -o test.o -c test.c -W -Wall +test.o : test.c run.h + gcc -o test.o -c test.c -I${HOME}/local/include -W -Wall clean : diff --git a/projet_3.c b/projet_3.c deleted file mode 100644 index b517caf..0000000 --- a/projet_3.c +++ /dev/null @@ -1,188 +0,0 @@ -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <io.h> -#include <sys/stat.h> -#include <unistd.h> - -int is_div(int number, int i) { // Vérifie si i est un diviseur de number. - return (number % i == 0) ; // revoi 0 si le nombre n'est pas divisible par i et 1 si il est divisible -} - -int is_prime(int number) { // Vérifie si number est un nombre premier. Return 1 si il est premier, 0 sinon - for (int i = 2 ; i < number ; i++) { //regarde les differents nombres pouvant etre diviser number - if (is_div(number,i) == 1) { // si i peut diviser number - return 0 ; //renvoi 0 => FAUX - } - } - return 1 ; //sinon => VRAI -} - -// travail en likendList -typedef struct node { // creation d'un node - struct node *next; // prochain - int *nombre_premier; // nombre_premier -}node_t; - -typedef struct list { - int size; // taille de mon noeud - node_t *head ; // tete de mon noeud -} list_t; - -list_t *init_node(int value, struct list *list) { // initialsier ma liste avec un premier noued - - struct node *nouveau = malloc(sizeof(*nouveau)) ; // allouer de la memoire pour nouveau - if (nouveau == NULL) { // si malloc ne focntionne pas - return NULL ; - } - nouveau -> nombre_premier = (int *) value; // donne la valeur au noued - list -> head = nouveau ; // donne une valeur a head - list -> size = list -> size + 1 ; - nouveau -> next = NULL ; // suivant est NULL - return list ; -} - -void add_node(list_t *list, int value) { // si ne fonctionne pas 1 sinon 0 - struct node *nouveau = malloc(sizeof(*nouveau)) ; // allouer de la memoire pour nouveau - if (nouveau == NULL) { // si malloc rate - return ; - } - if (list == NULL) { - return; - } - nouveau -> nombre_premier = (int *) value ; // donne une valuer a nouveau - nouveau -> next = list -> head ; // ajoute son pointeur - list -> head = nouveau ; - list -> size = list -> size + 1 ; // augmente la taille de la liste -} - - -list_t * prime_divs(int number) { - // creation d'une stack pour emagasiner les différents nombre premier - int premier = 0 ; //pour que se soit le premier de La liste - list_t *list = NULL ; - for (int i = 2 ; i < number ; i++) { - if (is_prime(i) == 1 && is_div(number , i) == 1) { // si i est premier et divise number - if (premier == 0) { // si c'est le premier nombre initialise ma liste - list = init_node(i,list) ; // j'initialise ma liste - premier = 1 ; // ne reviens plus ici - } - else { - add_node(list,i) ; // je le mets dans ma liste - } - } - } - return list ; -} - -void *afficherListe(list_t *liste) { // afficher la liste - - if (liste == NULL) { - exit(EXIT_FAILURE); - } - - node_t *noued = liste -> head; - - while (noued != NULL) - { - printf("%d ", noued -> nombre_premier); - noued = noued -> next; - } - printf("NULL\n"); -} - -void ecrire_dans_fichier(char *input, char *output) { - int fichier_entree = open(input,O_RDONLY) ; // ouverture de fichier en mode lecture - // O_RDONLY , O_WRONLY ou O_RDWR . - // respectivement l'ouverture du fichier en lecture seule, en écriture seule ou en lecture / écriture. - struct stat memoire ; // création de l'espace de la mémoire - if (fstat(fichier_entree,&memoire)) { - close(fichier_entree) ; - return; - } - /*fstat () obtient des informations d'état sur l'objet spécifié par le descripteur de descripteur ouvert et stocke les informations - * dans la zone de mémoire indiquée par l' argument tampon - * (Entrée) Le descripteur pour lequel les informations doivent être récupérées. - * (Sortie) Un pointeur vers un tampon de type struct stat dans lequel les informations sont retournées. - * Valeur de retour => 0 fstat () a réussi. Les informations sont renvoyées dans la mémoire tampon . - * => -1 fstat () n'a pas réussi. La variable globale errno est définie pour indiquer l'erreur. - */ - int fichier_sortie = open(output,O_WRONLY,|O_TRUNC|O_CREAT) ; // ouverture du fichier en mode ecriture - if (fichier_entree == -1 || fichier_sortie == -1) { // si les fichier ne s'ouvrent pas correctement - return; - } - int check = ftruncate(fichier_sortie, memoire.st_size) ; - if (check == -1) { - close(fichier_entree) ; - close(fichier_sortie) ; - return; - } - - char *line = malloc(sizeof(int)) ; // j'alloue de la memoire pour line - while (fgets (line, sizeof(int), (FILE *) fichier_entree) != NULL) { // lire les ligne du fichier input - // https://openclassrooms.com/forum/sujet/lire-un-fichier-ligne-a-ligne-48056 - int nombre = strtol(line,NULL,0) ; - // Cette fonction, signifiant string to long, permet de transformer une chaîne de caractères, contenant - // la représentation textuelle d'un entier, en un entier type long. - void* mapping = mmap(NULL, sizeof(int),PROT_WRITE,MAP_SHARED,fichier_sortie,0) ; - /*Établir ne projection en mémoire des fichiers ou des périphériques ( - en qq sorte le malloc des fichier - argument : - 1er => L'adresse de départ de la nouvelle projection - 2eme => longueur - 3eme => PROT_WRITE On peut écrire dans la zone mémoire. - 4eme => MAP_SHARED Partager cette projection. - 5eme => fihcier - 6eme => ? - mmap() renvoie un pointeur sur la zone de mémoire, s'il réussit. En cas d'échec il retourne la valeur MAP_FAILED (c'est-à -dire (void *) -1) - http://manpagesfr.free.fr/man/man2/mmap.2.html - */ - memcpy(mapping,line, sizeof(int)) ; - /*void * memcpy (void * dest, const void * src, size_t n) copie n caractères de la zone mémoire src vers la zone mémoire dest . - argument : - dest - Il s'agit du pointeur vers le tableau de destination où le contenu doit être copié, transtypé en un pointeur de type void *. - src - Il s'agit d'un pointeur vers la source des données à copier, transtypées en un pointeur de type void *. - n - Il s'agit du nombre d'octets à copier. - Cette fonction renvoie un pointeur vers la destination - https://www.tutorialspoint.com/c_standard_library/c_function_memcpy.htm - */ - fputc((int) mapping, (FILE *) fichier_sortie) ; // Ecriture dans le fichier - list_t *liste = prime_divs(nombre) ; - if (liste == NULL) { - continue ; - } - else { - node_t *noued = liste -> head; - while (noued != NULL) - { - char *nombre_devient_char = NULL; - sprintf(nombre_devient_char, "%d", noued -> nombre_premier) ; - fputc((int) nombre_devient_char, (FILE *) fichier_sortie) ; - noued = noued -> next; - } - printf("\n"); - } - munmap(mapping, sizeof(int)) ; - } -} -/* int main() { - // test pour is_div(int number, int i) - int number = 10 ; - int number1 = 11 ; - int i = 2 ; - printf("%d\n",is_div(number,i)) ; // 1 - printf("%d\n",is_div(number1,i)) ; // 0 - // test pour is_prime(int number) - int number2 = 1498498411 ; - int number3 = 5 ; - int number4 = 14545144 ; - printf("%d\n",is_prime(number2)) ; // 0 - printf("%d\n",is_prime(number3)) ; // 1 - printf("%d\n",is_prime(number4)) ; // 0 - //prime divis - int numbre5 = 14 ; - list_t *liste = prime_divs(numbre5) ; - // je ne vois pas pq ca ne fonctionne pas - printf("%d\n",afficherListe(liste)) ; - return 0; -} */ \ No newline at end of file diff --git a/projet_3.h b/projet_3.h deleted file mode 100644 index 1ee6af6..0000000 --- a/projet_3.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef PROJET -#define PROJET - -int is_div(int number, int i); -int is_prime(int number); -list_t *init_node(int value, struct list *list); -void add_node(list_t *list, int value); -list_t * prime_divs(int number); -void *afficherListe(list_t *liste); -void ecrire_dans_fichier(char *input, char *output); - -#endif \ No newline at end of file diff --git a/run.c b/run.c new file mode 100644 index 0000000..d6df98e --- /dev/null +++ b/run.c @@ -0,0 +1,72 @@ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +int is_div(int number, int i) { // Vérifie si i est un diviseur de number. + return (number % i == 0) ; // revoi 0 si le nombre n'est pas divisible par i et 1 si il est divisible +} + +int is_prime(int number) { // Vérifie si number est un nombre premier. Return 1 si il est premier, 0 sinon + for (int i = 2 ; i < number ; i++) { //regarde les differents nombres pouvant etre diviser number + if (is_div(number,i) != 0) { // si i peut diviser number + return 0 ; //renvoi 0 => FAUX + } + } + return 1 ; //sinon => VRAI +} + +int* prime_divs(int number){ + + int *ptr; + ptr = malloc(sizeof(int)*number); + ptr[0] = 0; + ptr[1] = 0; + + int i; + + for (i = 2; i < number; i++){ + if (is_prime(i) == 1 && is_div(number, i)){ + ptr[i] = i; + } + else + { + ptr[i] = 0; + } + + } + ptr[i] = -1; + return ptr; + +} + +void afficherListe(int* tab) { // afficher la liste + + for (int i = 0; tab[i] != -1; i++) + { + if (tab[i] != 0){ + printf("%d\n",tab[i]); + + } + } + + +} + +/* int main() { + // test pour is_div(int number, int i) + int number = 10 ; + int number1 = 11 ; + int i = 3 ; + printf("%d\n",is_div(number,i)) ; // 1 + printf("%d\n",is_div(number1,i)) ; // 0 + // test pour is_prime(int number) + int number2 = 1498498411 ; + int number3 = 5 ; + int number4 = 14545144 ; + printf("%d\n",is_prime(number2)) ; // 0 + printf("%d\n",is_prime(number3)) ; // 1 + printf("%d\n",is_prime(number4)) ; // 0 + //prime divis + afficherListe(prime_divs(number)); + return 0; +} */ \ No newline at end of file diff --git a/run.h b/run.h new file mode 100644 index 0000000..d48746b --- /dev/null +++ b/run.h @@ -0,0 +1,9 @@ +#ifndef RUN +#define RUN + +int is_div(int number, int i); +int is_prime(int number); +int* prime_divs(int number); +void afficherListe(int* tab); + +#endif \ No newline at end of file diff --git a/test.c b/test.c index 7e0e5f8..1411080 100644 --- a/test.c +++ b/test.c @@ -1,43 +1,49 @@ #include <stdlib.h> #include <stdio.h> -#include "projet_3.h" +#include "run.h" +#include <CUnit/CUnit.h> +#include <CUnit/TestRun.h> +#include <CUnit/CUError.h> void test_is_div(void){ CU_ASSERT_TRUE(is_div(14,7)); } +int main(){ + if (CUE_SUCCESS != CU_initialize_registry()) + { + return CU_get_error(); + } -if (CUE_SUCCESS != CU_initialize_registry()) -{ - return CU_get_error(); -} + int setup(void){ + return 0; + } -int setup(void){ - return 0; -} + int teardown(void) + { + return 0; + } -int teardown(void) -{ - return 0; -} -CU_pSuite pSuite = NULL; -pSuite = CU_add_suite("ma_suite",setup,teardown); + CU_pSuite pSuite = NULL; -if (NULL == pSuite) -{ - CU_cleanup_registry(); - return CU_get_error(); -} + pSuite = CU_add_suite("ma_suite",setup,teardown); -if (NULL == CU_add_test(pSuite,"test_is_div",test_is_div)) -{ - CU_cleanup_registry(); - return CU_get_error(); -} + if (NULL == pSuite) + { + CU_cleanup_registry(); + return CU_get_error(); + } + + if (NULL == CU_add_test(pSuite,"test_is_div",test_is_div)) + { + CU_cleanup_registry(); + return CU_get_error(); + } -CU_basic_run_tests(); -CU_basic_show_failures(CU_get_failure_list()); \ No newline at end of file + CU_basic_run_tests(); + CU_basic_show_failures(CU_get_failure_list()); +} \ No newline at end of file -- GitLab