From 5d5688ada9990f2356d3d036d0ba3f79502d71a5 Mon Sep 17 00:00:00 2001
From: lpaucot_uclouvain <laurent.paucot@student.uclouvain.be>
Date: Tue, 21 Apr 2020 00:16:26 +0200
Subject: [PATCH] unsigned long long
---
Test_files/empty_input.txt | 0
.../expected_output.txt | 0
input.txt => Test_files/input.txt | 0
Test_files/short_expected_output.txt | 1 +
Test_files/short_input.txt | 1 +
run.c | 32 +++++----
short_input.txt | 2 -
test.c | 71 +++++++++++++++++--
8 files changed, 86 insertions(+), 21 deletions(-)
create mode 100644 Test_files/empty_input.txt
rename expected_output.txt => Test_files/expected_output.txt (100%)
rename input.txt => Test_files/input.txt (100%)
create mode 100644 Test_files/short_expected_output.txt
create mode 100644 Test_files/short_input.txt
delete mode 100644 short_input.txt
diff --git a/Test_files/empty_input.txt b/Test_files/empty_input.txt
new file mode 100644
index 0000000..e69de29
diff --git a/expected_output.txt b/Test_files/expected_output.txt
similarity index 100%
rename from expected_output.txt
rename to Test_files/expected_output.txt
diff --git a/input.txt b/Test_files/input.txt
similarity index 100%
rename from input.txt
rename to Test_files/input.txt
diff --git a/Test_files/short_expected_output.txt b/Test_files/short_expected_output.txt
new file mode 100644
index 0000000..a0778eb
--- /dev/null
+++ b/Test_files/short_expected_output.txt
@@ -0,0 +1 @@
+981518 113 101 43 2
diff --git a/Test_files/short_input.txt b/Test_files/short_input.txt
new file mode 100644
index 0000000..aec1a34
--- /dev/null
+++ b/Test_files/short_input.txt
@@ -0,0 +1 @@
+981518
diff --git a/run.c b/run.c
index c9b8a32..d036ada 100755
--- a/run.c
+++ b/run.c
@@ -11,7 +11,7 @@
#define N 4
//travailler avec des linkendList
typedef struct node{
- long value;
+ unsigned long long value;
struct node *next;
}node_t;
@@ -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
}
-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 == 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
return 0 ; //renvoi 0 => FAUX
}
@@ -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;
@@ -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;
new_queue.size = 0;
@@ -163,7 +163,7 @@ queue_t* prime_divs(long number){
return NULL;}
*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){
enqueue(ptr,i);
}
@@ -206,9 +206,12 @@ void *writing(void *param){
*current = *pr_divs->tail;
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;
}
fputc('\n',file2);
@@ -256,7 +259,7 @@ void *calculating(void *param){
pr_divs = malloc(sizeof(queue_t));
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);
pthread_mutex_lock(&mutex2);
@@ -274,18 +277,18 @@ void *reading (void *param){
struct buffer_rc *param1= (struct buffer_rc *) param;
- char chaine[20];
+ char chaine[30];
FILE *input;
//input = malloc(sizeof(FILE*));
input = param1->file1;
- while (fgets(chaine,20,input) != NULL){
+ while (fgets(chaine,30,input) != NULL){
sem_wait(&empty1);
pthread_mutex_lock(&mutex1);
-
+
put_in_buffer_1(chaine,param1); //put each line in the buffer #1
pthread_mutex_unlock(&mutex1);
@@ -413,6 +416,9 @@ int run (char *input,char *output){
fclose(file1);
fclose(file2);
+ free(ptr1);
+ free(ptr2);
+ free(ptr3);
return 0;
diff --git a/short_input.txt b/short_input.txt
deleted file mode 100644
index 2ddce3f..0000000
--- a/short_input.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-666343
-463698
diff --git a/test.c b/test.c
index fc78776..bef6de0 100644
--- a/test.c
+++ b/test.c
@@ -17,12 +17,70 @@ void test_is_prime(void){
void test_is_not_prime(void){
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){
FILE *file1 = NULL;
FILE *file2 = NULL;
- file1 = fopen("expected_output.txt","r");
+ file1 = fopen("Test_files/expected_output.txt","r");
if (file1 == NULL){
CU_FAIL("expected_output opening fail");
return;
@@ -32,7 +90,7 @@ void file_test(void){
double time;
start = clock();
- int err = run("input.txt","actual_output.txt");
+ int err = run("Test_files/input.txt","actual_output.txt");
end = clock();
time = (double) (end - start) / CLOCKS_PER_SEC;
@@ -60,7 +118,7 @@ void file_test(void){
//CU_ASSERT_STRING_EQUAL(chaine1,chaine2);
n++;
}
- printf("%d",n);
+ //printf("%d",n);
CU_ASSERT_EQUAL(n,100);
fclose(file1);
@@ -97,9 +155,10 @@ int main(){
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_not_prime",test_is_not_prime)
- || NULL == CU_add_test(pSuite,"file_test",file_test)
- )
+ NULL == CU_add_test(pSuite, "test_is_not_prime",test_is_not_prime) ||
+ 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();
return CU_get_error();
--
GitLab