Aprenda a testar seus exercícios de Pyret no Exercism
Depois de baixar um exercício, você vai precisar instalar os módulos do Node.js para rodar os testes:
cd /path/to/exercise
npm install
Depois, adicione o diretório que contém a ferramenta de linha de comando pyret ao seu $PATH
# bash
PATH="./node_modules/.bin:$PATH"
# zsh
path=(./node_modules/.bin $path)
# fish
fish_add_path ./node_modules/.bin
Vai haver vários arquivos dentro do diretório do exercício, mas os dois mais importantes são o arquivo da sua solução e o de testes. No exemplo a seguir, baixamos o exercício Leap.
leap/
├── leap.arr # Solution file - your code goes here
├── leap-test.arr # Test cases for the exercise
Para rodar os testes, use exercism test, caso você tenha baixado a CLI oficial do Exercism, ou rode pyret leap-test.arr.
O Pyret vai rodar a suíte de testes, que consiste em uma série de blocos check rotulados que testam o arquivo da sua solução com entradas específicas e resultados esperados.
Uma parte essencial desse processo é exportar explicitamente partes do seu código para que a suíte de testes consiga enxergá-las.
Os testes desta trilha vão importar o seu arquivo, dando acesso a tudo que for exportado explicitamente do seu código.
Para exportar variáveis, você precisa adicionar uma instrução provide no início do seu arquivo.
Os exemplos a seguir são duas formas válidas de exportar a, b e c.
# using a list of bindings
provide a, b, c end
# using an object literal
provide {
a: a,
b: b,
c: c
}
end
Um terceiro método, provide *, é uma forma abreviada de exportar todas as associações de nível superior, exceto os tipos de dados personalizados.
Porém, em geral ele não é recomendado, porque o Pyret é rígido quanto a não permitir sombreamento.
Alguns exercícios vão exigir que um tipo de dados personalizado seja exportado para fins de teste.
Nessas situações, você pode usar uma instrução provide-types.
Como um tipo de dados tem funções adicionais que podem não ser exportadas, é aconselhável usar provide-types * apesar da questão do sombreamento.
provide-types *
data MyPoint:
| two-dim(x, y)
| three-dim(x, y, z)
end
Todos os esqueletos de exercício já terão instruções provide ou provide-types prontas para você usar.