#include <Arduino.h>
#include <avr/sleep.h>
#if defined(BENCHMARK)
#include "../../benchmark.h"
#elif defined(TEST_LIBDIVIDE)
#include "../../DivideTest.h"
#elif defined(TEST_CONSTANTS)
#include "invariant_div_test/Constant_Div_Tests.h"
#endif

void setup() {
  Serial.begin(MONITOR_SPEED);

#if defined(BENCHMARK)

#if defined(U16)
    test_many<uint16_t>();
#elif defined(S16)
    test_many<int16_t>();
#elif defined(U32)
    test_many<uint32_t>();
#elif defined(S32)
    test_many<int32_t>();
#elif defined(U64)
    test_many<uint64_t>();
#else
    test_many<int64_t>();
#endif

#elif defined(TEST_LIBDIVIDE)
  run_test<int16_t>();
  run_test<uint16_t>();
  run_test<int32_t>();
  run_test<uint32_t>();
  run_test<int64_t>();
  run_test<uint64_t>();

  PRINT_INFO(F("\nAll tests passed successfully!\n"));

#elif defined(TEST_CONSTANTS)
  run_constant_test();
#endif

  Serial.flush();
  // Nothing more to do.
  // Also flags simavr to exit gracefully.
  noInterrupts(); // Needed so simavr will exit on sleep
  sleep_cpu();
}

void loop() {
}