test_helper.c revision 9888
113481Sgiacomo.travaglini@arm.com/*
213481Sgiacomo.travaglini@arm.com * Copyright (c) 2013, Andreas Sandberg
313481Sgiacomo.travaglini@arm.com * All rights reserved.
413481Sgiacomo.travaglini@arm.com *
513481Sgiacomo.travaglini@arm.com * Redistribution and use in source and binary forms, with or without
613481Sgiacomo.travaglini@arm.com * modification, are permitted provided that the following conditions
713481Sgiacomo.travaglini@arm.com * are met:
813481Sgiacomo.travaglini@arm.com *
913481Sgiacomo.travaglini@arm.com * 1. Redistributions of source code must retain the above copyright
1013481Sgiacomo.travaglini@arm.com *    notice, this list of conditions and the following disclaimer.
1113481Sgiacomo.travaglini@arm.com * 2. Redistributions in binary form must reproduce the above
1213481Sgiacomo.travaglini@arm.com *    copyright notice, this list of conditions and the following
1313481Sgiacomo.travaglini@arm.com *    disclaimer in the documentation and/or other materials provided
1413481Sgiacomo.travaglini@arm.com *    with the distribution.
1513481Sgiacomo.travaglini@arm.com *
1613481Sgiacomo.travaglini@arm.com * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
1713481Sgiacomo.travaglini@arm.com * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
1813481Sgiacomo.travaglini@arm.com * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
1913481Sgiacomo.travaglini@arm.com * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
2013481Sgiacomo.travaglini@arm.com * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
2113481Sgiacomo.travaglini@arm.com * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
2213481Sgiacomo.travaglini@arm.com * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
2313481Sgiacomo.travaglini@arm.com * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2413481Sgiacomo.travaglini@arm.com * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
2513481Sgiacomo.travaglini@arm.com * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
2613481Sgiacomo.travaglini@arm.com * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
2713481Sgiacomo.travaglini@arm.com * OF THE POSSIBILITY OF SUCH DAMAGE.
2813481Sgiacomo.travaglini@arm.com */
2913481Sgiacomo.travaglini@arm.com
3013481Sgiacomo.travaglini@arm.com#include "test_helper.h"
3113481Sgiacomo.travaglini@arm.com
3213481Sgiacomo.travaglini@arm.com#include <assert.h>
3313481Sgiacomo.travaglini@arm.com#include <stdarg.h>
3413481Sgiacomo.travaglini@arm.com#include <stdlib.h>
3513481Sgiacomo.travaglini@arm.com
3613481Sgiacomo.travaglini@arm.comunsigned test_current = 0;
3713481Sgiacomo.travaglini@arm.comunsigned test_count = 0;
3813481Sgiacomo.travaglini@arm.comunsigned test_fail_count = 0;
3913481Sgiacomo.travaglini@arm.com
4013481Sgiacomo.travaglini@arm.comvoid
4113481Sgiacomo.travaglini@arm.comtest_init(unsigned no_tests)
4213481Sgiacomo.travaglini@arm.com{
4313481Sgiacomo.travaglini@arm.com    assert(test_count == 0 && test_current == 0);
4413481Sgiacomo.travaglini@arm.com
4513481Sgiacomo.travaglini@arm.com    test_count = no_tests;
4613481Sgiacomo.travaglini@arm.com    test_current = 1;
4713481Sgiacomo.travaglini@arm.com    test_fail_count = 0;
4813481Sgiacomo.travaglini@arm.com
4913481Sgiacomo.travaglini@arm.com    printf("1..%u\n", no_tests);
5013481Sgiacomo.travaglini@arm.com}
5113481Sgiacomo.travaglini@arm.com
5213481Sgiacomo.travaglini@arm.comvoid
5313481Sgiacomo.travaglini@arm.comtest_exit()
5413481Sgiacomo.travaglini@arm.com{
5513481Sgiacomo.travaglini@arm.com    if (test_fail_count)
5613481Sgiacomo.travaglini@arm.com        exit(EXIT_FAILURE);
5713481Sgiacomo.travaglini@arm.com    else
5813481Sgiacomo.travaglini@arm.com        exit(EXIT_SUCCESS);
5913481Sgiacomo.travaglini@arm.com}
6013481Sgiacomo.travaglini@arm.com
6113481Sgiacomo.travaglini@arm.comvoid
6213481Sgiacomo.travaglini@arm.comtest_bail(const char *fmt, ...)
6313481Sgiacomo.travaglini@arm.com{
6413481Sgiacomo.travaglini@arm.com    va_list ap;
6513481Sgiacomo.travaglini@arm.com    va_start(ap, fmt);
6613481Sgiacomo.travaglini@arm.com
6713481Sgiacomo.travaglini@arm.com    printf("Bail out! ");
6813481Sgiacomo.travaglini@arm.com    vprintf(fmt, ap);
6913481Sgiacomo.travaglini@arm.com    printf("\n");
7013481Sgiacomo.travaglini@arm.com
7113481Sgiacomo.travaglini@arm.com    va_end(ap);
7213481Sgiacomo.travaglini@arm.com
7313481Sgiacomo.travaglini@arm.com    exit(EXIT_FAILURE);
7413481Sgiacomo.travaglini@arm.com}
7513481Sgiacomo.travaglini@arm.com
7613481Sgiacomo.travaglini@arm.comvoid
7713481Sgiacomo.travaglini@arm.comtest_diag(const char *fmt, ...)
7813481Sgiacomo.travaglini@arm.com{
7913481Sgiacomo.travaglini@arm.com    va_list ap;
8013481Sgiacomo.travaglini@arm.com    va_start(ap, fmt);
8113481Sgiacomo.travaglini@arm.com
8213481Sgiacomo.travaglini@arm.com    printf("# ");
8313481Sgiacomo.travaglini@arm.com    vprintf(fmt, ap);
8413481Sgiacomo.travaglini@arm.com    printf("\n");
8513481Sgiacomo.travaglini@arm.com
8613481Sgiacomo.travaglini@arm.com    va_end(ap);
8713481Sgiacomo.travaglini@arm.com}
8813481Sgiacomo.travaglini@arm.com
8913481Sgiacomo.travaglini@arm.comstatic void
9013481Sgiacomo.travaglini@arm.comtest_vstatus(const char *status, const char *test,
9113481Sgiacomo.travaglini@arm.com             const char *directive,
9213481Sgiacomo.travaglini@arm.com             const char *fmt_why, va_list ap)
9313481Sgiacomo.travaglini@arm.com{
9413481Sgiacomo.travaglini@arm.com    printf("%s %i", status, test_current);
9513481Sgiacomo.travaglini@arm.com
9613481Sgiacomo.travaglini@arm.com    if (test && test[0] != '\0')
9713481Sgiacomo.travaglini@arm.com        printf(" - %s", test);
9813481Sgiacomo.travaglini@arm.com
9913481Sgiacomo.travaglini@arm.com    if (directive && directive[0] != '\0') {
10013481Sgiacomo.travaglini@arm.com        printf(" # %s ", directive);
10113481Sgiacomo.travaglini@arm.com        if (fmt_why && fmt_why[0] != '\0')
10213481Sgiacomo.travaglini@arm.com            vprintf(fmt_why, ap);
10313481Sgiacomo.travaglini@arm.com    }
10413481Sgiacomo.travaglini@arm.com    printf("\n");
10513481Sgiacomo.travaglini@arm.com
10613481Sgiacomo.travaglini@arm.com    ++test_current;
10713481Sgiacomo.travaglini@arm.com}
10813481Sgiacomo.travaglini@arm.com
10913481Sgiacomo.travaglini@arm.comstatic void __attribute__((format (printf, 4, 5)))
11013481Sgiacomo.travaglini@arm.comtest_status(const char *status, const char *test,
11113481Sgiacomo.travaglini@arm.com            const char *directive,
11213481Sgiacomo.travaglini@arm.com            const char *fmt_why, ...)
11313481Sgiacomo.travaglini@arm.com{
11413481Sgiacomo.travaglini@arm.com    va_list ap;
11513481Sgiacomo.travaglini@arm.com    va_start(ap, fmt_why);
11613481Sgiacomo.travaglini@arm.com
11713481Sgiacomo.travaglini@arm.com    test_vstatus(status, test, directive, fmt_why, ap);
11813481Sgiacomo.travaglini@arm.com
11913481Sgiacomo.travaglini@arm.com    va_end(ap);
12013481Sgiacomo.travaglini@arm.com}
12113481Sgiacomo.travaglini@arm.com
12213481Sgiacomo.travaglini@arm.comvoid
12313481Sgiacomo.travaglini@arm.comtest_ok(const char *test)
12413481Sgiacomo.travaglini@arm.com{
12513481Sgiacomo.travaglini@arm.com    test_status("ok", test, NULL, NULL);
12613481Sgiacomo.travaglini@arm.com}
12713481Sgiacomo.travaglini@arm.com
12813481Sgiacomo.travaglini@arm.comvoid
12913481Sgiacomo.travaglini@arm.comtest_fail(const char *test)
13013481Sgiacomo.travaglini@arm.com{
13113481Sgiacomo.travaglini@arm.com    test_status("not ok", test, NULL, NULL);
13213481Sgiacomo.travaglini@arm.com    ++test_fail_count;
13313481Sgiacomo.travaglini@arm.com}
13413481Sgiacomo.travaglini@arm.com
13513481Sgiacomo.travaglini@arm.comvoid
13613481Sgiacomo.travaglini@arm.comtest_skip(const char *test, const char *fmt_why, ...)
13713481Sgiacomo.travaglini@arm.com{
13813481Sgiacomo.travaglini@arm.com    va_list ap;
13913481Sgiacomo.travaglini@arm.com    va_start(ap, fmt_why);
14013481Sgiacomo.travaglini@arm.com
14113481Sgiacomo.travaglini@arm.com    test_vstatus("ok", test, "SKIP", fmt_why, ap);
14213481Sgiacomo.travaglini@arm.com
14313481Sgiacomo.travaglini@arm.com    va_end(ap);
14413481Sgiacomo.travaglini@arm.com}
14513481Sgiacomo.travaglini@arm.com
14613481Sgiacomo.travaglini@arm.comvoid
14713481Sgiacomo.travaglini@arm.comtest_todo(const char *test, const char *fmt_why, ...)
14813481Sgiacomo.travaglini@arm.com{
14913481Sgiacomo.travaglini@arm.com    va_list ap;
15013481Sgiacomo.travaglini@arm.com    va_start(ap, fmt_why);
15113481Sgiacomo.travaglini@arm.com
15213481Sgiacomo.travaglini@arm.com    test_vstatus("not ok", test, "TODO", fmt_why, ap);
15313481Sgiacomo.travaglini@arm.com
15413481Sgiacomo.travaglini@arm.com    va_end(ap);
15513481Sgiacomo.travaglini@arm.com
15613481Sgiacomo.travaglini@arm.com    ++test_fail_count;
15713481Sgiacomo.travaglini@arm.com}
15813481Sgiacomo.travaglini@arm.com