|  | /* | 
|  | ******************************************************************************* | 
|  | * | 
|  | *   Copyright (C) 1998-2003, International Business Machines | 
|  | *   Corporation and others.  All Rights Reserved. | 
|  | * | 
|  | ******************************************************************************* | 
|  | * | 
|  | * File ieeetest.h | 
|  | * | 
|  | * Modification History: | 
|  | * | 
|  | *   Date        Name        Description | 
|  | *   08/21/98    stephen     Creation. | 
|  | ******************************************************************************* | 
|  | */ | 
|  |  | 
|  | #ifndef _IEEETEST | 
|  | #define _IEEETEST | 
|  |  | 
|  | void usage(const char *execName); | 
|  |  | 
|  | // Very simple class for testing IEEE compliance | 
|  | class IEEETest | 
|  | { | 
|  | public: | 
|  |  | 
|  | // additive constants for flags | 
|  | enum EModeFlags { | 
|  | kNone           = 0x00, | 
|  | kVerboseMode    = 0x01 | 
|  | }; | 
|  |  | 
|  |  | 
|  | IEEETest(int flags = kNone); | 
|  | ~IEEETest(); | 
|  |  | 
|  | // method returns the number of errors | 
|  | int           run(void); | 
|  |  | 
|  | private: | 
|  | // utility function for running a test function | 
|  | int           runTest(const char *testName, | 
|  | int (IEEETest::*testFunc)(void)); | 
|  |  | 
|  | // the actual tests; methods return the number of errors | 
|  | int           testNaN(void); | 
|  | int           testPositiveInfinity(void); | 
|  | int           testNegativeInfinity(void); | 
|  | int           testZero(void); | 
|  |  | 
|  | // subtests of testNaN | 
|  | int           testIsNaN(void); | 
|  | int           NaNGT(void); | 
|  | int           NaNLT(void); | 
|  | int           NaNGTE(void); | 
|  | int           NaNLTE(void); | 
|  | int           NaNE(void); | 
|  | int           NaNNE(void); | 
|  |  | 
|  |  | 
|  | // logging utilities | 
|  | int           getTestLevel(void) const; | 
|  | void          increaseTestLevel(void); | 
|  | void          decreaseTestLevel(void); | 
|  |  | 
|  | IEEETest&     log(char c); | 
|  | IEEETest&     log(const char *s); | 
|  | IEEETest&     log(int i); | 
|  | IEEETest&     log(long l); | 
|  | IEEETest&     log(double d); | 
|  | IEEETest&     logln(void); | 
|  |  | 
|  | IEEETest&     err(char c); | 
|  | IEEETest&     err(const char *s); | 
|  | IEEETest&     err(int i); | 
|  | IEEETest&     err(long l); | 
|  | IEEETest&     err(double d); | 
|  | IEEETest&     errln(void); | 
|  |  | 
|  | // data members | 
|  | int           mFlags;         // flags - only verbose for now | 
|  | int           mTestLevel;     // indent level | 
|  |  | 
|  | short         mNeedLogIndent; | 
|  | short         mNeedErrIndent; | 
|  | }; | 
|  |  | 
|  | inline int | 
|  | IEEETest::getTestLevel(void) const | 
|  | { return mTestLevel; } | 
|  |  | 
|  | inline void | 
|  | IEEETest::increaseTestLevel(void) | 
|  | { mTestLevel++; } | 
|  |  | 
|  | inline void | 
|  | IEEETest::decreaseTestLevel(void) | 
|  | { mTestLevel--; } | 
|  |  | 
|  | #endif | 
|  |  | 
|  | //eof |