CPPUNIT_ASSERT_EQUAL((d + 1) % 32, nextTime->tm_mday);
CPPUNIT_ASSERT_EQUAL(d % 31 + 1, nextTime->tm_mday);
	void testRC2()	{		RollingCalendar rc;		rc.setType(RollingCalendar::TOP_OF_HOUR);		TimeZonePtr timeZone = rc.getTimeZone();				putenv("TZ=");		tzset();				// jan, mar, may, july, aug, oct, dec have 31 days		int M31[] = { 0, 2, 4, 6, 7, 9, 11 };				for (int i = 0; i < sizeof(M31)/sizeof(M31[0]); i++)		{			for (int d = 1; d <= 31; d++)			{				for (int h = 0; h < 23; h++)				{					for (int m = 0; m <= 59; m++)					{						struct tm tm;						memset(&tm, 0, sizeof(tm));						tm.tm_year = 80;						tm.tm_mon = M31[i];						tm.tm_mday = d;						tm.tm_hour = h;						tm.tm_min = m;						tm.tm_sec = 12;												time_t buff = mktime(&tm);						int64_t t = int64_t(buff) * 1000;						t += 88;												bool dltState0 = timeZone->inDaylightTime(t);												t = rc.getNextCheckMillis(t);            			bool dltState1 = timeZone->inDaylightTime(t);						time_t n = (time_t)(t / 1000);						struct tm * nextTime = localtime(&n);						CPPUNIT_ASSERT(0 == (t % 1000));						CPPUNIT_ASSERT_EQUAL(0, nextTime->tm_sec);						CPPUNIT_ASSERT_EQUAL(0, nextTime->tm_min);												if (dltState0 == dltState1)						{							CPPUNIT_ASSERT_EQUAL((h + 1) % 24, nextTime->tm_hour);						} 						else 						{							// returning to standard time							if (dltState0) 							{								CPPUNIT_ASSERT_EQUAL(h, nextTime->tm_hour);							} 							else 							{								// switching to day light saving time							}						}						if (h == 23)						{							CPPUNIT_ASSERT_EQUAL((d + 1) % 32, nextTime->tm_mday);							if (d == 31)							{								CPPUNIT_ASSERT_EQUAL((M31[i] + 1) % 12, nextTime->tm_mon);							}							else							{								CPPUNIT_ASSERT_EQUAL(M31[i], nextTime->tm_mon);							}						} 						else						{							CPPUNIT_ASSERT_EQUAL(d, nextTime->tm_mday);							CPPUNIT_ASSERT_EQUAL(M31[i], nextTime->tm_mon);						}					}				}			}		}	}