7ce88176b08060f73cefe9e1178025643b893caac42ece5898ccbc3d78d5ae3e443a292d269fe27e

문자열을 콘솔 입력 받아서 더하는 예제만 해도 공백으로 나눈 문자열 이터레이션에 넥스트가 없는 리설트 처리 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);
    }
}