#include <stdio.h>
#include <stdlib.h>

#include "cpu-features.h"

static void panic(const char* msg) {
  fprintf(stderr, "ERROR: %s\n", msg);
  exit(1);
}

int main(void) {
  int count, cpu_count = 10;
  uint64_t features, cpu_features = 0xaabdedf012934839ULL;

  // Check that android_setCpu() can be called at program startup
  // and that android_getCpuCount() and android_getCpuFeatures()
  // will return the corresponding values.
  //
  printf("Setting cpu_count=%d, features=%08llx\n",
         cpu_count,
         cpu_features);
  if (!android_setCpu(cpu_count, cpu_features))
    panic("Cannot call android_setCpu() at program startup!");

  count = android_getCpuCount();
  features = android_getCpuFeatures();

  printf("Retrieved cpu_count=%d, features=%08llx\n",
         count, features);

  if (count != cpu_count)
    panic("android_getCpuCount() didn't return expected value!");

  if (features != cpu_features)
    panic("android_getCpuFeatures() didn't return expected value!");

  // Once one of the android_getXXX functions has been called,
  // android_setCpu() should always fail.
  if (android_setCpu(cpu_count, cpu_features))
    panic("android_setCpu() could be called twice!");

  printf("Second call to android_setCpu() failed as expected.\n");
  return 0;
}