Δοκιμές στη διαδρομή Unison

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


Εξοικείωση με τον Unison Codebase Manager

Ο Unison Codebase Manager (UCM) είναι το εργαλείο που τρέχει τη γλώσσα προγραμματισμού Unison και σου επιτρέπει να περιηγείσαι στον κώδικα Unison που έχεις γράψει και αποθηκεύσει.

💡 Θυμήσου: Ο κώδικας Unison δεν αποθηκεύεται ως περιεχόμενο αρχείου βασισμένο σε κείμενο. Γι’ αυτό χρειαζόμαστε ένα εργαλείο που μας επιτρέπει να αλλάζουμε και να τρέχουμε προγράμματα Unison.

Το να γράψεις κώδικα Unison είναι τόσο απλό όσο το να ανοίξεις το τερματικό της προτίμησής σου και να τρέξεις την εντολή ucm στον κατάλογο όπου θα γράφεις τον κώδικα Unison σου. Στη συνέχεια, μπορείς να χρησιμοποιήσεις το αγαπημένο σου πρόγραμμα επεξεργασίας κειμένου για να δημιουργήσεις ή να ανοίξεις ένα αρχείο με κατάληξη .u, όπως το scratch.u ή το hello.u. Το μεγαλύτερο μέρος της ροής εργασίας σου θα είναι η πλοήγηση ανάμεσα στο ενεργό στιγμιότυπο της γραμμής εντολών του ucm και στο αρχείο σου .u. Το UCM ακούει αυτόματα τις αλλαγές στο αρχείο σου με κατάληξη .u μόλις το αποθηκεύσεις.

Αντί για δομή καταλόγων, οι βάσεις κώδικα Unison οργανώνονται μέσω "χώρων ονομάτων". Θα εξερευνάς τον χώρο ονομάτων της βασικής βιβλιοθήκης, που ονομάζεται base, για χρήσιμες συναρτήσεις και τύπους δεδομένων, και θα δημιουργείς τον δικό σου καθώς γράφεις κώδικα Unison. Στο UCM, η πλοήγηση στη βάση κώδικα γίνεται με τις εντολές ls και view. Χρησιμοποιούνται για την καταγραφή του περιεχομένου ενός χώρου ονομάτων και την προβολή πηγαίου κώδικα, αντίστοιχα.

Ενώ μπορείς να περιηγηθείς και να δεις τη βάση κώδικα σου μέσω της γραμμής εντολών του UCM, ίσως θελήσεις επίσης να δεις μια ωραία γραφική αναπαράσταση της δουλειάς σου. Μπορείς να το κάνεις αυτό εκτελώντας την εντολή ui στη γραμμή εντολών του UCM. Θα ανοίξει ένα παράθυρο του περιηγητή με μια προβολή του κώδικα στη βάση κώδικα σου. Το τοπικό UI της βάσης κώδικα είναι επίσης ένας εξαιρετικός τρόπος να εξερευνήσεις συναρτήσεις της βασικής βιβλιοθήκης μας, που ονομάζεται base, κάτι που μπορεί να σου φανεί χρήσιμο για να ολοκληρώσεις τις ασκήσεις. Διάβασε περισσότερα για το τοπικό UI της βάσης κώδικα εδώ.

Μπορείς να εξασκηθείς στη ροή εργασίας του προγραμματισμού σε Unison με την περιήγηση στη γλώσσα Unison.

Ρύθμιση των τεστ του Exercism

Γρήγορη επισκόπηση

  1. Δημιούργησε ένα νέο project χρησιμοποιώντας την εντολή project.create και δώσε το όνομά του (π.χ. project.create hello-world)

  2. Με το UCM να παρακολουθεί τον κατάλογο της άσκησης, κάνε τις αλλαγές σου στο αρχείο <myFileName>.u

  3. Αποθήκευσε το αρχείο <myFileName>.u

  4. Αν το αρχείο περάσει τον έλεγχο τύπων, τρέξε τις εντολές add ή update του UCM

    • Αν το αρχείο δεν περάσει τον έλεγχο τύπων, κάνε αλλαγές στον κώδικα του αρχείου <myFileName>.u μέχρι να μεταγλωττιστεί
  5. Τρέξε την εντολή load <myFileName>.test.u στη γραμμή εντολών του UCM για να φέρεις τα τεστ στην εμβέλεια και να τα εκτελέσεις

Αναλυτική παρουσίαση

Αν δουλεύεις σε ένα πρόβλημα του Exercism από τη γραμμή εντολών, κατά πάσα πιθανότητα θα υλοποιείς τη λύση σου στον κατάλογο που έχει το όνομα της άσκησης. Για παράδειγμα, αν η άσκηση είναι hello-world, θα πρέπει να ανοίξεις το ucm από τη γραμμή εντολών αφού κάνεις cd στον κατάλογο ~/exercism/unison/hello-world και να δημιουργήσεις ένα project στο ucm (π.χ. project.create hello-world). Κάνε τις αλλαγές της υλοποίησής σου στο αρχείο hello.u και, όταν είσαι ευχαριστημένος με την υλοποίησή σου, δώσε την εντολή add ή update στη γραμμή εντολών του Unison codebase manager CLI (UCM) για να προσθέσεις τη δουλειά σου από το αρχείο στη βάση κώδικα.

Το αρχείο που περιέχει τα τεστ για κάθε άσκηση έχει κατάληξη .test.u. Θα θελήσεις να χρησιμοποιήσεις την εντολή load στο UCM για να φέρεις τα τεστ στην εμβέλεια και να τα εκτελέσεις. Η εντολή load δέχεται τη διαδρομή ενός αρχείου ως όρισμά της. Να πώς θα μπορούσε να μοιάζει αυτό για την άσκηση hello world και το project hello-world:

hello-world/main> load hello.test.u

Θα πρέπει να δεις ένα μήνυμα από το UCM για τους όρους που μεταφέρθηκαν στην εμβέλεια και, το πιο σημαντικό, το αποτέλεσμα της εκτέλεσης του τεστ:


  ⍟ These new definitions are ok to `add`:

    hello.test : Test.Test
    tests      : [Result]

Now evaluating any watch expressions (lines starting with
`>`)... Ctrl+C cancels.


  6 | test> tests = runAll [hello.test]

  🚫 FAILED

Ας πούμε ότι τα τεστ σου δεν πέρασαν την πρώτη φορά. Γύρνα πίσω στην επεξεργασία του αρχείου σου myExercise.u και, μόλις το αποθηκεύσεις, μπορείς να κάνεις update

I found and typechecked these definitions in ~/Exercism/unison/hello-world/hello.u. If you do an
`add` or `update`, here's how your codebase would change:

  ⍟ These names already exist. You can `update` them to your new definition:

    hello : Text

hello-world/main> update

⍟ I've updated these names to your new definition:

  hello : Text

Στη συνέχεια, μπορούμε να φορτώσουμε ξανά τα τεστ μας για να δούμε αν άλλαξε κάτι!

hello-world/main> load hello.test.u
  Now evaluating any watch expressions (lines starting with `>`)... Ctrl+C cancels.


  6 | test> tests = runAll [hello.test]

  ✅ Passed : Passed 1 tests.

Χρήσιμες εντολές του UCM

Για να δεις μια λίστα με τις διαθέσιμες εντολές για να αλληλεπιδράς με τη βάση κώδικα σου, τρέξε το help στη γραμμή εντολών του Unison Codebase Manager. Η λίστα με τις εντολές του UCM περιγράφεται επίσης στον ιστότοπό μας. Ορίστε μερικές που μπορεί να σου φανούν χρήσιμες:

  • add: Προσθέτει τους νέους ορισμούς από το αρχείο .u στη βάση κώδικα.
  • update: Λειτουργεί όπως το add, μόνο που αν ένας ορισμός στο αρχείο έχει το ίδιο όνομα με έναν υπάρχοντα ορισμό, το όνομα ενημερώνεται ώστε να δείχνει στον νέο ορισμό.
    • Αν από τον παλιό ορισμό εξαρτώνται άλλοι ορισμοί, το update θα διαδώσει αυτόματα την αλλαγή αν είναι δυνατόν, ή θα δημιουργήσει ένα στοιχείο todo για μελλοντική αναδιαμόρφωση.
  • load: Αναλύει, ελέγχει τους τύπους και αξιολογεί το δεδομένο πρόχειρο αρχείο με κατάληξη .u. Μόλις ελεγχθούν οι τύποι και αξιολογηθεί, μπορείς να προσθέσεις τους όρους στη βάση κώδικα σου.
  • ls: Καταγράφει τα περιεχόμενα ενός χώρου ονομάτων
  • view: Δείχνει τον πηγαίο κώδικα ενός δεδομένου ορισμού Unison
  • ui: Ανοίγει το τοπικό UI της βάσης κώδικα
  • exit: Κλείνει το UCM