//===- subzero/crosstest/test_stacksave_main.c - Driver for tests ---------===//
//
//                        The Subzero Code Generator
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
// Driver for cross testing stacksave/stackrestore intrinsics.
//
//===----------------------------------------------------------------------===//

/* crosstest.py --test=test_stacksave.c --driver=test_stacksave_main.c \
   --prefix=Subzero_ --output=test_stacksave */

#include <inttypes.h>
#include <stdint.h>
#include <stdio.h>

#include "test_stacksave.h"
DECLARE_TESTS()
DECLARE_TESTS(Subzero_)

int main(int argc, char **argv) {
  size_t TotalTests = 0;
  size_t Passes = 0;
  size_t Failures = 0;
  typedef uint32_t (*FuncType)(uint32_t, uint32_t, uint32_t);
  static struct {
    const char *Name;
    FuncType FuncLlc;
    FuncType FuncSz;
  } Funcs[] = {
    { "test_basic_vla", test_basic_vla, Subzero_test_basic_vla },
    { "test_vla_in_loop", test_vla_in_loop, Subzero_test_vla_in_loop },
    { "test_two_vlas_in_loops", test_two_vlas_in_loops,
      Subzero_test_two_vlas_in_loops }
  };
  const static size_t NumFuncs = sizeof(Funcs) / sizeof(*Funcs);
  const uint32_t size_to_test = 128;
  for (size_t f = 0; f < NumFuncs; ++f) {
    for (uint32_t start = 0; start < size_to_test / 2; ++start) {
      ++TotalTests;
      uint32_t inc = (start / 10) + 1;
      uint32_t llc_result = Funcs[f].FuncLlc(size_to_test, start, inc);
      uint32_t sz_result = Funcs[f].FuncSz(size_to_test, start, inc);
      if (llc_result == sz_result) {
        ++Passes;
      } else {
        ++Failures;
        printf("Failure %s: start=%" PRIu32 ", "
               "llc=%" PRIu32 ", sz=%" PRIu32 "\n",
               Funcs[f].Name, start, llc_result, sz_result);
      }
    }
  }
  printf("TotalTests=%zu Passes=%zu Failures=%zu\n",
         TotalTests, Passes, Failures);
  return Failures;
}
