Решение на 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 (преди над 4 години)
Деян качи решение на 11.01.2021 16:55 (преди над 4 години)
Деян качи решение на 11.01.2021 16:58 (преди над 4 години)
Ако махна този ред, 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, но някакси неговия ред не бива консумиран отreader
stream-а и си остава там. Така следващото извикване наread_line
връща и GenZ реда и следващия ред.Като видях това си помислих че заради някакъв lazy-ness на итератор, реда се чете, но не се консумира, но виждам къде може да е това. Защо това се случва и как мога да го оправя?
Пълния изход от
test_with_example1
, като на ред 313 сложаdbg!(&line)
:Като се промени теста да ползва
.unwrap()
се вижда че проблемът е че се връща стойностErr(CsvError::InvalidRow("Expected a comma..."))
отcsv.next()
.