use parse_int;
use reqwest::blocking::get;
use super::*;
#[test]
fn test_multicodec_spec() {
let spec = {
let uri = "https://raw.githubusercontent.com/multiformats/multicodec/master/table.csv";
get(uri).unwrap().text().unwrap()
};
let spec_lines: Vec<Vec<String>> = {
let mut total_lines: Vec<String> = {
let iter = spec.lines().map(|s| s.to_string());
iter.collect()
};
total_lines.remove(0); let mut total_lines: Vec<Vec<String>> = total_lines
.into_iter()
.map(|s| {
let mut row = s
.split(",")
.map(|col| col.trim().to_string())
.collect::<Vec<String>>();
row.pop(); if row[2] == "0x00" {
row[2] = "0".to_string();
}
let code: u32 = parse_int::parse(&row[2]).expect(&format!("{}", row[2]));
vec![row.remove(0), format!("0x{:x}", code), row.remove(0)] })
.collect();
assert_eq!(total_lines[99][0], "ipfs", "{:?}", total_lines[99]);
assert_eq!(total_lines[99][1], "0x1a5", "{:?}", total_lines[99]);
assert_eq!(total_lines[99][2], "multiaddr", "{:?}", total_lines[99]);
total_lines.remove(99);
total_lines
};
let pkg_lines: Vec<Vec<String>> = (&TABLE)
.to_vec()
.into_iter()
.map(|cp| vec![cp.name, format!("0x{:x}", cp.code), cp.tag])
.collect();
assert_eq!(
spec_lines.len(),
pkg_lines.len(),
"{} {}",
spec_lines.len(),
pkg_lines.len()
);
for (x, y) in spec_lines.into_iter().zip(pkg_lines.into_iter()) {
assert_eq!(x[0], y[0], "{:?}, {:?}", x, y);
assert_eq!(x[1], y[1], "{:?}, {:?}", x, y);
assert_eq!(x[2], y[2], "{:?}, {:?}", x, y);
}
}
#[test]
fn test_codec() {
for entry in TABLE.iter() {
let code: Multicodec = entry.into();
let buf = code.encode().unwrap();
let (res_code, res_buf) = Multicodec::decode(&buf).unwrap();
assert_eq!(res_code, code, "{:?}", code);
assert_eq!(res_buf, vec![].as_slice(), "{:?}", code);
}
}