diff --git a/Code-C/CMakeLists.txt b/Code-C/CMakeLists.txt index ee0dd0f..3fdd809 100644 --- a/Code-C/CMakeLists.txt +++ b/Code-C/CMakeLists.txt @@ -6,8 +6,8 @@ enable_testing() set(CMAKE_C_FLAGS "-std=c99 -g -Wall") add_executable(exect fileGestion.c getArray.c average.c growthRate.c power.c queue.c simulateFlux.c main.c) - # add_executable(exect main.c simulateFlux.c queue.c power.c growthRate.c average.c getArray.c fileGestion.c) + find_package(Threads) target_link_libraries(exect ${CMAKE_THREAD_LIBS_INIT} m) @@ -18,10 +18,19 @@ add_executable(ctest fileGestion.c getArray.c average.c growthRate.c queue.c sim target_link_libraries(ctest ${CMAKE_THREAD_LIBS_INIT} m) add_test(test_queueCreateEmpty ./ctest queueCreateEmpty) -add_test(test_queueSetCharLen ./ctest queueSetCharLen) +add_test(test_queueCreateE ./ctest queueCreateE) + +add_test(test_queueSetCharLen ./ctest queueSetCharLen) +add_test(test_queueGetCharLen ./ctest queueGetCharLen) + +add_test(test_queueSetTabChar ./ctest queueSetTabChar) +add_test(test_queueGetTabChar ./ctest queueGetTabChar) -# add_test(test_queueGetTabChar ./ctest queueGetTabChar) add_test(test_queueSetNextE ./ctest queueSetNextE) add_test(test_queueGetNextE ./ctest queueGetNextE) -add_test(test_queueGetCharLen ./ctest queueGetCharLen) \ No newline at end of file +add_test(test_queueAddLastQ ./ctest queueAddLastQ) +add_test(test_queueRmLastE ./ctest queueRmLastE) +add_test(test_queueRmFrstE ./ctest queueRmFrstE) +add_test(test_queueNextDelFrst ./ctest queueNextDelFrst) + diff --git a/Code-C/average.c b/Code-C/average.c index 317acd9..749881d 100644 --- a/Code-C/average.c +++ b/Code-C/average.c @@ -5,41 +5,50 @@ #include "queue.h" /** * @brief realize the average calcul - * + * * @param p array with all the values that will be used for the calcul * @param averageArray array where results are stocked */ -void averageCalculation(long **p, double averageArray[]){ - for(int i = 1; i < nCol; i++){ +void averageCalculation(long **p, double averageArray[]) +{ + for (int i = 1; i < nCol; i++) + { int j = 0; averageArray[i] = 0; - while(j < nRowRawData){ - averageArray[i] += p[i][j]; + while (j < nRowRawData) + { + averageArray[i - 1] += p[i][j]; j++; } - //printf("%f , %f\n", averageArray[i] , averageArray[i] / nRowRawData); + // printf("%f , %f\n", averageArray[i] , averageArray[i] / nRowRawData); averageArray[i] /= nRowRawData; } } /** * @brief function that realize all the action to write one lign in the file averageData.csv - * + * * @param rawDataFileName name of the raw data file to use to realize the calcul */ -void averageFunction(char* rawDataFileName , double **aver){ +void averageFunction(char *rawDataFileName, double **aver) +{ long **p = getRawDataArray(rawDataFileName); - double averN[nCol -1]; - if(p !=NULL){ - if(p !=NULL){ - if(aver == NULL){ - averageCalculation(p,averN); - appendDataInFile("averageData.csv",averN,nCol-1); - }else{ - averageCalculation(p,aver[1]); - appendDataInFile("averageData.csv",aver[1],nCol-1); + double averN[nCol - 1]; + if (p != NULL) + { + if (p != NULL) + { + if (aver == NULL) + { + averageCalculation(p, averN); + appendDataInFile("averageData.csv", averN, nCol - 1); } - freeArray(p,nRowRawData); - } + else + { + averageCalculation(p, aver[1]); + appendDataInFile("averageData.csv", aver[1], nCol - 1); + } + freeArray(p, nRowRawData); + } } } \ No newline at end of file diff --git a/Code-C/ctest.c b/Code-C/ctest.c index 1cffdd3..f5dfdb2 100644 --- a/Code-C/ctest.c +++ b/Code-C/ctest.c @@ -24,7 +24,7 @@ int nbRowBinFile = 900011; int nbRowIgnore = 19; Pqueue firstRawDataQueue; -// Captor 1 2 3 4 5 6 7 8 +// Captor 1 2 3 4 5 6 7 8 bool selectionCaptors[] = {true, false, true, false, false, false, true, false}; int cptData = 0; @@ -48,6 +48,22 @@ bool test_queueCreateEmpty() return EXIT_SUCCESS; } +bool test_queueCreateE() +{ + const char tabChar[12] = "PetitNavire\0"; + Pqueue new = queueCreateE(12, tabChar); + + const char *test = queueGetTabChar(new); + + assert(queueGetCharLen(new) == 12); + assert(test != NULL); + assert(strcmp(test, tabChar) == 0); + assert(queueGetNextE(new) == NULL); + + queueRmFrstE(new); + return EXIT_SUCCESS; +} + bool test_queueSetCharLen() { Pqueue new = queueCreateEmpty(); @@ -63,20 +79,38 @@ bool test_queueSetCharLen() return EXIT_SUCCESS; } -bool test_queueGetTabChar() -{ // Define later +bool test_queueSetTabChar() +{ + // Set and Get tabChar are similar because use for same test Pqueue new = queueCreateEmpty(); - // const char tabChar[12] = "PetitNavire\0" - queueSetTabChar(new, 13, NULL); + const char tabChar[12] = "PetitNavire\0"; + queueSetTabChar(new, 12, tabChar); + const char *test = queueGetTabChar(new); - assert(queueGetCharLen(new) == 13); - assert(queueGetTabChar(new) == NULL); + assert(queueGetCharLen(new) == 12); + assert(test != NULL); + assert(strcmp(test, tabChar) == 0); assert(queueGetNextE(new) == NULL); - // queueDelAll(new); queueRmFrstE(new); + return EXIT_SUCCESS; +} +bool test_queueGetTabChar() +{ + Pqueue new = queueCreateEmpty(); + + const char tabChar[12] = "PetitNavire\0"; + queueSetTabChar(new, 12, tabChar); + const char *test = queueGetTabChar(new); + + assert(queueGetCharLen(new) == 12); + assert(test != NULL); + assert(strcmp(test, tabChar) == 0); + assert(queueGetNextE(new) == NULL); + + queueRmFrstE(new); return EXIT_SUCCESS; } @@ -120,6 +154,70 @@ bool test_queueGetCharLen() return EXIT_SUCCESS; } +bool test_queueAddLastQ() +{ + Pqueue new = queueCreateEmpty(), next = NULL; + const char tabChar[12] = "PetitNavire\0"; + queueAddLastQ(new, tabChar, 12); + next = queueGetNextE(new); + + assert(next != NULL); + assert(queueGetCharLen(next) == 12); + assert(strcmp(queueGetTabChar(next), tabChar) == 0); + assert(queueGetNextE(next) == NULL); + + queueDelAll(new); + return EXIT_SUCCESS; +} +bool test_queueRmLastE() +{ + Pqueue new = queueCreateEmpty(); + const char tabChar[12] = "PetitNavire\0"; + queueAddLastQ(new, tabChar, 12); + queueAddLastQ(new, tabChar, 12); + + assert(queueGetNextE(new) != NULL && queueGetNextE(queueGetNextE(new)) != NULL && queueGetNextE(queueGetNextE(queueGetNextE(new))) == NULL); + queueRmLastE(new); + assert(queueGetNextE(new) != NULL && queueGetNextE(queueGetNextE(new)) == NULL); + + queueDelAll(new); + return EXIT_SUCCESS; +} + +bool test_queueRmFrstE() +{ + Pqueue new = queueCreateEmpty(), second; + const char tabChar[12] = "PetitNavire\0"; + queueAddLastQ(new, tabChar, 12); + queueAddLastQ(new, tabChar, 12); + second = queueGetNextE(new); + + assert(queueGetNextE(new) != NULL && queueGetNextE(queueGetNextE(new)) != NULL && queueGetNextE(queueGetNextE(queueGetNextE(new))) == NULL); + new = queueRmFrstE(new); + assert((new == second) && (queueGetNextE(new) != NULL) && (queueGetNextE(queueGetNextE(new)) == NULL)); + + queueDelAll(new); + return EXIT_SUCCESS; +} + +bool test_queueNextDelFrst() +{ + Pqueue new = queueCreateEmpty(), second; + const char tabChar[12] = "PetitNavire\0"; + queueAddLastQ(new, tabChar, 12); + queueAddLastQ(new, tabChar, 12); + second = queueGetNextE(new); + + assert(queueGetNextE(new) != NULL && queueGetNextE(queueGetNextE(new)) != NULL && queueGetNextE(queueGetNextE(queueGetNextE(new))) == NULL); + new = queueNextDelFrst(new); + assert((new == second) && (queueGetNextE(new) != NULL) && (queueGetNextE(queueGetNextE(new)) == NULL)); + + queueDelAll(new); + return EXIT_SUCCESS; +} + +/***************** Main test start *****************/ + void usage(int argc, char *argv[]) { fprintf(stderr, "Usage: %s [<...>]\n", argv[0]); @@ -135,7 +233,13 @@ int main(int argc, char *argv[]) fprintf(stderr, "=> Start test \"%s\"\n", argv[1]); int ok = 1; if (strcmp("queueCreateEmpty", argv[1]) == 0) + { ok = test_queueCreateEmpty(); + } + else if (strcmp("queueCreateE", argv[1]) == 0) + { + ok = test_queueCreateE(); + } else if (strcmp("queueSetCharLen", argv[1]) == 0) { ok = test_queueSetCharLen(); @@ -159,8 +263,28 @@ int main(int argc, char *argv[]) else if (strcmp("queueGetTabChar", argv[1]) == 0) { ok = test_queueGetTabChar(); - // }else if(strcmp("update_flags",argv[1]) == 0){ - // ok = test_game_update_flags(); + } + else if (strcmp("queueSetTabChar", argv[1]) == 0) + { + ok = test_queueSetTabChar(); + } + else if (strcmp("queueAddLastQ", argv[1]) == 0) + { + ok = test_queueAddLastQ(); + } + else if (strcmp("queueRmLastE", argv[1]) == 0) + { + ok = test_queueRmLastE(); + } + else if (strcmp("queueRmFrstE", argv[1]) == 0) + { + ok = test_queueRmFrstE(); + } + else if (strcmp("queueNextDelFrst", argv[1]) == 0) + { + ok = test_queueNextDelFrst(); + // }else if(strcmp("default_solution",argv[1]) == 0){ + // ok = test_game_default_solution(); // }else if(strcmp("default_solution",argv[1]) == 0){ // ok = test_game_default_solution(); } diff --git a/Code-C/main.c b/Code-C/main.c index 3bcb289..b3b69ae 100644 --- a/Code-C/main.c +++ b/Code-C/main.c @@ -150,12 +150,15 @@ int main(int argc, char **argv) pthread_t rawData; if (pthread_create(&rawData, NULL, threadSimulateFlux, "threadSimulflux") != 0) { - perror("pthread_create() error"); + perror("threadSimulflux() error"); exit(1); } pthread_t calcul; - pthread_create(&calcul, NULL, threadCalculGrowthRate, "threadCalcul"); - + if (pthread_create(&calcul, NULL, threadCalculAverage, "threadCalcul")) + { + perror("threadCalculAverage() error"); + exit(1); + } pthread_exit(NULL); } \ No newline at end of file diff --git a/Code-C/queue.c b/Code-C/queue.c index c44378e..72e5f7c 100644 --- a/Code-C/queue.c +++ b/Code-C/queue.c @@ -2,6 +2,7 @@ #include #include #include +#include #include "queue.h" /** @@ -144,15 +145,15 @@ Pqueue queueCreateE(int lenChar, const char *_tabChar) Pqueue queueRmLastE(Pqueue elem) { assert(elem); - Pqueue tmp = elem, previous = NULL; - while (elem->pNextE != NULL) + Pqueue tmp = elem, current = NULL; + while (tmp->pNextE != NULL) { - previous = tmp; + current = tmp; tmp = queueGetNextE(tmp); } free(tmp->tabChar); free(tmp); - previous->pNextE = NULL; + current->pNextE = NULL; return elem; } @@ -160,15 +161,18 @@ Pqueue queueRmLastE(Pqueue elem) * @brief remove and free the first element of queue * * @param elem target to remove (the element need to be the first) + * @return next element of the queue */ -void queueRmFrstE(Pqueue elem) +Pqueue queueRmFrstE(Pqueue elem) { assert(elem); + Pqueue next = queueGetNextE(elem); if (elem->tabChar != NULL) { free(elem->tabChar); } free(elem); + return next; } /** @@ -195,16 +199,31 @@ Pqueue queueNextDelFrst(Pqueue elem) void queueAddLastQ(Pqueue elem, const char *str, int len) { assert(elem); - assert(str); - Pqueue next = elem, previous = NULL; - while (next->pNextE != NULL) + bool str1 = true; + if (len == 0) { - previous = next; - next = queueGetNextE(next); + str = false; } - previous = next; - next = queueCreateE(len, str); - queueSetNextE(previous, next); + else + { + assert(str); + } + + Pqueue current = elem, next = NULL; + while (current->pNextE != NULL) + { + current = queueGetNextE(current); + } + + if (str1 == true) + { + next = queueCreateE(len, str); + } + else + { + next = queueCreateEmpty(); + } + queueSetNextE(current, next); } /** diff --git a/Code-C/queue.h b/Code-C/queue.h index 156d3f0..ecb311e 100644 --- a/Code-C/queue.h +++ b/Code-C/queue.h @@ -91,8 +91,9 @@ Pqueue queueRmLastE(Pqueue elem); * @brief remove and free the first element of queue * * @param elem target to remove (the element need to be the first) + * @return the next element of elem */ -void queueRmFrstE(Pqueue elem); +Pqueue queueRmFrstE(Pqueue elem); // same of queueNextDelFrst() /** * @brief delete the first value and return the next value @@ -100,7 +101,7 @@ void queueRmFrstE(Pqueue elem); * @param elem * @return Pqueue */ -Pqueue queueNextDelFrst(Pqueue elem); +Pqueue queueNextDelFrst(Pqueue elem); // same of queueRmFrstE() /************** print function **************/