Δοκιμές στο track της Fortran

Μάθε πώς να δοκιμάζεις τις ασκήσεις σου σε Fortran στο Exercism.


Κάθε άσκηση παρέχει τα τεστ μονάδας και μια συνταγή build με CMake. Την υλοποίηση την παρέχεις εσύ.

Κάθε αρχείο τεστ είναι φτιαγμένο για να συνδέεται με την υλοποίησή σου και να παράγει ένα εκτελέσιμο για κονσόλα που τρέχει τα τεστ. Όταν τρέχεις το εκτελέσιμο των τεστ, τυπώνονται μηνύματα για κάθε τεστ που αποτυγχάνει και επιστρέφεται μη μηδενική κατάσταση εξόδου όταν αποτυγχάνουν τα τεστ.

Το αρχείο τεστ θα έχει το όνομα <exercise>_test.f90, οπότε για την άσκηση "Bob" το αρχείο που περιέχει τα τεστ είναι το bob_test.f90. Κάθε τεστ θα έχει ένα σχόλιο που το περιγράφει και μετά το ίδιο το τεστ, το οποίο ξεκινά με call assert_equal, π.χ.

  ! Test 16: non-letters with question
  call assert_equal("Sure.", hey(":) ?"), "non-letters with question")

Για να απενεργοποιήσεις ένα τεστ, απλώς βάλε το σε σχόλιο με ένα '!', π.χ.

  ! Test 16: non-letters with question
  ! call assert_equal("Sure.", hey(":) ?"), "non-letters with question")

Η δουλειά με κάθε άσκηση είναι μια διαδικασία:

  • Δημιουργία του αρχικού build με το CMake
  • Για κάθε τεστ μονάδας:
    • Αντιμετωπίζεις τα σφάλματα μεταγλώττισης ώστε το τεστ να αποτύχει.
    • Υλοποιείς μόνο τα απαραίτητα για να περάσει το τεστ.
    • Κάνεις refactor στην υλοποίησή σου ώστε να βελτιώσεις την αναγνωσιμότητα, να μειώσεις τον διπλότυπο κώδικα κ.λπ.
    • Ξεσχολιάζεις το επόμενο τεστ

Δημιουργία του αρχικού build με το CMake

Κάθε άσκηση φέρνει μαζί της ένα αρχείο CMakeLists.txt καθώς και τα τεστ μονάδας. Περιέχει την έτοιμη συνταγή CMake που αναλαμβάνει το build για σένα. Δεν θα χρειαστεί να επεξεργαστείς αυτό το αρχείο. Η συνταγή που παρέχεται υποθέτει ότι η υλοποίησή σου βρίσκεται σε ένα αρχείο πηγαίου κώδικα με το όνομα της άσκησης.

Για παράδειγμα, η άσκηση "Bob" περιμένει μια υλοποίηση στο αρχείο bob.f90.

Δημιούργησε τα αρχικά αρχεία υλοποίησης πριν τρέξεις το CMake. Αν δεν έχεις το αρχείο bob.f90 όταν τρέχεις το CMake για την άσκηση "Bob", τότε το CMake θα βγάλει σφάλμα ότι δεν βρίσκει τα αρχεία. Αυτά τα αρχεία μπορεί να είναι άδεια, αλλά πρέπει να υπάρχουν.

Με αυτή τη συνταγή, το CMake μπορεί να δημιουργήσει ένα κατάλληλο project για το περιβάλλον σου τρέχοντας cmake -G με έναν κατάλληλο generator και τη θέση του φακέλου της άσκησης. Το CMake θα δημιουργήσει ένα σενάριο build κατάλληλο για το λειτουργικό σύστημά σου. Για να κρατήσεις αυτά τα παραγόμενα αρχεία χωριστά από τον πηγαίο κώδικα της άσκησης, συνηθίζεται να δημιουργείς έναν φάκελο με το όνομα build που να περιέχει αυτά τα παραγόμενα αρχεία build, καθώς και τον μεταγλωττισμένο κώδικα.

Έτσι ο φάκελος της άσκησής σου μένει καθαρός και τακτοποιημένος.

**Σημείωση: Την πρώτη φορά που καλείται το cmake, το testlib θα κατέβει αυτόματα. Το testlib χρειάζεται για να δουλέψουν τα τεστ μονάδας.

Επειδή θα τρέχεις το CMake για να δημιουργείς τις οδηγίες build για κάθε άσκηση, ίσως θελήσεις να φτιάξεις ένα σενάριο bash (Linux/MacOS) ή ένα αρχείο batch (Windows) για αυτή την εντολή.

Μόλις το CMake δημιουργήσει το περιβάλλον build, μπορείς να κάνεις build τον κώδικά σου με την κατάλληλη εντολή για το περιβάλλον σου:

  • Linux με make: make
  • Windows με Visual Studio: Διάλεξε Build / Build Solution από το μενού.
  • Windows με MingW: mingw32-make.exe
  • Windows με nMake: nmake.exe
  • MacOS με Xcode: Διάλεξε Build από τη γραμμή εργαλείων

Παρακάτω φαίνονται παραδείγματα εκτέλεσης του CMake για διαφορετικά περιβάλλοντα.

Linux\MacOS με Make

Το όνομα του generator για το CMake είναι Unix Makefiles. Υποθέτοντας ότι η τρέχουσα άσκηση είναι η bob και ότι βρισκόμαστε στον φάκελο της άσκησης:

$ touch bob.f90
$ mkdir build
$ cd build
$ cmake -G "Unix Makefiles" ..
$ make

Αυτό το παράδειγμα δείχνει τη δημιουργία κενών αρχείων για την υλοποίηση πριν τρέξεις το CMake.

Απλώς πληκτρολόγησε make στον φάκελο build για να μεταγλωττίσεις τα τεστ. Αυτό θα πρέπει να βγάλει σφάλματα μεταγλώττισης. Μόλις διορθώσεις τα σφάλματα, τρέξε ξανά το make. Όταν διορθωθούν όλα τα σφάλματα build, τρέξε τα τεστ:

$ ctest -V

Windows με Visual Studio 2017

Το όνομα του generator για το CMake είναι Visual Studio 15. Ο ίδιος generator υποστηρίζει όλες τις εκδόσεις IDE του Visual Studio 2017: Community, Professional και Enterprise. Υποθέτοντας ότι η τρέχουσα άσκηση είναι η bob και ότι βρισκόμαστε στον φάκελο της άσκησης:

> copy nul: bob.f90
> mkdir build
> cd build
> cmake -G "Visual Studio 15" ..

Αυτό το παράδειγμα δείχνει τη δημιουργία κενών αρχείων για την υλοποίηση πριν τρέξεις το CMake.

Windows με MingW

Το όνομα του generator για το CMake είναι MinGW Makefiles. Υποθέτοντας ότι η τρέχουσα άσκηση είναι η bob και ότι βρισκόμαστε στον φάκελο της άσκησης:

> copy nul: bob.f90
> mkdir build
> cd build
> cmake -G "MinGW Makefiles" ..

Αυτό το παράδειγμα δείχνει τη δημιουργία κενών αρχείων για την υλοποίηση πριν τρέξεις το CMake.

Απλώς πληκτρολόγησε make στον φάκελο build για να μεταγλωττίσεις τα τεστ. Αυτό θα πρέπει να βγάλει σφάλματα μεταγλώττισης. Μόλις διορθώσεις τα σφάλματα, τρέξε ξανά το make. Όταν διορθωθούν όλα τα σφάλματα build, τρέξε τα τεστ:

MacOS με Xcode

Το όνομα του generator για το CMake είναι Xcode. Υποθέτοντας ότι η τρέχουσα άσκηση είναι η bob και ότι βρισκόμαστε στον φάκελο της άσκησης:

$ touch bob.f90
$ mkdir build
$ cd build
$ cmake -G Xcode ..

Αυτό το παράδειγμα δείχνει τη δημιουργία κενών αρχείων για την υλοποίηση πριν τρέξεις το CMake.

Απλώς πληκτρολόγησε make στον φάκελο build για να μεταγλωττίσεις τα τεστ. Αυτό θα πρέπει να βγάλει σφάλματα μεταγλώττισης. Μόλις διορθώσεις τα σφάλματα, τρέξε ξανά το make. Όταν διορθωθούν όλα τα σφάλματα build, τρέξε τα τεστ:

$ ctest -V

Testlib

Τα τεστ εξαρτώνται από μια μικρή βιβλιοθήκη που λέγεται testlib και κατεβαίνει από το github την πρώτη φορά που ρυθμίζεται το build με το cmake.

Σε περίπτωση που η λήψη αποτύχει, μπορείς να την κάνεις χειροκίνητα, π.χ.

mkdir testlib
cd testlib
wget https://raw.githubusercontent.com/exercism/fortran/master/testlib/CMakeLists.txt
wget https://raw.githubusercontent.com/exercism/fortran/master/testlib/TesterMain.f90