Решение на 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
) и да събереш сериализациите на тези пакети.Ти си обърнала логиката -- този метод се вика като помощна функция на горния, а имаше логика да е обратното. Не сме се разбрали за условието.