Ростислав качи първо решение на 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() и в кода, и в тестовете, всичко ще си минава. Сравнително малко вероятно е, но няма как да допуснеш такава грешка ако имаш сравнение между баба и абаб (примерно).
