Решение на Hangman от Димитър Узунов
Резултати
- 14 точки от тестове
- 0 бонус точки
- 14 точки общо
- 14 успешни тест(а)
- 1 неуспешни тест(а)
Код
Лог от изпълнението
Compiling solution v0.1.0 (file:///tmp/d20171210-6053-1m006qh/solution)
Finished dev [unoptimized + debuginfo] target(s) in 5.68 secs
Running target/debug/deps/solution-3f98bfa5c86a5dd9
running 0 tests
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
Running target/debug/deps/solution_test-3d9e4ea2eafbbc82
running 15 tests
test solution_test::test_command_parsing_cyrillic ... ok
test solution_test::test_command_parsing_extra_stuff ... ok
test solution_test::test_command_parsing_full_words ... ok
test solution_test::test_command_parsing_partial_words ... ok
test solution_test::test_command_parsing_spacing ... ok
test solution_test::test_command_parsing_special ... ok
test solution_test::test_game_basic ... ok
test solution_test::test_game_cyrillic ... ok
test solution_test::test_game_display ... ok
test solution_test::test_game_error ... FAILED
test solution_test::test_game_guess_basic ... ok
test solution_test::test_game_guess_state_lose ... ok
test solution_test::test_game_guess_state_won ... ok
test solution_test::test_game_guess_word ... ok
test solution_test::test_game_over_guesses ... ok
failures:
---- solution_test::test_game_error stdout ----
thread 'solution_test::test_game_error' panicked at 'Expected Some(GameError::InvalidSolution(_)) to match None', tests/solution_test.rs:38:4
note: Run with `RUST_BACKTRACE=1` for a backtrace.
failures:
solution_test::test_game_error
test result: FAILED. 14 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out
error: test failed, to rerun pass '--test solution_test'
История (2 версии и 3 коментара)
Димитър качи решение на 08.12.2017 13:56 (преди почти 8 години)
Готин начин за организация на кода, харесва ми :). Нещо малко, което можеш да направиш, за да съкратиш return типа, е да направиш type alias:
type CommandResult = Result<Command, <Command as FromStr>::Err>;
Това трябва да стане извън impl блока, иначе компилатора се оплаква за асоциирани типове. Слага малко индирекция, но може да опрости нещата. Ако командите бяха в свой модул, можеше директно да си дефинираш тип Result, както се прави в io модула.
Грешен метод -- трябва да върнеш грешка ако !solution.chars().all(&char::is_alphabetic). Амперсанда пред char::is_alphabetic също не ти трябва -- по този начин вземаш reference към глобално достъпния pointer към функция. Самото char::is_alphabetic би трябвало да има размер всичко на всичко 1 pointer, така че не печелиш нищо.
Стабилно решение. Другия път, още малко тестване, за да хванеш бъгове като този с any/all :).

Готин начин за организация на кода, харесва ми :). Нещо малко, което можеш да направиш, за да съкратиш return типа, е да направиш type alias:
Това трябва да стане извън
implблока, иначе компилатора се оплаква за асоциирани типове. Слага малко индирекция, но може да опрости нещата. Ако командите бяха в свой модул, можеше директно да си дефинираш типResult, както се прави вioмодула.Грешен метод -- трябва да върнеш грешка ако
!solution.chars().all(&char::is_alphabetic). Амперсанда предchar::is_alphabeticсъщо не ти трябва -- по този начин вземаш reference към глобално достъпния pointer към функция. Самотоchar::is_alphabeticби трябвало да има размер всичко на всичко 1 pointer, така че не печелиш нищо.