Решение на CSV Filter от Деян Горанов
Резултати
- 15 точки от тестове
- 0 бонус точки
- 15 точки общо
- 15 успешни тест(а)
- 0 неуспешни тест(а)
Код
Лог от изпълнението
Compiling solution v0.1.0 (/tmp/d20210111-1538662-1vc3bn4/solution)
Finished test [unoptimized + debuginfo] target(s) in 6.07s
Running target/debug/deps/solution_test-8916805fc40a2dab
running 15 tests
test solution_test::test_csv_basic ... ok
test solution_test::test_csv_duplicate_columns ... ok
test solution_test::test_csv_empty ... ok
test solution_test::test_csv_iterating_with_a_selection ... ok
test solution_test::test_csv_iterating_with_no_selection ... ok
test solution_test::test_csv_parse_line ... ok
test solution_test::test_csv_parse_line_with_commas ... ok
test solution_test::test_csv_selection_and_writing ... ok
test solution_test::test_csv_single_column_no_data ... ok
test solution_test::test_csv_writing_without_a_selection ... ok
test solution_test::test_csv_writing_without_any_rows ... ok
test solution_test::test_parsing_helpers_for_unicode ... ok
test solution_test::test_skip_next ... ok
test solution_test::test_take_and_skip ... ok
test solution_test::test_take_until ... ok
test result: ok. 15 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
История (4 версии и 1 коментар)
Деян качи решение на 11.01.2021 16:39 (преди почти 5 години)
Деян качи решение на 11.01.2021 16:55 (преди почти 5 години)
Деян качи решение на 11.01.2021 16:58 (преди почти 5 години)
Ако махна този ред, test_with_example1 гърми, защото се връща CsvError::InvalidRow. Слагайки dbg!(&line) тук се вижда че в момента на гърмене имаме
line == r#" "Gen Z. Person", "20", "2000-01-01"\n "Ada Lovelace", "36", "1815-12-10""#
(unescape-нах output-а).
Gen Z. Person е много млад, и затова selection му връща false, но някакси неговия ред не бива консумиран от reader stream-а и си остава там. Така следващото извикване на read_line връща и GenZ реда и следващия ред.
Като видях това си помислих че заради някакъв lazy-ness на итератор, реда се чете, но не се консумира, но виждам къде може да е това. Защо това се случва и как мога да го оправя?
Пълния изход от test_with_example1, като на ред 313 сложа dbg!(&line):
---- tests::test_with_example1 stdout ----
[src/lib.rs:396] &line = " \"Douglas Adams\", \"42\", \"1952-03-11\"\n"
[src/lib.rs:396] &line = " \"Gen Z. Person\", \"20\", \"2000-01-01\"\n"
[src/lib.rs:396] &line = " \"Gen Z. Person\", \"20\", \"2000-01-01\"\n \"Ada Lovelace\", \"36\", \"1815-12-10\""
thread 'tests::test_with_example1' panicked at 'assertion failed: matches!(csv . next(), Some(Ok(row)) if row . get("name") . unwrap() .
as_str() == "Ada Lovelace")', src/lib.rs:164:9
Като се промени теста да ползва .unwrap() се вижда че проблемът е че се връща стойност Err(CsvError::InvalidRow("Expected a comma...")) от csv.next().

Ако махна този ред,
test_with_example1гърми, защото се връщаCsvError::InvalidRow. Слагайкиdbg!(&line)тук се вижда че в момента на гърмене имаме(unescape-нах output-а).
Gen Z. Personе много млад, и затоваselectionму връща false, но някакси неговия ред не бива консумиран отreaderstream-а и си остава там. Така следващото извикване наread_lineвръща и GenZ реда и следващия ред.Като видях това си помислих че заради някакъв lazy-ness на итератор, реда се чете, но не се консумира, но виждам къде може да е това. Защо това се случва и как мога да го оправя?
Пълния изход от
test_with_example1, като на ред 313 сложаdbg!(&line):Като се промени теста да ползва
.unwrap()се вижда че проблемът е че се връща стойностErr(CsvError::InvalidRow("Expected a comma..."))отcsv.next().