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
isDouble(const Formattable & n)49     isDouble(const Formattable& n)
50     { return (n.getType() == Formattable::kDouble); }
51 
52     static inline UBool
isLong(const Formattable & n)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      **/
randFraction()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