fn push_rowname(buf: &mut String, row: u32) {
let row: u64 = row as u64 + 1;
buf.push_str(&row.to_string());
}
fn push_colname(buf: &mut String, col: u32) {
let mut col: u64 = col as u64 + 1;
let mut _buf = String::new();
while col != 0 {
_buf.push(std::char::from_u32((col % 26) as u32 - 1 + 'A' as u32).unwrap());
col /= 26;
}
buf.push_str(&_buf.chars().rev().collect::<String>());
}
fn old_push_colname(buf: &mut String, mut col: u32) {
let mut i = 0;
let mut dbuf = [0u8; 7];
col += 1;
while col > 0 {
dbuf[i] = (col % 26) as u8;
if dbuf[i] == 0 {
dbuf[i] = 25;
col = col / 26 - 1;
} else {
dbuf[i] -= 1;
col /= 26;
}
i += 1;
}
let mut j = i;
while j > 0 {
buf.push((b'A' + dbuf[j - 1]) as char);
j -= 1;
}
}
fn old_push_rowname(buf: &mut String, mut row: u32) {
let mut i = 0;
let mut dbuf = [0u8; 10];
row += 1;
while row > 0 {
dbuf[i] = (row % 10) as u8;
row /= 10;
i += 1;
}
let mut j = i;
while j > 0 {
buf.push((b'0' + dbuf[j - 1]) as char);
j -= 1;
}
}
#[test]
fn issue6() {
let mut old_buf = String::new();
let mut buf = String::new();
push_rowname(&mut buf, 0);
old_push_rowname(&mut old_buf, 0);
push_rowname(&mut buf, 2);
old_push_rowname(&mut old_buf, 2);
push_rowname(&mut buf, 24);
old_push_rowname(&mut old_buf, 24);
push_rowname(&mut buf, 3523462353);
old_push_rowname(&mut old_buf, 3523462353);
assert_eq!(old_buf, buf);
buf.clear();
old_buf.clear();
push_colname(&mut buf, 0);
old_push_colname(&mut old_buf, 0);
push_colname(&mut buf, 2);
old_push_colname(&mut old_buf, 2);
push_colname(&mut buf, 24);
old_push_colname(&mut old_buf, 24);
push_colname(&mut buf, 3523462353);
old_push_colname(&mut old_buf, 3523462353);
assert_eq!(old_buf, buf);
push_colname(&mut buf, u32::MAX);
push_rowname(&mut buf, u32::MAX);
}