use assert_cmd::Command; const HELP_STR: &str = "Shows the contribution for each partonic channel Usage: pineappl channels [OPTIONS] Arguments: Path to the input grid LHAPDF ID(s) or name(s) of the PDF(s)/FF(s) Options: -a, --absolute Show absolute numbers of each contribution -l, --limit The maximum number of channels displayed [default: 10] -i, --integrated Show integrated numbers (without bin widths) instead of differential ones --channels Show only the listed channels -o, --orders Select orders manually --dont-sort Do not sort the channels according to their size --digits-abs Set the number of fractional digits shown for absolute numbers [default: 7] --digits-rel Set the number of fractional digits shown for relative numbers [default: 2] -h, --help Print help "; const DEFAULT_STR: &str = "b etal c size c size c size c size c size [] [%] [%] [%] [%] [%] -+----+----+-+------+-+------+-+-----+-+----+-+---- 0 2 2.25 0 111.32 3 -8.05 1 -3.31 4 0.02 2 0.01 1 2.25 2.5 0 112.20 3 -8.85 1 -3.38 4 0.02 2 0.01 2 2.5 2.75 0 113.10 3 -9.56 1 -3.57 4 0.02 2 0.01 3 2.75 3 0 113.98 3 -10.17 1 -3.84 4 0.02 2 0.01 4 3 3.25 0 114.83 3 -10.58 1 -4.27 4 0.01 2 0.01 5 3.25 3.5 0 115.62 3 -10.81 1 -4.84 4 0.02 2 0.01 6 3.5 4 0 116.26 3 -10.48 1 -5.80 2 0.01 4 0.01 7 4 4.5 0 115.88 3 -8.61 1 -7.29 4 0.01 2 0.01 "; const ABSOLUTE_STR: &str = "b etal c dsig/detal c dsig/detal c dsig/detal c dsig/detal c dsig/detal [] [pb] [pb] [pb] [pb] [pb] -+----+----+-+-----------+-+------------+-+------------+-+------------+-+------------ 0 2 2.25 0 8.4002759e2 3 -6.0727462e1 1 -2.4969360e1 4 1.7176328e-1 2 8.8565923e-2 1 2.25 2.5 0 7.7448295e2 3 -6.1109036e1 1 -2.3319483e1 4 1.4518685e-1 2 8.3802762e-2 2 2.5 2.75 0 6.7891182e2 3 -5.7385834e1 1 -2.1436419e1 4 1.1534278e-1 2 4.7074109e-2 3 2.75 3 0 5.5341626e2 3 -4.9385114e1 1 -1.8639887e1 4 7.2943823e-2 2 5.8147927e-2 4 3 3.25 0 4.1562095e2 3 -3.8287410e1 1 -1.5462782e1 4 4.9352954e-2 2 3.4452663e-2 5 3.25 3.5 0 2.8427837e2 3 -2.6578788e1 1 -1.1889878e1 4 3.8564621e-2 2 1.8643688e-2 6 3.5 4 0 1.3470473e2 3 -1.2142190e1 1 -6.7199873e0 2 1.3223117e-2 4 1.2734974e-2 7 4 4.5 0 3.1886258e1 3 -2.3686722e0 1 -2.0056686e0 4 3.4154203e-3 2 1.9334685e-3 "; const ABSOLUTE_INTEGRATED_STR: &str = "b etal c integ c integ c integ c integ c integ [] [] [] [] [] [] -+----+----+-+-----------+-+------------+-+------------+-+------------+-+------------ 0 2 2.25 0 2.1000690e2 3 -1.5181865e1 1 -6.2423401e0 4 4.2940819e-2 2 2.2141481e-2 1 2.25 2.5 0 1.9362074e2 3 -1.5277259e1 1 -5.8298709e0 4 3.6296712e-2 2 2.0950691e-2 2 2.5 2.75 0 1.6972795e2 3 -1.4346459e1 1 -5.3591048e0 4 2.8835695e-2 2 1.1768527e-2 3 2.75 3 0 1.3835407e2 3 -1.2346279e1 1 -4.6599717e0 4 1.8235956e-2 2 1.4536982e-2 4 3 3.25 0 1.0390524e2 3 -9.5718524e0 1 -3.8656954e0 4 1.2338239e-2 2 8.6131657e-3 5 3.25 3.5 0 7.1069592e1 3 -6.6446971e0 1 -2.9724695e0 4 9.6411553e-3 2 4.6609220e-3 6 3.5 4 0 6.7352364e1 3 -6.0710951e0 1 -3.3599937e0 2 6.6115583e-3 4 6.3674872e-3 7 4 4.5 0 1.5943129e1 3 -1.1843361e0 1 -1.0028343e0 4 1.7077102e-3 2 9.6673424e-4 "; const LIMIT_3_STR: &str = "b etal c size c size c size [] [%] [%] [%] -+----+----+-+------+-+------+-+----- 0 2 2.25 0 111.32 3 -8.05 1 -3.31 1 2.25 2.5 0 112.20 3 -8.85 1 -3.38 2 2.5 2.75 0 113.10 3 -9.56 1 -3.57 3 2.75 3 0 113.98 3 -10.17 1 -3.84 4 3 3.25 0 114.83 3 -10.58 1 -4.27 5 3.25 3.5 0 115.62 3 -10.81 1 -4.84 6 3.5 4 0 116.26 3 -10.48 1 -5.80 7 4 4.5 0 115.88 3 -8.61 1 -7.29 "; const BAD_LIMIT_STR: &str = "error: invalid value '0' for '--limit ': 0 is not in 1..=65535 For more information, try '--help'. "; const LUMIS_0123_STR: &str = "b etal c size c size c size c size [] [%] [%] [%] [%] -+----+----+-+------+-+------+-+-----+-+---- 0 2 2.25 0 111.32 3 -8.05 1 -3.31 2 0.01 1 2.25 2.5 0 112.20 3 -8.85 1 -3.38 2 0.01 2 2.5 2.75 0 113.10 3 -9.56 1 -3.57 2 0.01 3 2.75 3 0 113.98 3 -10.17 1 -3.84 2 0.01 4 3 3.25 0 114.83 3 -10.58 1 -4.27 2 0.01 5 3.25 3.5 0 115.62 3 -10.81 1 -4.84 2 0.01 6 3.5 4 0 116.26 3 -10.48 1 -5.80 2 0.01 7 4 4.5 0 115.88 3 -8.61 1 -7.29 2 0.01 "; const ORDERS_A2_AS1A2_STR: &str = "b etal c size c size c size c size c size [] [%] [%] [%] [%] [%] -+----+----+-+------+-+------+-+-----+-+----+-+---- 0 2 2.25 0 111.24 3 -7.96 1 -3.27 2 0.00 4 0.00 1 2.25 2.5 0 112.12 3 -8.77 1 -3.35 2 0.00 4 0.00 2 2.5 2.75 0 113.02 3 -9.48 1 -3.54 2 0.00 4 0.00 3 2.75 3 0 113.90 3 -10.09 1 -3.81 2 0.00 4 0.00 4 3 3.25 0 114.74 3 -10.50 1 -4.24 2 0.00 4 0.00 5 3.25 3.5 0 115.54 3 -10.74 1 -4.80 2 0.00 4 0.00 6 3.5 4 0 116.17 3 -10.41 1 -5.76 2 0.00 4 0.00 7 4 4.5 0 115.77 3 -8.54 1 -7.23 2 0.00 4 0.00 "; const DONT_SORT_ABSOLUTE_STR: &str = "b etal c dsig/detal c dsig/detal c dsig/detal c dsig/detal c dsig/detal [] [pb] [pb] [pb] [pb] [pb] -+----+----+-+-----------+-+------------+-+------------+-+------------+-+------------ 0 2 2.25 0 8.4002759e2 1 -2.4969360e1 2 8.8565923e-2 3 -6.0727462e1 4 1.7176328e-1 1 2.25 2.5 0 7.7448295e2 1 -2.3319483e1 2 8.3802762e-2 3 -6.1109036e1 4 1.4518685e-1 2 2.5 2.75 0 6.7891182e2 1 -2.1436419e1 2 4.7074109e-2 3 -5.7385834e1 4 1.1534278e-1 3 2.75 3 0 5.5341626e2 1 -1.8639887e1 2 5.8147927e-2 3 -4.9385114e1 4 7.2943823e-2 4 3 3.25 0 4.1562095e2 1 -1.5462782e1 2 3.4452663e-2 3 -3.8287410e1 4 4.9352954e-2 5 3.25 3.5 0 2.8427837e2 1 -1.1889878e1 2 1.8643688e-2 3 -2.6578788e1 4 3.8564621e-2 6 3.5 4 0 1.3470473e2 1 -6.7199873e0 2 1.3223117e-2 3 -1.2142190e1 4 1.2734974e-2 7 4 4.5 0 3.1886258e1 1 -2.0056686e0 2 1.9334685e-3 3 -2.3686722e0 4 3.4154203e-3 "; const DONT_SORT_STR: &str = "b etal c size c size c size c size c size [] [%] [%] [%] [%] [%] -+----+----+-+------+-+-----+-+----+-+------+-+---- 0 2 2.25 0 111.32 1 -3.31 2 0.01 3 -8.05 4 0.02 1 2.25 2.5 0 112.20 1 -3.38 2 0.01 3 -8.85 4 0.02 2 2.5 2.75 0 113.10 1 -3.57 2 0.01 3 -9.56 4 0.02 3 2.75 3 0 113.98 1 -3.84 2 0.01 3 -10.17 4 0.02 4 3 3.25 0 114.83 1 -4.27 2 0.01 3 -10.58 4 0.01 5 3.25 3.5 0 115.62 1 -4.84 2 0.01 3 -10.81 4 0.02 6 3.5 4 0 116.26 1 -5.80 2 0.01 3 -10.48 4 0.01 7 4 4.5 0 115.88 1 -7.29 2 0.01 3 -8.61 4 0.01 "; const MISSING_CONV_FUN_STR: &str = "error: the following required arguments were not provided: Usage: pineappl channels For more information, try '--help'. "; #[test] fn help() { Command::cargo_bin("pineappl") .unwrap() .args(["channels", "--help"]) .assert() .success() .stdout(HELP_STR); } #[test] fn default() { Command::cargo_bin("pineappl") .unwrap() .args([ "channels", "../test-data/LHCB_WP_7TEV.pineappl.lz4", "NNPDF31_nlo_as_0118_luxqed", ]) .assert() .success() .stdout(DEFAULT_STR); } #[test] fn missing_conv_fun() { Command::cargo_bin("pineappl") .unwrap() .args(["channels", "../test-data/LHCB_WP_7TEV.pineappl.lz4"]) .assert() .failure() .stderr(MISSING_CONV_FUN_STR) .stdout(""); } #[test] fn absolute() { Command::cargo_bin("pineappl") .unwrap() .args([ "channels", "--absolute", "../test-data/LHCB_WP_7TEV.pineappl.lz4", "NNPDF31_nlo_as_0118_luxqed", ]) .assert() .success() .stdout(ABSOLUTE_STR); } #[test] fn absolute_integrated() { Command::cargo_bin("pineappl") .unwrap() .args([ "channels", "--absolute", "--integrated", "../test-data/LHCB_WP_7TEV.pineappl.lz4", "NNPDF31_nlo_as_0118_luxqed", ]) .assert() .success() .stdout(ABSOLUTE_INTEGRATED_STR); } #[test] fn limit_3() { Command::cargo_bin("pineappl") .unwrap() .args([ "channels", "--limit=3", "../test-data/LHCB_WP_7TEV.pineappl.lz4", "NNPDF31_nlo_as_0118_luxqed", ]) .assert() .success() .stdout(LIMIT_3_STR); } #[test] fn bad_limit() { Command::cargo_bin("pineappl") .unwrap() .args([ "channels", "--limit=0", "../test-data/LHCB_WP_7TEV.pineappl.lz4", "NNPDF31_nlo_as_0118_luxqed", ]) .assert() .failure() .stderr(BAD_LIMIT_STR); } #[test] fn channels_0123() { Command::cargo_bin("pineappl") .unwrap() .args([ "channels", "--channels=0-3", "../test-data/LHCB_WP_7TEV.pineappl.lz4", "NNPDF31_nlo_as_0118_luxqed", ]) .assert() .success() .stdout(LUMIS_0123_STR); } #[test] fn orders_a2_as1a2() { Command::cargo_bin("pineappl") .unwrap() .args([ "channels", "--orders=a2,as1a2", "../test-data/LHCB_WP_7TEV.pineappl.lz4", "NNPDF31_nlo_as_0118_luxqed", ]) .assert() .success() .stdout(ORDERS_A2_AS1A2_STR); } #[test] fn dont_sort_absolute() { Command::cargo_bin("pineappl") .unwrap() .args([ "channels", "--absolute", "--dont-sort", "../test-data/LHCB_WP_7TEV.pineappl.lz4", "NNPDF31_nlo_as_0118_luxqed", ]) .assert() .success() .stdout(DONT_SORT_ABSOLUTE_STR); } #[test] fn dont_sort() { Command::cargo_bin("pineappl") .unwrap() .args([ "channels", "--dont-sort", "../test-data/LHCB_WP_7TEV.pineappl.lz4", "NNPDF31_nlo_as_0118_luxqed", ]) .assert() .success() .stdout(DONT_SORT_STR); }