#include <iostream>
#include <vector>
#include <chrono>
#include <algorithm>
#include <random>
#include <algorithm>
#include <stdexcept>
#include "bm.h"
#include "bmsparsevec.h"
#include "bmsparsevec_algo.h"
#include "bmundef.h"
using namespace std;
typedef bm::sparse_vector<bm::id_t, bm::bvector<> > sparse_vector_u32;
static
void generate_set(vector<unsigned>& vec)
{
const unsigned max_coll = 50000;
vec.resize(0);
for (unsigned i = 10; i < max_coll; i += rand() % 3)
{
vec.emplace_back(i);
}
std::random_device rd;
std::mt19937 g(rd());
std::shuffle(vec.begin(), vec.end(), g);
}
static
void insertion_sort(sparse_vector_u32& sv, const vector<unsigned>& vec)
{
bm::sparse_vector_scanner<sparse_vector_u32> scanner;
sparse_vector_u32::size_type pos;
for (const unsigned u : vec)
{
bool found = scanner.bfind(sv, u, pos);
(void)found;
sv.insert(pos, u);
} }
int main(void)
{
try
{
sparse_vector_u32 sv;
vector<unsigned> vec;
generate_set(vec);
insertion_sort(sv, vec);
sv.optimize();
std::sort(vec.begin(), vec.end());
{
vector<unsigned>::const_iterator vit = vec.begin();
sparse_vector_u32::const_iterator it = sv.begin();
sparse_vector_u32::const_iterator it_end = sv.end();
for (; it != it_end; ++it, ++vit)
{
unsigned u = *it;
if (*vit != u)
{
cerr << "Mismatch at:" << u << "!=" << *vit << endl;
return 1;
}
} }
cout << "Sort validation Ok." << endl;
}
catch(std::exception& ex)
{
std::cerr << ex.what() << std::endl;
return 1;
}
return 0;
}