Решение на Code Identifier от Ивайло Кирязов

Обратно към всички решения

Към профила на Ивайло Кирязов

Резултати

  • 16 точки от тестове
  • 0 бонус точки
  • 16 точки общо
  • 12 успешни тест(а)
  • 3 неуспешни тест(а)

Код

#[derive(Debug)]
pub struct CodeIdentifier {
word: String
}
impl CodeIdentifier {
fn valid_identifier(identifier: String) -> bool {
for char in identifier.chars() {
if !char.is_numeric() && !char.is_alphabetic() &&
(char != '_') && !char.is_whitespace() {
return false
}
}
return true
}
pub fn new(identifier: &str) -> Option<Self> {
if Self::valid_identifier(String::from(identifier)) {
let trimmed = identifier.trim().to_string();
let normalised = trimmed.to_lowercase();
Some(CodeIdentifier{word: normalised})
} else {
None
}
}
pub fn camelcase(&self) -> String {
let mut camelcased = String::from("");
let mut to_be_uppercased = false;
for char in self.word.chars() {
if char == '_' {
to_be_uppercased = true;
camelcased.push(char);
continue;
}
if to_be_uppercased {
camelcased.push(char.to_ascii_uppercase());

Използването на to_ascii_uppercase опростява нещата, защото ти връща винаги един символ. Но не е правилно uppercase-ване за някои специални unicode-ски букви :). Разгледай (примерно) моето решение, за да видиш как можеше да се справиш, използвайки to_uppercase.

to_be_uppercased = false;
} else {
camelcased.push(char);
}
}
camelcased.replace("_", "")
}
pub fn titlecase(&self) -> String {
let mut titlecased = self.camelcase();
let first = titlecased.remove(0);
titlecased.insert(0, first.to_ascii_uppercase());
titlecased
}
pub fn kebabcase(&self) -> String {
self.word.replace("_", "-")
}
pub fn underscore(&self) -> String {
self.word.to_lowercase()
}
pub fn screaming_snakecase(&self) -> String {
self.word.to_uppercase()
}
}

Лог от изпълнението

Compiling solution v0.1.0 (/tmp/d20190123-22631-1lz0x65/solution)
    Finished dev [unoptimized + debuginfo] target(s) in 4.32s
     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 ... ok
test solution_test::test_kebabcase_basic ... ok
test solution_test::test_multibyte_uppercase ... FAILED
test solution_test::test_normalize_case1 ... ok
test solution_test::test_normalize_case2 ... ok
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 ... FAILED
test solution_test::test_whitespace ... ok

failures:

---- solution_test::test_cyrillic1 stdout ----
thread 'solution_test::test_cyrillic1' panicked at 'assertion failed: `(left == right)`
  left: `"щостана"`,
 right: `"щоСтана"`', tests/solution_test.rs:96:5
note: Run with `RUST_BACKTRACE=1` for a backtrace.

---- solution_test::test_multibyte_uppercase stdout ----
thread 'solution_test::test_multibyte_uppercase' panicked at 'assertion failed: `(left == right)`
  left: `"someßpecialCase"`,
 right: `"someSSpecialCase"`', tests/solution_test.rs:104:5

---- solution_test::test_validity stdout ----
thread 'solution_test::test_validity' panicked at 'assertion failed: CodeIdentifier::new("some var").is_none()', tests/solution_test.rs:10:5


failures:
    solution_test::test_cyrillic1
    solution_test::test_multibyte_uppercase
    solution_test::test_validity

test result: FAILED. 12 passed; 3 failed; 0 ignored; 0 measured; 0 filtered out

error: test failed, to rerun pass '--test solution_test'

История (1 версия и 1 коментар)

Ивайло качи първо решение на 25.10.2018 15:00 (преди почти 7 години)