#include <deque>

#include <boost/double_ended/batch_deque.hpp>

#include <benchmark/benchmark.h>

namespace {

void batch_deque_unsafe_push_back(benchmark::State& state)
{
  while (state.KeepRunning()) {
    state.PauseTiming();
    boost::double_ended::batch_deque<int> v(state.range(0));
    v.reserve(state.range(0));
    state.ResumeTiming();
    for (int j = 0; j < state.range(0); ++j) {
      v.unsafe_push_back(j);
    }
  }
}

BENCHMARK(batch_deque_unsafe_push_back)->Range(8, 8<<12);

void vector_push_back(benchmark::State& state)
{
  while (state.KeepRunning()) {
    state.PauseTiming();
    std::vector<int> v;
    v.reserve(state.range(0));
    state.ResumeTiming();
    for (int j = 0; j < state.range(0); ++j) {
      v.push_back(j);
    }
  }
}

BENCHMARK(vector_push_back)->Range(8, 8<<12);

}

BENCHMARK_MAIN();

