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

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


Εγκατάσταση προαπαιτούμενων

Αφού κατεβάσεις επιτυχώς μια άσκηση, θα χρειαστεί να εγκαταστήσεις τα modules του Node.js για να τρέξεις τα τεστ:

cd /path/to/exercise
npm install

Στη συνέχεια, πρόσθεσε τον κατάλογο που περιέχει το εργαλείο γραμμής εντολών pyret στο $PATH σου

# bash
PATH="./node_modules/.bin:$PATH"

# zsh
path=(./node_modules/.bin $path)

# fish
fish_add_path ./node_modules/.bin

Ξεκινώντας

Μέσα στον κατάλογο της άσκησης θα υπάρχουν αρκετά αρχεία, αλλά τα δύο πιο σημαντικά είναι το αρχείο της λύσης σου και το αρχείο με τα τεστ. Στο παρακάτω παράδειγμα, έχουμε κατεβάσει την άσκηση Leap.

leap/
├── leap.arr       # Solution file - your code goes here
├── leap-test.arr  # Test cases for the exercise

Για να τρέξεις τα τεστ, χρησιμοποίησε είτε την εντολή exercism test, αν έχεις κατεβάσει το επίσημο Exercism CLI, είτε την εντολή pyret leap-test.arr. Το Pyret θα τρέξει τη σουίτα τεστ, η οποία αποτελείται από μια σειρά από μπλοκ check με ετικέτες, που ελέγχουν το αρχείο της λύσης σου με συγκεκριμένες εισόδους και αναμενόμενα αποτελέσματα. Ένα κρίσιμο κομμάτι αυτής της διαδικασίας είναι να εξάγεις ρητά τμήματα του κώδικά σου, ώστε η σουίτα τεστ να μπορεί να τα δει.

provide

Τα τεστ σε αυτό το track θα κάνουν import το αρχείο σου, δίνοντάς τους πρόσβαση σε ό,τι έχει εξαχθεί ρητά από τον κώδικά σου.

Για να εξάγεις μεταβλητές, πρέπει να προσθέσεις μια εντολή provide στην αρχή του αρχείου σου.

Τα παρακάτω αποσπάσματα κώδικα είναι δύο έγκυροι τρόποι για να εξάγεις τα a, b και c.

# using a list of bindings
provide a, b, c end
# using an object literal
provide {
  a: a,
  b: b,
  c: c
}
end

Μια τρίτη μέθοδος, το provide *, είναι ένας συντομότερος τρόπος για να εξάγεις όλα τα top-level bindings, εκτός από τους προσαρμοσμένους τύπους δεδομένων. Ωστόσο, γενικά δεν συνιστάται, γιατί το Pyret είναι αυστηρό και δεν επιτρέπει το shadowing.

provide-types

Κάποιες ασκήσεις θα απαιτήσουν να εξαχθεί ένας προσαρμοσμένος τύπος δεδομένων για τις ανάγκες των τεστ. Σε αυτές τις περιπτώσεις, μπορείς να χρησιμοποιήσεις μια εντολή provide-types. Επειδή ένας τύπος δεδομένων έχει επιπλέον συναρτήσεις που μπορεί να μην έχουν εξαχθεί, συνιστάται να χρησιμοποιήσεις το provide-types * παρά την ανησυχία για το shadowing.

provide-types *

data MyPoint:
  | two-dim(x, y)
  | three-dim(x, y, z)
end

Όλα τα stubs των ασκήσεων θα έχουν έτοιμες είτε εντολές provide είτε εντολές provide-types για να τις χρησιμοποιήσεις.