Ростислав качи първо решение на 13.11.2021 02:32 (преди почти 4 години)
Когато пишеш тестове, добра идея е те да бъдат лесни за валидация на ръка. Ако имаш тест, който проверява, че баба
се обръща до абаб
, много лесно се вижда какво се очаква като вход и като изход, в сравнение със ^%&#$%SDF
. Повечето от тестовите ти данни са доста хаотични -- това не е полезно. За кода няма значение дали си написал asdfsafjlkjslkjf
или четима дума
, но за хората, които четат, определено има.
Същото се отнася за писането на код в тестове. Отне ми известно време ментално за изпарся:
let mut expected = "явекявекоас".chars().rev().collect::<String>();
expected.push_str(" 5");
assert_eq!((Cell(-5) + Cell(String::from("явекявекоас"))).0, expected);
Чакай, входа е явекявекоас
, изхода също? Но не, всъщност expected
обръща този низ. Добре де, тогава защо не го обърна на ръка?
let mut expected = String::from("саокевякевя 5");
assert_eq!((Cell(-5) + Cell(String::from("явекявекоас"))).0, expected);
Входа е статичен -- не е полезно да го генерираш динамично за самия тест, и не е удобно откъм четимост. Донякъде може би проблема е свързан точно с това колко е хаотичен низа -- трудно е ментално да се обърне (аз го пуснах в irb
за да го обърна).
Няма голямо значение и колко е дълъг низа -- няма различен handling за дълги и кратки низове.
Basically, покрил си доста случаи, включително unicode, и това е супер, но е добра идея да се постараеш тестовете ти да са по-прости :). Не само ще улесниш живота на хора, които ги четат, но и намаляваш броя на неща, които могат да се объркат -- ако изпуснеш .rev()
и в кода, и в тестовете, всичко ще си минава. Сравнително малко вероятно е, но няма как да допуснеш такава грешка ако имаш сравнение между баба
и абаб
(примерно).