91 lines
1.8 KiB
C
91 lines
1.8 KiB
C
/*
|
|
* Copyright (c) 2016, Xilinx Inc. and Contributors. All rights reserved.
|
|
*
|
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
*/
|
|
|
|
#include <metal/errno.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include "metal-test.h"
|
|
#include <metal/compiler.h>
|
|
#include <metal/sys.h>
|
|
#include <metal/utilities.h>
|
|
|
|
static METAL_DECLARE_LIST(test_cases);
|
|
|
|
/*
|
|
* Not every enviornment has strerror() implemented.
|
|
*/
|
|
#ifdef NOT_HAVE_STRERROR
|
|
char metal_weak *strerror(int errnum)
|
|
{
|
|
static char errstr[33];
|
|
int i, j;
|
|
|
|
if (errnum < 0)
|
|
return NULL;
|
|
|
|
i = 0;
|
|
while (errnum) {
|
|
int digit = errnum % 10;
|
|
|
|
errstr[i++] = '0' + (char)digit;
|
|
errnum /= 10;
|
|
}
|
|
errstr[i] = '\0';
|
|
|
|
j = i - 1;
|
|
for (i = 0; i < j; i++, j--) {
|
|
char *tmp = &errstr[i];
|
|
|
|
errstr[i] = errstr[j];
|
|
errstr[j] = *tmp;
|
|
}
|
|
return errstr;
|
|
}
|
|
#endif
|
|
|
|
void metal_add_test_case(struct metal_test_case *test_case)
|
|
{
|
|
metal_list_add_tail(&test_cases, &test_case->node);
|
|
}
|
|
|
|
int metal_tests_run(struct metal_init_params *params)
|
|
{
|
|
struct metal_init_params dparams = METAL_INIT_DEFAULTS;
|
|
struct metal_test_case *test_case;
|
|
struct metal_list *node;
|
|
int error, errors = 0;
|
|
const char *dots = "..................................";
|
|
const char *pad;
|
|
|
|
if (!params)
|
|
params = &dparams;
|
|
|
|
params->log_level = METAL_LOG_DEBUG;
|
|
error = metal_init(params);
|
|
if (error)
|
|
return error;
|
|
|
|
metal_list_for_each(&test_cases, node) {
|
|
test_case = metal_container_of(node, struct metal_test_case,
|
|
node);
|
|
pad = dots + strlen(test_case->name);
|
|
metal_log(METAL_LOG_INFO,"running [%s]\n", test_case->name);
|
|
error = test_case->test();
|
|
metal_log(METAL_LOG_INFO,"result [%s]%s %s%s%s\n",
|
|
test_case->name, pad,
|
|
error ? "fail" : "pass",
|
|
error ? " - error: " : "",
|
|
error ? strerror(-error) : "");
|
|
if (error)
|
|
errors++;
|
|
}
|
|
|
|
metal_finish();
|
|
|
|
return errors;
|
|
}
|