Цветелин качи първо решение на 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стойности. Така може да се получи: