diff --git a/.gitignore b/.gitignore index c076002..b13d574 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ build/ .vscode/ -*.txt \ No newline at end of file +*.txt +!CMakeLists.txt \ No newline at end of file diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 2fcb85e..e909733 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -13,35 +13,44 @@ build-job: # This job runs in the build stage, which runs first. script: - mkdir -p build - cd build - - cmake -DCMAKE_BUILD_TYPE=DEBUG .. - - make VERBOSE=ON -j 4 | tee ../build.log + - cmake -DCMAKE_BUILD_TYPE=DEBUG -DCMAKE_C_COMPILER:FILEPATH=/usr/bin/c99-gcc .. + - make VERBOSE=ON -j 18 | tee ./build.log artifacts: expire_in: 10 minutes - name: "$CI_JOB_NAME-$CI_COMMIT_REF_NAME" paths: - build/ - build.log test-v1-job: # This job runs in the test stage. - dependencies: - - build-job + needs: + - job: build-job + artifacts: false stage: test # It only starts when the job in the build stage completes successfully. script: + - mkdir -p build - cd build + - echo "building project" + - cmake -DCMAKE_BUILD_TYPE=DEBUG -DCMAKE_C_COMPILER:FILEPATH=/usr/bin/c99-gcc .. + - make VERBOSE=ON -j 18 | tee ./build.log - echo "Running tests V1..." - ctest -R v1 | tee ../test-v1-job.log artifacts: expire_in: 10 minutes paths: - build/ - - test-v2-job.log + - test-v1-job.log test-v2-job: # This job runs in the test stage. - dependencies: - - build-job + needs: + - job: build-job + artifacts: false stage: test # It only starts when the job in the build stage completes successfully. script: + - mkdir -p build - cd build + - echo "building project" + - cmake -DCMAKE_BUILD_TYPE=DEBUG -DCMAKE_C_COMPILER:FILEPATH=/usr/bin/c99-gcc .. + - make VERBOSE=ON -j 18 | tee ./build.log - echo "Running tests V2..." - ctest -R v2 | tee ../test-v2-job.log artifacts: @@ -53,19 +62,27 @@ test-v2-job: # This job runs in the test stage. ### coverage coverage-job: stage: coverage - dependencies: - - test-v1-job - - test-v2-job + needs: + - job: test-v1-job + artifacts: false + - job: test-v2-job + artifacts: false script: + - mkdir -p build - cd build - - make ExperimentalCoverage | tee ../coverage.log + - echo "building project" + - cmake -DCMAKE_BUILD_TYPE=DEBUG -DCMAKE_C_COMPILER:FILEPATH=/usr/bin/c99-gcc .. + - make VERBOSE=ON -j 18 + - ctest -R v1 + - ctest -R v2 + - make ExperimentalCoverage + - gcovr --xml-pretty --exclude-unreachable-branches --print-summary -o coverage.xml --root ${CI_PROJECT_DIR} + coverage: /^\s*lines:\s*\d+.\d+\%/ artifacts: - expire_in: 10 minutes - paths: - - build/ - - coverage.log - only: - - coverage + name: ${CI_JOB_NAME}-${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHA} + expire_in: 2 days + reports: + cobertura: build/coverage.xml ### cleanup project for security issues cleanup: diff --git a/CMakeLists.txt b/CMakeLists.txt index 6b69560..4d6f702 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,34 +1,37 @@ #version minimale de cmake nécessaire cmake_minimum_required(VERSION 2.6...3.13) -enable_testing() - #nom du projet -project (game_text) +project ("Lightup" C) + +# enable testing +enable_testing() include(CTest) #positionne la variable -set(CMAKE_C_FLAGS "-std=c99 -g -Wall -Wextra -Wpedantic -Werror") +set(CMAKE_C_FLAGS "-std=c99 -Wall -pthread -Wextra -Wunused-parameter -Wpedantic -Werror") +set(CMAKE_C_FLAGS_DEBUG "-g --coverage") # use CMake option: -DCMAKE_BUILD_TYPE=DEBUG +set(CMAKE_C_FLAGS_RELEASE "-O3 -DNDEBUG") # use CMake option: -DCMAKE_BUILD_TYPE=RELEASE -#définit le nom du programme ainsi que -#ses sources +############################# SRC ############################# + +# game_text add_executable(game_text game_text.c) -add_executable(game_test game_test.c) - -#add_executable(history_test history_test.c) - -#les dépendances sont calculées automatiquement target_link_libraries(game_text game) + +# game tests +add_executable(game_test game_test.c) target_link_libraries(game_test game) -#target_link_libraries(history_test game) - -#Libraries +# libgame add_library (game game.c game_aux.c game_ext.c game_private.c history.c game_tools.c game_examples.c) -# Tests +# history tests +#add_executable(history_test history_test.c) +#target_link_libraries(history_test game) -# V1 + +############################# TEST V1 ############################# add_test(test_thoguet_game_new_v1 ./game_test game_new) add_test(test_thoguet_game_default_v1 ./game_test game_default) @@ -46,7 +49,8 @@ add_test(test_thperrier_game_is_blank_v1 ./game_test game_is_blank) add_test(test_thperrier_game_new_empty_v1 ./game_test game_new_empty) add_test(test_game_equal_v1 ./game_test equal) -# V2 + +############################# TEST V2 ############################# add_test(test_thoguet_game_get_square_v2 ./game_test game_get_square) add_test(test_thoguet_game_restart_v2 ./game_test game_restart) @@ -66,11 +70,15 @@ add_test(test_nnunes_game_nb_cols_v2 ./game_test game_nb_cols) add_test(test_nnunes_game_is_wrapping_v2 ./game_test game_is_wrapping) add_test(test_thoguet_game_print_v2 ./game_test game_print) -# V3 + +############################# TEST V3 ############################# add_test(test_thoguet_game_save_v3 ./game_test game_save) add_test(test_mfatih_game_load_v3 ./game_test game_load) -#Tests HISTORY + + +############################# TEST HISTORY ############################# + # add_test(test_history_history_alloc ./history_test history_alloc) # add_test(test_history_create_empty ./history_test history_create_empty) # add_test(test_history_delete_entire_history ./history_test history_delete_entire_history) diff --git a/README.md b/README.md index b781c4a..4879c21 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,11 @@ -# lightup-07c +# README +[![Build](https://gitlab.emi.u-bordeaux.fr/pt2/teams-s4/tm07/lightup-07c/badges/main/pipeline.svg?job=build-job&key_text=Build)](https://gitlab.emi.u-bordeaux.fr/pt2/teams-s4/tm07/lightup-07c/-/commits/main) +[![Tests V1](https://gitlab.emi.u-bordeaux.fr/pt2/teams-s4/tm07/lightup-07c/badges/main/pipeline.svg?job=test-v1-job&key_text=Tests+V1)](https://gitlab.emi.u-bordeaux.fr/pt2/teams-s4/tm07/lightup-07c/-/commits/main) +[![Tests V2](https://gitlab.emi.u-bordeaux.fr/pt2/teams-s4/tm07/lightup-07c/badges/main/pipeline.svg?job=test-v1-job&key_text=Tests+V2)](https://gitlab.emi.u-bordeaux.fr/pt2/teams-s4/tm07/lightup-07c/-/commits/main) +[![Coverage report](https://gitlab.emi.u-bordeaux.fr/pt2/teams-s4/tm07/lightup-07c/badges/main/coverage.svg?min_good=90&min_acceptable=80&min_medium=70)](https://gitlab.emi.u-bordeaux.fr/pt2/teams-s4/tm07/lightup-07c/-/commits/main) + + +## lightup-07c Projet Techno diff --git a/game_text.c b/game_text.c index b505ea0..77c5f2a 100644 --- a/game_text.c +++ b/game_text.c @@ -4,9 +4,13 @@ #include "game.h" #include "game_aux.h" #include "game_ext.h" +#include "game_tools.h" #define NBCHARERR 4 #define CHAR0ASCII 48 +#define GAME_PRINT_PLUS_LINE(g) \ + printf("--------------------------------------------------\n"); \ + game_print(g); /** * @brief Edit the stringError with all errors of g @@ -59,7 +63,7 @@ void checkPlayMove(game g, square s) { game_play_move(g, i, j, s); else printf("Coordonnées invalide.\n"); - game_print(g); + GAME_PRINT_PLUS_LINE(g); return; } printf("Commande inconnue.\n"); @@ -75,31 +79,38 @@ void printhelp(void) { printf("l : Place une ampoule (*) à la position (,).\n"); printf("m : Place une marque (-) à la position (,).\n"); printf("b : Place une case vide ( ) à la position (,).\n"); + printf("w : Sauvegardez votre partie au nom .\n"); } void usage(char* argv[]) { - printf("Usage : %s => Joue la partie par défaut\n", argv[0]); + printf("Usage : %s => Joue la partie par défaut\n", argv[0]); + printf(" %s => Charge la partie sur le fichier \n", argv[0]); exit(EXIT_FAILURE); } int main(int argc, char* argv[]) { game g; - if (argc == 1) + if (argc == 1) { // Create new game g = game_default(); - else + } else if (argc == 2) { + char* gameFile = argv[1]; + g = game_load(gameFile); + } else { usage(argv); + } // init string for errors char stringError[game_nb_rows(g) * game_nb_cols(g) * NBCHARERR]; char c; + char* fileSave = (char*)malloc(sizeof(char) * 20); // print game - game_print(g); + GAME_PRINT_PLUS_LINE(g); // test if game is over while (!game_is_over(g)) { // print errors if (checkerrors(g, stringError)) - printf("Il y a un problème case(s): %s\n", stringError); - printf("Entrez une commande (h pour afficher l'aide): "); + printf("\nIl y a un problème case(s): %s\n", stringError); + printf("\nEntrez une commande (h pour afficher l'aide): "); // scan the first command without args if (scanf(" %c", &c)) { switch (c) { @@ -108,25 +119,20 @@ int main(int argc, char* argv[]) { break; case 'r': game_restart(g); - printf("Partie réinitialisé avec succes !\n"); - game_print(g); + printf("\nPartie réinitialisé avec succes !\n"); + GAME_PRINT_PLUS_LINE(g); break; case 'q': - printf("Solution: \n"); - game solution = game_default_solution(); - game_print(solution); - game_delete(solution); game_delete(g); - printf("shame\n"); + printf("shame on you :o\n"); return EXIT_SUCCESS; - break; case 'z': game_undo(g); - game_print(g); + GAME_PRINT_PLUS_LINE(g); break; case 'y': game_redo(g); - game_print(g); + GAME_PRINT_PLUS_LINE(g); break; case 'l': checkPlayMove(g, S_LIGHTBULB); @@ -137,6 +143,12 @@ int main(int argc, char* argv[]) { case 'b': checkPlayMove(g, S_BLANK); break; + case 'w': + scanf(" %s", fileSave); + game_save(g, fileSave); + printf("Partie sauvegardée au nom %s\n", fileSave); + GAME_PRINT_PLUS_LINE(g); + break; default: printf("Commande inconnue.\n"); } diff --git a/game_tools.c b/game_tools.c index 61c4b8c..cf78156 100644 --- a/game_tools.c +++ b/game_tools.c @@ -58,7 +58,6 @@ game game_load(char* filename) { } } fclose(f); - game_print(g1); return g1; }