So it's 10% faster than without specialization for powerset_{4,8,12}_fold (and 3% to 7% for n=0,1,2).
And (it.k() + 1..=it.n()).fold makes it (intermediary) slower (so it's not pushed here).
Once Combinations::fold is implemented, it should be even faster.
Related to #755
powerset_0_fold
(µs)powerset_1_fold
(µs)powerset_2_fold
(µs)powerset_4_fold
(µs)powerset_8_fold
(µs)powerset_12_fold
(µs)[321.26 322.12 323.18]
[395.73 396.62 397.61]
[353.65 355.59 357.87]
[333.72 334.66 335.72]
[321.30 321.79 322.31]
[318.88 319.67 320.71]
[312.58 312.94 313.29]
[375.18 375.65 376.12]
[330.77 331.83 332.96]
[298.66 299.17 299.72]
[289.46 289.81 290.18]
[289.31 289.68 290.16]
(k+1..=n).fold
[320.78 322.00 323.43]
[383.65 384.39 385.30]
[349.08 350.11 351.12]
[315.60 316.55 317.63]
[304.82 305.70 306.59]
[296.88 297.81 299.03]
So it's 10% faster than without specialization for
powerset_{4,8,12}_fold
(and 3% to 7% forn=0,1,2
). And(it.k() + 1..=it.n()).fold
makes it (intermediary) slower (so it's not pushed here).Once
Combinations::fold
is implemented, it should be even faster.EDIT: Sorry, the table does not render well.