X-Git-Url: https://i11git.iti.kit.edu/anon-gitweb/?p=Mitarbeiter%2FTim-Zeitz%2Fstud-rust-base.git;a=blobdiff_plain;f=src%2Fbin%2Fcompare_vector.rs;h=5d42c182cd790390255d46bf2cae732ff59a893b;hp=8e852ac22a03e98cdfb7e8f8554931f2a2ea03d8;hb=a22a3292ad5755d027ce943706bf4941fbb2b45d;hpb=56149781fe0423d57676003b7c42698d295bb279 diff --git a/src/bin/compare_vector.rs b/src/bin/compare_vector.rs index 8e852ac..5d42c18 100644 --- a/src/bin/compare_vector.rs +++ b/src/bin/compare_vector.rs @@ -1,43 +1,43 @@ extern crate stud_rust_base; -use stud_rust_base::io::*; -use std::env; +use stud_rust_base::{io::*, cli::CliErr}; +use std::{env, fmt::Display, error::Error}; -fn main() { +fn main() -> Result<(), Box> { let mut args = env::args(); args.next(); match &args.collect::>()[..] { [data_type, input1, input2] => { match data_type.as_ref() { - "i8" => compare_values(&Vec::::load_from(input1).expect("Failed to read from input1"), &Vec::::load_from(input2).expect("Failed to read from input2")), - "u8" => compare_values(&Vec::::load_from(input1).expect("Failed to read from input1"), &Vec::::load_from(input2).expect("Failed to read from input2")), - "i16" => compare_values(&Vec::::load_from(input1).expect("Failed to read from input1"), &Vec::::load_from(input2).expect("Failed to read from input2")), - "u16" => compare_values(&Vec::::load_from(input1).expect("Failed to read from input1"), &Vec::::load_from(input2).expect("Failed to read from input2")), - "i32" => compare_values(&Vec::::load_from(input1).expect("Failed to read from input1"), &Vec::::load_from(input2).expect("Failed to read from input2")), - "u32" => compare_values(&Vec::::load_from(input1).expect("Failed to read from input1"), &Vec::::load_from(input2).expect("Failed to read from input2")), - "i64" => compare_values(&Vec::::load_from(input1).expect("Failed to read from input1"), &Vec::::load_from(input2).expect("Failed to read from input2")), - "u64" => compare_values(&Vec::::load_from(input1).expect("Failed to read from input1"), &Vec::::load_from(input2).expect("Failed to read from input2")), - "f32" => compare_values(&Vec::::load_from(input1).expect("Failed to read from input1"), &Vec::::load_from(input2).expect("Failed to read from input2")), - "f64" => compare_values(&Vec::::load_from(input1).expect("Failed to read from input1"), &Vec::::load_from(input2).expect("Failed to read from input2")), - "int8" => compare_values(&Vec::::load_from(input1).expect("Failed to read from input1"), &Vec::::load_from(input2).expect("Failed to read from input2")), - "uint8" => compare_values(&Vec::::load_from(input1).expect("Failed to read from input1"), &Vec::::load_from(input2).expect("Failed to read from input2")), - "int16" => compare_values(&Vec::::load_from(input1).expect("Failed to read from input1"), &Vec::::load_from(input2).expect("Failed to read from input2")), - "uint16" => compare_values(&Vec::::load_from(input1).expect("Failed to read from input1"), &Vec::::load_from(input2).expect("Failed to read from input2")), - "int32" => compare_values(&Vec::::load_from(input1).expect("Failed to read from input1"), &Vec::::load_from(input2).expect("Failed to read from input2")), - "uint32" => compare_values(&Vec::::load_from(input1).expect("Failed to read from input1"), &Vec::::load_from(input2).expect("Failed to read from input2")), - "int64" => compare_values(&Vec::::load_from(input1).expect("Failed to read from input1"), &Vec::::load_from(input2).expect("Failed to read from input2")), - "uint64" => compare_values(&Vec::::load_from(input1).expect("Failed to read from input1"), &Vec::::load_from(input2).expect("Failed to read from input2")), - "float32" => compare_values(&Vec::::load_from(input1).expect("Failed to read from input1"), &Vec::::load_from(input2).expect("Failed to read from input2")), - "float64" => compare_values(&Vec::::load_from(input1).expect("Failed to read from input1"), &Vec::::load_from(input2).expect("Failed to read from input2")), + "i8" => { compare_values(&Vec::::load_from(input1)?, &Vec::::load_from(input2)?); Ok(()) }, + "u8" => { compare_values(&Vec::::load_from(input1)?, &Vec::::load_from(input2)?); Ok(()) }, + "i16" => { compare_values(&Vec::::load_from(input1)?, &Vec::::load_from(input2)?); Ok(()) }, + "u16" => { compare_values(&Vec::::load_from(input1)?, &Vec::::load_from(input2)?); Ok(()) }, + "i32" => { compare_values(&Vec::::load_from(input1)?, &Vec::::load_from(input2)?); Ok(()) }, + "u32" => { compare_values(&Vec::::load_from(input1)?, &Vec::::load_from(input2)?); Ok(()) }, + "i64" => { compare_values(&Vec::::load_from(input1)?, &Vec::::load_from(input2)?); Ok(()) }, + "u64" => { compare_values(&Vec::::load_from(input1)?, &Vec::::load_from(input2)?); Ok(()) }, + "f32" => { compare_values(&Vec::::load_from(input1)?, &Vec::::load_from(input2)?); Ok(()) }, + "f64" => { compare_values(&Vec::::load_from(input1)?, &Vec::::load_from(input2)?); Ok(()) }, + "int8" => { compare_values(&Vec::::load_from(input1)?, &Vec::::load_from(input2)?); Ok(()) }, + "uint8" => { compare_values(&Vec::::load_from(input1)?, &Vec::::load_from(input2)?); Ok(()) }, + "int16" => { compare_values(&Vec::::load_from(input1)?, &Vec::::load_from(input2)?); Ok(()) }, + "uint16" => { compare_values(&Vec::::load_from(input1)?, &Vec::::load_from(input2)?); Ok(()) }, + "int32" => { compare_values(&Vec::::load_from(input1)?, &Vec::::load_from(input2)?); Ok(()) }, + "uint32" => { compare_values(&Vec::::load_from(input1)?, &Vec::::load_from(input2)?); Ok(()) }, + "int64" => { compare_values(&Vec::::load_from(input1)?, &Vec::::load_from(input2)?); Ok(()) }, + "uint64" => { compare_values(&Vec::::load_from(input1)?, &Vec::::load_from(input2)?); Ok(()) }, + "float32" => { compare_values(&Vec::::load_from(input1)?, &Vec::::load_from(input2)?); Ok(()) }, + "float64" => { compare_values(&Vec::::load_from(input1)?, &Vec::::load_from(input2)?); Ok(()) }, _ => { print_usage(); - panic!("Unknown data_type {}", data_type); + Err(Box::new(CliErr("Invalid data type"))) } - }; + } }, _ => { print_usage(); - panic!("Invalid input") + Err(Box::new(CliErr("Invalid arguments"))) }, } } @@ -60,14 +60,13 @@ Compares two vectors of elements in binary format. data_type can be one of "); } -use std::fmt::Display; - fn compare_values(values1: &[T], values2: &[T]) where T: Display, T: PartialOrd { if values1.len() != values2.len() { - println!("Can only compare vectors of equal size. The first vector has {} elements. The second vector has {} elements.", values1.len(), values2.len()); + println!("0"); + eprintln!("Can only compare vectors of equal size. The first vector has {} elements. The second vector has {} elements.", values1.len(), values2.len()); return } @@ -86,16 +85,18 @@ fn compare_values(values1: &[T], values2: &[T]) where match first_diff { Some(index) => { - println!("The vectors differ."); - println!("{} elements are smaller in the first vector.", v1_smaller_count); - println!("{} elements are smaller in the second vector.", v2_smaller_count); - println!("{} elements are the same.", values1.len() - v1_smaller_count - v2_smaller_count); - println!("{} elements are different.", v1_smaller_count + v2_smaller_count); - println!("The vectors have {} elements.", values1.len()); - println!("The first element that differs is at index {}.", index); + eprintln!("The vectors differ."); + eprintln!("{} elements are smaller in the first vector.", v1_smaller_count); + eprintln!("{} elements are smaller in the second vector.", v2_smaller_count); + eprintln!("{} elements are the same.", values1.len() - v1_smaller_count - v2_smaller_count); + println!("{}", values1.len() - v1_smaller_count - v2_smaller_count); + eprintln!("{} elements are different.", v1_smaller_count + v2_smaller_count); + eprintln!("The vectors have {} elements.", values1.len()); + eprintln!("The first element that differs is at index {}.", index); }, None => { - println!("The vectors are the same and have {} elements.", values1.len()); + println!("{}", values1.len()); + eprintln!("The vectors are the same and have {} elements.", values1.len()); }, } }