[Proposal] Separating callback chain building and actual invocation

Currently, the callback chain building and the actual invocation is done at the same time.
This means that invocation of Generator::run needs to check for initialization and that under debug mode, there might be 2n stack frames where n is the number of pipelines.
Here, I propose a new API for Generator:
trait Callback {
    fn call(&mut self) -> GeneratorResult;
}

trait Generator {
    type Output: Callback;

    fn run(&mut self, output: impl FnMut(Self::Output) -> crate::ValueResult) -> Self::Output;
}

Call to Generator::run will initialize the pipeline (e.g. for Dedup, it would be getting the first element) and then return a callback to a closure that have the entire pipelines already built.
As a result, even under the debug build where no inline is performed, the stack frames used is guaranteed to be equal to the number of pipelines.
The function returned will be called inside for_each, try_for_each and IteratorAdaptor.
This would also make it clear to new contributors on which part is responsible for initialization and which part is accounted for the "loop body" and possibly remove some uses of Option.

Hi
I don't think you can do a trait like that, you can't have impl FnMut() -> GeneratorResult as a function return value :(
I agree it would be nice to seperate the pipeline creation, and pipeline execution into seperate steps. However I am not sure it can be truly done. In Dedup for instance, if it fails to get the first element at build-time, it will still have to try to get it at run-time.
Say the upstream Generator is trying to fetch data from a channel, if it fails (no element to read at this time) it reports stop, if the channel is closed it reports complete, otherwise it sends each available value through the pipeline. With such a source-generator you can't rely on the first value being available when you build the pipeline. And so you must be able to do the initialization step even when you do later runs on the pipeline.
If we had a marker trait trait NeverStoppingGenerator: Generator we could move the initialization into Dedup::new for any source that is a NeverStoppingGenerator and remove that code entirely from Dedup::run when Src implements NeverStoppingGenerator, but that requires specialization I think?

I don't think you can do a trait like that, you can't have impl FnMut() -> GeneratorResult as a function return value :(

IMHO it should be possible, as I recalled from my memory rust's async function is just a sugar for fn f(...) -> impl Future

Say the upstream Generator is trying to fetch data from a channel, if it fails (no element to read at this time) it reports stop, if the channel is closed it reports complete, otherwise it sends each available value through the pipeline. With such a source-generator you can't rely on the first value being available when you build the pipeline. And so you must be able to do the initialization step even when you do later runs on the pipeline.

If so, then I guess the terminating for_each will just simply return I guess?
And IMO the initialization process can be restarted by calling for_each again,

IMHO it should be possible, as I recalled from my memory rust's async function is just a sugar for fn f(...) -> impl Future

An async fn some_async() is just sugar for fn some_async() -> impl Future yes, but the Future trait itself, is alot more basic. And a quick test on the playground confirms that you can't have impl Trait as return-type in traits.

If so, then I guess the terminating for_each will just simply return I guess?

for_each will stop and return GeneratorResult::Stopped yes.

And IMO the initialization process can be restarted by calling for_each again,

True

It is an interesting problem though: I don't think pushgen will work well with channel, which is async by nature.
While pushgen employs callback to avoid branching, it isn't async, which I think program which uses channel would expect.

I was more thinking if you have a generator that uses try_recv to generate data. It might not be a common use-case but I think it can prove valuable

An async fn some_async() is just sugar for fn some_async() -> impl Future yes, but the Future trait itself, is alot more basic. And a quick test on the playground confirms that you can't have impl Trait as return-type in traits.

Yep, turns out only way to do this is to add an item to the Test, which implements another trait Callback since we cannot infer the type of closure.
playground

I was more thinking if you have a generator that uses try_recv to generate data. It might not be a common use-case but I think it can prove valuable

Yep, though I think my proposal will not forbid this API.

Yah I definitely think it's an interesting idea to split the cold and hot paths. Some experimentation and testing is necessary before committing to it though

What kind of experiments do you think is necessary for this?

I was just trying to define a clear example for the new trait, however I immediately discover that without impl FnMut() -> GeneratorResult as the return value, the code failed apart because the output is a generic parameter and it is necessary for run to return different types based on the generic parameter.

Ah ok. I will try and think of something to try as well, but right now I don't have any clear idea.

I just realized that all pipelines either takes &mut to itself (like Dedup) or takes nothing (Cloned).
So what I now proposed instead is to use an erased interface:

use core::ffi::c_void;
use core::mem::transmute;
use core::ptr::null_mut;

/// ErasedFnPointer can either points to a free function or associated one that
/// `&mut self`
struct ErasedFnPointer<T, Ret> {
    struct_pointer: *mut c_void,
    wrapper: fn(&ErasedFnPointer<T, Ret>, T) -> Ret,
    fp: *const ()
}
impl<T, Ret> ErasedFnPointer<T, Ret> {
    fn associated_wrapper<S>(&self, param: T) -> Ret {
        let sp = self.struct_pointer as *mut S;
        let s = unsafe { &mut (*sp) };
        let fp = unsafe { transmute::<_, fn(&mut S, T) -> Ret>(self.fp) };
        fp(s, param)
    }

    pub fn from_associated<S>(struct_pointer: &mut S, fp: fn(&mut S, T) -> Ret)
        -> ErasedFnPointer<T, Ret>
    {
        ErasedFnPointer {
            struct_pointer: struct_pointer as *mut _ as *mut c_void,
            fp: fp as *const (),
            wrapper: ErasedFnPointer::associated_wrapper::<S>
        }
    }

    fn free_wrapper(&self, param: T) -> Ret {
        let fp = unsafe { transmute::<_, fn(T) -> Ret>(self.fp) };
        fp(param)
    }

    pub fn from_free(fp: fn(T) -> Ret) -> ErasedFnPointer<T, Ret> {
        ErasedFnPointer {
            struct_pointer: null_mut(),
            fp: fp as *const(),
            wrapper: ErasedFnPointer::free_wrapper
        }
    }

    pub fn call(&self, param: T) -> Ret {
        (self.wrapper)(self, param)
    }
}

trait Callback {
    fn call(&mut self) -> GeneratorResult;
}

trait Generator {
    type Output: Callback;

    fn run(&mut self, output: ErasedFnPointer<Self::Output, crate::ValueResult>) -> Self::Output;
}

The compiler can easily inline the *_wrapper and the underlying function pointer, while Generator can have a stable interface without any generic parameter, so that it can return a single type only.
This makes the separation I described before possible without losing performance, but it also might help with compilation time a bit since there is no need for monomorphized.
playground

Hi
I'm not sold at the moment to be honest. This is IMO starting to get more complicated than the system already in place. Have you implemented any of the more involved adaptors (like Dedup or Flatten) using this pattern? I think before any change is decided on the basic benchmarks must be ported to this kind of system and checked against current system.
It is also quite easy to run into UB with the pointer solution; playground

Hi
I'm not sold at the moment to be honest. This is IMO starting to get more complicated than the system already in place. Have you implemented any of the more involved adaptors (like Dedup or Flatten) using this pattern? I think before any change is decided on the basic benchmarks must be ported to this kind of system and checked against current system.
It is also quite easy to run into UB with the pointer solution; playground

About the UB part, I have actually updated my code yesterday and introduces lifetime annotation inside ErasedFnPointer along with PhantomData to fix the lifetime issues.
With the updated code, it will actually fail to compile.

It’s actually possible to implement take one easily with closure, since in rust, associated functions are just regular functions:
fn main() {
    let mut x = None;
    ErasedFnPointer::from_associated(&mut x, |x, param| {
        *x = Some(param);
        println!("{:#?}", x);
    }).call(1);
}

For the part where deduped values is pushed, I guess the parameter output (the callback) in Generator::run has to be saved inside Dedup so that it can be accessed.

Here’s a link to the code inside gist

Thanks for the writeup! At the moment I won't pursue this split. I don't really see the benefit right now and I don't really have the time to do any benchmarking and testing.

Thanks for the writeup! At the moment I won't pursue this split. I don't really see the benefit right now and I don't really have the time to do any benchmarking and testing.

I can definitely understand your decision.
So instead of requesting for implement this in the main repo, I will try to implement this in my own fork and provides update to it in this issue.

Sounds like a good plan! I'm definitely interested in the approach.

I have created a new branch GeneratorImprovement for this.

I have replaced the generic version of Generator::run with the ErasedFnPointer version of it in here.
I will pause for a while and perform benchmark to see how this alone would affect the performance.

Benchmark result of 6e3af98000d680f023428a5e390c573f218c8e4f using taskset 0x01 cargo bench:
    Finished bench [optimized] target(s) in 0.02s
     Running unittests (target/release/deps/pushgen-9dbcdc1345ab781d)

running 16 tests
test generator_ext::tests::for_each_stopped ... ignored
test structs::chain::tests::basic_chain ... ignored
test structs::dedup::tests::dedup_all_duplicate ... ignored
test structs::dedup::tests::dedup_nonduplicate ... ignored
test structs::dedup::tests::dedup_some_duplicate ... ignored
test structs::dedup::tests::dedup_stopping_source ... ignored
test structs::flatten::tests::slice_flatten ... ignored
test structs::flatten::tests::stopping_generator ... ignored
test structs::flatten::tests::vector_flatten ... ignored
test structs::iterator::tests::fold ... ignored
test structs::iterator::tests::iter_over_slice ... ignored
test structs::take::tests::take ... ignored
test structs::take::tests::take_restart ... ignored
test structs::zip::tests::same_length ... ignored
test structs::zip::tests::shorter_left_side ... ignored
test structs::zip::tests::shorter_right_side ... ignored

test result: ok. 0 passed; 0 failed; 16 ignored; 0 measured; 0 filtered out; finished in 0.00s

     Running unittests (target/release/deps/for_each_chain_take_filter_map-c2f1d7bc7957186f)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking iterator_for_each_chain_take_filter_map
Benchmarking iterator_for_each_chain_take_filter_map: Warming up for 3.0000 s
Benchmarking iterator_for_each_chain_take_filter_map: Collecting 100 samples in estimated 5.1368 s (2400 iterations)
Benchmarking iterator_for_each_chain_take_filter_map: Analyzing
iterator_for_each_chain_take_filter_map
                        time:   [2.1270 ms 2.1460 ms 2.1693 ms]
                        change: [-1.2152% -0.0224% +1.1434%] (p = 0.97 > 0.05)
                        No change in performance detected.
Found 6 outliers among 100 measurements (6.00%)
  1 (1.00%) high mild
  5 (5.00%) high severe

     Running unittests (target/release/deps/for_each_dedup_filter-0792b8997f8ad6ba)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking iterator_for_each_dedup_filter
Benchmarking iterator_for_each_dedup_filter: Warming up for 3.0000 s
Benchmarking iterator_for_each_dedup_filter: Collecting 100 samples in estimated 5.3478 s (71k iterations)
Benchmarking iterator_for_each_dedup_filter: Analyzing
iterator_for_each_dedup_filter
                        time:   [74.325 us 74.800 us 75.396 us]
                        change: [-8.2384% -7.1125% -5.9268%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 7 outliers among 100 measurements (7.00%)
  1 (1.00%) high mild
  6 (6.00%) high severe

     Running unittests (target/release/deps/for_each_dedup_flatten_filter_map-02530f85fb28b946)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking iterator_for_each_dedup_flatten_filter_map
Benchmarking iterator_for_each_dedup_flatten_filter_map: Warming up for 3.0000 s
Benchmarking iterator_for_each_dedup_flatten_filter_map: Collecting 100 samples in estimated 6.5590 s (15k iterations)
Benchmarking iterator_for_each_dedup_flatten_filter_map: Analyzing
iterator_for_each_dedup_flatten_filter_map
                        time:   [436.31 us 439.38 us 442.92 us]
                        change: [-0.4690% +0.4396% +1.3767%] (p = 0.35 > 0.05)
                        No change in performance detected.
Found 7 outliers among 100 measurements (7.00%)
  1 (1.00%) high mild
  6 (6.00%) high severe

     Running unittests (target/release/deps/for_each_filter_map-23889c5657b80085)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking iterator_for_each_filter_map
Benchmarking iterator_for_each_filter_map: Warming up for 3.0000 s
Benchmarking iterator_for_each_filter_map: Collecting 100 samples in estimated 5.6040 s (35k iterations)
Benchmarking iterator_for_each_filter_map: Analyzing
iterator_for_each_filter_map
                        time:   [158.13 us 159.36 us 160.81 us]
                        change: [-0.9971% +0.1623% +1.3754%] (p = 0.80 > 0.05)
                        No change in performance detected.
Found 11 outliers among 100 measurements (11.00%)
  4 (4.00%) high mild
  7 (7.00%) high severe

     Running unittests (target/release/deps/for_each_flatten_dedup_filter_map-982b60bd65247325)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking iterator_for_each_flatten_dedup_filter_map
Benchmarking iterator_for_each_flatten_dedup_filter_map: Warming up for 3.0000 s
Benchmarking iterator_for_each_flatten_dedup_filter_map: Collecting 100 samples in estimated 6.0028 s (10k iterations)
Benchmarking iterator_for_each_flatten_dedup_filter_map: Analyzing
iterator_for_each_flatten_dedup_filter_map
                        time:   [591.43 us 595.06 us 599.53 us]
                        change: [-0.9254% +0.6120% +2.8122%] (p = 0.56 > 0.05)
                        No change in performance detected.
Found 15 outliers among 100 measurements (15.00%)
  6 (6.00%) high mild
  9 (9.00%) high severe

     Running unittests (target/release/deps/for_each_transrangers_test6-ebafe03edf02d334)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking iterator_for_each_transrangers_test6
Benchmarking iterator_for_each_transrangers_test6: Warming up for 3.0000 s
Benchmarking iterator_for_each_transrangers_test6: Collecting 100 samples in estimated 5.7450 s (20k iterations)
Benchmarking iterator_for_each_transrangers_test6: Analyzing
iterator_for_each_transrangers_test6
                        time:   [282.04 us 283.94 us 286.32 us]
                        change: [-2.7423% -1.3120% +0.0465%] (p = 0.06 > 0.05)
                        No change in performance detected.
Found 7 outliers among 100 measurements (7.00%)
  2 (2.00%) high mild
  5 (5.00%) high severe

     Running unittests (target/release/deps/iter_next_basic_loop-37d9035efa073309)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking iterator_next_basic_loop
Benchmarking iterator_next_basic_loop: Warming up for 3.0000 s
Benchmarking iterator_next_basic_loop: Collecting 100 samples in estimated 5.0034 s (56k iterations)
Benchmarking iterator_next_basic_loop: Analyzing
iterator_next_basic_loop
                        time:   [89.551 us 90.250 us 91.122 us]
                        change: [-1.5815% -0.5493% +0.5786%] (p = 0.33 > 0.05)
                        No change in performance detected.
Found 21 outliers among 100 measurements (21.00%)
  12 (12.00%) low mild
  3 (3.00%) high mild
  6 (6.00%) high severe

     Running unittests (target/release/deps/iter_next_chain_take_filter_map-f319c0ad5d149fc6)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking iterator_next_chain_take_filter_map
Benchmarking iterator_next_chain_take_filter_map: Warming up for 3.0000 s
Benchmarking iterator_next_chain_take_filter_map: Collecting 100 samples in estimated 5.0800 s (2200 iterations)
Benchmarking iterator_next_chain_take_filter_map: Analyzing
iterator_next_chain_take_filter_map
                        time:   [2.2886 ms 2.3026 ms 2.3198 ms]
                        change: [-1.4603% -0.4064% +0.6751%] (p = 0.47 > 0.05)
                        No change in performance detected.
Found 5 outliers among 100 measurements (5.00%)
  5 (5.00%) high severe

     Running unittests (target/release/deps/iter_next_dedup_filter-d972ca417e800e75)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking iterator_next_dedup_filter
Benchmarking iterator_next_dedup_filter: Warming up for 3.0000 s
Benchmarking iterator_next_dedup_filter: Collecting 100 samples in estimated 5.1261 s (106k iterations)
Benchmarking iterator_next_dedup_filter: Analyzing
iterator_next_dedup_filter
                        time:   [47.918 us 48.296 us 48.747 us]
                        change: [-0.2984% +0.7532% +1.8544%] (p = 0.19 > 0.05)
                        No change in performance detected.
Found 5 outliers among 100 measurements (5.00%)
  5 (5.00%) high severe

     Running unittests (target/release/deps/iter_next_dedup_flatten_filter_map-b66194b56c578199)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking iterator_next_dedup_flatten_filter_map
Benchmarking iterator_next_dedup_flatten_filter_map: Warming up for 3.0000 s
Benchmarking iterator_next_dedup_flatten_filter_map: Collecting 100 samples in estimated 8.4989 s (10k iterations)
Benchmarking iterator_next_dedup_flatten_filter_map: Analyzing
iterator_next_dedup_flatten_filter_map
                        time:   [833.15 us 837.99 us 843.64 us]
                        change: [-0.3999% +0.8304% +2.2878%] (p = 0.23 > 0.05)
                        No change in performance detected.
Found 11 outliers among 100 measurements (11.00%)
  2 (2.00%) low mild
  9 (9.00%) high severe

     Running unittests (target/release/deps/iter_next_filter_map-d184a6e09748526e)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking iterator_next_filter_map
Benchmarking iterator_next_filter_map: Warming up for 3.0000 s
Benchmarking iterator_next_filter_map: Collecting 100 samples in estimated 5.6615 s (15k iterations)
Benchmarking iterator_next_filter_map: Analyzing
iterator_next_filter_map
                        time:   [371.28 us 374.01 us 377.30 us]
                        change: [-1.1823% -0.1644% +0.7638%] (p = 0.75 > 0.05)
                        No change in performance detected.
Found 7 outliers among 100 measurements (7.00%)
  1 (1.00%) high mild
  6 (6.00%) high severe

     Running unittests (target/release/deps/iter_next_flatten_dedup_filter_map-3b82355d0e7308f8)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking iterator_next_flatten_dedup_filter_map
Benchmarking iterator_next_flatten_dedup_filter_map: Warming up for 3.0000 s

Warning: Unable to complete 100 samples in 5.0s. You may wish to increase target time to 5.1s, enable flat sampling, or reduce sample count to 70.
Benchmarking iterator_next_flatten_dedup_filter_map: Collecting 100 samples in estimated 5.0660 s (5050 iterations)
Benchmarking iterator_next_flatten_dedup_filter_map: Analyzing
iterator_next_flatten_dedup_filter_map
                        time:   [1.0013 ms 1.0090 ms 1.0183 ms]
                        change: [-4.0667% -0.9408% +1.1043%] (p = 0.61 > 0.05)
                        No change in performance detected.
Found 8 outliers among 100 measurements (8.00%)
  3 (3.00%) high mild
  5 (5.00%) high severe

     Running unittests (target/release/deps/iter_next_transrangers_test6-aa5b656484c1d22f)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking iterator_next_transrangers_test6
Benchmarking iterator_next_transrangers_test6: Warming up for 3.0000 s
Benchmarking iterator_next_transrangers_test6: Collecting 100 samples in estimated 6.7045 s (10k iterations)
Benchmarking iterator_next_transrangers_test6: Analyzing
iterator_next_transrangers_test6
                        time:   [660.66 us 665.06 us 670.30 us]
                        change: [-0.6146% +0.3795% +1.4175%] (p = 0.51 > 0.05)
                        No change in performance detected.
Found 9 outliers among 100 measurements (9.00%)
  1 (1.00%) high mild
  8 (8.00%) high severe

     Running unittests (target/release/deps/pushgen_chain_take_filter_map-d0156bcf4d3bfeef)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking generator_chain_take_filter_map
Benchmarking generator_chain_take_filter_map: Warming up for 3.0000 s
Benchmarking generator_chain_take_filter_map: Collecting 100 samples in estimated 7.5320 s (10k iterations)
Benchmarking generator_chain_take_filter_map: Analyzing
generator_chain_take_filter_map
                        time:   [741.44 us 746.07 us 751.54 us]
                        change: [-0.7264% +0.1440% +0.9947%] (p = 0.77 > 0.05)
                        No change in performance detected.
Found 12 outliers among 100 measurements (12.00%)
  1 (1.00%) low mild
  4 (4.00%) high mild
  7 (7.00%) high severe

     Running unittests (target/release/deps/pushgen_dedup_filter-91859256e6e92e85)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking pushgen_dedup_filter
Benchmarking pushgen_dedup_filter: Warming up for 3.0000 s
Benchmarking pushgen_dedup_filter: Collecting 100 samples in estimated 5.0323 s (242k iterations)
Benchmarking pushgen_dedup_filter: Analyzing
pushgen_dedup_filter    time:   [20.762 us 20.907 us 21.089 us]
                        change: [-0.3892% +0.7025% +1.8623%] (p = 0.27 > 0.05)
                        No change in performance detected.
Found 9 outliers among 100 measurements (9.00%)
  3 (3.00%) high mild
  6 (6.00%) high severe

     Running unittests (target/release/deps/pushgen_dedup_flatten_filter_map-d78681cad649eb0f)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking pushgen_dedup_flatten_filter_map
Benchmarking pushgen_dedup_flatten_filter_map: Warming up for 3.0000 s
Benchmarking pushgen_dedup_flatten_filter_map: Collecting 100 samples in estimated 5.0888 s (20k iterations)
Benchmarking pushgen_dedup_flatten_filter_map: Analyzing
pushgen_dedup_flatten_filter_map
                        time:   [250.01 us 251.90 us 254.27 us]
                        change: [-10.144% -3.6279% +0.9031%] (p = 0.30 > 0.05)
                        No change in performance detected.
Found 6 outliers among 100 measurements (6.00%)
  1 (1.00%) high mild
  5 (5.00%) high severe

     Running unittests (target/release/deps/pushgen_filter_map-9ac271e2acbf21cd)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking pushgen_filter_map
Benchmarking pushgen_filter_map: Warming up for 3.0000 s
Benchmarking pushgen_filter_map: Collecting 100 samples in estimated 5.6505 s (35k iterations)
Benchmarking pushgen_filter_map: Analyzing
pushgen_filter_map      time:   [158.86 us 160.08 us 161.54 us]
                        change: [-2.1761% -0.2834% +1.2589%] (p = 0.78 > 0.05)
                        No change in performance detected.
Found 7 outliers among 100 measurements (7.00%)
  1 (1.00%) high mild
  6 (6.00%) high severe

     Running unittests (target/release/deps/pushgen_flatten_dedup_filter_map-64ff7169b0b1e6da)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking pushgen_flatten_dedup_filter_map
Benchmarking pushgen_flatten_dedup_filter_map: Warming up for 3.0000 s
Benchmarking pushgen_flatten_dedup_filter_map: Collecting 100 samples in estimated 6.0091 s (25k iterations)
Benchmarking pushgen_flatten_dedup_filter_map: Analyzing
pushgen_flatten_dedup_filter_map
                        time:   [236.26 us 237.76 us 239.60 us]
                        change: [-0.8371% -0.0583% +0.7147%] (p = 0.89 > 0.05)
                        No change in performance detected.
Found 5 outliers among 100 measurements (5.00%)
  5 (5.00%) high severe

     Running unittests (target/release/deps/pushgen_iter_basic_loop-ba604406bd167963)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking pushgen_iter_basic_loop
Benchmarking pushgen_iter_basic_loop: Warming up for 3.0000 s
Benchmarking pushgen_iter_basic_loop: Collecting 100 samples in estimated 5.0472 s (56k iterations)
Benchmarking pushgen_iter_basic_loop: Analyzing
pushgen_iter_basic_loop time:   [90.251 us 90.951 us 91.823 us]
                        change: [-0.1168% +1.1477% +2.4304%] (p = 0.08 > 0.05)
                        No change in performance detected.
Found 5 outliers among 100 measurements (5.00%)
  5 (5.00%) high severe

     Running unittests (target/release/deps/pushgen_iter_chain_take_filter_map-2c85753845747283)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking pushgen_iter_chain_take_filter_map
Benchmarking pushgen_iter_chain_take_filter_map: Warming up for 3.0000 s

Warning: Unable to complete 100 samples in 5.0s. You may wish to increase target time to 7.8s, enable flat sampling, or reduce sample count to 50.
Benchmarking pushgen_iter_chain_take_filter_map: Collecting 100 samples in estimated 7.7878 s (5050 iterations)
Benchmarking pushgen_iter_chain_take_filter_map: Analyzing
pushgen_iter_chain_take_filter_map
                        time:   [1.4744 ms 1.4850 ms 1.4973 ms]
                        change: [-0.7726% +0.6280% +1.9490%] (p = 0.38 > 0.05)
                        No change in performance detected.
Found 6 outliers among 100 measurements (6.00%)
  4 (4.00%) high mild
  2 (2.00%) high severe

     Running unittests (target/release/deps/pushgen_transrangers_test6-beceb9a7f7f3aa7e)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking pushgen_transrangers_test6
Benchmarking pushgen_transrangers_test6: Warming up for 3.0000 s
Benchmarking pushgen_transrangers_test6: Collecting 100 samples in estimated 5.7536 s (20k iterations)
Benchmarking pushgen_transrangers_test6: Analyzing
pushgen_transrangers_test6
                        time:   [283.25 us 285.00 us 287.21 us]
                        change: [-0.9785% +0.0567% +1.1057%] (p = 0.92 > 0.05)
                        No change in performance detected.
Found 7 outliers among 100 measurements (7.00%)
  1 (1.00%) high mild
  6 (6.00%) high severe

     Running unittests (target/release/deps/try_for_each_chain_take_filter_map-dd6018e8ec5d4a7e)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking iterator_try_for_each_chain_take_filter_map
Benchmarking iterator_try_for_each_chain_take_filter_map: Warming up for 3.0000 s
Benchmarking iterator_try_for_each_chain_take_filter_map: Collecting 100 samples in estimated 5.0208 s (2300 iterations)
Benchmarking iterator_try_for_each_chain_take_filter_map: Analyzing
iterator_try_for_each_chain_take_filter_map
                        time:   [2.1682 ms 2.1847 ms 2.2045 ms]
                        change: [-0.9323% +0.1446% +1.2684%] (p = 0.80 > 0.05)
                        No change in performance detected.
Found 6 outliers among 100 measurements (6.00%)
  1 (1.00%) high mild
  5 (5.00%) high severe

     Running unittests (target/release/deps/try_for_each_dedup_filter-e3981107a8d0b5c7)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking iterator_try_for_each_dedup_filter
Benchmarking iterator_try_for_each_dedup_filter: Warming up for 3.0000 s
Benchmarking iterator_try_for_each_dedup_filter: Collecting 100 samples in estimated 5.1125 s (121k iterations)
Benchmarking iterator_try_for_each_dedup_filter: Analyzing
iterator_try_for_each_dedup_filter
                        time:   [41.759 us 42.030 us 42.379 us]
                        change: [-1.5309% -0.4606% +0.5479%] (p = 0.41 > 0.05)
                        No change in performance detected.
Found 7 outliers among 100 measurements (7.00%)
  2 (2.00%) high mild
  5 (5.00%) high severe

     Running unittests (target/release/deps/try_for_each_dedup_flatten_filter_map-98eef37b8662f178)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking iterator_try_for_each_dedup_flatten_filter_map
Benchmarking iterator_try_for_each_dedup_flatten_filter_map: Warming up for 3.0000 s
Benchmarking iterator_try_for_each_dedup_flatten_filter_map: Collecting 100 samples in estimated 6.2948 s (10k iterations)
Benchmarking iterator_try_for_each_dedup_flatten_filter_map: Analyzing
iterator_try_for_each_dedup_flatten_filter_map
                        time:   [619.25 us 623.73 us 629.01 us]
                        change: [-1.0925% -0.0937% +0.8407%] (p = 0.86 > 0.05)
                        No change in performance detected.
Found 8 outliers among 100 measurements (8.00%)
  1 (1.00%) high mild
  7 (7.00%) high severe

     Running unittests (target/release/deps/try_for_each_filter_map-9dead610a7585c29)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking iterator_try_for_each_filter_map
Benchmarking iterator_try_for_each_filter_map: Warming up for 3.0000 s
Benchmarking iterator_try_for_each_filter_map: Collecting 100 samples in estimated 6.1342 s (10k iterations)
Benchmarking iterator_try_for_each_filter_map: Analyzing
iterator_try_for_each_filter_map
                        time:   [601.05 us 604.95 us 609.77 us]
                        change: [-1.4356% -0.4445% +0.5049%] (p = 0.39 > 0.05)
                        No change in performance detected.
Found 11 outliers among 100 measurements (11.00%)
  5 (5.00%) high mild
  6 (6.00%) high severe

     Running unittests (target/release/deps/try_for_each_flatten_dedup_filter_map-092f2984d109ffc4)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking iterator_try_for_each_flatten_dedup_filter_map
Benchmarking iterator_try_for_each_flatten_dedup_filter_map: Warming up for 3.0000 s
Benchmarking iterator_try_for_each_flatten_dedup_filter_map: Collecting 100 samples in estimated 9.4996 s (10k iterations)
Benchmarking iterator_try_for_each_flatten_dedup_filter_map: Analyzing
iterator_try_for_each_flatten_dedup_filter_map
                        time:   [937.58 us 942.78 us 948.65 us]
                        change: [-5.5575% -1.8861% +0.5081%] (p = 0.33 > 0.05)
                        No change in performance detected.
Found 11 outliers among 100 measurements (11.00%)
  2 (2.00%) high mild
  9 (9.00%) high severe

     Running unittests (target/release/deps/try_for_each_transrangers_test6-33f87431201c709c)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking iterator_try_for_each_transrangers_test6
Benchmarking iterator_try_for_each_transrangers_test6: Warming up for 3.0000 s
Benchmarking iterator_try_for_each_transrangers_test6: Collecting 100 samples in estimated 7.0154 s (10k iterations)
Benchmarking iterator_try_for_each_transrangers_test6: Analyzing
iterator_try_for_each_transrangers_test6
                        time:   [690.28 us 695.47 us 701.61 us]
                        change: [-18.268% -12.381% -7.8956%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 12 outliers among 100 measurements (12.00%)
  2 (2.00%) high mild
  10 (10.00%) high severe

Benchmark of 6090ec39757f7cc85eb6c1583482c40f41d6223f:
   Compiling pushgen v0.0.1 (/home/nobodyxu/Dev/pushgen)
    Finished bench [optimized] target(s) in 3m 03s
     Running unittests (target/release/deps/pushgen-9dbcdc1345ab781d)

running 19 tests
test callback::tests::from_associated ... ignored
test callback::tests::from_associated_for_closure ... ignored
test callback::tests::from_free ... ignored
test generator_ext::tests::for_each_stopped ... ignored
test structs::chain::tests::basic_chain ... ignored
test structs::dedup::tests::dedup_all_duplicate ... ignored
test structs::dedup::tests::dedup_nonduplicate ... ignored
test structs::dedup::tests::dedup_some_duplicate ... ignored
test structs::dedup::tests::dedup_stopping_source ... ignored
test structs::flatten::tests::slice_flatten ... ignored
test structs::flatten::tests::stopping_generator ... ignored
test structs::flatten::tests::vector_flatten ... ignored
test structs::iterator::tests::fold ... ignored
test structs::iterator::tests::iter_over_slice ... ignored
test structs::take::tests::take ... ignored
test structs::take::tests::take_restart ... ignored
test structs::zip::tests::same_length ... ignored
test structs::zip::tests::shorter_left_side ... ignored
test structs::zip::tests::shorter_right_side ... ignored

test result: ok. 0 passed; 0 failed; 19 ignored; 0 measured; 0 filtered out; finished in 0.00s

     Running unittests (target/release/deps/for_each_chain_take_filter_map-c2f1d7bc7957186f)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking iterator_for_each_chain_take_filter_map
Benchmarking iterator_for_each_chain_take_filter_map: Warming up for 3.0000 s
Benchmarking iterator_for_each_chain_take_filter_map: Collecting 100 samples in estimated 5.1416 s (2400 iterations)
Benchmarking iterator_for_each_chain_take_filter_map: Analyzing
iterator_for_each_chain_take_filter_map
                        time:   [2.1307 ms 2.1469 ms 2.1664 ms]
                        change: [-1.2470% +0.0425% +1.3581%] (p = 0.94 > 0.05)
                        No change in performance detected.
Found 6 outliers among 100 measurements (6.00%)
  1 (1.00%) high mild
  5 (5.00%) high severe

     Running unittests (target/release/deps/for_each_dedup_filter-0792b8997f8ad6ba)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking iterator_for_each_dedup_filter
Benchmarking iterator_for_each_dedup_filter: Warming up for 3.0000 s
Benchmarking iterator_for_each_dedup_filter: Collecting 100 samples in estimated 5.0360 s (66k iterations)
Benchmarking iterator_for_each_dedup_filter: Analyzing
iterator_for_each_dedup_filter
                        time:   [76.366 us 77.038 us 77.825 us]
                        change: [+1.7262% +3.4645% +5.2383%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 6 outliers among 100 measurements (6.00%)
  3 (3.00%) high mild
  3 (3.00%) high severe

     Running unittests (target/release/deps/for_each_dedup_flatten_filter_map-02530f85fb28b946)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking iterator_for_each_dedup_flatten_filter_map
Benchmarking iterator_for_each_dedup_flatten_filter_map: Warming up for 3.0000 s
Benchmarking iterator_for_each_dedup_flatten_filter_map: Collecting 100 samples in estimated 6.5673 s (15k iterations)
Benchmarking iterator_for_each_dedup_flatten_filter_map: Analyzing
iterator_for_each_dedup_flatten_filter_map
                        time:   [427.84 us 430.80 us 434.27 us]
                        change: [-2.5552% -1.6524% -0.6604%] (p = 0.00 < 0.05)
                        Change within noise threshold.
Found 7 outliers among 100 measurements (7.00%)
  1 (1.00%) high mild
  6 (6.00%) high severe

     Running unittests (target/release/deps/for_each_filter_map-23889c5657b80085)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking iterator_for_each_filter_map
Benchmarking iterator_for_each_filter_map: Warming up for 3.0000 s
Benchmarking iterator_for_each_filter_map: Collecting 100 samples in estimated 5.6767 s (35k iterations)
Benchmarking iterator_for_each_filter_map: Analyzing
iterator_for_each_filter_map
                        time:   [159.62 us 160.85 us 162.31 us]
                        change: [-0.2898% +0.9400% +2.0048%] (p = 0.14 > 0.05)
                        No change in performance detected.
Found 9 outliers among 100 measurements (9.00%)
  2 (2.00%) high mild
  7 (7.00%) high severe

     Running unittests (target/release/deps/for_each_flatten_dedup_filter_map-982b60bd65247325)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking iterator_for_each_flatten_dedup_filter_map
Benchmarking iterator_for_each_flatten_dedup_filter_map: Warming up for 3.0000 s
Benchmarking iterator_for_each_flatten_dedup_filter_map: Collecting 100 samples in estimated 6.0153 s (10k iterations)
Benchmarking iterator_for_each_flatten_dedup_filter_map: Analyzing
iterator_for_each_flatten_dedup_filter_map
                        time:   [591.23 us 595.11 us 599.90 us]
                        change: [-2.7574% -0.8490% +0.5473%] (p = 0.39 > 0.05)
                        No change in performance detected.
Found 7 outliers among 100 measurements (7.00%)
  1 (1.00%) high mild
  6 (6.00%) high severe

     Running unittests (target/release/deps/for_each_transrangers_test6-ebafe03edf02d334)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking iterator_for_each_transrangers_test6
Benchmarking iterator_for_each_transrangers_test6: Warming up for 3.0000 s
Benchmarking iterator_for_each_transrangers_test6: Collecting 100 samples in estimated 5.7753 s (20k iterations)
Benchmarking iterator_for_each_transrangers_test6: Analyzing
iterator_for_each_transrangers_test6
                        time:   [283.04 us 284.92 us 287.28 us]
                        change: [-0.5860% +0.3632% +1.3297%] (p = 0.47 > 0.05)
                        No change in performance detected.
Found 5 outliers among 100 measurements (5.00%)
  5 (5.00%) high severe

     Running unittests (target/release/deps/iter_next_basic_loop-37d9035efa073309)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking iterator_next_basic_loop
Benchmarking iterator_next_basic_loop: Warming up for 3.0000 s
Benchmarking iterator_next_basic_loop: Collecting 100 samples in estimated 5.3813 s (61k iterations)
Benchmarking iterator_next_basic_loop: Analyzing
iterator_next_basic_loop
                        time:   [88.227 us 88.830 us 89.586 us]
                        change: [-2.3394% -1.1818% -0.0575%] (p = 0.05 < 0.05)
                        Change within noise threshold.
Found 12 outliers among 100 measurements (12.00%)
  7 (7.00%) high mild
  5 (5.00%) high severe

     Running unittests (target/release/deps/iter_next_chain_take_filter_map-f319c0ad5d149fc6)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking iterator_next_chain_take_filter_map
Benchmarking iterator_next_chain_take_filter_map: Warming up for 3.0000 s
Benchmarking iterator_next_chain_take_filter_map: Collecting 100 samples in estimated 5.0784 s (2200 iterations)
Benchmarking iterator_next_chain_take_filter_map: Analyzing
iterator_next_chain_take_filter_map
                        time:   [2.2954 ms 2.3124 ms 2.3330 ms]
                        change: [-0.5810% +0.4244% +1.5850%] (p = 0.45 > 0.05)
                        No change in performance detected.
Found 8 outliers among 100 measurements (8.00%)
  2 (2.00%) high mild
  6 (6.00%) high severe

     Running unittests (target/release/deps/iter_next_dedup_filter-d972ca417e800e75)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking iterator_next_dedup_filter
Benchmarking iterator_next_dedup_filter: Warming up for 3.0000 s
Benchmarking iterator_next_dedup_filter: Collecting 100 samples in estimated 5.0968 s (106k iterations)
Benchmarking iterator_next_dedup_filter: Analyzing
iterator_next_dedup_filter
                        time:   [47.792 us 48.176 us 48.636 us]
                        change: [-1.4840% -0.3737% +0.6225%] (p = 0.51 > 0.05)
                        No change in performance detected.
Found 5 outliers among 100 measurements (5.00%)
  1 (1.00%) high mild
  4 (4.00%) high severe

     Running unittests (target/release/deps/iter_next_dedup_flatten_filter_map-b66194b56c578199)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking iterator_next_dedup_flatten_filter_map
Benchmarking iterator_next_dedup_flatten_filter_map: Warming up for 3.0000 s
Benchmarking iterator_next_dedup_flatten_filter_map: Collecting 100 samples in estimated 8.5047 s (10k iterations)
Benchmarking iterator_next_dedup_flatten_filter_map: Analyzing
iterator_next_dedup_flatten_filter_map
                        time:   [840.23 us 845.14 us 850.85 us]
                        change: [-1.0482% +0.2435% +1.2954%] (p = 0.71 > 0.05)
                        No change in performance detected.
Found 11 outliers among 100 measurements (11.00%)
  2 (2.00%) high mild
  9 (9.00%) high severe

     Running unittests (target/release/deps/iter_next_filter_map-d184a6e09748526e)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking iterator_next_filter_map
Benchmarking iterator_next_filter_map: Warming up for 3.0000 s
Benchmarking iterator_next_filter_map: Collecting 100 samples in estimated 5.6721 s (15k iterations)
Benchmarking iterator_next_filter_map: Analyzing
iterator_next_filter_map
                        time:   [371.88 us 374.77 us 378.24 us]
                        change: [-0.5513% +0.3788% +1.5762%] (p = 0.49 > 0.05)
                        No change in performance detected.
Found 9 outliers among 100 measurements (9.00%)
  3 (3.00%) high mild
  6 (6.00%) high severe

     Running unittests (target/release/deps/iter_next_flatten_dedup_filter_map-3b82355d0e7308f8)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking iterator_next_flatten_dedup_filter_map
Benchmarking iterator_next_flatten_dedup_filter_map: Warming up for 3.0000 s

Warning: Unable to complete 100 samples in 5.0s. You may wish to increase target time to 5.1s, enable flat sampling, or reduce sample count to 60.
Benchmarking iterator_next_flatten_dedup_filter_map: Collecting 100 samples in estimated 5.0808 s (5050 iterations)
Benchmarking iterator_next_flatten_dedup_filter_map: Analyzing
iterator_next_flatten_dedup_filter_map
                        time:   [994.51 us 1.0027 ms 1.0125 ms]
                        change: [-2.0237% -0.9274% +0.0606%] (p = 0.09 > 0.05)
                        No change in performance detected.
Found 8 outliers among 100 measurements (8.00%)
  3 (3.00%) high mild
  5 (5.00%) high severe

     Running unittests (target/release/deps/iter_next_transrangers_test6-aa5b656484c1d22f)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking iterator_next_transrangers_test6
Benchmarking iterator_next_transrangers_test6: Warming up for 3.0000 s
Benchmarking iterator_next_transrangers_test6: Collecting 100 samples in estimated 6.7035 s (10k iterations)
Benchmarking iterator_next_transrangers_test6: Analyzing
iterator_next_transrangers_test6
                        time:   [660.18 us 664.37 us 669.43 us]
                        change: [-1.4956% -0.3559% +0.7084%] (p = 0.55 > 0.05)
                        No change in performance detected.
Found 10 outliers among 100 measurements (10.00%)
  4 (4.00%) high mild
  6 (6.00%) high severe

     Running unittests (target/release/deps/pushgen_chain_take_filter_map-d0156bcf4d3bfeef)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking generator_chain_take_filter_map
Benchmarking generator_chain_take_filter_map: Warming up for 3.0000 s
Benchmarking generator_chain_take_filter_map: Collecting 100 samples in estimated 6.4890 s (10k iterations)
Benchmarking generator_chain_take_filter_map: Analyzing
generator_chain_take_filter_map
                        time:   [638.75 us 643.78 us 649.60 us]
                        change: [-14.694% -13.955% -13.188%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 10 outliers among 100 measurements (10.00%)
  3 (3.00%) high mild
  7 (7.00%) high severe

     Running unittests (target/release/deps/pushgen_dedup_filter-91859256e6e92e85)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking pushgen_dedup_filter
Benchmarking pushgen_dedup_filter: Warming up for 3.0000 s
Benchmarking pushgen_dedup_filter: Collecting 100 samples in estimated 5.0207 s (242k iterations)
Benchmarking pushgen_dedup_filter: Analyzing
pushgen_dedup_filter    time:   [20.577 us 20.747 us 20.954 us]
                        change: [-2.3968% -1.0662% +0.1615%] (p = 0.10 > 0.05)
                        No change in performance detected.
Found 10 outliers among 100 measurements (10.00%)
  4 (4.00%) high mild
  6 (6.00%) high severe

     Running unittests (target/release/deps/pushgen_dedup_flatten_filter_map-d78681cad649eb0f)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking pushgen_dedup_flatten_filter_map
Benchmarking pushgen_dedup_flatten_filter_map: Warming up for 3.0000 s
Benchmarking pushgen_dedup_flatten_filter_map: Collecting 100 samples in estimated 5.1514 s (10k iterations)
Benchmarking pushgen_dedup_flatten_filter_map: Analyzing
pushgen_dedup_flatten_filter_map
                        time:   [506.45 us 510.29 us 514.96 us]
                        change: [+99.196% +101.67% +103.99%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 8 outliers among 100 measurements (8.00%)
  3 (3.00%) low mild
  5 (5.00%) high severe

     Running unittests (target/release/deps/pushgen_filter_map-9ac271e2acbf21cd)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking pushgen_filter_map
Benchmarking pushgen_filter_map: Warming up for 3.0000 s
Benchmarking pushgen_filter_map: Collecting 100 samples in estimated 5.6642 s (35k iterations)
Benchmarking pushgen_filter_map: Analyzing
pushgen_filter_map      time:   [159.16 us 160.20 us 161.49 us]
                        change: [-1.1014% +0.1143% +1.2986%] (p = 0.86 > 0.05)
                        No change in performance detected.
Found 7 outliers among 100 measurements (7.00%)
  1 (1.00%) high mild
  6 (6.00%) high severe

     Running unittests (target/release/deps/pushgen_flatten_dedup_filter_map-64ff7169b0b1e6da)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking pushgen_flatten_dedup_filter_map
Benchmarking pushgen_flatten_dedup_filter_map: Warming up for 3.0000 s
Benchmarking pushgen_flatten_dedup_filter_map: Collecting 100 samples in estimated 8.9666 s (10k iterations)
Benchmarking pushgen_flatten_dedup_filter_map: Analyzing
pushgen_flatten_dedup_filter_map
                        time:   [885.01 us 890.09 us 895.92 us]
                        change: [+271.62% +274.84% +278.06%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 10 outliers among 100 measurements (10.00%)
  1 (1.00%) high mild
  9 (9.00%) high severe

     Running unittests (target/release/deps/pushgen_iter_basic_loop-ba604406bd167963)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking pushgen_iter_basic_loop
Benchmarking pushgen_iter_basic_loop: Warming up for 3.0000 s

Warning: Unable to complete 100 samples in 5.0s. You may wish to increase target time to 7.5s, enable flat sampling, or reduce sample count to 50.
Benchmarking pushgen_iter_basic_loop: Collecting 100 samples in estimated 7.5461 s (5050 iterations)
Benchmarking pushgen_iter_basic_loop: Analyzing
pushgen_iter_basic_loop time:   [1.4848 ms 1.4939 ms 1.5045 ms]
                        change: [+1525.7% +1544.2% +1561.7%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 12 outliers among 100 measurements (12.00%)
  3 (3.00%) high mild
  9 (9.00%) high severe

     Running unittests (target/release/deps/pushgen_iter_chain_take_filter_map-2c85753845747283)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking pushgen_iter_chain_take_filter_map
Benchmarking pushgen_iter_chain_take_filter_map: Warming up for 3.0000 s

Warning: Unable to complete 100 samples in 5.0s. You may wish to increase target time to 6.7s, enable flat sampling, or reduce sample count to 60.
Benchmarking pushgen_iter_chain_take_filter_map: Collecting 100 samples in estimated 6.7268 s (5050 iterations)
Benchmarking pushgen_iter_chain_take_filter_map: Analyzing
pushgen_iter_chain_take_filter_map
                        time:   [1.3233 ms 1.3336 ms 1.3458 ms]
                        change: [-11.833% -10.562% -9.1405%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 7 outliers among 100 measurements (7.00%)
  4 (4.00%) high mild
  3 (3.00%) high severe

     Running unittests (target/release/deps/pushgen_transrangers_test6-beceb9a7f7f3aa7e)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking pushgen_transrangers_test6
Benchmarking pushgen_transrangers_test6: Warming up for 3.0000 s
Benchmarking pushgen_transrangers_test6: Collecting 100 samples in estimated 7.5459 s (10k iterations)
Benchmarking pushgen_transrangers_test6: Analyzing
pushgen_transrangers_test6
                        time:   [743.61 us 748.33 us 753.88 us]
                        change: [+159.79% +162.52% +165.39%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 10 outliers among 100 measurements (10.00%)
  1 (1.00%) high mild
  9 (9.00%) high severe

     Running unittests (target/release/deps/try_for_each_chain_take_filter_map-dd6018e8ec5d4a7e)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking iterator_try_for_each_chain_take_filter_map
Benchmarking iterator_try_for_each_chain_take_filter_map: Warming up for 3.0000 s
Benchmarking iterator_try_for_each_chain_take_filter_map: Collecting 100 samples in estimated 5.0196 s (2300 iterations)
Benchmarking iterator_try_for_each_chain_take_filter_map: Analyzing
iterator_try_for_each_chain_take_filter_map
                        time:   [2.1683 ms 2.1860 ms 2.2080 ms]
                        change: [-1.1223% +0.0580% +1.3757%] (p = 0.93 > 0.05)
                        No change in performance detected.
Found 16 outliers among 100 measurements (16.00%)
  6 (6.00%) low mild
  4 (4.00%) high mild
  6 (6.00%) high severe

     Running unittests (target/release/deps/try_for_each_dedup_filter-e3981107a8d0b5c7)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking iterator_try_for_each_dedup_filter
Benchmarking iterator_try_for_each_dedup_filter: Warming up for 3.0000 s
Benchmarking iterator_try_for_each_dedup_filter: Collecting 100 samples in estimated 5.0968 s (121k iterations)
Benchmarking iterator_try_for_each_dedup_filter: Analyzing
iterator_try_for_each_dedup_filter
                        time:   [41.793 us 42.111 us 42.503 us]
                        change: [-0.8095% +0.1412% +1.1413%] (p = 0.78 > 0.05)
                        No change in performance detected.
Found 12 outliers among 100 measurements (12.00%)
  6 (6.00%) high mild
  6 (6.00%) high severe

     Running unittests (target/release/deps/try_for_each_dedup_flatten_filter_map-98eef37b8662f178)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking iterator_try_for_each_dedup_flatten_filter_map
Benchmarking iterator_try_for_each_dedup_flatten_filter_map: Warming up for 3.0000 s
Benchmarking iterator_try_for_each_dedup_flatten_filter_map: Collecting 100 samples in estimated 6.2973 s (10k iterations)
Benchmarking iterator_try_for_each_dedup_flatten_filter_map: Analyzing
iterator_try_for_each_dedup_flatten_filter_map
                        time:   [619.80 us 623.83 us 628.69 us]
                        change: [-0.8105% +0.0665% +0.9953%] (p = 0.88 > 0.05)
                        No change in performance detected.
Found 7 outliers among 100 measurements (7.00%)
  1 (1.00%) high mild
  6 (6.00%) high severe

     Running unittests (target/release/deps/try_for_each_filter_map-9dead610a7585c29)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking iterator_try_for_each_filter_map
Benchmarking iterator_try_for_each_filter_map: Warming up for 3.0000 s
Benchmarking iterator_try_for_each_filter_map: Collecting 100 samples in estimated 6.1253 s (10k iterations)
Benchmarking iterator_try_for_each_filter_map: Analyzing
iterator_try_for_each_filter_map
                        time:   [602.46 us 606.62 us 611.60 us]
                        change: [-0.7174% +0.1216% +1.0620%] (p = 0.79 > 0.05)
                        No change in performance detected.
Found 10 outliers among 100 measurements (10.00%)
  2 (2.00%) high mild
  8 (8.00%) high severe

     Running unittests (target/release/deps/try_for_each_flatten_dedup_filter_map-092f2984d109ffc4)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking iterator_try_for_each_flatten_dedup_filter_map
Benchmarking iterator_try_for_each_flatten_dedup_filter_map: Warming up for 3.0000 s
Benchmarking iterator_try_for_each_flatten_dedup_filter_map: Collecting 100 samples in estimated 9.5406 s (10k iterations)
Benchmarking iterator_try_for_each_flatten_dedup_filter_map: Analyzing
iterator_try_for_each_flatten_dedup_filter_map
                        time:   [937.79 us 943.25 us 949.28 us]
                        change: [-1.2269% -0.2153% +0.6648%] (p = 0.67 > 0.05)
                        No change in performance detected.
Found 11 outliers among 100 measurements (11.00%)
  1 (1.00%) high mild
  10 (10.00%) high severe

     Running unittests (target/release/deps/try_for_each_transrangers_test6-33f87431201c709c)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking iterator_try_for_each_transrangers_test6
Benchmarking iterator_try_for_each_transrangers_test6: Warming up for 3.0000 s
Benchmarking iterator_try_for_each_transrangers_test6: Collecting 100 samples in estimated 7.0399 s (10k iterations)
Benchmarking iterator_try_for_each_transrangers_test6: Analyzing
iterator_try_for_each_transrangers_test6
                        time:   [692.75 us 697.97 us 704.16 us]
                        change: [-0.4898% +0.8592% +2.2790%] (p = 0.25 > 0.05)
                        No change in performance detected.
Found 13 outliers among 100 measurements (13.00%)
  1 (1.00%) high mild
  12 (12.00%) high severe

Interesting!
Looks like there were performance-regression for pretty much all benchmarks except for chain_take_filter_map? I wonder why that still performed so well?

It seems benchmark test iterator_for_each_dedup_flatten_filter_map, iterator_next_basic_loop, generator_chain_take_filter_map and pushgen_iter_chain_take_filter_map are showing improvements, not just chain_take_filter_map.

@AndWass How about also running the benchmark on your computer to confirm these benchmark tests are indeed showing improvements?

It seems benchmark test iterator_for_each_dedup_flatten_filter_map, iterator_next_basic_loop, generator_chain_take_filter_map and pushgen_iter_chain_take_filter_map are showing improvements, not just chain_take_filter_map.

The first two are not using pushgen at all so shouldn't be impacted by the changes. The improvement percentage is also small, so more likely that there was some jitter during those benchmarks.
The other two benchmark the same operations using pushgen and the iterator adaptor of pushgen. So they are closely related.

@AndWass How about also running the benchmark on your computer to confirm these benchmark tests are indeed showing improvements?

I'll try and run them tonight.

It seems benchmark test iterator_for_each_dedup_flatten_filter_map, iterator_next_basic_loop, generator_chain_take_filter_map and pushgen_iter_chain_take_filter_map are showing improvements, not just chain_take_filter_map.

The first two are not using pushgen at all so shouldn't be impacted by the changes. The improvement percentage is also small, so more likely that there was some jitter during those benchmarks.
The other two benchmark the same operations using pushgen and the iterator adaptor of pushgen. So they are closely related.

Ah, sorry that I got them wrong.

Ah, sorry that I got them wrong.

Nothing to be sorry about!

BTW, I also did another benchmark for b949ebaace966a5f3417ccca3edc0e80a5a2bf32 which adds #[inline(always)] to associated functions of ErasedFnPointer:
   Compiling pushgen v0.0.1 (/home/nobodyxu/Dev/pushgen)
    Finished bench [optimized] target(s) in 3m 04s
     Running unittests (/home/nobodyxu/Dev/pushgen/target/release/deps/pushgen-9dbcdc1345ab781d)

running 19 tests
test callback::tests::from_associated ... ignored
test callback::tests::from_associated_for_closure ... ignored
test callback::tests::from_free ... ignored
test generator_ext::tests::for_each_stopped ... ignored
test structs::chain::tests::basic_chain ... ignored
test structs::dedup::tests::dedup_all_duplicate ... ignored
test structs::dedup::tests::dedup_nonduplicate ... ignored
test structs::dedup::tests::dedup_some_duplicate ... ignored
test structs::dedup::tests::dedup_stopping_source ... ignored
test structs::flatten::tests::slice_flatten ... ignored
test structs::flatten::tests::stopping_generator ... ignored
test structs::flatten::tests::vector_flatten ... ignored
test structs::iterator::tests::fold ... ignored
test structs::iterator::tests::iter_over_slice ... ignored
test structs::take::tests::take ... ignored
test structs::take::tests::take_restart ... ignored
test structs::zip::tests::same_length ... ignored
test structs::zip::tests::shorter_left_side ... ignored
test structs::zip::tests::shorter_right_side ... ignored

test result: ok. 0 passed; 0 failed; 19 ignored; 0 measured; 0 filtered out; finished in 0.00s

     Running unittests (/home/nobodyxu/Dev/pushgen/target/release/deps/for_each_chain_take_filter_map-c2f1d7bc7957186f)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking iterator_for_each_chain_take_filter_map
Benchmarking iterator_for_each_chain_take_filter_map: Warming up for 3.0000 s
Benchmarking iterator_for_each_chain_take_filter_map: Collecting 100 samples in estimated 5.1524 s (2400 iterations)
Benchmarking iterator_for_each_chain_take_filter_map: Analyzing
iterator_for_each_chain_take_filter_map
                        time:   [2.1299 ms 2.1443 ms 2.1619 ms]
                        change: [-1.1988% -0.1180% +1.0000%] (p = 0.84 > 0.05)
                        No change in performance detected.
Found 8 outliers among 100 measurements (8.00%)
  2 (2.00%) high mild
  6 (6.00%) high severe

     Running unittests (/home/nobodyxu/Dev/pushgen/target/release/deps/for_each_dedup_filter-0792b8997f8ad6ba)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking iterator_for_each_dedup_filter
Benchmarking iterator_for_each_dedup_filter: Warming up for 3.0000 s
Benchmarking iterator_for_each_dedup_filter: Collecting 100 samples in estimated 5.1628 s (66k iterations)
Benchmarking iterator_for_each_dedup_filter: Analyzing
iterator_for_each_dedup_filter
                        time:   [74.275 us 74.873 us 75.595 us]
                        change: [-5.6235% -3.8748% -2.4623%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 8 outliers among 100 measurements (8.00%)
  2 (2.00%) high mild
  6 (6.00%) high severe

     Running unittests (/home/nobodyxu/Dev/pushgen/target/release/deps/for_each_dedup_flatten_filter_map-02530f85fb28b946)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking iterator_for_each_dedup_flatten_filter_map
Benchmarking iterator_for_each_dedup_flatten_filter_map: Warming up for 3.0000 s
Benchmarking iterator_for_each_dedup_flatten_filter_map: Collecting 100 samples in estimated 6.5704 s (15k iterations)
Benchmarking iterator_for_each_dedup_flatten_filter_map: Analyzing
iterator_for_each_dedup_flatten_filter_map
                        time:   [432.76 us 435.92 us 439.57 us]
                        change: [+0.0471% +1.0949% +2.1850%] (p = 0.04 < 0.05)
                        Change within noise threshold.
Found 7 outliers among 100 measurements (7.00%)
  7 (7.00%) high severe

     Running unittests (/home/nobodyxu/Dev/pushgen/target/release/deps/for_each_filter_map-23889c5657b80085)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking iterator_for_each_filter_map
Benchmarking iterator_for_each_filter_map: Warming up for 3.0000 s
Benchmarking iterator_for_each_filter_map: Collecting 100 samples in estimated 5.6405 s (35k iterations)
Benchmarking iterator_for_each_filter_map: Analyzing
iterator_for_each_filter_map
                        time:   [158.40 us 159.49 us 160.81 us]
                        change: [-2.0810% -1.0343% -0.0990%] (p = 0.04 < 0.05)
                        Change within noise threshold.
Found 6 outliers among 100 measurements (6.00%)
  6 (6.00%) high severe

     Running unittests (/home/nobodyxu/Dev/pushgen/target/release/deps/for_each_flatten_dedup_filter_map-982b60bd65247325)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking iterator_for_each_flatten_dedup_filter_map
Benchmarking iterator_for_each_flatten_dedup_filter_map: Warming up for 3.0000 s
Benchmarking iterator_for_each_flatten_dedup_filter_map: Collecting 100 samples in estimated 6.0156 s (10k iterations)
Benchmarking iterator_for_each_flatten_dedup_filter_map: Analyzing
iterator_for_each_flatten_dedup_filter_map
                        time:   [591.22 us 595.44 us 600.52 us]
                        change: [-0.8741% +0.0444% +0.9715%] (p = 0.93 > 0.05)
                        No change in performance detected.
Found 8 outliers among 100 measurements (8.00%)
  2 (2.00%) high mild
  6 (6.00%) high severe

     Running unittests (/home/nobodyxu/Dev/pushgen/target/release/deps/for_each_transrangers_test6-ebafe03edf02d334)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking iterator_for_each_transrangers_test6
Benchmarking iterator_for_each_transrangers_test6: Warming up for 3.0000 s
Benchmarking iterator_for_each_transrangers_test6: Collecting 100 samples in estimated 5.7434 s (20k iterations)
Benchmarking iterator_for_each_transrangers_test6: Analyzing
iterator_for_each_transrangers_test6
                        time:   [283.30 us 285.40 us 287.92 us]
                        change: [-0.8300% +0.3013% +1.5750%] (p = 0.65 > 0.05)
                        No change in performance detected.
Found 7 outliers among 100 measurements (7.00%)
  7 (7.00%) high severe

     Running unittests (/home/nobodyxu/Dev/pushgen/target/release/deps/iter_next_basic_loop-37d9035efa073309)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking iterator_next_basic_loop
Benchmarking iterator_next_basic_loop: Warming up for 3.0000 s
Benchmarking iterator_next_basic_loop: Collecting 100 samples in estimated 5.0658 s (56k iterations)
Benchmarking iterator_next_basic_loop: Analyzing
iterator_next_basic_loop
                        time:   [90.813 us 91.433 us 92.212 us]
                        change: [+0.9357% +2.0819% +3.2069%] (p = 0.00 < 0.05)
                        Change within noise threshold.
Found 4 outliers among 100 measurements (4.00%)
  4 (4.00%) high severe

     Running unittests (/home/nobodyxu/Dev/pushgen/target/release/deps/iter_next_chain_take_filter_map-f319c0ad5d149fc6)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking iterator_next_chain_take_filter_map
Benchmarking iterator_next_chain_take_filter_map: Warming up for 3.0000 s
Benchmarking iterator_next_chain_take_filter_map: Collecting 100 samples in estimated 5.0712 s (2200 iterations)
Benchmarking iterator_next_chain_take_filter_map: Analyzing
iterator_next_chain_take_filter_map
                        time:   [2.2794 ms 2.2967 ms 2.3175 ms]
                        change: [-1.8310% -0.6786% +0.4489%] (p = 0.26 > 0.05)
                        No change in performance detected.
Found 10 outliers among 100 measurements (10.00%)
  5 (5.00%) high mild
  5 (5.00%) high severe

     Running unittests (/home/nobodyxu/Dev/pushgen/target/release/deps/iter_next_dedup_filter-d972ca417e800e75)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking iterator_next_dedup_filter
Benchmarking iterator_next_dedup_filter: Warming up for 3.0000 s
Benchmarking iterator_next_dedup_filter: Collecting 100 samples in estimated 5.0780 s (106k iterations)
Benchmarking iterator_next_dedup_filter: Analyzing
iterator_next_dedup_filter
                        time:   [47.163 us 47.527 us 47.966 us]
                        change: [-1.6487% +0.2363% +2.6709%] (p = 0.87 > 0.05)
                        No change in performance detected.
Found 11 outliers among 100 measurements (11.00%)
  6 (6.00%) high mild
  5 (5.00%) high severe

     Running unittests (/home/nobodyxu/Dev/pushgen/target/release/deps/iter_next_dedup_flatten_filter_map-b66194b56c578199)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking iterator_next_dedup_flatten_filter_map
Benchmarking iterator_next_dedup_flatten_filter_map: Warming up for 3.0000 s
Benchmarking iterator_next_dedup_flatten_filter_map: Collecting 100 samples in estimated 8.2807 s (10k iterations)
Benchmarking iterator_next_dedup_flatten_filter_map: Analyzing
iterator_next_dedup_flatten_filter_map
                        time:   [824.25 us 829.92 us 836.17 us]
                        change: [-3.1964% -2.3549% -1.5474%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 8 outliers among 100 measurements (8.00%)
  6 (6.00%) high mild
  2 (2.00%) high severe

     Running unittests (/home/nobodyxu/Dev/pushgen/target/release/deps/iter_next_filter_map-d184a6e09748526e)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking iterator_next_filter_map
Benchmarking iterator_next_filter_map: Warming up for 3.0000 s
Benchmarking iterator_next_filter_map: Collecting 100 samples in estimated 5.6743 s (15k iterations)
Benchmarking iterator_next_filter_map: Analyzing
iterator_next_filter_map
                        time:   [371.77 us 374.19 us 377.11 us]
                        change: [-1.3948% -0.2976% +0.7256%] (p = 0.59 > 0.05)
                        No change in performance detected.
Found 11 outliers among 100 measurements (11.00%)
  5 (5.00%) high mild
  6 (6.00%) high severe

     Running unittests (/home/nobodyxu/Dev/pushgen/target/release/deps/iter_next_flatten_dedup_filter_map-3b82355d0e7308f8)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking iterator_next_flatten_dedup_filter_map
Benchmarking iterator_next_flatten_dedup_filter_map: Warming up for 3.0000 s

Warning: Unable to complete 100 samples in 5.0s. You may wish to increase target time to 5.1s, enable flat sampling, or reduce sample count to 70.
Benchmarking iterator_next_flatten_dedup_filter_map: Collecting 100 samples in estimated 5.0779 s (5050 iterations)
Benchmarking iterator_next_flatten_dedup_filter_map: Analyzing
iterator_next_flatten_dedup_filter_map
                        time:   [999.23 us 1.0070 ms 1.0166 ms]
                        change: [-0.5148% +0.4892% +1.4748%] (p = 0.35 > 0.05)
                        No change in performance detected.
Found 6 outliers among 100 measurements (6.00%)
  6 (6.00%) high severe

     Running unittests (/home/nobodyxu/Dev/pushgen/target/release/deps/iter_next_transrangers_test6-aa5b656484c1d22f)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking iterator_next_transrangers_test6
Benchmarking iterator_next_transrangers_test6: Warming up for 3.0000 s
Benchmarking iterator_next_transrangers_test6: Collecting 100 samples in estimated 6.6861 s (10k iterations)
Benchmarking iterator_next_transrangers_test6: Analyzing
iterator_next_transrangers_test6
                        time:   [659.96 us 664.28 us 669.30 us]
                        change: [-1.0315% +0.0658% +1.3197%] (p = 0.92 > 0.05)
                        No change in performance detected.
Found 10 outliers among 100 measurements (10.00%)
  3 (3.00%) high mild
  7 (7.00%) high severe

     Running unittests (/home/nobodyxu/Dev/pushgen/target/release/deps/pushgen_chain_take_filter_map-d0156bcf4d3bfeef)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking generator_chain_take_filter_map
Benchmarking generator_chain_take_filter_map: Warming up for 3.0000 s
Benchmarking generator_chain_take_filter_map: Collecting 100 samples in estimated 7.5446 s (10k iterations)
Benchmarking generator_chain_take_filter_map: Analyzing
generator_chain_take_filter_map
                        time:   [742.68 us 747.65 us 753.43 us]
                        change: [+15.287% +16.276% +17.305%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 8 outliers among 100 measurements (8.00%)
  1 (1.00%) high mild
  7 (7.00%) high severe

     Running unittests (/home/nobodyxu/Dev/pushgen/target/release/deps/pushgen_dedup_filter-91859256e6e92e85)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking pushgen_dedup_filter
Benchmarking pushgen_dedup_filter: Warming up for 3.0000 s
Benchmarking pushgen_dedup_filter: Collecting 100 samples in estimated 5.0660 s (247k iterations)
Benchmarking pushgen_dedup_filter: Analyzing
pushgen_dedup_filter    time:   [20.463 us 20.620 us 20.816 us]
                        change: [-1.7907% -0.6087% +0.6338%] (p = 0.34 > 0.05)
                        No change in performance detected.
Found 6 outliers among 100 measurements (6.00%)
  1 (1.00%) high mild
  5 (5.00%) high severe

     Running unittests (/home/nobodyxu/Dev/pushgen/target/release/deps/pushgen_dedup_flatten_filter_map-d78681cad649eb0f)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking pushgen_dedup_flatten_filter_map
Benchmarking pushgen_dedup_flatten_filter_map: Warming up for 3.0000 s
Benchmarking pushgen_dedup_flatten_filter_map: Collecting 100 samples in estimated 5.1006 s (20k iterations)
Benchmarking pushgen_dedup_flatten_filter_map: Analyzing
pushgen_dedup_flatten_filter_map
                        time:   [250.08 us 251.93 us 254.27 us]
                        change: [-50.976% -50.378% -49.703%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 6 outliers among 100 measurements (6.00%)
  6 (6.00%) high severe

     Running unittests (/home/nobodyxu/Dev/pushgen/target/release/deps/pushgen_filter_map-9ac271e2acbf21cd)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking pushgen_filter_map
Benchmarking pushgen_filter_map: Warming up for 3.0000 s
Benchmarking pushgen_filter_map: Collecting 100 samples in estimated 5.6106 s (35k iterations)
Benchmarking pushgen_filter_map: Analyzing
pushgen_filter_map      time:   [157.58 us 158.76 us 160.16 us]
                        change: [-2.2154% -1.1452% -0.0369%] (p = 0.05 < 0.05)
                        Change within noise threshold.
Found 8 outliers among 100 measurements (8.00%)
  8 (8.00%) high severe

     Running unittests (/home/nobodyxu/Dev/pushgen/target/release/deps/pushgen_flatten_dedup_filter_map-64ff7169b0b1e6da)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking pushgen_flatten_dedup_filter_map
Benchmarking pushgen_flatten_dedup_filter_map: Warming up for 3.0000 s
Benchmarking pushgen_flatten_dedup_filter_map: Collecting 100 samples in estimated 6.0200 s (25k iterations)
Benchmarking pushgen_flatten_dedup_filter_map: Analyzing
pushgen_flatten_dedup_filter_map
                        time:   [237.16 us 238.80 us 240.80 us]
                        change: [-73.441% -73.118% -72.731%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 8 outliers among 100 measurements (8.00%)
  1 (1.00%) high mild
  7 (7.00%) high severe

     Running unittests (/home/nobodyxu/Dev/pushgen/target/release/deps/pushgen_iter_basic_loop-ba604406bd167963)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking pushgen_iter_basic_loop
Benchmarking pushgen_iter_basic_loop: Warming up for 3.0000 s
Benchmarking pushgen_iter_basic_loop: Collecting 100 samples in estimated 5.4069 s (61k iterations)
Benchmarking pushgen_iter_basic_loop: Analyzing
pushgen_iter_basic_loop time:   [88.381 us 89.033 us 89.833 us]
                        change: [-94.090% -94.038% -93.987%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 8 outliers among 100 measurements (8.00%)
  2 (2.00%) high mild
  6 (6.00%) high severe

     Running unittests (/home/nobodyxu/Dev/pushgen/target/release/deps/pushgen_iter_chain_take_filter_map-2c85753845747283)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking pushgen_iter_chain_take_filter_map
Benchmarking pushgen_iter_chain_take_filter_map: Warming up for 3.0000 s

Warning: Unable to complete 100 samples in 5.0s. You may wish to increase target time to 7.8s, enable flat sampling, or reduce sample count to 50.
Benchmarking pushgen_iter_chain_take_filter_map: Collecting 100 samples in estimated 7.7925 s (5050 iterations)
Benchmarking pushgen_iter_chain_take_filter_map: Analyzing
pushgen_iter_chain_take_filter_map
                        time:   [1.5369 ms 1.5456 ms 1.5559 ms]
                        change: [+13.369% +14.945% +16.368%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 8 outliers among 100 measurements (8.00%)
  1 (1.00%) low mild
  7 (7.00%) high severe

     Running unittests (/home/nobodyxu/Dev/pushgen/target/release/deps/pushgen_transrangers_test6-beceb9a7f7f3aa7e)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking pushgen_transrangers_test6
Benchmarking pushgen_transrangers_test6: Warming up for 3.0000 s
Benchmarking pushgen_transrangers_test6: Collecting 100 samples in estimated 5.7539 s (20k iterations)
Benchmarking pushgen_transrangers_test6: Analyzing
pushgen_transrangers_test6
                        time:   [283.17 us 285.38 us 288.03 us]
                        change: [-62.310% -61.886% -61.430%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 7 outliers among 100 measurements (7.00%)
  1 (1.00%) high mild
  6 (6.00%) high severe

     Running unittests (/home/nobodyxu/Dev/pushgen/target/release/deps/try_for_each_chain_take_filter_map-dd6018e8ec5d4a7e)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking iterator_try_for_each_chain_take_filter_map
Benchmarking iterator_try_for_each_chain_take_filter_map: Warming up for 3.0000 s
Benchmarking iterator_try_for_each_chain_take_filter_map: Collecting 100 samples in estimated 5.0112 s (2300 iterations)
Benchmarking iterator_try_for_each_chain_take_filter_map: Analyzing
iterator_try_for_each_chain_take_filter_map
                        time:   [2.1670 ms 2.1834 ms 2.2033 ms]
                        change: [-1.3590% -0.1154% +1.1142%] (p = 0.86 > 0.05)
                        No change in performance detected.
Found 6 outliers among 100 measurements (6.00%)
  6 (6.00%) high severe

     Running unittests (/home/nobodyxu/Dev/pushgen/target/release/deps/try_for_each_dedup_filter-e3981107a8d0b5c7)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking iterator_try_for_each_dedup_filter
Benchmarking iterator_try_for_each_dedup_filter: Warming up for 3.0000 s
Benchmarking iterator_try_for_each_dedup_filter: Collecting 100 samples in estimated 5.1109 s (121k iterations)
Benchmarking iterator_try_for_each_dedup_filter: Analyzing
iterator_try_for_each_dedup_filter
                        time:   [41.814 us 42.134 us 42.522 us]
                        change: [-0.9225% +0.0574% +1.0324%] (p = 0.91 > 0.05)
                        No change in performance detected.
Found 9 outliers among 100 measurements (9.00%)
  2 (2.00%) high mild
  7 (7.00%) high severe

     Running unittests (/home/nobodyxu/Dev/pushgen/target/release/deps/try_for_each_dedup_flatten_filter_map-98eef37b8662f178)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking iterator_try_for_each_dedup_flatten_filter_map
Benchmarking iterator_try_for_each_dedup_flatten_filter_map: Warming up for 3.0000 s
Benchmarking iterator_try_for_each_dedup_flatten_filter_map: Collecting 100 samples in estimated 6.2983 s (10k iterations)
Benchmarking iterator_try_for_each_dedup_flatten_filter_map: Analyzing
iterator_try_for_each_dedup_flatten_filter_map
                        time:   [619.76 us 624.02 us 629.05 us]
                        change: [-0.7038% +0.1630% +0.9587%] (p = 0.71 > 0.05)
                        No change in performance detected.
Found 9 outliers among 100 measurements (9.00%)
  1 (1.00%) high mild
  8 (8.00%) high severe

     Running unittests (/home/nobodyxu/Dev/pushgen/target/release/deps/try_for_each_filter_map-9dead610a7585c29)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking iterator_try_for_each_filter_map
Benchmarking iterator_try_for_each_filter_map: Warming up for 3.0000 s
Benchmarking iterator_try_for_each_filter_map: Collecting 100 samples in estimated 6.1309 s (10k iterations)
Benchmarking iterator_try_for_each_filter_map: Analyzing
iterator_try_for_each_filter_map
                        time:   [601.42 us 605.28 us 610.06 us]
                        change: [-0.9470% -0.0525% +0.8285%] (p = 0.91 > 0.05)
                        No change in performance detected.
Found 12 outliers among 100 measurements (12.00%)
  6 (6.00%) high mild
  6 (6.00%) high severe

     Running unittests (/home/nobodyxu/Dev/pushgen/target/release/deps/try_for_each_flatten_dedup_filter_map-092f2984d109ffc4)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking iterator_try_for_each_flatten_dedup_filter_map
Benchmarking iterator_try_for_each_flatten_dedup_filter_map: Warming up for 3.0000 s
Benchmarking iterator_try_for_each_flatten_dedup_filter_map: Collecting 100 samples in estimated 9.4908 s (10k iterations)
Benchmarking iterator_try_for_each_flatten_dedup_filter_map: Analyzing
iterator_try_for_each_flatten_dedup_filter_map
                        time:   [935.91 us 940.68 us 946.20 us]
                        change: [-0.5845% +0.2973% +1.4541%] (p = 0.57 > 0.05)
                        No change in performance detected.
Found 13 outliers among 100 measurements (13.00%)
  2 (2.00%) low mild
  2 (2.00%) high mild
  9 (9.00%) high severe

     Running unittests (/home/nobodyxu/Dev/pushgen/target/release/deps/try_for_each_transrangers_test6-33f87431201c709c)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.

Gnuplot not found, using plotters backend
Benchmarking iterator_try_for_each_transrangers_test6
Benchmarking iterator_try_for_each_transrangers_test6: Warming up for 3.0000 s
Benchmarking iterator_try_for_each_transrangers_test6: Collecting 100 samples in estimated 7.1084 s (10k iterations)
Benchmarking iterator_try_for_each_transrangers_test6: Analyzing
iterator_try_for_each_transrangers_test6
                        time:   [699.31 us 704.44 us 710.48 us]
                        change: [-0.7978% +0.7563% +2.2267%] (p = 0.34 > 0.05)
                        No change in performance detected.
Found 12 outliers among 100 measurements (12.00%)
  2 (2.00%) high mild
  10 (10.00%) high severe

Seems like adding #[inline(always)] does dramatically affect

pushgen_dedup_flatten_filter_map,
pushgen_filter_map,
pushgen_flatten_dedup_filter_map,
pushgen_iter_basic_loop,
pushgen_transrangers_test6

Seems like adding #[inline(always)] does dramatically affect

pushgen_dedup_flatten_filter_map,
pushgen_filter_map,
pushgen_flatten_dedup_filter_map,
pushgen_iter_basic_loop,
pushgen_transrangers_test6

Just did a quick check on my cell phone but looks like it's pretty much the same as baseline pushgen I think?

Yeah, the different is so small that it can be considered as jitter

So if that is true, then the ErasedFnPointer with #[inline(always)] doesn't really makes the crate performs worse.

And one of the advantage of this approach is that DynGenerator is removed.

And one of the advantage of this approach is that DynGenerator is removed and have less generic instantiation, so maybe faster compilation time.

Yah that's clearly a benefit. It does make the API a bit more convoluted though.

And one of the advantage of this approach is that DynGenerator is removed and have less generic instantiation, so maybe faster compilation time.

Yah that's clearly a benefit. It does make the API a bit more convoluted though.

Unfortunately, I didn't find a better one as of now.

I was able to use a #[inline(always)] generic function run_gen to simplify the process instead of a macro.
68220ef871efba7d276a8b2eac38bfd975ca9f37

I ran the benchmarks on my machine, I ran them for both stable, beta and nightly

main stable
main beta
main nightly
erasefn stable
erasedfn beta
erasedfn nightly

filter_map
185
182
182
177
181
180

chain_take_filter_map
963
843
836
931
1145
1138

dedup_filter
25
25
25
24
25
24

flatten_dedup_filter_map
300
302
296
293
312
309

dedup_flatten_filter_map
315
314
312
307
310
310

transrangers_test6
365
362
362
356
369
370

Overall I would say they are pretty much the same, some minor differences but it could be jitter when running the benchmarks etc. Beta and nightly does regress noticably when running with the erased function though. Why that is I have no idea really but I guess it fails to optimize for some reason?

IDK, feels like that could be a regression on the rustc side, or maybe the underlying llvm that rustc is using since it is the one doing all the optimization?

Branch GeneratorImprovement in my fork is now frozen and any new development I make later will be in a separate branch.

Sadly, I don’t have enough time for doing the continuation part, so I decided to instead, submit a PR on ErasedFnPointer first, which will help pushgen to have a stable trait API without the use of generics.
@AndWass What’s your thought on this?

Only doing ErasedFnPointer doesn't really have a good risk-reward ratio at the moment IMO. The code isn't as straight-forward and the only reward ATM is that we get an object-safe trait. Since we also saw that there were regressions in beta (probably llvm/rustc regressions, but still) it skews the ratio even further.
I searched github for usages of dyn Iterator and it appears to not be used very often, which IMO is an indicator that it's not that much of a deal to have object safety.

Right.
Maybe I shall have another attempt at continuation style Generator tomorrow, I might get it working with some explicit lifetime annotations.

@AndWass It looks like it is really hard to get this done with existing language specification.
Even with lifetime satisfied, the presence of associated type Ret means that if to store a Generator, you would need to also specify the type of Ret had you specified Output.
I think this means that it would be extremely difficult to implement and would make the code too fragile, so I want to give up on this idea for now (unless there is support for impl Trait inside trait).

Ok, nice of you to try! Let's close the issue for now then?

Yep

@AndWass Reopening this issue for GAT is closed to stabilisation.
It's likely to be stablised in 1.62, once it is there, we can restart the work to separate initialisation stage and the actual looping passes.

GAT is now stablised, so I will retry this soon when I'm free.