Size: a a a

Rust — русскоговорящее сообществo

2020 September 27

KK

Kirill (Cykooz) Kuzm... in Rust — русскоговорящее сообществo
Спасибо, будет над чем подумать. Хотя это всё конечно не ахти как удобно. Ещё и перекопилять надо все тесты при изменениях.
А если появится вторая, третья и т.д. "зависимость" для теста в таком же стиле - вообще станет хреново всё это комбинировать.
Например надо прогнать тест, со всеми комбинациями реализации трейта и всеми вариантами некоторых исходных данных (например разные типы изображений).
источник

KK

Kirill (Cykooz) Kuzm... in Rust — русскоговорящее сообществo
Пробовал гуглить, но ничего похожего на pytest из Python не нашёл. Только какие-то попытки реализовать часть его функциональности. И то они были довольно ограничены и не работали в случае, когда тестируемые комбинации определяются в рантайме.
источник

Э

Эрик in Rust — русскоговорящее сообществo
Kirill (Cykooz) Kuzminykh
Пробовал гуглить, но ничего похожего на pytest из Python не нашёл. Только какие-то попытки реализовать часть его функциональности. И то они были довольно ограничены и не работали в случае, когда тестируемые комбинации определяются в рантайме.
А как ты хочешь тесты в рантайме определять?
источник

Э

Эрик in Rust — русскоговорящее сообществo
У раста рантайма нет. Чтобы тестить с рантаймом, надо самому написать рантайм.
источник

KK

Kirill (Cykooz) Kuzm... in Rust — русскоговорящее сообществo
Ну вот выше была идея с вектором ошибок. В принципе вариант не плохой, но писать его самому и ещё сделать поддержку запуска только тех тестов которые поломались - это будет непросто (для меня).
источник

Э

Эрик in Rust — русскоговорящее сообществo
Ну вот это и есть написание рантайма.
источник

Э

Эрик in Rust — русскоговорящее сообществo
А вообще, не вижу проблемы, если все твои функции могут превратиться в Box<dyn FnOnce() -> R>:

fn runtime_test<I, F, R>(calls: I) -> Vec<Result<R>>
where
I: Iterator<Item = F>,
F: FnOnce() -> R + UnwindSafe,
{
calls.into_iter().fold(Vec::new(), |mut v, call| {
 v.push(std::panic::catch_unwind(call));
 v
})
}
источник

Э

Эрик in Rust — русскоговорящее сообществo
R может быть каким-нибудь Result<(), anyhow::Error>
источник

KK

Kirill (Cykooz) Kuzm... in Rust — русскоговорящее сообществo
Печаль-печальная при использовании enum_dispatch не работает автокомплит в Rust-плагине для Idea (в CLion). Видимо он не умеет "раcкрывать" код, который генерится процедурными макросами. 😞
источник

KK

Kirill (Cykooz) Kuzm... in Rust — русскоговорящее сообществo
Видимо придётся пока откатится обратно на Box<dyn Trait>
источник

Э

Эрик in Rust — русскоговорящее сообществo
vim + <C-x><C-p>, лол.
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
В виме с автодополнением всё тоже печально, увы
источник

Э

Эрик in Rust — русскоговорящее сообществo
Хотя и это не всегда выручает.
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Кажется, сейчас раст заточен под вскод
источник

Э

Эрик in Rust — русскоговорящее сообществo
Ну не знаю, у меня автодополнение нормально работает.
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Эрик
Ну не знаю, у меня автодополнение нормально работает.
Покажи конфиг
источник

Э

Эрик in Rust — русскоговорящее сообществo
источник

KK

Kirill (Cykooz) Kuzm... in Rust — русскоговорящее сообществo
Для меня самое печальное в Rust - это макросы. Они накорню зарезали мечты о том, что наконец-то после многих лет с Python я смогу нормально юзать в IDE всякие автокмплиты, без необходимости смотреть в код реализации (иногда его ещё и найти надо). В Rust с макросами даже код реализации найти сложно - он генерится макросом, который надо ещё самому распарсить в голове.
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
А какой language server?
источник

Э

Эрик in Rust — русскоговорящее сообществo
источник