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