Решение на Network Packets от Ричи Хаджиев
Обратно към всички решения
Към профила на Ричи Хаджиев
Резултати
- 9 точки от тестове
- 0 бонус точки
- 9 точки общо
- 7 успешни тест(а)
- 8 неуспешни тест(а)
Код
Лог от изпълнението
Compiling solution v0.1.0 (/tmp/d20200111-2173579-15020ym/solution)
Finished test [unoptimized + debuginfo] target(s) in 3.58s
Running target/debug/deps/solution-a73e64ec87929bd0
running 0 tests
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
Running target/debug/deps/solution_test-38971695424b36d5
running 15 tests
test solution_test::test_construct_packet_from_unicode ... ok
test solution_test::test_construct_packet_no_remainder ... ok
test solution_test::test_construct_packet_with_remainder ... ok
test solution_test::test_construct_packet_with_remainder_cyrillic ... ok
test solution_test::test_consuming_packets ... FAILED
test solution_test::test_deserialize_invalid_packet ... FAILED
test solution_test::test_deserialize_packet ... FAILED
test solution_test::test_deserialize_unicode_packet ... FAILED
test solution_test::test_full_roundtrip ... ok
test solution_test::test_full_roundtrip_for_zero_size_string ... ok
test solution_test::test_invalid_packet_combination ... FAILED
test solution_test::test_iterating_packets ... FAILED
test solution_test::test_iterating_packets_for_zero_size_string ... FAILED
test solution_test::test_serialize_packet ... ok
test solution_test::test_zero_size ... FAILED
failures:
---- solution_test::test_consuming_packets stdout ----
thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: Timeout', src/libcore/result.rs:1165:5
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace.
---- solution_test::test_deserialize_invalid_packet stdout ----
thread 'main' panicked at 'Expression Err(InvalidPacket) does not match the pattern "Err(PacketError::InvalidChecksum)"', tests/solution_test.rs:157:5
---- solution_test::test_deserialize_packet stdout ----
thread 'main' panicked at 'assertion failed: `(left == right)`
left: `(Packet { version: 1, payload_size: 3, payload: [120, 121, 122], checksum: 108 }, [])`,
right: `(Packet { version: 1, payload_size: 3, payload: [120, 121, 122], checksum: 363 }, [])`', tests/solution_test.rs:114:5
---- solution_test::test_deserialize_unicode_packet stdout ----
thread 'main' panicked at 'assertion failed: `(left == right)`
left: `(Packet { version: 1, payload_size: 10, payload: [209, 133, 208, 184, 209, 130, 209, 128, 208, 190], checksum: 23 }, [])`,
right: `(Packet { version: 1, payload_size: 10, payload: [209, 133, 208, 184, 209, 130, 209, 128, 208, 190], checksum: 1808 }, [])`', tests/solution_test.rs:131:5
---- solution_test::test_invalid_packet_combination stdout ----
thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: Timeout', src/libcore/result.rs:1165:5
---- solution_test::test_iterating_packets stdout ----
thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: Timeout', src/libcore/result.rs:1165:5
---- solution_test::test_iterating_packets_for_zero_size_string stdout ----
thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: Timeout', src/libcore/result.rs:1165:5
---- solution_test::test_zero_size stdout ----
note: test did not panic as expected
failures:
solution_test::test_consuming_packets
solution_test::test_deserialize_invalid_packet
solution_test::test_deserialize_packet
solution_test::test_deserialize_unicode_packet
solution_test::test_invalid_packet_combination
solution_test::test_iterating_packets
solution_test::test_iterating_packets_for_zero_size_string
solution_test::test_zero_size
test result: FAILED. 7 passed; 8 failed; 0 ignored; 0 measured; 0 filtered out
error: test failed, to rerun pass '--test solution_test'
История (1 версия и 8 коментара)
Ричи качи първо решение на 03.12.2019 16:41 (преди почти 6 години)
Този import е малко специфичен. Бих use-нал
std::str
, за да можеш да кажешstr::from_utf8
-- по-ясно е койfrom_utf8
викаш, защото има иString::from_utf8
примерно.Ако не имплементираш
description
, този метод просто използваDisplay
форматирането -- това беше идеята зад имплементацията наDisplay
. Можеше тези описания да ги сложиш по-горе.Имената с
_half
може би не са съвсем точни -- не делим байтовете точно по средата. Бих използвалfirst_part
,second_part
може би.Метода
extend_from_slice
щеше да ти свърши работа тук.Няма нужда да декларираш отделна променлива, която да запазиш тук. Можеш да използваш резултата от
match
клаузата:Also, би могъл да конвертираш
Option
-а вResult
и да използваш оператор?
за да избегнеш match клаузата изцяло:Когато имаш функция, която връща няколко неща в tuple, можеш да ги pattern-match-неш:
В тази функция имаш безкраен цикъл. Никъде нямаш край на итерацията, никъде не проверяваш, че е време да върнеш
None
. Този код в началото наnext
щеше да ти даде още 3 минаващи теста: