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