1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#![no_std]
pub const fn parse_u128(input_string: &str) -> u128 {
let bytes = input_string.as_bytes();
let len = bytes.len();
let mut index = 0_usize;
let mut total = 0_u128;
while index < len {
total = total.wrapping_mul(10);
let u = bytes[index].wrapping_sub(b'0') as u128;
total = total.wrapping_add(u);
index += 1;
}
total
}
#[cfg(test)]
mod tests {
extern crate std;
use super::*;
#[test]
fn test_parse_u128() {
assert_eq!(parse_u128("0"), 0);
assert_eq!(parse_u128("12"), 12);
assert_eq!(parse_u128("1234567890"), 1234567890);
assert_eq!(parse_u128(&std::format!("{}", u128::MAX)), u128::MAX);
let big = "zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz";
let mut s = std::string::String::new();
(0..20).for_each(|_| s += big);
parse_u128(&s);
}
}