Neprogramátor/Kouzelné lektvary: spustitelné soubory a testy
Kouzelný lektvar vytvoří pro čaroděje kouzelná hůlka z dopisu, který pro kouzelnou hůlku čaroděj napsal. Dokumentace kouzelného jazyka Racket popisuje, jak vytvořit spustitelné soubory, tedy kouzelné lektvary, které stačí spustit, tedy vypít, aby se vykonaly čarodějem sepsané kouzelné věty. Spustitelné soubory lze samozřejmě vytvořit i ve vývojovém prostředí DrRacket.
Čarodějové se při psaní dopisů mohou splést. Vlastně se pletou dost často, a to i když se snaží sebevíce. Otázkou tedy není, jestli kouzelný dopis obsahuje chyby, protože odpověď je "ano". Ta správná, důležitá otázka zní -- jak snadno se chyby najdou a hlavně jak rychle se dají opravit. S hledáním a opravováním chyb pomáhá testování. Dokumentace kouzelného jazyka Racket popisuje, jak takové testování zařídit v kouzelném dopise.
Je větší 20 nebo číslo?
editovatProblém, pro jehož řešení napsaném v kouzelném jazyce vytvoří kouzelná hůlka kouzelný lektvar, tedy spustitelný soubor, může být:
Podstatné jméno (číslo) 20 je pojmenované jako dvacet
a nové kouzelné sloveso větší-než
pracuje s jedním podstatným jménem (parametrem) číslo
: jestli je číslo
větší než dvacet
, kouzelné sloveso větší-než
vrátí nové podstatné jméno (text) "Větší je číslo."
, kde číslo
v textu je nahrazené konkrétní aktuální hodnotou; jinak vrátí "Větší je 20."
.
Řešením takového problému zapsaném kouzelným jazykem v dopisu pro kouzelnou hůlku může být třeba:
; Je větší 20 nebo číslo?
(define dvacet 20)
(define (větší-než číslo)
(if (> číslo dvacet)
(string-append "Větší je " (number->string číslo) ".")
(string-append "Větší je " (number->string dvacet) ".")))
(větší-než 11)
(větší-než 27)
Výsledek vykonání dopisu je potom:
"Větší je 20." "Větší je 27."
Z minulé kapitoly lze proto s výhodou použít postup řešení:
$ git log commit c25ad0493e6d4d51d789da51055014def4ae7bb1 (HEAD -> master) Author: Jméno Čaroděje <email@carodeje.xyz> Date: Sun Jan 21 00:19:39 2024 +0100 Přidej řešení "Je větší 20 nebo číslo?" commit 8af19a8bafa550e7f8f49770e3d230a114b26d6c Author: Jméno Čaroděje <email@carodeje.xyz> Date: Sat Jan 20 23:47:27 2024 +0100 Přidej licenci a readme
Je tedy potřeba:
git add LICENSE README git commit -m"Přidej licenci a readme" git add vetsi-nez.rkt git commit -m"Přidej řešení 'Je větší 20 nebo číslo?'"
A dohoda je, že v názvech souborů a adresářů se diakritika nepoužívá.
Vytvoření spustitelného souboru
editovatSpustitelný soubor se v DrRacket vytvoří kliknutím na Racket
v menu a potom na Create Executable...
, čímž se otevře dialogové okno, kde stačí ponechat výchozí nastavení a kliknout na Create
.
V repozitáři vetsi-nez
se kromě souborů LICENSE
, README
a vetsi-nez.rkt
objeví i soubor vetsi-nez
. Ten lze potom spustit z příkazové řádky:
$ ./vetsi-nez "Větší je 20." "Větší je 27."
Testy v kouzelném dopisu
editovatNa začátku kouzelného dopisu je potřeba kouzelnou hůlku upozornit na to, že dopis kromě kouzelných vět obsahuje i speciální kouzelné věty, které slouží výhradně čarodějům k testování jejich kouzelný vět. To čaroděj udělá kouzelnou větou
(module+ test (require rackunit))
kterou přidá do repozitáře:
git add vetsi-nez.rkt git commit -m"Přidej do kódu rackunit"
Když chce potom čaroděj otestovat, že výsledek vykonání kouzelné věty odpovídá tomu, co očekává, použije kouzelné sloveso check-equal?
:
(module+ test
(check-equal? (větší-než 11)
"Větší je 20."))
git add vetsi-nez.rkt git commit -m"Přidej test, který projde"
Výsledek vykonání kouzelného dopisu se nezmění:
"Větší je 20." "Větší je 27."
Vývojové prostředí DrRacket po vykonání dopisu pro kouzelnou hůlku s testem bez chyby.
Jak ale čaroděj pozná, když udělá chybu? Když čaroděj otestuje kouzelnou větu, která neplatí:
(module+ test
(check-equal? (větší-než 27)
"Větší je 20."))
git add vetsi-nez.rkt git commit -m"Přidej test, který selže"
kouzelná hůlka jej upozorní:
"Větší je 20." "Větší je 27."
. FAILURE name: check-equal? location: vetsi-nez.rkt:15:2 actual: "Větší je 27." expected: "Větší je 20."
Vývojové prostředí DrRacket po vykonání dopisu pro kouzelnou hůlku, který obsahuje test s chybou.
Vlastně je od kouzelné hůlky hezké, že čaroděje obtěžuje jen tehdy, když je to nezbytně nutné.
Repozitář s testy
editovatRepozitář s testy lze prozkoumat pomocí git:
$ git clone https://codeberg.org/Neprogramator/tested-greater-than.git
◄ Neprogramátor/Čarodějnické řemeslo: zdrojové kódy a repozitář | Kouzelné lektvary: spustitelné soubory a testy |