1 /******************************************************************** 2 * COPYRIGHT: 3 * Copyright (c) 1997-2010, International Business Machines Corporation and 4 * others. All Rights Reserved. 5 ********************************************************************/ 6 7 #ifndef __CalendarLimitTest__ 8 #define __CalendarLimitTest__ 9 10 #include "unicode/utypes.h" 11 12 #if !UCONFIG_NO_FORMATTING 13 14 #include "caltztst.h" 15 16 /** 17 * This test verifies the behavior of Calendar around the very earliest limits 18 * which it can handle. It also verifies the behavior for large values of millis. 19 * 20 * Bug ID 4033662. 21 */ 22 class CalendarLimitTest: public CalendarTimeZoneTest { 23 // IntlTest override 24 void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par ); 25 public: // package 26 //test routine used by TestCalendarLimit 27 virtual void test(UDate millis, Calendar *cal, DateFormat *fmt); 28 29 // bug 986c: deprecate nextDouble/previousDouble 30 //static double nextDouble(double a); 31 //static double previousDouble(double a); 32 static UBool withinErr(double a, double b, double err); 33 34 public: 35 // test behaviour and error reporting at boundaries of defined range 36 virtual void TestCalendarExtremeLimit(void); 37 38 void TestLimits(void); 39 40 private: 41 /* 42 * Test the functions getMaximum/getGeratestMinimum logically correct. 43 * This method assumes day of week cycle is consistent. 44 * @param cal The calendar instance to be tested. 45 * @param leapMonth true if the calendar system has leap months 46 */ 47 void doTheoreticalLimitsTest(Calendar& cal, UBool leapMonth); 48 49 /* 50 * Test the functions getXxxMinimum() and getXxxMaximum() by marching a 51 * test calendar 'cal' through 'numberOfDays' sequential days starting 52 * with 'startDate'. For each date, read a field value along with its 53 * reported actual minimum and actual maximum. These values are 54 * checked against one another as well as against getMinimum(), 55 * getGreatestMinimum(), getLeastMaximum(), and getMaximum(). We 56 * expect to see: 57 * 58 * 1. minimum <= actualMinimum <= greatestMinimum <= 59 * leastMaximum <= actualMaximum <= maximum 60 * 61 * 2. actualMinimum <= value <= actualMaximum 62 * 63 * Note: In addition to outright failures, this test reports some 64 * results as warnings. These are not generally of concern, but they 65 * should be evaluated by a human. To see these, run this test in 66 * verbose mode. 67 * @param cal the calendar to be tested 68 * @param fieldsToTest an array of field values to be tested, e.g., new 69 * int[] { UCAL_MONTH, UCAL_DAY_OF_MONTH }. It only makes 70 * sense to test the day fields; the time fields are not tested by this 71 * method. If null, then test all standard fields. 72 * @param startDate the first date to test 73 * @param testDuration if positive, the number of days to be tested. 74 * If negative, the number of seconds to run the test. 75 */ 76 void doLimitsTest(Calendar& cal, const int32_t* fieldsToTest, UDate startDate, int32_t testDuration); 77 78 /** 79 * doLimitsTest with default test duration and fields 80 */ 81 void doLimitsTest(Calendar& cal, UDate startDate, int32_t endTime); 82 83 UnicodeString& ymdToString(const Calendar& cal, UnicodeString& str); 84 }; 85 86 #endif /* #if !UCONFIG_NO_FORMATTING */ 87 88 #endif // __CalendarLimitTest__ 89