#include <chrono>
#include <iostream>
#include <cstdlib>
#include <cstring>
using namespace std;
using namespace chrono;

int testcases[0xffff];

void prepare_testcases()
{
	for(size_t i = 0; i < sizeof(testcases); i++)
	{
		testcases[i] = rand();
	}
}

inline int cmp_normal(int i, int j)
{
	return i == j;
}

inline int cmp_mem(int i, int j)
{
	return memcpy(&i, &j, sizeof(int)) == 0;
}

high_resolution_clock::duration test(int(cmpfunc)(int, int))
{
  auto tbegin = high_resolution_clock::now();
  volatile int sink;
  for(size_t i = 1; i < sizeof(testcases); i++)
  	sink = cmpfunc(testcases[i], testcases[i-1]);
  auto tend = high_resolution_clock::now();
  return tend - tbegin;
}

int main()
{
  prepare_testcases();
	
  cout << "Normal comparison took " << duration_cast<milliseconds>(test(cmp_normal)).count() << " milliseconds." << endl;
  cout << "Memory comparison took " << duration_cast<milliseconds>(test(cmp_mem)).count() << " milliseconds." << endl;
}