Aprende a testar os teus exercícios de Unison no Exercism
O Unison Codebase Manager (UCM) é a ferramenta que executa a linguagem de programação Unison e que te permite navegar pelo código Unison que escreveste e guardaste.
💡 Lembra-te: o código Unison não é guardado como conteúdo de ficheiros de texto. Por isso, precisamos de uma ferramenta que nos permita alterar e executar programas Unison.
Escrever código Unison é tão simples como abrir o terminal que preferires e correr o comando ucm na pasta onde vais escrever o teu código Unison. Depois, podes usar o teu editor de texto preferido para criar ou abrir um ficheiro com o sufixo .u, como scratch.u ou hello.u. A maior parte do teu fluxo de trabalho vai consistir em navegar entre a instância da linha de comandos do ucm que está a correr e o teu ficheiro .u. O UCM deteta automaticamente as alterações no teu ficheiro com sufixo .u quando o guardas.
Em vez de uma estrutura de pastas, as bases de código Unison organizam-se através de "namespaces". Vais explorar o namespace da biblioteca padrão, chamado base, à procura de funções e tipos de dados úteis, e vais criar os teus próprios à medida que escreves código Unison. No UCM, a navegação na base de código faz-se com os comandos ls e view; servem, respetivamente, para listar o conteúdo de um namespace e para ver o código-fonte.
Embora possas navegar e ver a tua base de código através da CLI do UCM, também podes querer ver uma representação gráfica agradável do teu trabalho. Podes fazê-lo executando o comando ui na CLI do UCM. Este abre uma janela do navegador com uma vista do código da tua base de código. A interface local da base de código também é uma ótima forma de explorar as funções da nossa biblioteca padrão, chamada base, o que pode ser útil para resolveres os exercícios. Lê mais sobre a interface local da base de código aqui.
Podes praticar o fluxo de trabalho de programação do Unison com o percurso pela linguagem Unison.
Cria um novo projeto com o comando project.create e indica o nome que lhe queres dar (por exemplo, project.create hello-world)
Com o UCM a vigiar a pasta do exercício, faz as tuas alterações no ficheiro <myFileName>.u
Guarda o ficheiro <myFileName>.u
Se o ficheiro passar na verificação de tipos, executa os comandos add ou update do UCM
<myFileName>.u até que compileExecuta o comando load <myFileName>.test.u na CLI do UCM para trazer os testes para o âmbito e executá-los
Se estás a resolver um exercício do Exercism na linha de comandos, o mais provável é implementares a tua solução na pasta com o nome do exercício em causa. Por exemplo, se o exercício for hello-world, deves abrir o ucm a partir da linha de comandos depois de fazeres cd para ~/exercism/unison/hello-world e criar um projeto no ucm (por exemplo, project.create hello-world). Faz as alterações da tua implementação no ficheiro hello.u e, quando estiveres satisfeito com ela, introduz o comando add ou update na CLI do Unison Codebase Manager (UCM) para adicionar o teu trabalho do ficheiro à base de código.
O ficheiro que contém os testes de cada exercício tem o sufixo .test.u. Vais querer usar o comando load no UCM para trazer os testes para o âmbito e executá-los. O comando load recebe um caminho de ficheiro como argumento. Eis um exemplo disso para o exercício hello world e o projeto hello-world:
hello-world/main> load hello.test.u
Deves ver uma mensagem do UCM sobre os termos que foram trazidos para o âmbito e, mais importante, o resultado da execução do teste:
⍟ 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
Imaginemos que os teus testes não passaram à primeira. Volta a editar o teu ficheiro myExercise.u e, ao guardares, podes fazer 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
A seguir, podemos voltar a carregar os testes para ver se algo mudou!
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.
Para veres uma lista dos comandos disponíveis para interagires com a tua base de código, executa help na CLI do Unison Codebase Manager. A lista de comandos do UCM também está descrita no nosso site. Aqui ficam alguns que te podem ser úteis:
add: Adiciona à base de código as novas definições do ficheiro .u.update: Funciona como o add, exceto que, se uma definição no ficheiro tiver o mesmo nome que uma definição já existente, o nome é atualizado para apontar para a nova definição.
update propaga automaticamente a alteração, se possível, ou cria um item todo para refatoração futura.load: Analisa, verifica os tipos e avalia o ficheiro de rascunho com sufixo .u indicado. Depois de verificado e avaliado, podes adicionar os termos à tua base de código.ls: Lista o conteúdo de um namespaceview: Mostra o código-fonte de uma determinada definição Unisonui: Abre a interface local da base de códigoexit: Fecha o UCM