blob: 2dc92ba5af38a5e763b3fec8615f2aca4cb5a507 [file] [log] [blame]
// Copyright 2020 The Fuchsia Authors
//
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file or at
// https://opensource.org/licenses/MIT
#include "phys-unittests.h"
#include <stdio.h>
#include <ktl/span.h>
#include "test-main.h"
const char Symbolize::kProgramName_[] = "phys-unittests";
// This isn't more straightforwardly table-driven because even as a
// function-local variable the compiler will try to turn the table
// into a const global with relocations.
#define TEST_SUITES(SUITE) \
SUITE(stack_tests) \
SUITE(relocation_tests) \
SUITE(popcount_tests) \
SUITE(printf_tests) \
SUITE(string_view_tests) \
SUITE(unittest_tests) \
SUITE(zbitl_tests) \
SUITE(ArchRandomTests)
#define COUNT(suite) +1
constexpr int kNumSuites = TEST_SUITES(COUNT);
#undef COUNT
int TestMain(void*, arch::EarlyTicks) {
printf("\nRunning unit tests in physical memory...\n");
const char* failed_suites[kNumSuites];
int good = 0, bad = 0;
auto run = [&](bool (*suite)(), const char* name) {
if (suite()) {
++good;
} else {
failed_suites[bad++] = name;
}
};
#define RUN(suite) run(suite, #suite);
TEST_SUITES(RUN)
#undef RUN
printf("Ran %d test suites: %d succeeded, %d failed.\n", good + bad, good, bad);
if (bad) {
printf("*** FAILED:");
for (const char* name : ktl::span(failed_suites, bad)) {
printf(" %s", name);
}
printf(" ***\n\n");
}
return bad;
}