110915Sandreas.sandberg@arm.com/*
210915Sandreas.sandberg@arm.com * Copyright (c) 2013 Andreas Sandberg
310915Sandreas.sandberg@arm.com * All rights reserved
410915Sandreas.sandberg@arm.com *
510915Sandreas.sandberg@arm.com * Licensed under the Apache License, Version 2.0 (the "License");
610915Sandreas.sandberg@arm.com * you may not use this file except in compliance with the License.
710915Sandreas.sandberg@arm.com * You may obtain a copy of the License at
810915Sandreas.sandberg@arm.com *
910915Sandreas.sandberg@arm.com *     http://www.apache.org/licenses/LICENSE-2.0
1010915Sandreas.sandberg@arm.com *
1110915Sandreas.sandberg@arm.com * Unless required by applicable law or agreed to in writing, software
1210915Sandreas.sandberg@arm.com * distributed under the License is distributed on an "AS IS" BASIS,
1310915Sandreas.sandberg@arm.com * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1410915Sandreas.sandberg@arm.com * See the License for the specific language governing permissions and
1510915Sandreas.sandberg@arm.com * limitations under the License.
1610915Sandreas.sandberg@arm.com *
1710915Sandreas.sandberg@arm.com * Authors: Andreas Sandberg
1810915Sandreas.sandberg@arm.com */
1910915Sandreas.sandberg@arm.com
2010915Sandreas.sandberg@arm.com#include "test_helpers.h"
2110915Sandreas.sandberg@arm.com
2210915Sandreas.sandberg@arm.com#include <assert.h>
2310915Sandreas.sandberg@arm.com#include <stdarg.h>
2410915Sandreas.sandberg@arm.com#include <stdlib.h>
2510915Sandreas.sandberg@arm.com
2610915Sandreas.sandberg@arm.comunsigned test_current = 0;
2710915Sandreas.sandberg@arm.comunsigned test_count = 0;
2810915Sandreas.sandberg@arm.comunsigned test_fail_count = 0;
2910915Sandreas.sandberg@arm.com
3010915Sandreas.sandberg@arm.comvoid
3110915Sandreas.sandberg@arm.comtest_init(unsigned no_tests)
3210915Sandreas.sandberg@arm.com{
3310915Sandreas.sandberg@arm.com    assert(test_count == 0 && test_current == 0);
3410915Sandreas.sandberg@arm.com
3510915Sandreas.sandberg@arm.com    test_count = no_tests;
3610915Sandreas.sandberg@arm.com    test_current = 1;
3710915Sandreas.sandberg@arm.com    test_fail_count = 0;
3810915Sandreas.sandberg@arm.com
3910915Sandreas.sandberg@arm.com    printf("1..%u\n", no_tests);
4010915Sandreas.sandberg@arm.com}
4110915Sandreas.sandberg@arm.com
4210915Sandreas.sandberg@arm.comvoid
4310915Sandreas.sandberg@arm.comtest_exit()
4410915Sandreas.sandberg@arm.com{
4510915Sandreas.sandberg@arm.com    if (test_fail_count)
4610915Sandreas.sandberg@arm.com        exit(EXIT_FAILURE);
4710915Sandreas.sandberg@arm.com    else
4810915Sandreas.sandberg@arm.com        exit(EXIT_SUCCESS);
4910915Sandreas.sandberg@arm.com}
5010915Sandreas.sandberg@arm.com
5110915Sandreas.sandberg@arm.comvoid
5210915Sandreas.sandberg@arm.comtest_bail(const char *fmt, ...)
5310915Sandreas.sandberg@arm.com{
5410915Sandreas.sandberg@arm.com    va_list ap;
5510915Sandreas.sandberg@arm.com    va_start(ap, fmt);
5610915Sandreas.sandberg@arm.com
5710915Sandreas.sandberg@arm.com    printf("Bail out! ");
5810915Sandreas.sandberg@arm.com    vprintf(fmt, ap);
5910915Sandreas.sandberg@arm.com    printf("\n");
6010915Sandreas.sandberg@arm.com
6110915Sandreas.sandberg@arm.com    va_end(ap);
6210915Sandreas.sandberg@arm.com
6310915Sandreas.sandberg@arm.com    exit(EXIT_FAILURE);
6410915Sandreas.sandberg@arm.com}
6510915Sandreas.sandberg@arm.com
6610915Sandreas.sandberg@arm.comvoid
6710915Sandreas.sandberg@arm.comtest_diag(const char *fmt, ...)
6810915Sandreas.sandberg@arm.com{
6910915Sandreas.sandberg@arm.com    va_list ap;
7010915Sandreas.sandberg@arm.com    va_start(ap, fmt);
7110915Sandreas.sandberg@arm.com
7210915Sandreas.sandberg@arm.com    printf("# ");
7310915Sandreas.sandberg@arm.com    vprintf(fmt, ap);
7410915Sandreas.sandberg@arm.com    printf("\n");
7510915Sandreas.sandberg@arm.com
7610915Sandreas.sandberg@arm.com    va_end(ap);
7710915Sandreas.sandberg@arm.com}
7810915Sandreas.sandberg@arm.com
7910915Sandreas.sandberg@arm.comstatic void
8010915Sandreas.sandberg@arm.comtest_vstatus(const char *status, const char *test,
8110915Sandreas.sandberg@arm.com             const char *directive,
8210915Sandreas.sandberg@arm.com             const char *fmt_why, va_list ap)
8310915Sandreas.sandberg@arm.com{
8410915Sandreas.sandberg@arm.com    printf("%s %i", status, test_current);
8510915Sandreas.sandberg@arm.com
8610915Sandreas.sandberg@arm.com    if (test && test[0] != '\0')
8710915Sandreas.sandberg@arm.com        printf(" - %s", test);
8810915Sandreas.sandberg@arm.com
8910915Sandreas.sandberg@arm.com    if (directive && directive[0] != '\0') {
9010915Sandreas.sandberg@arm.com        printf(" # %s ", directive);
9110915Sandreas.sandberg@arm.com        if (fmt_why && fmt_why[0] != '\0')
9210915Sandreas.sandberg@arm.com            vprintf(fmt_why, ap);
9310915Sandreas.sandberg@arm.com    }
9410915Sandreas.sandberg@arm.com    printf("\n");
9510915Sandreas.sandberg@arm.com
9610915Sandreas.sandberg@arm.com    ++test_current;
9710915Sandreas.sandberg@arm.com}
9810915Sandreas.sandberg@arm.com
9910915Sandreas.sandberg@arm.comstatic void __attribute__((format (printf, 4, 5)))
10010915Sandreas.sandberg@arm.comtest_status(const char *status, const char *test,
10110915Sandreas.sandberg@arm.com            const char *directive,
10210915Sandreas.sandberg@arm.com            const char *fmt_why, ...)
10310915Sandreas.sandberg@arm.com{
10410915Sandreas.sandberg@arm.com    va_list ap;
10510915Sandreas.sandberg@arm.com    va_start(ap, fmt_why);
10610915Sandreas.sandberg@arm.com
10710915Sandreas.sandberg@arm.com    test_vstatus(status, test, directive, fmt_why, ap);
10810915Sandreas.sandberg@arm.com
10910915Sandreas.sandberg@arm.com    va_end(ap);
11010915Sandreas.sandberg@arm.com}
11110915Sandreas.sandberg@arm.com
11210915Sandreas.sandberg@arm.comvoid
11310915Sandreas.sandberg@arm.comtest_ok(const char *test)
11410915Sandreas.sandberg@arm.com{
11510915Sandreas.sandberg@arm.com    test_status("ok", test, NULL, NULL);
11610915Sandreas.sandberg@arm.com}
11710915Sandreas.sandberg@arm.com
11810915Sandreas.sandberg@arm.comvoid
11910915Sandreas.sandberg@arm.comtest_fail(const char *test)
12010915Sandreas.sandberg@arm.com{
12110915Sandreas.sandberg@arm.com    test_status("not ok", test, NULL, NULL);
12210915Sandreas.sandberg@arm.com    ++test_fail_count;
12310915Sandreas.sandberg@arm.com}
12410915Sandreas.sandberg@arm.com
12510915Sandreas.sandberg@arm.comvoid
12610915Sandreas.sandberg@arm.comtest_skip(const char *test, const char *fmt_why, ...)
12710915Sandreas.sandberg@arm.com{
12810915Sandreas.sandberg@arm.com    va_list ap;
12910915Sandreas.sandberg@arm.com    va_start(ap, fmt_why);
13010915Sandreas.sandberg@arm.com
13110915Sandreas.sandberg@arm.com    test_vstatus("ok", test, "SKIP", fmt_why, ap);
13210915Sandreas.sandberg@arm.com
13310915Sandreas.sandberg@arm.com    va_end(ap);
13410915Sandreas.sandberg@arm.com}
13510915Sandreas.sandberg@arm.com
13610915Sandreas.sandberg@arm.comvoid
13710915Sandreas.sandberg@arm.comtest_todo(const char *test, const char *fmt_why, ...)
13810915Sandreas.sandberg@arm.com{
13910915Sandreas.sandberg@arm.com    va_list ap;
14010915Sandreas.sandberg@arm.com    va_start(ap, fmt_why);
14110915Sandreas.sandberg@arm.com
14210915Sandreas.sandberg@arm.com    test_vstatus("not ok", test, "TODO", fmt_why, ap);
14310915Sandreas.sandberg@arm.com
14410915Sandreas.sandberg@arm.com    va_end(ap);
14510915Sandreas.sandberg@arm.com
14610915Sandreas.sandberg@arm.com    ++test_fail_count;
14710915Sandreas.sandberg@arm.com}
148