17841Sgblack@eecs.umich.edu/* 28332Snate@binkert.org * Copyright (c) 2011 Advanced Micro Devices, Inc. 37841Sgblack@eecs.umich.edu * All rights reserved. 47841Sgblack@eecs.umich.edu * 57841Sgblack@eecs.umich.edu * Redistribution and use in source and binary forms, with or without 67841Sgblack@eecs.umich.edu * modification, are permitted provided that the following conditions are 77841Sgblack@eecs.umich.edu * met: redistributions of source code must retain the above copyright 87841Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer; 97841Sgblack@eecs.umich.edu * redistributions in binary form must reproduce the above copyright 107841Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer in the 117841Sgblack@eecs.umich.edu * documentation and/or other materials provided with the distribution; 127841Sgblack@eecs.umich.edu * neither the name of the copyright holders nor the names of its 137841Sgblack@eecs.umich.edu * contributors may be used to endorse or promote products derived from 147841Sgblack@eecs.umich.edu * this software without specific prior written permission. 157841Sgblack@eecs.umich.edu * 167841Sgblack@eecs.umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 177841Sgblack@eecs.umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 187841Sgblack@eecs.umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 197841Sgblack@eecs.umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 207841Sgblack@eecs.umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 217841Sgblack@eecs.umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 227841Sgblack@eecs.umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 237841Sgblack@eecs.umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 247841Sgblack@eecs.umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 257841Sgblack@eecs.umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 267841Sgblack@eecs.umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 277841Sgblack@eecs.umich.edu * 287841Sgblack@eecs.umich.edu * Authors: Gabe Black 297841Sgblack@eecs.umich.edu */ 307841Sgblack@eecs.umich.edu 3111793Sbrandon.potter@amd.com#include "unittest/unittest.hh" 3211793Sbrandon.potter@amd.com 337841Sgblack@eecs.umich.edu#include <cstdlib> 347841Sgblack@eecs.umich.edu 357841Sgblack@eecs.umich.edu#include "base/cprintf.hh" 367841Sgblack@eecs.umich.edu 377841Sgblack@eecs.umich.edunamespace { 387841Sgblack@eecs.umich.edu 397841Sgblack@eecs.umich.edubool _printOnPass = (getenv("PRINT_ON_PASS") != NULL); 407841Sgblack@eecs.umich.eduunsigned _passes = 0; 417841Sgblack@eecs.umich.eduunsigned _failures = 0; 427841Sgblack@eecs.umich.edu 437841Sgblack@eecs.umich.edubool _casePrinted = false; 447841Sgblack@eecs.umich.educonst char *_case = NULL; 457841Sgblack@eecs.umich.edu 467841Sgblack@eecs.umich.edu} // anonymous namespace 477841Sgblack@eecs.umich.edu 487841Sgblack@eecs.umich.edunamespace UnitTest { 497841Sgblack@eecs.umich.edu 507841Sgblack@eecs.umich.eduvoid 517841Sgblack@eecs.umich.educheckVal(const char *file, const unsigned line, 527841Sgblack@eecs.umich.edu const char *test, const bool result) 537841Sgblack@eecs.umich.edu{ 547841Sgblack@eecs.umich.edu if (!result || _printOnPass) { 557841Sgblack@eecs.umich.edu if (!_casePrinted && _case) { 567841Sgblack@eecs.umich.edu cprintf("CASE %s:\n", _case); 577841Sgblack@eecs.umich.edu _casePrinted = true; 587841Sgblack@eecs.umich.edu } 597841Sgblack@eecs.umich.edu cprintf(" CHECK %s: %s:%d %s\n", 607841Sgblack@eecs.umich.edu result ? "PASSED" : "FAILED", file, line, test); 617841Sgblack@eecs.umich.edu } 627841Sgblack@eecs.umich.edu if (result) _passes++; 637841Sgblack@eecs.umich.edu else _failures++; 647841Sgblack@eecs.umich.edu} 657841Sgblack@eecs.umich.edu 667841Sgblack@eecs.umich.edubool printOnPass() { return _printOnPass; } 677841Sgblack@eecs.umich.eduvoid printOnPass(bool newPrintOnPass) { _printOnPass = newPrintOnPass; } 687841Sgblack@eecs.umich.edu 697841Sgblack@eecs.umich.eduunsigned passes() { return _passes; } 707841Sgblack@eecs.umich.eduunsigned failures() { return _failures; } 717841Sgblack@eecs.umich.edu 727841Sgblack@eecs.umich.eduunsigned 737841Sgblack@eecs.umich.eduprintResults() 747841Sgblack@eecs.umich.edu{ 757841Sgblack@eecs.umich.edu cprintf("TEST %s: %d checks passed, %d checks failed.\n", 767841Sgblack@eecs.umich.edu _failures ? "FAILED" : "PASSED", _passes, _failures); 777841Sgblack@eecs.umich.edu return _failures; 787841Sgblack@eecs.umich.edu} 797841Sgblack@eecs.umich.edu 807841Sgblack@eecs.umich.eduvoid 817841Sgblack@eecs.umich.edureset() 827841Sgblack@eecs.umich.edu{ 837841Sgblack@eecs.umich.edu _passes = 0; 847841Sgblack@eecs.umich.edu _failures = 0; 857841Sgblack@eecs.umich.edu} 867841Sgblack@eecs.umich.edu 877841Sgblack@eecs.umich.eduvoid 887841Sgblack@eecs.umich.edusetCase(const char *newCase) 897841Sgblack@eecs.umich.edu{ 907841Sgblack@eecs.umich.edu _casePrinted = false; 917841Sgblack@eecs.umich.edu _case = newCase; 927841Sgblack@eecs.umich.edu} 937841Sgblack@eecs.umich.edu 947841Sgblack@eecs.umich.edu} //namespace UnitTest 95