1/********************************************************************
2 * COPYRIGHT:
3 * Copyright (c) 1997-2003, International Business Machines Corporation and
4 * others. All Rights Reserved.
5 ********************************************************************/
6
7#ifndef _INTLTESTNUMBERFORMAT
8#define _INTLTESTNUMBERFORMAT
9
10
11#include "unicode/utypes.h"
12
13#if !UCONFIG_NO_FORMATTING
14
15#include "unicode/numfmt.h"
16#include "unicode/locid.h"
17#include "intltest.h"
18
19
20/**
21 * This test does round-trip testing (format -> parse -> format -> parse -> etc.) of
22 * NumberFormat.
23 */
24class IntlTestNumberFormat: public IntlTest {
25    void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL );
26
27private:
28
29    /**
30     *  call tryIt with many variations, called by testLocale
31     **/
32    void testFormat(/* char* par */);
33    /**
34     *  perform tests using aNumber and fFormat, called in many variations
35     **/
36    void tryIt(double aNumber);
37    /**
38     *  perform tests using aNumber and fFormat, called in many variations
39     **/
40    void tryIt(int32_t aNumber);
41    /**
42     *  test NumberFormat::getAvailableLocales
43     **/
44    void testAvailableLocales(/* char* par */);
45    /**
46     *  call testLocale for all locales
47     **/
48    void monsterTest(/* char *par */);
49    /**
50     *  call testFormat for currency, percent and plain number instances
51     **/
52    void testLocale(/* char *par, */const Locale& locale, const UnicodeString& localeName);
53
54    NumberFormat*   fFormat;
55    UErrorCode      fStatus;
56    Locale          fLocale;
57
58public:
59
60    virtual ~IntlTestNumberFormat();
61
62    /*
63     * Return a random double that isn't too large.
64     */
65    static double getSafeDouble(double smallerThanMax);
66
67    /*
68     * Return a random double
69     **/
70    static double randDouble();
71
72    /*
73     * Return a random uint32_t
74     **/
75    static uint32_t randLong();
76
77    /**
78     * Return a random double 0 <= x < 1.0
79     **/
80    static double randFraction()
81    {
82        return (double)randLong() / (double)0xFFFFFFFF;
83    }
84
85};
86
87#endif /* #if !UCONFIG_NO_FORMATTING */
88
89#endif
90