Home | History | Annotate | Line # | Download | only in jit
      1      1.1  mrg /* DejaGnu unit testing header.
      2  1.1.1.2  mrg    Copyright (C) 2000-2022 Free Software Foundation, Inc.
      3      1.1  mrg 
      4      1.1  mrg This file is part of DejaGnu.
      5      1.1  mrg 
      6      1.1  mrg DejaGnu is free software; you can redistribute it and/or modify it
      7      1.1  mrg under the terms of the GNU General Public License as published by
      8      1.1  mrg the Free Software Foundation; either version 3 of the License, or
      9      1.1  mrg (at your option) any later version.
     10      1.1  mrg 
     11      1.1  mrg DejaGnu is distributed in the hope that it will be useful, but
     12      1.1  mrg WITHOUT ANY WARRANTY; without even the implied warranty of
     13      1.1  mrg MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     14      1.1  mrg General Public License for more details.
     15      1.1  mrg 
     16      1.1  mrg You should have received a copy of the GNU General Public License
     17      1.1  mrg along with DejaGnu; if not, write to the Free Software Foundation,
     18      1.1  mrg Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.  */
     19      1.1  mrg 
     20      1.1  mrg /* Imported from 1.6.2 with modifications
     21      1.1  mrg    * to avoid and unused symbol in C compilations
     22      1.1  mrg    * avoid wait () clashing with system-provided routines
     23      1.1  mrg    * provide a deterministic last line of output after the totals.  */
     24      1.1  mrg 
     25      1.1  mrg #ifndef __DEJAGNU_H__
     26      1.1  mrg #define __DEJAGNU_H__
     27      1.1  mrg 
     28      1.1  mrg #include <stdio.h>
     29      1.1  mrg #include <stdarg.h>
     30      1.1  mrg #include <string.h>
     31      1.1  mrg 
     32      1.1  mrg /* If you have problems with DejaGnu dropping failed, untested, or
     33      1.1  mrg  * unresolved messages generated by a unit testcase, then:  */
     34      1.1  mrg 
     35      1.1  mrg /* #define _DEJAGNU_WAIT_  */
     36      1.1  mrg 
     37      1.1  mrg #ifdef _DEJAGNU_WAIT_
     38      1.1  mrg #include <sys/time.h>
     39      1.1  mrg #include <sys/types.h>
     40      1.1  mrg #include <unistd.h>
     41      1.1  mrg #endif
     42      1.1  mrg 
     43      1.1  mrg static int passed;
     44      1.1  mrg static int failed;
     45      1.1  mrg static int untest;
     46      1.1  mrg static int unresolve;
     47      1.1  mrg static int xfailed;
     48      1.1  mrg #ifdef __cplusplus
     49      1.1  mrg static int xpassed;
     50      1.1  mrg #endif
     51      1.1  mrg 
     52      1.1  mrg static char buffer[512];
     53      1.1  mrg 
     54      1.1  mrg #ifdef _DEJAGNU_WAIT_
     55      1.1  mrg void
     56      1.1  mrg dg_wait (void)
     57      1.1  mrg {
     58      1.1  mrg   fd_set rfds;
     59      1.1  mrg   struct timeval tv;
     60      1.1  mrg 
     61      1.1  mrg   FD_ZERO (&rfds);
     62      1.1  mrg   tv.tv_sec = 0;
     63      1.1  mrg   tv.tv_usec = 1;
     64      1.1  mrg 
     65      1.1  mrg   select (0, &rfds, NULL, NULL, &tv);
     66      1.1  mrg }
     67      1.1  mrg #endif
     68      1.1  mrg 
     69      1.1  mrg static inline void
     70      1.1  mrg pass (const char* fmt, ...)
     71      1.1  mrg {
     72      1.1  mrg   va_list ap;
     73      1.1  mrg 
     74      1.1  mrg   passed++;
     75      1.1  mrg   va_start (ap, fmt);
     76      1.1  mrg   vsnprintf (buffer, sizeof (buffer), fmt, ap);
     77      1.1  mrg   va_end (ap);
     78      1.1  mrg   printf ("\tPASSED: %s\n", buffer);
     79      1.1  mrg #ifdef _DEJAGNU_WAIT_
     80      1.1  mrg   dg_wait ();
     81      1.1  mrg #endif
     82      1.1  mrg }
     83      1.1  mrg 
     84      1.1  mrg static inline void
     85      1.1  mrg xpass (const char* fmt, ...)
     86      1.1  mrg {
     87      1.1  mrg   va_list ap;
     88      1.1  mrg 
     89      1.1  mrg   passed++;
     90      1.1  mrg   va_start (ap, fmt);
     91      1.1  mrg   vsnprintf (buffer, sizeof (buffer), fmt, ap);
     92      1.1  mrg   va_end (ap);
     93      1.1  mrg   printf ("\tXPASSED: %s\n", buffer);
     94      1.1  mrg #ifdef _DEJAGNU_WAIT_
     95      1.1  mrg   dg_wait ();
     96      1.1  mrg #endif
     97      1.1  mrg }
     98      1.1  mrg 
     99      1.1  mrg static inline void
    100      1.1  mrg fail (const char* fmt, ...)
    101      1.1  mrg {
    102      1.1  mrg   va_list ap;
    103      1.1  mrg 
    104      1.1  mrg   failed++;
    105      1.1  mrg   va_start (ap, fmt);
    106      1.1  mrg   vsnprintf (buffer, sizeof (buffer), fmt, ap);
    107      1.1  mrg   va_end (ap);
    108      1.1  mrg   printf ("\tFAILED: %s\n", buffer);
    109      1.1  mrg #ifdef _DEJAGNU_WAIT_
    110      1.1  mrg   dg_wait ();
    111      1.1  mrg #endif
    112      1.1  mrg }
    113      1.1  mrg 
    114      1.1  mrg static inline void
    115      1.1  mrg xfail (const char* fmt, ...)
    116      1.1  mrg {
    117      1.1  mrg   va_list ap;
    118      1.1  mrg 
    119      1.1  mrg   failed++;
    120      1.1  mrg   va_start (ap, fmt);
    121      1.1  mrg   vsnprintf (buffer, sizeof (buffer), fmt, ap);
    122      1.1  mrg   va_end (ap);
    123      1.1  mrg   printf ("\tXFAILED: %s\n", buffer);
    124      1.1  mrg #ifdef _DEJAGNU_WAIT_
    125      1.1  mrg   dg_wait ();
    126      1.1  mrg #endif
    127      1.1  mrg }
    128      1.1  mrg 
    129      1.1  mrg static inline void
    130      1.1  mrg untested (const char* fmt, ...)
    131      1.1  mrg {
    132      1.1  mrg   va_list ap;
    133      1.1  mrg 
    134      1.1  mrg   untest++;
    135      1.1  mrg   va_start (ap, fmt);
    136      1.1  mrg   vsnprintf (buffer, sizeof (buffer), fmt, ap);
    137      1.1  mrg   va_end (ap);
    138      1.1  mrg   printf ("\tUNTESTED: %s\n", buffer);
    139      1.1  mrg #ifdef _DEJAGNU_WAIT_
    140      1.1  mrg   dg_wait ();
    141      1.1  mrg #endif
    142      1.1  mrg }
    143      1.1  mrg 
    144      1.1  mrg static inline void
    145      1.1  mrg unresolved (const char* fmt, ...)
    146      1.1  mrg {
    147      1.1  mrg   va_list ap;
    148      1.1  mrg 
    149      1.1  mrg   unresolve++;
    150      1.1  mrg   va_start (ap, fmt);
    151      1.1  mrg   vsnprintf (buffer, sizeof (buffer), fmt, ap);
    152      1.1  mrg   va_end (ap);
    153      1.1  mrg   printf ("\tUNRESOLVED: %s\n", buffer);
    154      1.1  mrg #ifdef _DEJAGNU_WAIT_
    155      1.1  mrg   dg_wait ();
    156      1.1  mrg #endif
    157      1.1  mrg }
    158      1.1  mrg 
    159      1.1  mrg static inline void
    160      1.1  mrg note (const char* fmt, ...)
    161      1.1  mrg {
    162      1.1  mrg   va_list ap;
    163      1.1  mrg 
    164      1.1  mrg   va_start (ap, fmt);
    165      1.1  mrg   vsnprintf (buffer, sizeof (buffer), fmt, ap);
    166      1.1  mrg   va_end (ap);
    167      1.1  mrg   printf ("\tNOTE: %s\n", buffer);
    168      1.1  mrg #ifdef _DEJAGNU_WAIT_
    169      1.1  mrg   dg_wait ();
    170      1.1  mrg #endif
    171      1.1  mrg }
    172      1.1  mrg 
    173      1.1  mrg static inline void
    174      1.1  mrg totals (void)
    175      1.1  mrg {
    176      1.1  mrg   printf ("\nTotals:\n");
    177      1.1  mrg   printf ("\t#passed:\t\t%d\n", passed);
    178      1.1  mrg   printf ("\t#real failed:\t\t%d\n", failed);
    179      1.1  mrg   if (xfailed)
    180      1.1  mrg     printf ("\t#expected failures:\t\t%d\n", xfailed);
    181      1.1  mrg   if (untest)
    182      1.1  mrg     printf ("\t#untested:\t\t%d\n", untest);
    183      1.1  mrg   if (unresolve)
    184      1.1  mrg     printf ("\t#unresolved:\t\t%d\n", unresolve);
    185      1.1  mrg   printf ("\njit-dg-harness-complete\n");
    186      1.1  mrg }
    187      1.1  mrg 
    188      1.1  mrg #ifdef __cplusplus
    189      1.1  mrg 
    190      1.1  mrg #include <iostream>
    191      1.1  mrg #include <iomanip>
    192      1.1  mrg #include <fstream>
    193      1.1  mrg #include <string>
    194      1.1  mrg 
    195      1.1  mrg const char *outstate_list[] = {
    196      1.1  mrg   "FAILED: ", "PASSED: ", "UNTESTED: ", "UNRESOLVED: ", "XFAILED: ", "XPASSED: "
    197      1.1  mrg };
    198      1.1  mrg 
    199      1.1  mrg const char ** outstate = outstate_list;
    200      1.1  mrg 
    201      1.1  mrg enum teststate { FAILED, PASSED, UNTESTED, UNRESOLVED, XFAILED, XPASSED} laststate;
    202      1.1  mrg 
    203      1.1  mrg class TestState {
    204      1.1  mrg  private:
    205      1.1  mrg   teststate laststate;
    206      1.1  mrg   std::string lastmsg;
    207      1.1  mrg  public:
    208      1.1  mrg   TestState (void)
    209      1.1  mrg     {
    210      1.1  mrg       passed = 0;
    211      1.1  mrg       failed = 0;
    212      1.1  mrg       untest = 0;
    213      1.1  mrg       xpassed = 0;
    214      1.1  mrg       xfailed = 0;
    215      1.1  mrg       unresolve = 0;
    216      1.1  mrg     }
    217      1.1  mrg 
    218      1.1  mrg   ~TestState (void) { totals(); }
    219      1.1  mrg 
    220      1.1  mrg   void testrun (bool b, std::string s)
    221      1.1  mrg     {
    222      1.1  mrg       if (b)
    223      1.1  mrg 	pass (s);
    224      1.1  mrg       else
    225      1.1  mrg 	fail (s);
    226      1.1  mrg     }
    227      1.1  mrg 
    228      1.1  mrg     void pass (std::string s)
    229      1.1  mrg       {
    230      1.1  mrg 	passed++;
    231      1.1  mrg 	laststate = PASSED;
    232      1.1  mrg 	lastmsg = s;
    233      1.1  mrg 	std::cout << "\t" << outstate[PASSED] << s << std::endl;
    234      1.1  mrg       }
    235      1.1  mrg 
    236      1.1  mrg     void pass (const char *c)
    237      1.1  mrg       {
    238      1.1  mrg 	std::string s = c;
    239      1.1  mrg 	pass (s);
    240      1.1  mrg       }
    241      1.1  mrg 
    242      1.1  mrg     void xpass (std::string s)
    243      1.1  mrg       {
    244      1.1  mrg 	xpassed++;
    245      1.1  mrg 	laststate = PASSED;
    246      1.1  mrg 	lastmsg = s;
    247      1.1  mrg 	std::cout << "\t" << outstate[XPASSED] << s << std::endl;
    248      1.1  mrg       }
    249      1.1  mrg 
    250      1.1  mrg     void xpass (const char *c)
    251      1.1  mrg       {
    252      1.1  mrg 	std::string s = c;
    253      1.1  mrg 	xpass (s);
    254      1.1  mrg       }
    255      1.1  mrg 
    256      1.1  mrg     void fail (std::string s)
    257      1.1  mrg       {
    258      1.1  mrg 	failed++;
    259      1.1  mrg 	laststate = FAILED;
    260      1.1  mrg 	lastmsg = s;
    261      1.1  mrg 	std::cout << "\t" << outstate[FAILED] << s << std::endl;
    262      1.1  mrg       }
    263      1.1  mrg 
    264      1.1  mrg     void fail (const char *c)
    265      1.1  mrg       {
    266      1.1  mrg 	std::string s = c;
    267      1.1  mrg 	fail (s);
    268      1.1  mrg       }
    269      1.1  mrg 
    270      1.1  mrg     void xfail (std::string s)
    271      1.1  mrg       {
    272      1.1  mrg 	xfailed++;
    273      1.1  mrg 	laststate = XFAILED;
    274      1.1  mrg 	lastmsg = s;
    275      1.1  mrg 	std::cout << "\t" << outstate[XFAILED] << s << std::endl;
    276      1.1  mrg       }
    277      1.1  mrg 
    278      1.1  mrg     void xfail (const char *c)
    279      1.1  mrg       {
    280      1.1  mrg 	std::string s = c;
    281      1.1  mrg 	xfail (s);
    282      1.1  mrg       }
    283      1.1  mrg 
    284      1.1  mrg     void untested (std::string s)
    285      1.1  mrg       {
    286      1.1  mrg 	untest++;
    287      1.1  mrg 	laststate = UNTESTED;
    288      1.1  mrg 	lastmsg = s;
    289      1.1  mrg 	std::cout << "\t" << outstate[UNTESTED] << s << std::endl;
    290      1.1  mrg       }
    291      1.1  mrg 
    292      1.1  mrg     void untested (const char *c)
    293      1.1  mrg       {
    294      1.1  mrg 	std::string s = c;
    295      1.1  mrg 	untested (s);
    296      1.1  mrg       }
    297      1.1  mrg 
    298      1.1  mrg     void unresolved (std::string s)
    299      1.1  mrg       {
    300      1.1  mrg 	unresolve++;
    301      1.1  mrg 	laststate = UNRESOLVED;
    302      1.1  mrg 	lastmsg = s;
    303      1.1  mrg 	std::cout << "\t" << outstate[UNRESOLVED] << s << std::endl;
    304      1.1  mrg       }
    305      1.1  mrg 
    306      1.1  mrg     void unresolved (const char *c)
    307      1.1  mrg       {
    308      1.1  mrg 	std::string s = c;
    309      1.1  mrg 	unresolved (s);
    310      1.1  mrg       }
    311      1.1  mrg 
    312      1.1  mrg     void totals (void)
    313      1.1  mrg       {
    314      1.1  mrg 	std::cout << "\t#passed:\t\t" << passed << std::endl;
    315      1.1  mrg 	std::cout << "\t#real failed:\t\t" << failed << std::endl;
    316      1.1  mrg 	if (xfailed)
    317      1.1  mrg 	  std::cout << "\t#expected failures:\t\t" << xfailed << std::endl;
    318      1.1  mrg 	if (xpassed)
    319      1.1  mrg 	  std::cout << "\t#unexpected passes:\t\t" << xpassed << std::endl;
    320      1.1  mrg 	if (untest)
    321      1.1  mrg 	  std::cout << "\t#untested:\t\t" << untest << std::endl;
    322      1.1  mrg 	if (unresolve)
    323      1.1  mrg 	  std::cout << "\t#unresolved:\t\t" << unresolve << std::endl;
    324      1.1  mrg         std::cout << "\njit-dg-harness-complete" << std::endl;
    325      1.1  mrg       }
    326      1.1  mrg 
    327      1.1  mrg     // This is so this class can be printed in an ostream.
    328      1.1  mrg     friend std::ostream & operator << (std::ostream &os, TestState& t)
    329      1.1  mrg       {
    330      1.1  mrg 	return os << "\t" << outstate[t.laststate] << t.lastmsg ;
    331      1.1  mrg       }
    332      1.1  mrg 
    333      1.1  mrg     int GetState (void) { return laststate; }
    334      1.1  mrg     std::string GetMsg (void) { return lastmsg; }
    335      1.1  mrg };
    336      1.1  mrg 
    337      1.1  mrg #endif /* __cplusplus */
    338      1.1  mrg #endif /* _DEJAGNU_H_ */
    339