From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 21939 invoked by alias); 5 Apr 2007 10:19:45 -0000 Received: (qmail 21927 invoked by uid 22791); 5 Apr 2007 10:19:42 -0000 X-Spam-Check-By: sourceware.org Received: from gbenson.demon.co.uk (HELO gbenson.demon.co.uk) (80.177.220.214) by sourceware.org (qpsmtpd/0.31) with ESMTP; Thu, 05 Apr 2007 11:19:37 +0100 Date: Thu, 05 Apr 2007 10:19:00 -0000 From: Gary Benson To: mauve-patches@sources.redhat.com Subject: FYI: GregorianCalendar day of week in month checks Message-ID: <20070405101933.GA25259@redhat.com> Mail-Followup-To: mauve-patches@sources.redhat.com Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="tKW2IUtsqtDRztdT" Content-Disposition: inline X-IsSubscribed: yes Mailing-List: contact mauve-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: mauve-patches-owner@sourceware.org X-SW-Source: 2007/txt/msg00018.txt.bz2 --tKW2IUtsqtDRztdT Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-length: 40 Hi all, Here be dragons. Cheers, Gary --tKW2IUtsqtDRztdT Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename=patch Content-length: 5229 Index: ChangeLog =================================================================== RCS file: /cvs/mauve/mauve/ChangeLog,v retrieving revision 1.2046 diff -u -r1.2046 ChangeLog --- ChangeLog 3 Apr 2007 13:04:25 -0000 1.2046 +++ ChangeLog 5 Apr 2007 10:18:05 -0000 @@ -1,3 +1,10 @@ +2007-04-05 Gary Benson + + * gnu/testlet/java/util/GregorianCalendar/first.java: + Remove "day one is in week one" checks. + * gnu/testlet/java/util/GregorianCalendar/dayOfWeekInMonth.java: + New test. + 2007-04-03 Gary Benson * gnu/testlet/java/util/Calendar/dstOffset.java: New test. Index: gnu/testlet/java/util/GregorianCalendar/first.java =================================================================== RCS file: /cvs/mauve/mauve/gnu/testlet/java/util/GregorianCalendar/first.java,v retrieving revision 1.2 diff -u -r1.2 first.java --- gnu/testlet/java/util/GregorianCalendar/first.java 2 Sep 2003 17:36:24 -0000 1.2 +++ gnu/testlet/java/util/GregorianCalendar/first.java 5 Apr 2007 10:18:05 -0000 @@ -27,8 +27,7 @@ import java.util.*; /** - * Checks that the first day of the month is day one and that the - * first week is week one. + * Checks that the first day of the month is day one. */ public class first implements Testlet { @@ -53,8 +52,6 @@ GregorianCalendar cal = new GregorianCalendar(year, month, 1); harness.check(cal.get(Calendar.DAY_OF_MONTH), 1, "day 1-" + month + "-" + year); - harness.check(cal.get(Calendar.WEEK_OF_MONTH), 1, - "week 1-" + month + "-" + year); } } } Index: gnu/testlet/java/util/GregorianCalendar/dayOfWeekInMonth.java =================================================================== RCS file: gnu/testlet/java/util/GregorianCalendar/dayOfWeekInMonth.java diff -N gnu/testlet/java/util/GregorianCalendar/dayOfWeekInMonth.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ gnu/testlet/java/util/GregorianCalendar/dayOfWeekInMonth.java 5 Apr 2007 10:18:05 -0000 @@ -0,0 +1,93 @@ +// Copyright (C) 2007 Red Hat, Inc. +// Written by Gary Benson +// Including some tests by Bryce McKinlay. + +// This file is part of Mauve. + +// Mauve is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2, or (at your option) +// any later version. + +// Mauve is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Mauve; see the file COPYING. If not, write to +// the Free Software Foundation, 59 Temple Place - Suite 330, +// Boston, MA 02111-1307, USA. + +// Tags: JDK1.1 + +package gnu.testlet.java.util.GregorianCalendar; + +import java.util.Calendar; +import java.util.GregorianCalendar; + +import gnu.testlet.Testlet; +import gnu.testlet.TestHarness; + +public class dayOfWeekInMonth implements Testlet +{ + public void test(TestHarness harness) + { + GregorianCalendar c = new GregorianCalendar(); + + // 31 day months whose first days are the specified weekdays + int testMonths[][] = + {{Calendar.JANUARY, 2007, Calendar.MONDAY}, + {Calendar.MAY, 2007, Calendar.TUESDAY}, + {Calendar.AUGUST, 2007, Calendar.WEDNESDAY}, + {Calendar.MARCH, 2007, Calendar.THURSDAY}, + {Calendar.DECEMBER, 2006, Calendar.FRIDAY}, + {Calendar.DECEMBER, 2007, Calendar.SATURDAY}, + {Calendar.JULY, 2007, Calendar.SUNDAY}}; + + for (int minimalDaysInFirstWeek = 1; + minimalDaysInFirstWeek <= 7; minimalDaysInFirstWeek++) { + + c.setMinimalDaysInFirstWeek(minimalDaysInFirstWeek); + + for (int firstDayOfWeek = Calendar.SUNDAY; + firstDayOfWeek <= Calendar.SATURDAY; firstDayOfWeek++) { + + c.setFirstDayOfWeek(firstDayOfWeek); + + for (int i = 0; i < testMonths.length; i++) { + int month = testMonths[i][0]; + int year = testMonths[i][1]; + int first = testMonths[i][2]; + + for (int day = 1; day <= 31; day++) { + c.set(year, month, day); + harness.check(c.get(Calendar.DAY_OF_WEEK_IN_MONTH) == (day+6) / 7); + + int dayOfWeek = c.get(Calendar.DAY_OF_WEEK); + if (day == 1) + harness.check(dayOfWeek == first); // sanity + + // which day of the week are we (0..6) relative to firstDayOfWeek + int relativeDayOfWeek = (7 + dayOfWeek - firstDayOfWeek) % 7; + + // which day of the week is the first of this month? + // nb 35 is the smallest multiple of 7 that ensures that + // the left hand side of the modulo operator is positive. + int relativeDayOfFirst = (relativeDayOfWeek - day + 1 + 35) % 7; + + // which week of the month is the first of this month in? + int weekOfFirst = + ((7 - relativeDayOfFirst) >= minimalDaysInFirstWeek) ? 1 : 0; + + // which week of the month is this day in? + int weekOfMonth = + (day + relativeDayOfFirst - 1) / 7 + weekOfFirst; + + harness.check(c.get(Calendar.WEEK_OF_MONTH) == weekOfMonth); + } + } + } + } + } +} --tKW2IUtsqtDRztdT--