문자열을 콘솔 입력 받아서 더하는 예제만 해도 공백으로 나눈 문자열 이터레이션에 넥스트가 없는 리설트 처리 parse int에 실패하는 리설트처리만 해도 시간 잘 가네 ㅋㅋㅋㅋ 거기에 테스트 코드까지 작성해서 입력값 xxx에 대해 parse input 시 에러타입이 리턴된다 정상값 입력시 u8 튜플이 반환된다 테스트 케이스 막 작성하니까 뭔가 대단한 프로그래머가 된거 같고 재밌네 ㅋㅋㅋㅋ
use std::io;
#[derive(Debug)]
enum ParseInputError {
MissingNumber,
ParseIntError
}
fn main() {
let mut input = String::new();
io::stdin()
.read_line(&mut input)
.expect("Failed to read line");
let (f, s) = parse_input(input).unwrap();
let result = add(f, s);
println!("{}", result);
}
fn parse_input(input: String) -> Result<(u8, u8), ParseInputError> {
let mut iter = input.split_whitespace();
let first_str = iter.next().ok_or(ParseInputError::MissingNumber)?;
let second_str = iter.next().ok_or(ParseInputError::MissingNumber)?;
let first = first_str.parse::<u8>().map_err(|_| ParseInputError::ParseIntError)?;
let second = second_str.parse::<u8>().map_err(|_| ParseInputError::ParseIntError)?;
Ok((first, second))
}
fn add(a: u8, b: u8) -> u16 {
(a + b).into()
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_parse_input() {
let result = parse_input("1 2".to_string());
assert_eq!(result.unwrap(), (1, 2));
}
#[test]
fn test_parse_wrong_input() {
let result = parse_input("abcdef".to_string());
assert_eq!(result.is_err(), true);
}
#[test]
fn test_parse_wrong_input2() {
let result = parse_input("1".to_string());
assert_eq!(result.is_err(), true);
}
}
디시 버그 찾았다. 나 분명 러스트 꽃게 짤 넣었는데 vscode 복붙하니까 글 머리 기호에 이미지 첨부 표시가 사라지네.