Решение на Network Packets от Стела Маринова
Резултати
- 15 точки от тестове
- 0 бонус точки
- 15 точки общо
- 11 успешни тест(а)
- 4 неуспешни тест(а)
Код
Лог от изпълнението
Compiling solution v0.1.0 (/tmp/d20200111-2173579-d2fc30/solution)
Finished test [unoptimized + debuginfo] target(s) in 3.71s
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 ... thread '<unnamed>' panicked at 'assertion failed: `(left == right)`
left: `"foo "`,
right: `"foo bar baz"`', tests/solution_test.rs:204:9
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace.
FAILED
test solution_test::test_deserialize_invalid_packet ... ok
test solution_test::test_deserialize_packet ... ok
test solution_test::test_deserialize_unicode_packet ... ok
test solution_test::test_full_roundtrip ... thread '<unnamed>' panicked at 'assertion failed: `(left == right)`
left: `"foo bar baz"`,
right: `"foo bar ba"`', tests/solution_test.rs:215:9
FAILED
test solution_test::test_full_roundtrip_for_zero_size_string ... thread '<unnamed>' panicked at 'called `Result::unwrap()` on an `Err` value: InvalidPacket', src/libcore/result.rs:1165:5
FAILED
test solution_test::test_invalid_packet_combination ... thread '<unnamed>' panicked at 'called `Result::unwrap()` on an `Err` value: Utf8Error { valid_up_to: 2, error_len: None }', src/libcore/result.rs:1165:5
FAILED
test solution_test::test_iterating_packets ... ok
test solution_test::test_iterating_packets_for_zero_size_string ... ok
test solution_test::test_serialize_packet ... ok
test solution_test::test_zero_size ... ok
failures:
---- solution_test::test_consuming_packets stdout ----
thread 'main' panicked at 'assertion failed: `(left == right)`
left: `"foo "`,
right: `"foo bar baz"`', tests/solution_test.rs:197:5
---- solution_test::test_full_roundtrip stdout ----
thread 'main' panicked at 'assertion failed: `(left == right)`
left: `"foo bar baz"`,
right: `"foo bar ba"`', tests/solution_test.rs:210:5
---- solution_test::test_full_roundtrip_for_zero_size_string stdout ----
thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: InvalidPacket', tests/solution_test.rs:221:5
---- solution_test::test_invalid_packet_combination stdout ----
thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: Utf8Error { valid_up_to: 2, error_len: None }', tests/solution_test.rs:232:5
failures:
solution_test::test_consuming_packets
solution_test::test_full_roundtrip
solution_test::test_full_roundtrip_for_zero_size_string
solution_test::test_invalid_packet_combination
test result: FAILED. 11 passed; 4 failed; 0 ignored; 0 measured; 0 filtered out
error: test failed, to rerun pass '--test solution_test'
История (2 версии и 4 коментара)
Стела качи решение на 03.12.2019 14:04 (преди почти 6 години)
За да избегнеш алокацията на друг вектор, можеш да използваш .extend_from_slice(&self.checksum.to_be_bytes()).
Няма нужда индивидуалния пакет да има payload, който е валиден низ. Ако изберем произволен packet size, може да се окаже, че сме отрязали низа по средата на някоя буква. Което е ок -- пакетите имат за цел да бъдат транспортен механизъм.
Логиката тук не е съвсем правилна. Идеята беше не да сериализираш един пакет, а да разделиш низа на байтове с дадения размер, да пакетираш парчетата в пакети (което можеше да направиш с поредни извиквания на Packet::from_source) и да събереш сериализациите на тези пакети.
Ти си обърнала логиката -- този метод се вика като помощна функция на горния, а имаше логика да е обратното. Не сме се разбрали за условието.
Кода започва обещаващо, но лека-полека става малко рошав и допускаш грешки в логиката. Подозирам, че късно си почнала да го пишеш -- другия път по-отрано. Разгледай моето решение като пример за очакваната логика.

За да избегнеш алокацията на друг вектор, можеш да използваш
.extend_from_slice(&self.checksum.to_be_bytes()).Няма нужда индивидуалния пакет да има payload, който е валиден низ. Ако изберем произволен packet size, може да се окаже, че сме отрязали низа по средата на някоя буква. Което е ок -- пакетите имат за цел да бъдат транспортен механизъм.
Логиката тук не е съвсем правилна. Идеята беше не да сериализираш един пакет, а да разделиш низа на байтове с дадения размер, да пакетираш парчетата в пакети (което можеше да направиш с поредни извиквания на
Packet::from_source) и да събереш сериализациите на тези пакети.Ти си обърнала логиката -- този метод се вика като помощна функция на горния, а имаше логика да е обратното. Не сме се разбрали за условието.