Цветелин качи първо решение на 21.10.2020 22:35 (преди почти 5 години)
Загледай се в тази част от условието:
/// - String със съдържание "Fizzbuzz" ако числото се дели и на 3, и на 5
Имаш много тънка грешчица :)
Към профила на Цветелин Цецков
Compiling solution v0.1.0 (/tmp/d20201028-2816268-g7puhb/solution) Finished test [unoptimized + debuginfo] target(s) in 3.08s Running target/debug/deps/solution-ebb42508826ef2b4 running 4 tests test tests::empty_vector_test ... ok test tests::fizz_buzz_transformer_test ... ok test tests::generator_test ... ok test tests::same_behaviour_test ... ok test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out Running target/debug/deps/solution_test-9e954a53ed808c89 running 10 tests test solution_test::test_change_label_basic ... ok test solution_test::test_change_label_invalid ... ok test solution_test::test_classic1 ... ok test solution_test::test_classic2 ... ok test solution_test::test_coefficients1 ... ok test solution_test::test_coefficients2 ... ok test solution_test::test_coefficients_invalid ... FAILED test solution_test::test_struct_basic ... ok test solution_test::test_struct_invalid ... FAILED test solution_test::test_zeroes ... ok failures: ---- solution_test::test_coefficients_invalid stdout ---- thread 'main' panicked at 'attempt to calculate the remainder with a divisor of zero', src/lib.rs:26:14 thread 'main' panicked at 'attempt to calculate the remainder with a divisor of zero', src/lib.rs:24:14 thread 'main' panicked at 'assertion failed: catch_unwind(|| { custom_buzz(10, 3, 1); }).is_err()', tests/solution_test.rs:66:5 ---- solution_test::test_struct_invalid stdout ---- thread 'main' panicked at 'attempt to calculate the remainder with a divisor of zero', src/lib.rs:26:14 thread 'main' panicked at 'attempt to calculate the remainder with a divisor of zero', src/lib.rs:24:14 thread 'main' panicked at 'assertion failed: catch_unwind(|| { fizzbuzzer!(3, 1); }).is_err()', tests/solution_test.rs:102:5 failures: solution_test::test_coefficients_invalid solution_test::test_struct_invalid test result: FAILED. 8 passed; 2 failed; 0 ignored; 0 measured; 0 filtered out error: test failed, to rerun pass '--test solution_test'
Загледай се в тази част от условието:
/// - String със съдържание "Fizzbuzz" ако числото се дели и на 3, и на 5
Имаш много тънка грешчица :)
Вместо .iter()
, което итерира по reference, можеш да използваш .into_iter()
, което ще вземе ownership, ще консумира подадения вектор, и ще итерира по usize
стойности. Така може да се получи:
gen_sequence_one_to(n)
.into_iter()
.map(fizz_buzz_transformer)
.collect()
Изпуснал си условието за коефициенти 0 и 1. Иначе оценявам тестовете и експериментирането с итератори -- keep it up. Откъм тестове, забелязвам, че не си пробвал поредицата нито с различни коефициенти от 3 и 5, нито с различни низове. Ако например на мястото, където се използва custom_buzz_transformer
използваш fizz_buzz_transformer
, твоите тестове продължават да минават, понеже тестват само за Fizz, Buzz, etc.
В случая Rust би ти дал warning, че имаш неизползвана функция, но за по-интересно (и по-голямо) парче код лесно можеш да допуснеш подобна грешка, която тестовете да не хванат. Проверката, че fizzbuzz и custom buzz-a са еквивалентни с тези коефициенти е добра -- но трябва и да тестваш къде са различни, за да си сигурен :)
Благодаря много за критиката. За в бъдеще се опитам да покрия всички случаи.
Вместо
.iter()
, което итерира по reference, можеш да използваш.into_iter()
, което ще вземе ownership, ще консумира подадения вектор, и ще итерира поusize
стойности. Така може да се получи: