You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
92 lines
3.5 KiB
92 lines
3.5 KiB
4 months ago
|
// © 2016 and later: Unicode, Inc. and others.
|
||
|
// License & terms of use: http://www.unicode.org/copyright.html
|
||
|
/********************************************************************
|
||
|
* COPYRIGHT:
|
||
|
* Copyright (c) 1997-2015, International Business Machines Corporation and
|
||
|
* others. All Rights Reserved.
|
||
|
********************************************************************/
|
||
|
|
||
|
#ifndef __CalendarLimitTest__
|
||
|
#define __CalendarLimitTest__
|
||
|
|
||
|
#include "unicode/utypes.h"
|
||
|
|
||
|
#if !UCONFIG_NO_FORMATTING
|
||
|
|
||
|
#include "caltztst.h"
|
||
|
|
||
|
/**
|
||
|
* 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, const char* &name, char* par );
|
||
|
public: // package
|
||
|
//test routine used by TestCalendarLimit
|
||
|
virtual void test(UDate millis, Calendar *cal, DateFormat *fmt);
|
||
|
|
||
|
// bug 986c: deprecate nextDouble/previousDouble
|
||
|
//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 TestCalendarExtremeLimit(void);
|
||
|
|
||
|
void TestLimits(void);
|
||
|
void TestLimitsThread(int32_t threadNumber);
|
||
|
|
||
|
private:
|
||
|
/*
|
||
|
* Test the functions getMaximum/getGeratestMinimum logically correct.
|
||
|
* This method assumes day of week cycle is consistent.
|
||
|
* @param cal The calendar instance to be tested.
|
||
|
* @param leapMonth true if the calendar system has leap months
|
||
|
*/
|
||
|
void doTheoreticalLimitsTest(Calendar& cal, UBool leapMonth);
|
||
|
|
||
|
/*
|
||
|
* Test the functions getXxxMinimum() and getXxxMaximum() by marching a
|
||
|
* test calendar 'cal' through 'numberOfDays' sequential days starting
|
||
|
* with 'startDate'. For each date, read a field value along with its
|
||
|
* reported actual minimum and actual maximum. These values are
|
||
|
* checked against one another as well as against getMinimum(),
|
||
|
* getGreatestMinimum(), getLeastMaximum(), and getMaximum(). We
|
||
|
* expect to see:
|
||
|
*
|
||
|
* 1. minimum <= actualMinimum <= greatestMinimum <=
|
||
|
* leastMaximum <= actualMaximum <= maximum
|
||
|
*
|
||
|
* 2. actualMinimum <= value <= actualMaximum
|
||
|
*
|
||
|
* Note: In addition to outright failures, this test reports some
|
||
|
* results as warnings. These are not generally of concern, but they
|
||
|
* should be evaluated by a human. To see these, run this test in
|
||
|
* verbose mode.
|
||
|
* @param cal the calendar to be tested
|
||
|
* @param fieldsToTest an array of field values to be tested, e.g., new
|
||
|
* int[] { UCAL_MONTH, UCAL_DAY_OF_MONTH }. It only makes
|
||
|
* sense to test the day fields; the time fields are not tested by this
|
||
|
* method. If null, then test all standard fields.
|
||
|
* @param startDate the first date to test
|
||
|
* @param testDuration if positive, the number of days to be tested.
|
||
|
* If negative, the number of seconds to run the test.
|
||
|
*/
|
||
|
void doLimitsTest(Calendar& cal, const int32_t* fieldsToTest, UDate startDate, int32_t testDuration);
|
||
|
|
||
|
/**
|
||
|
* doLimitsTest with default test duration and fields
|
||
|
*/
|
||
|
void doLimitsTest(Calendar& cal, UDate startDate, int32_t endTime);
|
||
|
|
||
|
UnicodeString& ymdToString(const Calendar& cal, UnicodeString& str);
|
||
|
};
|
||
|
|
||
|
#endif /* #if !UCONFIG_NO_FORMATTING */
|
||
|
|
||
|
#endif // __CalendarLimitTest__
|