Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Модуль 3.3 — Инструментарий Cargo

Слайды

Упражнение 3.3.1: FizzBuzz

В этом упражнении вы попрактикуетесь в написании модульного теста и используете средства бенчмаркинга Rust, чтобы оптимизировать приложение FizzBuzz. Понадобится cargo-criterion — инструмент, который запускает бенчмарки и создаёт наглядные отчёты. Установить его можно командой

cargo install cargo-criterion --version=1.1.0

3.3.1.A Тестируем FizzBuzz ⭐

Откройте exercises/3-crate-engineering/3-cargo-tooling/1-fizzbuzz/src/lib.rs. Создайте модульный тест, который проверяет корректность функции fizz_buzz. Для этого можно использовать макрос include_str, чтобы включить файл exercises/3-crate-engineering/3-cargo-tooling/1-fizzbuzz/fizzbuzz.out в бинарник как &str. Каждая строка fizzbuzz.out содержит ожидаемый результат функции fizz_buzz для номера строки, переданного в качестве входных данных. Запустить тест можно командой

cargo test

По умолчанию тестовый харнесс (test harness) перехватывает весь вывод и отбрасывает его. Если вы хотите отлаживать тестовый код с помощью печати, можно запустить

cargo test -- --nocapture

чтобы харнесс не перехватывал вывод.

3.3.1.B Бенчмаркинг FizzBuzz ⭐⭐

Вероятно, вы заметили, что реализация fizz_buzz не очень оптимизирована. Мы используем criterion, чтобы измерить производительность fizz_buzz. Чтобы запустить бенчмарк, выполните следующую команду из каталога exercises/3-crate-engineering/3-cargo-tooling/1-fizzbuzz/:

cargo criterion

Эта команда запустит бенчмарки и выведет статистику в терминал. Она также создаёт HTML-отчёты с графиками, которые находятся в target/criterion/reports. Например, target/criterion/reports/index.html — это сводка по всем бенчмаркам. Откройте её в браузере и посмотрите.

Ваша задача — оптимизировать функцию fizz_buzz и с помощью cargo-criterion измерить эффект каждого изменения. Не бойтесь менять сигнатуру fizz_buzz, если, например, хотите уменьшить количество аллокаций. Однако убедитесь, что функция по-прежнему выдаёт правильный результат. Насколько быстро вы сможете сделать FizzBuzz?