#[macro_use]
extern crate clapme;
use clapme::ClapMe;
#[derive(PartialEq, Debug, ClapMe)]
struct Vector3d<T> {
x: T,
y: T,
z: T,
}
#[derive(PartialEq, Debug, ClapMe)]
#[allow(non_snake_case)]
enum CellDimensions {
CellWidth(Vector3d<f64>),
CellVolume(f64),
}
#[derive(PartialEq, Debug, ClapMe)]
struct SquareWellParams {
well_width: f64,
_dim: CellDimensions,
}
#[allow(non_snake_case)]
#[derive(PartialEq, Debug, ClapMe)]
struct SadParams {
min_T: f64,
seed: Option<u64>,
}
#[derive(PartialEq, Debug, ClapMe)]
enum Params<MP, SP> {
ResumeFrom(String),
_Params {
_sys: SP,
_mc: MP,
},
}
#[derive(PartialEq, Debug, ClapMe)]
struct Simple {
simple: u64,
}
#[derive(PartialEq, Debug, ClapMe)]
struct Naive {
naive: String,
}
#[test]
fn craziness() {
type P = Params<SadParams,SquareWellParams>;
println!("help: {}", P::help_message("foo"));
println!("\n\n\n\n");
assert!(P::help_message("foo").contains("--resume-from "));
assert!(P::help_message("foo").contains("--well-width "));
assert!(P::help_message("foo").contains("--cell-volume "));
assert!(P::help_message("foo").contains("--cell-width-x "));
assert!(!P::help_message("foo").contains("--dim- "));
assert_eq!(Params::ResumeFrom::<SadParams, SquareWellParams>("hello".to_string()),
P::from_iter(&["", "--resume-from", "hello"]).unwrap());
assert_eq!(Params::ResumeFrom::<Naive, Simple>("hello".to_string()),
Params::<Naive,Simple>::from_iter(&["", "--resume-from", "hello"]).unwrap());
assert_eq!(Params::_Params::<Naive, Simple> {
_sys: Simple {
simple: 37,
},
_mc: Naive {
naive: "goodbye".to_string(),
},
},
Params::<Naive,Simple>::from_iter(&["", "--simple", "37", "--naive", "goodbye"]).unwrap());
assert_eq!(Params::_Params::<SadParams, Simple> {
_sys: Simple {
simple: 137,
},
_mc: SadParams {
min_T: 0.2,
seed: None,
},
},
Params::<SadParams,Simple>::from_iter(&["", "--simple", "137", "--min-T", "0.2"]).unwrap());
assert_eq!(Params::_Params::<SadParams, SquareWellParams> {
_sys: SquareWellParams {
well_width: 1.3,
_dim: CellDimensions::CellVolume(5.0),
},
_mc: SadParams {
min_T: 0.2,
seed: None,
},
},
P::from_iter(&["", "--well-width", "1.3", "--cell-volume", "5", "--min-T", "0.2"]).unwrap());
}