Дізнайтеся, як тестувати власні вправи Unison на Exercism
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 CLI, можливо, нам захочеться побачити гарне графічне подання своєї роботи. Це можна зробити, виконавши команду ui в UCM CLI. Вона відкриє вікно браузера з оглядом коду нашої кодової бази. Локальний інтерфейс кодової бази також чудово підходить для дослідження функцій нашої стандартної бібліотеки, яка називається base, і вони можуть стати в пригоді під час виконання вправ. Докладніше про локальний інтерфейс кодової бази можна прочитати тут.
Потренувати робочий процес програмування Unison можна за допомогою туру мовою Unison.
Створімо новий проєкт командою project.create і вкажімо для нього назву (наприклад, project.create hello-world)
Поки UCM стежить за каталогом вправи, вносьмо зміни у файл <myFileName>.u
Зберігаймо файл <myFileName>.u
Якщо файл проходить перевірку типів, виконуймо команди UCM add або update
<myFileName>.u, доки він не скомпілюєтьсяВиконуймо команду load <myFileName>.test.u в UCM CLI, щоб додати тести в область видимості та запустити їх
Якщо ми працюємо над вправою Exercism у командному рядку, то, найімовірніше, будемо писати своє рішення в каталозі, названому на честь відповідної вправи. Наприклад, якщо вправа називається hello-world, потрібно після cd у ~/exercism/unison/hello-world відкрити ucm з командного рядка і створити проєкт у ucm (наприклад, project.create hello-world). Вносьмо зміни в реалізацію у файлі hello.u, і коли реалізація нас задовольнить, введімо команду add або update у командному рядку Unison Codebase Manager (UCM), щоб додати нашу роботу з файлу в кодову базу.
Файл, який містить тести для кожної вправи, має суфікс .test.u. Щоб додати тести в область видимості та запустити їх, скористаймося командою load у UCM. Команда load приймає як аргумент шлях до файлу. Ось як це може мати вигляд для вправи hello world і проєкту 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.
Щоб побачити список доступних команд для роботи з кодовою базою, виконаймо help у командному рядку Unison Codebase Manager. Список команд UCM також описано на нашому сайті. Ось кілька з них, які можуть стати в пригоді:
add: Додає нові визначення з файлу .u до кодової бази.update: Працює як add, але якщо визначення у файлі має те саме імʼя, що й наявне визначення, імʼя оновлюється так, щоб указувати на нове визначення.
update автоматично поширить зміну, якщо це можливо, або створить елемент todo для майбутнього рефакторингу.load: Розбирає, перевіряє типи й обчислює заданий файл-чернетку із суфіксом .u. Після перевірки типів і обчислення можна додати терміни до кодової бази.ls: Виводить вміст простору іменview: Показує вихідний код заданого визначення Unisonui: Відкриває локальний інтерфейс кодової базиexit: Закриває UCM