/******************************************************************** * COPYRIGHT: * Copyright (c) 1997-1999, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ #ifndef __CalendarLimitTest__ #define __CalendarLimitTest__ #include "unicode/utypes.h" #include "caltztst.h" class Calendar; class DateFormat; /** * This test verifies the behavior of Calendar around the very earliest limits * which it can handle. It also verifies the behavior for large values of millis. * * Bug ID 4033662. */ class CalendarLimitTest: public CalendarTimeZoneTest { // IntlTest override void runIndexedTest( int32_t index, UBool exec, char* &name, char* par ); public: // package static const UDate EARLIEST_SUPPORTED_MILLIS; static const UDate LATEST_SUPPORTED_MILLIS; //test routine used by TestCalendarLimit virtual void test(UDate millis, Calendar *cal, DateFormat *fmt); static double nextDouble(double a); static double previousDouble(double a); static UBool withinErr(double a, double b, double err); public: // test behaviour and error reporting at boundaries of defined range virtual void TestCalendarLimit(void); public: // package /** * Locate the earliest limits which are correctly handled. * Used by TestCalendarLimit */ virtual void explore2(UDate expectedEarlyLimit); virtual void explore3(UDate expectedLateLimit); static UDate gregorianCutover; static const int32_t kEpochStartAsJulianDay; // January 1, 1970 (Gregorian) static const UDate kPapalCutover; static const int32_t kJan1_1JulianDay; static const int32_t kNumDays[]; static const int32_t kLeapNumDays[]; static const int32_t kMonthLength[]; static const int32_t kLeapMonthLength[]; static double millisToJulianDay(UDate millis); static double floorDivide(double numerator, double denominator); static int32_t floorDivide(int32_t numerator, int32_t denominator); static int32_t floorDivide(int32_t numerator, int32_t denominator, int32_t remainder[]); static int32_t floorDivide(double numerator, int32_t denominator, int32_t remainder[]); static int32_t julianDayOffset; static int32_t millisPerDay; static int32_t YEAR; static int32_t MONTH; static int32_t DATE; static UBool timeToFields(UDate millis, int32_t *fields); }; #endif // __CalendarLimitTest__