Skip to content
Extraits de code Groupes Projets
Valider 5d5688ad rédigé par Laurent Paucot's avatar Laurent Paucot
Parcourir les fichiers

unsigned long long

parent c63ab0ee
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
Pipeline #5300 réussi
Fichier déplacé
Fichier déplacé
981518 113 101 43 2
981518
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
#define N 4 #define N 4
//travailler avec des linkendList //travailler avec des linkendList
typedef struct node{ typedef struct node{
long value; unsigned long long value;
struct node *next; struct node *next;
}node_t; }node_t;
...@@ -101,18 +101,18 @@ queue_t *get_from_buffer_2(struct buffer_cw *buf){ // trouver un element ...@@ -101,18 +101,18 @@ queue_t *get_from_buffer_2(struct buffer_cw *buf){ // trouver un element
} }
int is_div(long number, long i) { // Vérifie si i est un diviseur de number. int is_div(unsigned long long number, unsigned long long 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 return (number % i == 0) ; // revoi 0 si le nombre n'est pas divisible par i et 1 si il est divisible
} }
int is_prime(long number) { // Vérifie si number est un nombre premier. Return 1 si il est premier, 0 sinon int is_prime(unsigned long long number) { // Vérifie si number est un nombre premier. Return 1 si il est premier, 0 sinon
if (number != 2) { if (number != 2) {
if (number % 2 == 0) { if (number % 2 == 0) {
return 0 ; return 0 ;
} }
} }
for (long i = 3 ; i <= (number/2); i = i + 2) { //regarde les differents nombres pouvant etre diviser number for (unsigned long long i = 3 ; i <= (number/2); i = i + 2) { //regarde les differents nombres pouvant etre diviser number
if (is_div(number,i) != 0) { // si i peut diviser number if (is_div(number,i) != 0) { // si i peut diviser number
return 0 ; //renvoi 0 => FAUX return 0 ; //renvoi 0 => FAUX
} }
...@@ -121,7 +121,7 @@ int is_prime(long number) { // Vérifie si number est un nombre premier. Return ...@@ -121,7 +121,7 @@ int is_prime(long number) { // Vérifie si number est un nombre premier. Return
} }
void enqueue(queue_t* q, long val){ void enqueue(queue_t* q, unsigned long long val){
struct node *ptr; struct node *ptr;
...@@ -148,7 +148,7 @@ void enqueue(queue_t* q, long val){ ...@@ -148,7 +148,7 @@ void enqueue(queue_t* q, long val){
} }
queue_t* prime_divs(long number){ queue_t* prime_divs(unsigned long long number){
struct queue new_queue; struct queue new_queue;
new_queue.size = 0; new_queue.size = 0;
...@@ -163,7 +163,7 @@ queue_t* prime_divs(long number){ ...@@ -163,7 +163,7 @@ queue_t* prime_divs(long number){
return NULL;} return NULL;}
*ptr = new_queue; *ptr = new_queue;
for (long i = 2; i <= number/2; i++){ for (unsigned long long i = 2; i <= number/2; i++){
if (is_div(number, i) && is_prime(i) == 1){ if (is_div(number, i) && is_prime(i) == 1){
enqueue(ptr,i); enqueue(ptr,i);
} }
...@@ -206,9 +206,12 @@ void *writing(void *param){ ...@@ -206,9 +206,12 @@ void *writing(void *param){
*current = *pr_divs->tail; *current = *pr_divs->tail;
current = current->next; current = current->next;
for (int i = 0; i < pr_divs->size; i++) fprintf(file2,"%lld",current->value);
current = current->next;
for (int i = 1; i < pr_divs->size; i++)
{ {
fprintf(file2," %ld",current->value); fprintf(file2," %lld",current->value);
current = current->next; current = current->next;
} }
fputc('\n',file2); fputc('\n',file2);
...@@ -256,7 +259,7 @@ void *calculating(void *param){ ...@@ -256,7 +259,7 @@ void *calculating(void *param){
pr_divs = malloc(sizeof(queue_t)); pr_divs = malloc(sizeof(queue_t));
if (pr_divs == NULL){return NULL;} if (pr_divs == NULL){return NULL;}
pr_divs = prime_divs(strtol(chaine,NULL,0)); pr_divs = prime_divs(strtoll(chaine,NULL,0));
sem_wait(&empty2); sem_wait(&empty2);
pthread_mutex_lock(&mutex2); pthread_mutex_lock(&mutex2);
...@@ -274,18 +277,18 @@ void *reading (void *param){ ...@@ -274,18 +277,18 @@ void *reading (void *param){
struct buffer_rc *param1= (struct buffer_rc *) param; struct buffer_rc *param1= (struct buffer_rc *) param;
char chaine[20]; char chaine[30];
FILE *input; FILE *input;
//input = malloc(sizeof(FILE*)); //input = malloc(sizeof(FILE*));
input = param1->file1; input = param1->file1;
while (fgets(chaine,20,input) != NULL){ while (fgets(chaine,30,input) != NULL){
sem_wait(&empty1); sem_wait(&empty1);
pthread_mutex_lock(&mutex1); pthread_mutex_lock(&mutex1);
put_in_buffer_1(chaine,param1); //put each line in the buffer #1 put_in_buffer_1(chaine,param1); //put each line in the buffer #1
pthread_mutex_unlock(&mutex1); pthread_mutex_unlock(&mutex1);
...@@ -413,6 +416,9 @@ int run (char *input,char *output){ ...@@ -413,6 +416,9 @@ int run (char *input,char *output){
fclose(file1); fclose(file1);
fclose(file2); fclose(file2);
free(ptr1);
free(ptr2);
free(ptr3);
return 0; return 0;
......
666343
463698
...@@ -17,12 +17,70 @@ void test_is_prime(void){ ...@@ -17,12 +17,70 @@ void test_is_prime(void){
void test_is_not_prime(void){ void test_is_not_prime(void){
CU_ASSERT_FALSE(is_prime(14)); CU_ASSERT_FALSE(is_prime(14));
} }
void empty_file_test(void){
FILE *file1 = NULL;
int err = run("Test_files/empty_input.txt","actual_output.txt");
if (err == -1){
CU_FAIL("method run failed");
return;
}
file1 = fopen("actual_output.txt","r");
if (file1 == NULL){
CU_FAIL("actual_output opening fail");
return;
}
char chaine1[20];
CU_ASSERT_EQUAL(fgets(chaine1,20,file1),NULL);
fclose(file1);
}
void short_file_test(void){
FILE *file1 = NULL;
FILE *file2 = NULL;
file1 = fopen("Test_files/short_expected_output.txt","r");
if (file1 == NULL){
CU_FAIL("short_expected_output opening fail");
return;
}
int err = run("Test_files/short_input.txt","actual_output.txt");
if (err == -1){
CU_FAIL("method run failed");
return;
}
file2 = fopen("actual_output.txt","r");
if (file2 == NULL){
CU_FAIL("actual_output opening fail");
return;
}
char chaine1[50];
char chaine2[50];
while (fgets(chaine1,50,file1) != NULL && fgets(chaine2,50,file2) != NULL)
{
//printf("%s\n",chaine1);
//printf("%s\n",chaine2);
CU_ASSERT_STRING_EQUAL(chaine1,chaine2);
}
fclose(file1);
fclose(file2);
}
void file_test(void){ void file_test(void){
FILE *file1 = NULL; FILE *file1 = NULL;
FILE *file2 = NULL; FILE *file2 = NULL;
file1 = fopen("expected_output.txt","r"); file1 = fopen("Test_files/expected_output.txt","r");
if (file1 == NULL){ if (file1 == NULL){
CU_FAIL("expected_output opening fail"); CU_FAIL("expected_output opening fail");
return; return;
...@@ -32,7 +90,7 @@ void file_test(void){ ...@@ -32,7 +90,7 @@ void file_test(void){
double time; double time;
start = clock(); start = clock();
int err = run("input.txt","actual_output.txt"); int err = run("Test_files/input.txt","actual_output.txt");
end = clock(); end = clock();
time = (double) (end - start) / CLOCKS_PER_SEC; time = (double) (end - start) / CLOCKS_PER_SEC;
...@@ -60,7 +118,7 @@ void file_test(void){ ...@@ -60,7 +118,7 @@ void file_test(void){
//CU_ASSERT_STRING_EQUAL(chaine1,chaine2); //CU_ASSERT_STRING_EQUAL(chaine1,chaine2);
n++; n++;
} }
printf("%d",n); //printf("%d",n);
CU_ASSERT_EQUAL(n,100); CU_ASSERT_EQUAL(n,100);
fclose(file1); fclose(file1);
...@@ -97,9 +155,10 @@ int main(){ ...@@ -97,9 +155,10 @@ int main(){
if (NULL == CU_add_test(pSuite,"test_is_div",test_is_div) || if (NULL == CU_add_test(pSuite,"test_is_div",test_is_div) ||
NULL == CU_add_test(pSuite, "test_is_prime",test_is_prime) || NULL == CU_add_test(pSuite, "test_is_prime",test_is_prime) ||
NULL == CU_add_test(pSuite, "test_is_not_prime",test_is_not_prime) NULL == CU_add_test(pSuite, "test_is_not_prime",test_is_not_prime) ||
|| NULL == CU_add_test(pSuite,"file_test",file_test) NULL == CU_add_test(pSuite,"empty_file_test",empty_file_test) ||
) NULL == CU_add_test(pSuite,"short_file_test",short_file_test) ||
NULL == CU_add_test(pSuite,"file_test",file_test))
{ {
CU_cleanup_registry(); CU_cleanup_registry();
return CU_get_error(); return CU_get_error();
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter