| 4117 | }; |
| 4118 | |
| 4119 | static void pipeline_virtual_functions(bm::State &state) { |
| 4120 | homogeneous_virtual_pipeline pipeline; |
| 4121 | pipeline.add_stage(std::make_unique<for_range_virtual>(pipe_start, pipe_end)); |
| 4122 | pipeline.add_stage(std::make_unique<filter_virtual>(is_power_of_two)); |
| 4123 | pipeline.add_stage(std::make_unique<filter_virtual>(is_power_of_three)); |
| 4124 | pipeline.add_stage(std::make_unique<prime_factors_virtual>()); |
| 4125 | |
| 4126 | std::uint64_t sum = 0, count = 0; |
| 4127 | for (auto _ : state) { |
| 4128 | std::vector<std::uint64_t> data; |
| 4129 | pipeline.process(data); |
| 4130 | sum = std::accumulate(data.begin(), data.end(), std::uint64_t {0}); |
| 4131 | count = data.size(); |
| 4132 | if (count != 84 || sum != 645) state.SkipWithError("Incorrect result"); |
| 4133 | } |
| 4134 | } |
| 4135 | |
| 4136 | BENCHMARK(pipeline_virtual_functions); |
| 4137 | |