Решение на Logging от Гергана Грудева
Към профила на Гергана Грудева
Резултати
- 17 точки от тестове
- 0 бонус точки
- 17 точки общо
- 13 успешни тест(а)
- 2 неуспешни тест(а)
Код
Лог от изпълнението
Compiling solution v0.1.0 (/tmp/d20190123-22631-7tuuqo/solution) warning: unused import: `std::time::Duration` --> src/lib.rs:7:5 | 7 | use std::time::Duration; | ^^^^^^^^^^^^^^^^^^^ | = note: #[warn(unused_imports)] on by default warning: unused import: `std::time::Duration` --> src/lib.rs:7:5 | 7 | use std::time::Duration; | ^^^^^^^^^^^^^^^^^^^ | = note: #[warn(unused_imports)] on by default Finished dev [unoptimized + debuginfo] target(s) in 5.00s Running target/debug/deps/solution-2e785d603b538f71 running 0 tests test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out Running target/debug/deps/solution_test-29808948fb50ed3a running 15 tests test solution_test::test_automatic_flushing_when_buffer_limit_is_reached ... FAILED test solution_test::test_automatic_flushing_when_zero_buffer_limit ... FAILED test solution_test::test_basic_log ... ok test solution_test::test_basic_push ... ok test solution_test::test_cloning_a_logger_shares_a_buffer ... ok test solution_test::test_cloning_a_logger_shares_their_io ... ok test solution_test::test_erroring_io ... ok test solution_test::test_flushing_the_buffer ... ok test solution_test::test_logger_combinations ... ok test solution_test::test_multilogger_logs_and_flushes_when_needed ... ok test solution_test::test_multilogger_logs_to_several_ios ... ok test solution_test::test_reordering_logs_in_buffer ... ok test solution_test::test_reordering_logs_in_io ... ok test solution_test::test_scoped_logger ... ok test solution_test::test_scoped_logger_with_a_string_tag ... ok failures: ---- solution_test::test_automatic_flushing_when_buffer_limit_is_reached stdout ---- thread 'solution_test::test_automatic_flushing_when_buffer_limit_is_reached' panicked at 'assertion failed: `(left == right)` left: `"One\nTwo\n"`, right: `"One\nTwo\nThree\n"`', tests/solution_test.rs:200:5 note: Run with `RUST_BACKTRACE=1` for a backtrace. ---- solution_test::test_automatic_flushing_when_zero_buffer_limit stdout ---- thread 'solution_test::test_automatic_flushing_when_zero_buffer_limit' panicked at 'attempt to subtract with overflow', /tmp/d20190123-22631-7tuuqo/solution/src/lib.rs:53:46 failures: solution_test::test_automatic_flushing_when_buffer_limit_is_reached solution_test::test_automatic_flushing_when_zero_buffer_limit test result: FAILED. 13 passed; 2 failed; 0 ignored; 0 measured; 0 filtered out error: test failed, to rerun pass '--test solution_test'
Правилно. Методите
log
иflush
могат директно да се имплементират на trait-а.Интересно решение за структура от данни. Един потенциален проблем е, че не можеш да имаш два входа с един и същ timestamp. Предвид, че не сме дефинирали, че е необходимо, да кажем, че съм ок с това.
Това "гълта" стойности. Ако влезеш в клона, в който flush-ваш, не влизаш в клона, в който добавяш нова стойност. Идеята беше да си логваш неща нормално, и в случай, че се мине някаква граница, след това да се flush-не. Няма логика push-а да е в else-а в тази ситуация.
Идеята на
try_flush
беше да върне грешка, а не да печата. Идеята наflush
беше да викаtry_flush
и да печата грешката, която получава от него.