// Cuántas veces se llama a operator new al insertar un millón de enteros al final.
// Son conteos, no tiempos. Los de la biblioteca estándar dependen de su implementación.
#include <cstddef>
#include <deque>
#include <iostream>
#include <list>
#include <vector>

#include "alloc_counter.h"
#include "dlist.h"

namespace {

const int N = 1000000;

template <typename Sequence>
std::size_t count_allocations() {
    std::size_t before = allocation_count();
    Sequence sequence;
    for (int i = 0; i < N; i++) {
        sequence.push_back(i);
    }
    return allocation_count() - before;
}

}  // namespace

int main() {
    std::cout << "reservas para " << N << " push_back\n";
    std::cout << "std::vector: " << count_allocations<std::vector<int>>() << "\n";
    std::cout << "std::deque:  " << count_allocations<std::deque<int>>() << "\n";
    std::cout << "std::list:   " << count_allocations<std::list<int>>() << "\n";
    std::cout << "DList:       " << count_allocations<DList<int>>() << "\n";
    return 0;
}
