#include <iostream>
#include <vector>
#include <string>
#include <stdint.h>
#include <random>
#include <time.h>
#include <string.h>
#include <chrono>

using namespace std;
uint64_t itr  = 1000000;//10 Billion
int len = 100;

class Timer {
  std::chrono::steady_clock::time_point start;
  std::chrono::steady_clock::time_point stop;
public:
  Timer(){
    start = std::chrono::steady_clock::now();
    stop = std::chrono::steady_clock::now();
  }
  virtual ~Timer() {}

  inline void begin() {
    start = std::chrono::steady_clock::now();
  }

  inline void end() {
    stop = std::chrono::steady_clock::now();
  }

  inline double elapsedMillis() {
    return std::chrono::duration_cast<std::chrono::milliseconds>(stop - start).count();
  }

  inline double elapsedMicro() {
    return std::chrono::duration_cast<std::chrono::microseconds>(stop - start).count();
  }

  inline double elapsedNano() {
    return std::chrono::duration_cast<std::chrono::nanoseconds>(stop - start).count();
  }

  inline double elapsedSec() {
    auto diff = stop - start;
    return std::chrono::duration<double> (diff).count();
  }
};

int main(int argc) {
  string s[] = { {len,argc+'A'}, {len,argc+'A'}, {len, argc+'B'}, {len, argc+'B'} };
std::cout << "s[0] " << s[0] << '\n';
  uint64_t a = 0;
  Timer t;
for (int x = 0; x < 2; ++x)
{
  t.begin();
  for(uint64_t i =0;i<itr;i++){
    if(s[i&3] == s[(i+1)&3])
      a += i;
  }
  t.end();

  cout<<"==       took:"<<t.elapsedMillis()<<endl;

  t.begin();
  for(uint64_t i =0;i<itr;i++){
    if(s[i&3].compare(s[(i+1)&3])==0)
      a += i;
  }
  t.end();

  cout<<".compare took:"<<t.elapsedMillis()<<endl;

  t.begin();
  for(uint64_t i =0;i<itr;i++){
    if(strcmp(s[i&3].c_str(),s[(i+1)&3].c_str()))
      a += i;
  }
  t.end();

  cout<<"strcmp   took:"<<t.elapsedMillis()<<endl;
}
  if (a == 42) std::cout << "huh?\n";
}