libitofin 0.34.0

A ground-up Rust port of QuantLib: quantitative-finance primitives for pricing, risk, and numerical methods.
Documentation
use super::*;

#[test]
fn paths_match_independent_mt_inverse_normal_compound_poisson_fixtures() {
    let cases: [(MertonRequest, &[Real]); 6] = [
        (
            MertonRequest {
                horizon: 0.0,
                ..request()
            },
            &[
                100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0,
                100.0, 100.0, 100.0,
            ],
        ),
        (
            MertonRequest {
                jump_intensity: 240.0,
                log_jump_volatility: 0.01,
                log_mean_jump: 0.0,
                ..request()
            },
            &[
                100.0,
                85.07209653331171,
                91.88988474720588,
                111.86718253199972,
                98.97443243097436,
                100.0,
                106.52644819557457,
                121.379805268405,
                124.42007481503202,
                117.20987247105326,
                100.0,
                98.39877950292181,
                115.14777562147074,
                103.21079694553978,
                96.22922553539328,
            ],
        ),
        (
            MertonRequest {
                jump_intensity: 2800.0,
                log_jump_volatility: 0.005,
                log_mean_jump: 0.0,
                ..request()
            },
            &[
                100.0,
                77.93839728960181,
                83.08319141327475,
                102.28974557578935,
                87.53792780554767,
                100.0,
                105.64487739592774,
                124.6128914958248,
                126.62897791928475,
                111.9462977128842,
                100.0,
                103.17522029749924,
                133.41307015954908,
                117.72298618514692,
                113.90689127728312,
            ],
        ),
        (
            MertonRequest {
                seed: 20261002,
                ..request()
            },
            &[
                100.0,
                109.11208955820642,
                113.52957184903286,
                110.39627791575722,
                123.34251604418205,
                100.0,
                116.34286607788984,
                113.55453664968753,
                108.65911224413465,
                99.97302818165801,
                100.0,
                100.37033282547205,
                100.3584256219746,
                93.73678036452743,
                93.36924947679067,
            ],
        ),
        (
            MertonRequest {
                seed: 4294967295,
                ..request()
            },
            &[
                100.0,
                89.70554768896989,
                55.996246105362985,
                65.47843847864941,
                106.16254807197446,
                100.0,
                110.64830452945884,
                113.73122893373791,
                125.45376360906589,
                110.24876857514285,
                100.0,
                82.78274911297181,
                79.82758182827156,
                98.30805290829555,
                100.49260191207966,
            ],
        ),
        (
            MertonRequest {
                horizon: 0.7,
                jump_intensity: 0.0,
                steps: 3,
                volatility: 0.0,
                ..request()
            },
            &[
                100.0,
                101.17349876564472,
                102.36076852481912,
                103.56197087996233,
                100.0,
                101.17349876564472,
                102.36076852481912,
                103.56197087996233,
                100.0,
                101.17349876564472,
                102.36076852481912,
                103.56197087996233,
            ],
        ),
    ];
    for (r, expected) in cases {
        assert_fixture(&r, expected);
    }
}