Size: a a a

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

2020 September 27

KK

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

Э

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

Э

Эрик in Rust — русскоговорящее сообществo
Если хоть одна есть, то фейлишь тест после вывода.
источник

KK

Kirill (Cykooz) Kuzm... in Rust — русскоговорящее сообществo
А если там тупо паника будет?
источник

KK

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

Э

Эрик in Rust — русскоговорящее сообществo
Kirill (Cykooz) Kuzminykh
А если там тупо паника будет?
Ну, значит паника.
источник

KK

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

KK

Kirill (Cykooz) Kuzm... in Rust — русскоговорящее сообществo
Второй тупой вариант - bash скрипт, который будет менять ENV переменные с указанием какую имплементацию использовать и запускать cargo test 😊
источник

Э

Эрик in Rust — русскоговорящее сообществo
Kirill (Cykooz) Kuzminykh
Придётся городить что-то, что бы ловить панику и "складывать" её тоже в вектор с ошибками 😊
Всё уже есть в удобном интерфейсе.
источник

Ct

Casual tears in Rust — русскоговорящее сообществo
Kirill (Cykooz) Kuzminykh
Второй тупой вариант - bash скрипт, который будет менять ENV переменные с указанием какую имплементацию использовать и запускать cargo test 😊
Макросом нагенерить тестов на каждую имплементацию не вариант?
источник

KK

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

Ct

Casual tears in Rust — русскоговорящее сообществo
Kirill (Cykooz) Kuzminykh
Может и был бы вариант, если бы не факт что список имплементаций, которые надо тестировать определяется в рантайме, а не в момент компиляции. Некоторые имплементации медленные и требуют доступ к внешним сервисам - запускать с ними тесты надо относительно редко.
Положить медленные в отдельный модуль и спрятать под фичу?
источник

AZ

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

KK

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

Ct

Casual tears in Rust — русскоговорящее сообществo
Kirill (Cykooz) Kuzminykh
Однако муторно это как-то. Мало того что надо в конфиге прописать параметры подключения в внешнему сервису, так ещё и не забыть запустить тесты с указанием фичи. И для каждой новой имплементации над: добавить фичу и прописать её в макрос
Зачем ее в макрос прописывать?
источник

KK

Kirill (Cykooz) Kuzm... in Rust — русскоговорящее сообществo
Casual tears
Зачем ее в макрос прописывать?
А как иначе макрос сгенерит или не сгенерит тест для нужной имплементации в зависимости от фичи?
источник

Ct

Casual tears in Rust — русскоговорящее сообществo
Имеешь условно макрос gen_tests!(impl_type). Пишешь
#[cfg(feature = "slow")]
mod slow_tests {
  gen_tests!(slow_impl1);
  gen_tests!(slow_impl2);
}
источник

Э

Эрик in Rust — русскоговорящее сообществo
Kirill (Cykooz) Kuzminykh
Однако муторно это как-то. Мало того что надо в конфиге прописать параметры подключения в внешнему сервису, так ещё и не забыть запустить тесты с указанием фичи. И для каждой новой имплементации над: добавить фичу и прописать её в макрос
macro_rules test_impls {
($($test_name:ident | $t:ty ;)*) => {
 $(
  #[test]
  fn $test_name() {
   <$t as Trait>::trait_fn();
  }
 )*
};
}

test_impls! {
usize_test | usize;
isize_test | isize;
}
источник

Э

Эрик in Rust — русскоговорящее сообществo
Если от фичи зависеть может, то делаешь
($( $(#[cfg($feature:tt)])? $test_name:ident | $t:ty ;)*) => { $( $(#[cfg($feature)])? fn $test_name() { … } )* };
источник

Э

Эрик in Rust — русскоговорящее сообществo
Используешь как
test_impls! {
usize_test | usize;
isize_test | isize;
#[cfg(long_long_long)] u128_test | u128;
}
источник