Home | History | Annotate | Download | only in intltest
      1 // Copyright (C) 2016 and later: Unicode, Inc. and others.
      2 // License & terms of use: http://www.unicode.org/copyright.html
      3 /********************************************************************
      4  * COPYRIGHT:
      5  * Copyright (c) 1997-2006, International Business Machines Corporation and
      6  * others. All Rights Reserved.
      7  ********************************************************************/
      8 
      9 #ifndef _DATEFORMATROUNDTRIPTEST_
     10 #define _DATEFORMATROUNDTRIPTEST_
     11 
     12 #include "unicode/utypes.h"
     13 
     14 #if !UCONFIG_NO_FORMATTING
     15 
     16 #include "unicode/unistr.h"
     17 #include "unicode/datefmt.h"
     18 #include "unicode/smpdtfmt.h"
     19 #include "unicode/calendar.h"
     20 #include "intltest.h"
     21 
     22 /**
     23  * Performs round-trip tests for DateFormat
     24  **/
     25 class DateFormatRoundTripTest : public IntlTest {
     26 
     27     // IntlTest override
     28     void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par );
     29 
     30 public:
     31     DateFormatRoundTripTest();
     32     virtual ~DateFormatRoundTripTest();
     33 
     34     void TestDateFormatRoundTrip(void);
     35     void TestCentury(void);
     36     void test(const Locale& loc);
     37     void test(DateFormat *fmt, const Locale &origLocale, UBool timeOnly = FALSE );
     38     int32_t getField(UDate d, int32_t f);
     39     UnicodeString& escape(const UnicodeString& src, UnicodeString& dst);
     40     UDate generateDate(void);
     41     UDate generateDate(UDate minDate);
     42 
     43 
     44 //============================================================
     45 // statics
     46 //============================================================
     47 
     48 /**
     49  * Return a random uint32_t
     50  **/
     51 static uint32_t randLong() {
     52     // The portable IntlTest::random() function has sufficient
     53     // resolution for a 16-bit value, but not for 32 bits.
     54     return ((uint32_t) (IntlTest::random() * (1<<16))) |
     55           (((uint32_t) (IntlTest::random() * (1<<16))) << 16);
     56 }
     57 
     58 /**
     59  * Return a random double 0 <= x <= 1.0
     60  **/
     61 static double randFraction()
     62 {
     63     return (double)randLong() / (double)0xFFFFFFFF;
     64 }
     65 
     66 /**
     67  * Return a random value from -range..+range (closed).
     68  **/
     69 static double randDouble(double range)
     70 {
     71     double a = randFraction();
     72     //while(TPlatformUtilities::isInfinite(a) || TPlatformUtilities::isNaN(a))
     73     //    a = randFraction();
     74     return (2.0 * range * a) - range;
     75 }
     76 
     77 protected:
     78     UBool failure(UErrorCode status, const char* msg);
     79     UBool failure(UErrorCode status, const char* msg, const UnicodeString& str);
     80 
     81     const UnicodeString& fullFormat(UDate d);
     82 
     83 private:
     84 
     85     static int32_t SPARSENESS;
     86     static int32_t TRIALS;
     87     static int32_t DEPTH;
     88 
     89     UBool optionv; // TRUE if @v option is given on command line
     90     SimpleDateFormat *dateFormat;
     91     UnicodeString fgStr;
     92     Calendar *getFieldCal;
     93 };
     94 
     95 #endif /* #if !UCONFIG_NO_FORMATTING */
     96 
     97 #endif // _DATEFORMATROUNDTRIPTEST_
     98 //eof
     99