///|
pub fn compare_stable_names(left : String, right : String) -> Int {
  let left_lower = ascii_lower(left)
  let right_lower = ascii_lower(right)
  let folded = compare_ascii(left_lower, right_lower)
  if folded != 0 {
    folded
  } else {
    compare_ascii(left, right)
  }
}

///|
fn ascii_lower(text : String) -> String {
  let out = StringBuilder::new()
  for ch in text {
    out.write_char(lower_char(ch))
  }
  out.to_string()
}

///|
fn compare_ascii(left : String, right : String) -> Int {
  let limit = if left.length() < right.length() {
    left.length()
  } else {
    right.length()
  }
  for i in 0.. right[i] {
      return 1
    }
  }
  if left.length() < right.length() {
    -1
  } else if left.length() > right.length() {
    1
  } else {
    0
  }
}