Решение на Code Identifier от Даяна Веселинова
Към профила на Даяна Веселинова
Резултати
- 13 точки от тестове
- 0 бонус точки
- 13 точки общо
- 10 успешни тест(а)
- 5 неуспешни тест(а)
Код
Лог от изпълнението
Compiling solution v0.1.0 (/tmp/d20190123-22631-uqry87/solution) Finished dev [unoptimized + debuginfo] target(s) in 4.75s 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_both_static_and_dynamic_strings ... ok test solution_test::test_camelcase_basic ... ok test solution_test::test_cyrillic1 ... FAILED test solution_test::test_digits1 ... ok test solution_test::test_digits2 ... ok test solution_test::test_digits3 ... FAILED test solution_test::test_kebabcase_basic ... ok test solution_test::test_multibyte_uppercase ... FAILED test solution_test::test_normalize_case1 ... FAILED test solution_test::test_normalize_case2 ... FAILED test solution_test::test_screaming_snakecase_basic ... ok test solution_test::test_titlecase_basic ... ok test solution_test::test_underscore_basic ... ok test solution_test::test_validity ... ok test solution_test::test_whitespace ... ok failures: ---- solution_test::test_cyrillic1 stdout ---- thread 'solution_test::test_cyrillic1' panicked at 'byte index 1 is not a char boundary; it is inside 'с' (bytes 0..2) of `стана`', libcore/str/mod.rs:2111:5 note: Run with `RUST_BACKTRACE=1` for a backtrace. ---- solution_test::test_digits3 stdout ---- thread 'solution_test::test_digits3' panicked at 'byte index 1 is not a char boundary; it is inside '٣' (bytes 0..2) of `٣_var`', libcore/str/mod.rs:2111:5 ---- solution_test::test_multibyte_uppercase stdout ---- thread 'solution_test::test_multibyte_uppercase' panicked at 'byte index 1 is not a char boundary; it is inside 'ß' (bytes 0..2) of `ßpecial_case`', libcore/str/mod.rs:2111:5 ---- solution_test::test_normalize_case1 stdout ---- thread 'solution_test::test_normalize_case1' panicked at 'assertion failed: `(left == right)` left: `"SomeVar"`, right: `"somevar"`', tests/solution_test.rs:72:5 ---- solution_test::test_normalize_case2 stdout ---- thread 'solution_test::test_normalize_case2' panicked at 'assertion failed: `(left == right)` left: `"SomeVar"`, right: `"SOMEVAR"`', tests/solution_test.rs:84:5 failures: solution_test::test_cyrillic1 solution_test::test_digits3 solution_test::test_multibyte_uppercase solution_test::test_normalize_case1 solution_test::test_normalize_case2 test result: FAILED. 10 passed; 5 failed; 0 ignored; 0 measured; 0 filtered out error: test failed, to rerun pass '--test solution_test'
История (2 версии и 3 коментара)
Даяна качи решение на 25.10.2018 10:18 (преди над 4 години)
.chars().next().unwrap()
ще гръмне за празен низ :). Не сме тествали за това, така че е приемливо да се справиш както решиш с този case, но едва ли runtime panic е добро решение. За бъдещи домашни (и не само), мисли за такива специални случаи
Повечето грешки от тестовете идват от кирилица и друг unicode. Индексирането на низ е по байтове, а символите вътре може да са по два или повече байта. Когато напишеш нещо като index+1
, това не е задължително да е следващия низ, а може да се падне по средата на буква, което е грешка.
Би могла да жонглираш дължини на символи ако използваш метода len_utf8
: https://doc.rust-lang.org/std/primitive.char.html#method.len_utf8. Но ти препоръчвам просто да избягваш да правиш подобно индексиране. Доста по-лесно е да итерираш по char-ове. Разгледай останалите решения (примерно първото, което е моето) за идея как би се получило това.
.chars().next().unwrap()
ще гръмне за празен низ :). Не сме тествали за това, така че е приемливо да се справиш както решиш с този case, но едва ли runtime panic е добро решение. За бъдещи домашни (и не само), мисли за такива специални случаи