Home | History | Annotate | Download | only in intltest
      1 /********************************************************************
      2  * COPYRIGHT:
      3  * Copyright (c) 1997-2009, International Business Machines Corporation and
      4  * others. All Rights Reserved.
      5  ********************************************************************/
      6 
      7 #ifndef _NUMBERFORMATROUNDTRIPTEST_
      8 #define _NUMBERFORMATROUNDTRIPTEST_
      9 
     10 #include "unicode/utypes.h"
     11 
     12 #if !UCONFIG_NO_FORMATTING
     13 
     14 #include "unicode/numfmt.h"
     15 #include "unicode/fmtable.h"
     16 #include "intltest.h"
     17 
     18 /**
     19  * Performs round-trip tests for NumberFormat
     20  **/
     21 class NumberFormatRoundTripTest : public IntlTest {
     22 
     23     // IntlTest override
     24     void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par );
     25 public:
     26 
     27     static UBool verbose;
     28     static UBool STRING_COMPARE;
     29     static UBool EXACT_NUMERIC_COMPARE;
     30     static UBool DEBUG;
     31     static double MAX_ERROR;
     32     static double max_numeric_error;
     33     static double min_numeric_error;
     34 
     35 
     36     void start(void);
     37 
     38     void test(NumberFormat *fmt);
     39     void test(NumberFormat *fmt, double value);
     40     void test(NumberFormat *fmt, int32_t value);
     41     void test(NumberFormat *fmt, const Formattable& value);
     42 
     43     static double randomDouble(double range);
     44     static double proportionalError(const Formattable& a, const Formattable& b);
     45     static UnicodeString& typeOf(const Formattable& n, UnicodeString& result);
     46     static UnicodeString& escape(UnicodeString& s);
     47 
     48     static inline UBool
     49     isDouble(const Formattable& n)
     50     { return (n.getType() == Formattable::kDouble); }
     51 
     52     static inline UBool
     53     isLong(const Formattable& n)
     54     { return (n.getType() == Formattable::kLong); }
     55 
     56     /*
     57      * Return a random uint32_t
     58      **/
     59     static uint32_t randLong();
     60 
     61     /**
     62      * Return a random double 0 <= x < 1.0
     63      **/
     64     static double randFraction()
     65     {
     66         return (double)randLong() / (double)0xFFFFFFFF;
     67     }
     68 
     69 protected:
     70     UBool failure(UErrorCode status, const char* msg, UBool possibleDataError=FALSE);
     71 
     72 };
     73 
     74 #endif /* #if !UCONFIG_NO_FORMATTING */
     75 
     76 #endif // _NUMBERFORMATROUNDTRIPTEST_
     77 //eof
     78