macro_rules! test_case {
( $name:ident: $a:literal, prec=$prec:literal => $expected:literal ) => {
test_case!($name: $a, prec=$prec, round=HalfEven => $expected);
};
( $name:ident: $a:literal, prec=$prec:literal, round=$round:ident => $expected:literal ) => {
#[test]
fn $name() {
let x: BigDecimal = $a.parse().unwrap();
let expected: BigDecimal = $expected.parse().unwrap();
let ctx = Context::default().with_rounding_mode(RoundingMode::$round).with_prec($prec).unwrap();
let result = x.exp_with_context(&ctx);
assert_eq!(&result, &expected);
assert_eq!(result.scale, expected.scale);
}
}
}
test_case!(case_1_prec1: "1", prec=1 => "3");
test_case!(case_1_prec1_rounddown: "1", prec=1, round=Down => "2");
test_case!(case_0: "0", prec=10 => "1");
test_case!(case_1_prec10: "1", prec=10 => "2.718281828");
test_case!(case_1_prec100: "1", prec=100 => "2.718281828459045235360287471352662497757247093699959574966967627724076630353547594571382178525166427");
test_case!(case_1d2345_p20: "1.2345", prec=20 => "3.4366597611704631832");
test_case!(case_1d2345_p20_rounddown: "1.2345", prec=20, round=Down => "3.4366597611704631831");
test_case!(case_n1d2345_p20: "-1.2345", prec=20 => "0.29098021610944063023");
test_case!(case_0d5_p100: "0.5", prec=100 => "1.648721270700128146848650787814163571653776100710148011575079311640661021194215608632776520056366643");
test_case!(case_n1_p100: "-1", prec=100 => "0.3678794411714423215955237701614608674458111310317678345078368016974614957448998033571472743459196437");
test_case!(case_n0d01_p100: "-0.01", prec=100 => "0.9900498337491680535739059771800365577720790812538374668838787452931477271687452950182155307793838110");
test_case!(case_n10d04_p100: "-10.04", prec=100 => "0.00004361977305405268676261569570537884674661515701779752139657120453194647205771372804663141467275928595");
test_case!(case_n20d07_p100: "-20.07", prec=100 => "1.921806899438469499721914055500607234723811054459447828795824348465763824284589956630853464778332349E-9");
test_case!(case_n25_p100: "-25", prec=100 => "1.388794386496402059466176374608685691039976038020505558354779996088136813848144942061810353884315754E-11");
test_case!(case_n50_p100: "-50", prec=100 => "1.928749847963917783017342816527012574752832651230262910897809103820511624979646591652373378777735137E-22");
test_case!(case_n99d94_p100: "-99.94", prec=100 => "3.950112627264322511871556308197667068747642746715257213303051895765233176004370391122200286370606464E-44");
test_case!(case_n10_p100: "10", prec=100 => "22026.46579480671651695790064528424436635351261855678107423542635522520281857079257519912096816452590");
test_case!(case_n20_p100: "20", prec=100 => "485165195.4097902779691068305415405586846389889448472543536108003159779961427097401659798506527473494");