/*
* Copyright (c) 2001, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code 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
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @bug 4409072
* @summary tests for set(), add(), and roll() with various week parameters.
* @library /java/text/testlib
* @run main bug4409072
*/
import java.util.*;
import static java.util.Calendar.*;
public class bug4409072 extends IntlTest {
public static void main(String[] args) throws Exception {
new bug4409072().run(args);
}
/* Confirm some public methods' behavior in Calendar.
* (e.g. add(), roll(), set())
*/
public void Test4409072() {
Locale locale = Locale.getDefault();
if (!TestUtils.usesGregorianCalendar(locale)) {
logln("Skipping this test because locale is " + locale);
return ;
}
Locale savedLocale = Locale.getDefault();
TimeZone savedTZ = TimeZone.getDefault();
try {
TimeZone.setDefault(TimeZone.getTimeZone("GMT" ));
testSet();
testAdd();
testRoll();
} finally {
TimeZone.setDefault(savedTZ);
Locale.setDefault(savedLocale);
}
}
/*
* Golden data for set() test
*/
static final int [][][] resultWOMForSetTest = {
{ /* For year1998 */
/* Min = 1 2 3 4 5 6 7 */
/* Sun */ {11, 4}, {11, 4}, {11, 4}, {11, 4}, {11, 4}, {11,11}, {11,11},
/* Mon */ {11, 4}, {11, 4}, {11, 4}, {11, 4}, {11, 4}, {11, 4}, {11,11},
/* Tue */ {11, 4}, {11, 4}, {11, 4}, {11, 4}, {11, 4}, {11, 4}, {11, 4},
/* Wed */ {10,27}, {11, 4}, {11, 4}, {11, 4}, {11, 4}, {11, 4}, {11, 4},
/* Thu */ {10,27}, {10,27}, {11, 4}, {11, 4}, {11, 4}, {11, 4}, {11, 4},
/* Fri */ {10,27}, {10,27}, {10,27}, {11, 4}, {11, 4}, {11, 4}, {11, 4},
/* Sat */ {11, 4}, {11, 4}, {11, 4}, {11, 4}, {11,11}, {11,11}, {11,11},
},
{ /* For year1999 */
/* Min = 1 2 3 4 5 6 7 */
/* Sun */ {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11,10}, {11,10}, {11,10},
/* Mon */ {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11,10}, {11,10},
/* Tue */ {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11,10},
/* Wed */ {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11, 3},
/* Thu */ {10,26}, {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11, 3},
/* Fri */ {10,26}, {10,26}, {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11, 3},
/* Sat */ {11, 3}, {11, 3}, {11, 3}, {11,10}, {11,10}, {11,10}, {11,10},
},
{ /* For year2000 */
/* Min = 1 2 3 4 5 6 7 */
/* Sun */ {11, 1}, {11, 1}, {11, 8}, {11, 8}, {11, 8}, {11, 8}, {11, 8},
/* Mon */ {11, 1}, {11, 1}, {11, 1}, {11, 8}, {11, 8}, {11, 8}, {11, 8},
/* Tue */ {11, 1}, {11, 1}, {11, 1}, {11, 1}, {11, 8}, {11, 8}, {11, 8},
/* Wed */ {11, 1}, {11, 1}, {11, 1}, {11, 1}, {11, 1}, {11, 8}, {11, 8},
/* Thu */ {11, 1}, {11, 1}, {11, 1}, {11, 1}, {11, 1}, {11, 1}, {11, 8},
/* Fri */ {11, 1}, {11, 1}, {11, 1}, {11, 1}, {11, 1}, {11, 1}, {11, 1},
/* Sat */ {11, 1}, {11, 8}, {11, 8}, {11, 8}, {11, 8}, {11, 8}, {11, 8},
},
{ /* For year2001 */
/* Min = 1 2 3 4 5 6 7 */
/* Sun */ {10,30}, {11, 7}, {11, 7}, {11, 7}, {11, 7}, {11, 7}, {11, 7},
/* Mon */ {10,30}, {10,30}, {11, 7}, {11, 7}, {11, 7}, {11, 7}, {11, 7},
/* Tue */ {10,30}, {10,30}, {10,30}, {11, 7}, {11, 7}, {11, 7}, {11, 7},
/* Wed */ {10,30}, {10,30}, {10,30}, {10,30}, {11, 7}, {11, 7}, {11, 7},
/* Thu */ {10,30}, {10,30}, {10,30}, {10,30}, {10,30}, {11, 7}, {11, 7},
/* Fri */ {10,30}, {10,30}, {10,30}, {10,30}, {10,30}, {10,30}, {11, 7},
/* Sat */ {11, 7}, {11, 7}, {11, 7}, {11, 7}, {11, 7}, {11, 7}, {11, 7},
},
{ /* For year2002 */
/* Min = 1 2 3 4 5 6 7 */
/* Sun */ {11, 6}, {11, 6}, {11, 6}, {11, 6}, {11, 6}, {11, 6}, {11, 6},
/* Mon */ {10,29}, {11, 6}, {11, 6}, {11, 6}, {11, 6}, {11, 6}, {11, 6},
/* Tue */ {10,29}, {10,29}, {11, 6}, {11, 6}, {11, 6}, {11, 6}, {11, 6},
/* Wed */ {10,29}, {10,29}, {10,29}, {11, 6}, {11, 6}, {11, 6}, {11, 6},
/* Thu */ {10,29}, {10,29}, {10,29}, {10,29}, {11, 6}, {11, 6}, {11, 6},
/* Fri */ {10,29}, {10,29}, {10,29}, {10,29}, {10,29}, {11, 6}, {11, 6},
/* Sat */ {11, 6}, {11, 6}, {11, 6}, {11, 6}, {11, 6}, {11, 6}, {11,13},
},
{ /* For year2003 */
/* Min = 1 2 3 4 5 6 7 */
/* Sun */ {11, 5}, {11, 5}, {11, 5}, {11, 5}, {11, 5}, {11, 5}, {11,12},
/* Mon */ {11, 5}, {11, 5}, {11, 5}, {11, 5}, {11, 5}, {11, 5}, {11, 5},
/* Tue */ {10,28}, {11, 5}, {11, 5}, {11, 5}, {11, 5}, {11, 5}, {11, 5},
/* Wed */ {10,28}, {10,28}, {11, 5}, {11, 5}, {11, 5}, {11, 5}, {11, 5},
/* Thu */ {10,28}, {10,28}, {10,28}, {11, 5}, {11, 5}, {11, 5}, {11, 5},
/* Fri */ {10,28}, {10,28}, {10,28}, {10,28}, {11, 5}, {11, 5}, {11, 5},
/* Sat */ {11, 5}, {11, 5}, {11, 5}, {11, 5}, {11, 5}, {11,12}, {11,12},
},
{ /* For year2004 */
/* Min = 1 2 3 4 5 6 7 */
/* Sun */ {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11,10}, {11,10}, {11,10},
/* Mon */ {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11,10}, {11,10},
/* Tue */ {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11,10},
/* Wed */ {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11, 3},
/* Thu */ {10,26}, {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11, 3},
/* Fri */ {10,26}, {10,26}, {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11, 3},
/* Sat */ {11, 3}, {11, 3}, {11, 3}, {11,10}, {11,10}, {11,10}, {11,10},
},
{ /* For year2005 */
/* Min = 1 2 3 4 5 6 7 */
/* Sun */ {11, 2}, {11, 2}, {11, 2}, {11, 9}, {11, 9}, {11, 9}, {11, 9},
/* Mon */ {11, 2}, {11, 2}, {11, 2}, {11, 2}, {11, 9}, {11, 9}, {11, 9},
/* Tue */ {11, 2}, {11, 2}, {11, 2}, {11, 2}, {11, 2}, {11, 9}, {11, 9},
/* Wed */ {11, 2}, {11, 2}, {11, 2}, {11, 2}, {11, 2}, {11, 2}, {11, 9},
/* Thu */ {11, 2}, {11, 2}, {11, 2}, {11, 2}, {11, 2}, {11, 2}, {11, 2},
/* Fri */ {10,25}, {11, 2}, {11, 2}, {11, 2}, {11, 2}, {11, 2}, {11, 2},
/* Sat */ {11, 2}, {11, 2}, {11, 9}, {11, 9}, {11, 9}, {11, 9}, {11, 9},
},
{ /* For year2006 */
/* Min = 1 2 3 4 5 6 7 */
/* Sun */ {11, 1}, {11, 1}, {11, 8}, {11, 8}, {11, 8}, {11, 8}, {11, 8},
/* Mon */ {11, 1}, {11, 1}, {11, 1}, {11, 8}, {11, 8}, {11, 8}, {11, 8},
/* Tue */ {11, 1}, {11, 1}, {11, 1}, {11, 1}, {11, 8}, {11, 8}, {11, 8},
/* Wed */ {11, 1}, {11, 1}, {11, 1}, {11, 1}, {11, 1}, {11, 8}, {11, 8},
/* Thu */ {11, 1}, {11, 1}, {11, 1}, {11, 1}, {11, 1}, {11, 1}, {11, 8},
/* Fri */ {11, 1}, {11, 1}, {11, 1}, {11, 1}, {11, 1}, {11, 1}, {11, 1},
/* Sat */ {11, 1}, {11, 8}, {11, 8}, {11, 8}, {11, 8}, {11, 8}, {11, 8},
},
};
static final int [][][] resultWOYForSetTest1 = {
{ /* For year1998 */
/* FirstDayOfWeek = Sunday */
{1998 , 0 , 2 }, {1998 , 0 , 2 }, {1998 , 0 , 2 }, {1998 , 0 , 9 },
{1998 , 0 , 9 }, {1998 , 0 , 9 }, {1998 , 0 , 9 },
/* FirstDayOfWeek = Monday */
{1998 , 0 , 2 }, {1998 , 0 , 2 }, {1998 , 0 , 2 }, {1998 , 0 , 2 },
{1998 , 0 , 9 }, {1998 , 0 , 9 }, {1998 , 0 , 9 },
/* FirstDayOfWeek = Tuesday */
{1998 , 0 , 2 }, {1998 , 0 , 2 }, {1998 , 0 , 2 }, {1998 , 0 , 2 },
{1998 , 0 , 2 }, {1998 , 0 , 9 }, {1998 , 0 , 9 },
/* FirstDayOfWeek = Wednesday */
{1998 , 0 , 2 }, {1998 , 0 , 2 }, {1998 , 0 , 2 }, {1998 , 0 , 2 },
{1998 , 0 , 2 }, {1998 , 0 , 2 }, {1998 , 0 , 9 },
/* FirstDayOfWeek = Thursday */
{1998 , 0 , 2 }, {1998 , 0 , 2 }, {1998 , 0 , 2 }, {1998 , 0 , 2 },
{1998 , 0 , 2 }, {1998 , 0 , 2 }, {1998 , 0 , 2 },
/* FirstDayOfWeek = Friday */
{1997 ,11 ,26 }, {1998 , 0 , 2 }, {1998 , 0 , 2 }, {1998 , 0 , 2 },
{1998 , 0 , 2 }, {1998 , 0 , 2 }, {1998 , 0 , 2 },
/* FirstDayOfWeek = Saturday */
{1998 , 0 , 2 }, {1998 , 0 , 2 }, {1998 , 0 , 9 }, {1998 , 0 , 9 },
{1998 , 0 , 9 }, {1998 , 0 , 9 }, {1998 , 0 , 9 },
},
{ /* For year1999 */
/* FirstDayOfWeek = Sunday */
{1999 , 0 , 1 }, {1999 , 0 , 1 }, {1999 , 0 , 8 }, {1999 , 0 , 8 },
{1999 , 0 , 8 }, {1999 , 0 , 8 }, {1999 , 0 , 8 },
/* FirstDayOfWeek = Monday */
{1999 , 0 , 1 }, {1999 , 0 , 1 }, {1999 , 0 , 1 }, {1999 , 0 , 8 },
{1999 , 0 , 8 }, {1999 , 0 , 8 }, {1999 , 0 , 8 },
/* FirstDayOfWeek = Tuesday */
{1999 , 0 , 1 }, {1999 , 0 , 1 }, {1999 , 0 , 1 }, {1999 , 0 , 1 },
{1999 , 0 , 8 }, {1999 , 0 , 8 }, {1999 , 0 , 8 },
/* FirstDayOfWeek = Wednesday */
{1999 , 0 , 1 }, {1999 , 0 , 1 }, {1999 , 0 , 1 }, {1999 , 0 , 1 },
{1999 , 0 , 1 }, {1999 , 0 , 8 }, {1999 , 0 , 8 },
/* FirstDayOfWeek = Thursday */
{1999 , 0 , 1 }, {1999 , 0 , 1 }, {1999 , 0 , 1 }, {1999 , 0 , 1 },
{1999 , 0 , 1 }, {1999 , 0 , 1 }, {1999 , 0 , 8 },
/* FirstDayOfWeek = Friday */
{1999 , 0 , 1 }, {1999 , 0 , 1 }, {1999 , 0 , 1 }, {1999 , 0 , 1 },
{1999 , 0 , 1 }, {1999 , 0 , 1 }, {1999 , 0 , 1 },
/* FirstDayOfWeek = Saturday */
{1999 , 0 , 1 }, {1999 , 0 , 8 }, {1999 , 0 , 8 }, {1999 , 0 , 8 },
{1999 , 0 , 8 }, {1999 , 0 , 8 }, {1999 , 0 , 8 },
},
{ /* For year2000 */
/* FirstDayOfWeek = Sunday */
{1999 ,11 ,31 }, {2000 , 0 , 7 }, {2000 , 0 , 7 }, {2000 , 0 , 7 },
{2000 , 0 , 7 }, {2000 , 0 , 7 }, {2000 , 0 , 7 },
/* FirstDayOfWeek = Monday */
{1999 ,11 ,31 }, {1999 ,11 ,31 }, {2000 , 0 , 7 }, {2000 , 0 , 7 },
{2000 , 0 , 7 }, {2000 , 0 , 7 }, {2000 , 0 , 7 },
/* FirstDayOfWeek = Tuesday */
{1999 ,11 ,31 }, {1999 ,11 ,31 }, {1999 ,11 ,31 }, {2000 , 0 , 7 },
{2000 , 0 , 7 }, {2000 , 0 , 7 }, {2000 , 0 , 7 },
/* FirstDayOfWeek = Wednesday */
{1999 ,11 ,31 }, {1999 ,11 ,31 }, {1999 ,11 ,31 }, {1999 ,11 ,31 },
{2000 , 0 , 7 }, {2000 , 0 , 7 }, {2000 , 0 , 7 },
/* FirstDayOfWeek = Thursday */
{1999 ,11 ,31 }, {1999 ,11 ,31 }, {1999 ,11 ,31 }, {1999 ,11 ,31 },
{1999 ,11 ,31 }, {2000 , 0 , 7 }, {2000 , 0 , 7 },
/* FirstDayOfWeek = Friday */
{1999 ,11 ,31 }, {1999 ,11 ,31 }, {1999 ,11 ,31 }, {1999 ,11 ,31 },
{1999 ,11 ,31 }, {1999 ,11 ,31 }, {2000 , 0 , 7 },
/* FirstDayOfWeek = Saturday */
{2000 , 0 , 7 }, {2000 , 0 , 7 }, {2000 , 0 , 7 }, {2000 , 0 , 7 },
{2000 , 0 , 7 }, {2000 , 0 , 7 }, {2000 , 0 , 7 },
},
{ /* For year2001 */
/* FirstDayOfWeek = Sunday */
{2001 , 0 , 5 }, {2001 , 0 , 5 }, {2001 , 0 , 5 }, {2001 , 0 , 5 },
{2001 , 0 , 5 }, {2001 , 0 , 5 }, {2001 , 0 ,12 },
/* FirstDayOfWeek = Monday */
{2001 , 0 , 5 }, {2001 , 0 , 5 }, {2001 , 0 , 5 }, {2001 , 0 , 5 },
{2001 , 0 , 5 }, {2001 , 0 , 5 }, {2001 , 0 , 5 },
/* FirstDayOfWeek = Tuesday */
{2000 ,11 ,29 }, {2001 , 0 , 5 }, {2001 , 0 , 5 }, {2001 , 0 , 5 },
{2001 , 0 , 5 }, {2001 , 0 , 5 }, {2001 , 0 , 5 },
/* FirstDayOfWeek = Wednesday */
{2000 ,11 ,29 }, {2000 ,11 ,29 }, {2001 , 0 , 5 }, {2001 , 0 , 5 },
{2001 , 0 , 5 }, {2001 , 0 , 5 }, {2001 , 0 , 5 },
/* FirstDayOfWeek = Thursday */
{2000 ,11 ,29 }, {2000 ,11 ,29 }, {2000 ,11 ,29 }, {2001 , 0 , 5 },
{2001 , 0 , 5 }, {2001 , 0 , 5 }, {2001 , 0 , 5 },
/* FirstDayOfWeek = Friday */
{2000 ,11 ,29 }, {2000 ,11 ,29 }, {2000 ,11 ,29 }, {2000 ,11 ,29 },
{2001 , 0 , 5 }, {2001 , 0 , 5 }, {2001 , 0 , 5 },
/* FirstDayOfWeek = Saturday */
{2001 , 0 , 5 }, {2001 , 0 , 5 }, {2001 , 0 , 5 }, {2001 , 0 , 5 },
{2001 , 0 , 5 }, {2001 , 0 ,12 }, {2001 , 0 ,12 },
},
{ /* For year2002 */
/* FirstDayOfWeek = Sunday */
{2002 , 0 , 4 }, {2002 , 0 , 4 }, {2002 , 0 , 4 }, {2002 , 0 , 4 },
{2002 , 0 , 4 }, {2002 , 0 ,11 }, {2002 , 0 ,11 },
/* FirstDayOfWeek = Monday */
{2002 , 0 , 4 }, {2002 , 0 , 4 }, {2002 , 0 , 4 }, {2002 , 0 , 4 },
{2002 , 0 , 4 }, {2002 , 0 , 4 }, {2002 , 0 ,11 },
/* FirstDayOfWeek = Tuesday */
{2002 , 0 , 4 }, {2002 , 0 , 4 }, {2002 , 0 , 4 }, {2002 , 0 , 4 },
{2002 , 0 , 4 }, {2002 , 0 , 4 }, {2002 , 0 , 4 },
/* FirstDayOfWeek = Wednesday */
{2001 ,11 ,28 }, {2002 , 0 , 4 }, {2002 , 0 , 4 }, {2002 , 0 , 4 },
{2002 , 0 , 4 }, {2002 , 0 , 4 }, {2002 , 0 , 4 },
/* FirstDayOfWeek = Thursday */
{2001 ,11 ,28 }, {2001 ,11 ,28 }, {2002 , 0 , 4 }, {2002 , 0 , 4 },
{2002 , 0 , 4 }, {2002 , 0 , 4 }, {2002 , 0 , 4 },
/* FirstDayOfWeek = Friday */
{2001 ,11 ,28 }, {2001 ,11 ,28 }, {2001 ,11 ,28 }, {2002 , 0 , 4 },
{2002 , 0 , 4 }, {2002 , 0 , 4 }, {2002 , 0 , 4 },
/* FirstDayOfWeek = Saturday */
{2002 , 0 , 4 }, {2002 , 0 , 4 }, {2002 , 0 , 4 }, {2002 , 0 , 4 },
{2002 , 0 ,11 }, {2002 , 0 ,11 }, {2002 , 0 ,11 },
},
{ /* For year2003 */
/* FirstDayOfWeek = Sunday */
{2003 , 0 , 3 }, {2003 , 0 , 3 }, {2003 , 0 , 3 }, {2003 , 0 , 3 },
{2003 , 0 ,10 }, {2003 , 0 ,10 }, {2003 , 0 ,10 },
/* FirstDayOfWeek = Monday */
{2003 , 0 , 3 }, {2003 , 0 , 3 }, {2003 , 0 , 3 }, {2003 , 0 , 3 },
{2003 , 0 , 3 }, {2003 , 0 ,10 }, {2003 , 0 ,10 },
/* FirstDayOfWeek = Tuesday */
{2003 , 0 , 3 }, {2003 , 0 , 3 }, {2003 , 0 , 3 }, {2003 , 0 , 3 },
{2003 , 0 , 3 }, {2003 , 0 , 3 }, {2003 , 0 ,10 },
/* FirstDayOfWeek = Wednesday */
{2003 , 0 , 3 }, {2003 , 0 , 3 }, {2003 , 0 , 3 }, {2003 , 0 , 3 },
{2003 , 0 , 3 }, {2003 , 0 , 3 }, {2003 , 0 , 3 },
/* FirstDayOfWeek = Thursday */
{2002 ,11 ,27 }, {2003 , 0 , 3 }, {2003 , 0 , 3 }, {2003 , 0 , 3 },
{2003 , 0 , 3 }, {2003 , 0 , 3 }, {2003 , 0 , 3 },
/* FirstDayOfWeek = Friday */
{2002 ,11 ,27 }, {2002 ,11 ,27 }, {2003 , 0 , 3 }, {2003 , 0 , 3 },
{2003 , 0 , 3 }, {2003 , 0 , 3 }, {2003 , 0 , 3 },
/* FirstDayOfWeek = Saturday */
{2003 , 0 , 3 }, {2003 , 0 , 3 }, {2003 , 0 , 3 }, {2003 , 0 ,10 },
{2003 , 0 ,10 }, {2003 , 0 ,10 }, {2003 , 0 ,10 },
},
{ /* For year2004 */
/* FirstDayOfWeek = Sunday */
{2004 , 0 , 2 }, {2004 , 0 , 2 }, {2004 , 0 , 2 }, {2004 , 0 , 9 },
{2004 , 0 , 9 }, {2004 , 0 , 9 }, {2004 , 0 , 9 },
/* FirstDayOfWeek = Monday */
{2004 , 0 , 2 }, {2004 , 0 , 2 }, {2004 , 0 , 2 }, {2004 , 0 , 2 },
{2004 , 0 , 9 }, {2004 , 0 , 9 }, {2004 , 0 , 9 },
/* FirstDayOfWeek = Tuesday */
{2004 , 0 , 2 }, {2004 , 0 , 2 }, {2004 , 0 , 2 }, {2004 , 0 , 2 },
{2004 , 0 , 2 }, {2004 , 0 , 9 }, {2004 , 0 , 9 },
/* FirstDayOfWeek = Wednesday */
{2004 , 0 , 2 }, {2004 , 0 , 2 }, {2004 , 0 , 2 }, {2004 , 0 , 2 },
{2004 , 0 , 2 }, {2004 , 0 , 2 }, {2004 , 0 , 9 },
/* FirstDayOfWeek = Thursday */
{2004 , 0 , 2 }, {2004 , 0 , 2 }, {2004 , 0 , 2 }, {2004 , 0 , 2 },
{2004 , 0 , 2 }, {2004 , 0 , 2 }, {2004 , 0 , 2 },
/* FirstDayOfWeek = Friday */
{2003 ,11 ,26 }, {2004 , 0 , 2 }, {2004 , 0 , 2 }, {2004 , 0 , 2 },
{2004 , 0 , 2 }, {2004 , 0 , 2 }, {2004 , 0 , 2 },
/* FirstDayOfWeek = Saturday */
{2004 , 0 , 2 }, {2004 , 0 , 2 }, {2004 , 0 , 9 }, {2004 , 0 , 9 },
{2004 , 0 , 9 }, {2004 , 0 , 9 }, {2004 , 0 , 9 },
},
{ /* For year2005 */
/* FirstDayOfWeek = Sunday */
{2004 ,11 ,31 }, {2005 , 0 , 7 }, {2005 , 0 , 7 }, {2005 , 0 , 7 },
{2005 , 0 , 7 }, {2005 , 0 , 7 }, {2005 , 0 , 7 },
/* FirstDayOfWeek = Monday */
{2004 ,11 ,31 }, {2004 ,11 ,31 }, {2005 , 0 , 7 }, {2005 , 0 , 7 },
{2005 , 0 , 7 }, {2005 , 0 , 7 }, {2005 , 0 , 7 },
/* FirstDayOfWeek = Tuesday */
{2004 ,11 ,31 }, {2004 ,11 ,31 }, {2004 ,11 ,31 }, {2005 , 0 , 7 },
{2005 , 0 , 7 }, {2005 , 0 , 7 }, {2005 , 0 , 7 },
/* FirstDayOfWeek = Wednesday */
{2004 ,11 ,31 }, {2004 ,11 ,31 }, {2004 ,11 ,31 }, {2004 ,11 ,31 },
{2005 , 0 , 7 }, {2005 , 0 , 7 }, {2005 , 0 , 7 },
/* FirstDayOfWeek = Thursday */
{2004 ,11 ,31 }, {2004 ,11 ,31 }, {2004 ,11 ,31 }, {2004 ,11 ,31 },
{2004 ,11 ,31 }, {2005 , 0 , 7 }, {2005 , 0 , 7 },
/* FirstDayOfWeek = Friday */
{2004 ,11 ,31 }, {2004 ,11 ,31 }, {2004 ,11 ,31 }, {2004 ,11 ,31 },
{2004 ,11 ,31 }, {2004 ,11 ,31 }, {2005 , 0 , 7 },
/* FirstDayOfWeek = Saturday */
{2005 , 0 , 7 }, {2005 , 0 , 7 }, {2005 , 0 , 7 }, {2005 , 0 , 7 },
{2005 , 0 , 7 }, {2005 , 0 , 7 }, {2005 , 0 , 7 },
},
{ /* For year2006 */
/* FirstDayOfWeek = Sunday */
{2006 , 0 , 6 }, {2006 , 0 , 6 }, {2006 , 0 , 6 }, {2006 , 0 , 6 },
{2006 , 0 , 6 }, {2006 , 0 , 6 }, {2006 , 0 , 6 },
/* FirstDayOfWeek = Monday */
{2005 ,11 ,30 }, {2006 , 0 , 6 }, {2006 , 0 , 6 }, {2006 , 0 , 6 },
{2006 , 0 , 6 }, {2006 , 0 , 6 }, {2006 , 0 , 6 },
/* FirstDayOfWeek = Tuesday */
{2005 ,11 ,30 }, {2005 ,11 ,30 }, {2006 , 0 , 6 }, {2006 , 0 , 6 },
{2006 , 0 , 6 }, {2006 , 0 , 6 }, {2006 , 0 , 6 },
/* FirstDayOfWeek = Wednesday */
{2005 ,11 ,30 }, {2005 ,11 ,30 }, {2005 ,11 ,30 }, {2006 , 0 , 6 },
{2006 , 0 , 6 }, {2006 , 0 , 6 }, {2006 , 0 , 6 },
/* FirstDayOfWeek = Thursday */
{2005 ,11 ,30 }, {2005 ,11 ,30 }, {2005 ,11 ,30 }, {2005 ,11 ,30 },
{2006 , 0 , 6 }, {2006 , 0 , 6 }, {2006 , 0 , 6 },
/* FirstDayOfWeek = Friday */
{2005 ,11 ,30 }, {2005 ,11 ,30 }, {2005 ,11 ,30 }, {2005 ,11 ,30 },
{2005 ,11 ,30 }, {2006 , 0 , 6 }, {2006 , 0 , 6 },
/* FirstDayOfWeek = Saturday */
{2006 , 0 , 6 }, {2006 , 0 , 6 }, {2006 , 0 , 6 }, {2006 , 0 , 6 },
{2006 , 0 , 6 }, {2006 , 0 , 6 }, {2006 , 0 ,13 },
}
};
static final int [][] resultWOYForSetTest2 = {
/* Min = 1 2 3 4 5 6 7 */
/* Sun */ {4,25}, {5, 1}, {5, 1}, {5, 1}, {5, 1}, {5, 1}, {5, 1},
/* Mon */ {4,25}, {4,25}, {5, 1}, {5, 1}, {5, 1}, {5, 1}, {5, 1},
/* Tue */ {4,25}, {4,25}, {4,25}, {5, 1}, {5, 1}, {5, 1}, {5, 1},
/* Wed */ {4,25}, {4,25}, {4,25}, {4,25}, {5, 1}, {5, 1}, {5, 1},
/* Thu */ {5, 1}, {5, 1}, {5, 1}, {5, 1}, {5, 1}, {5, 8}, {5, 8},
/* Fri */ {5, 1}, {5, 1}, {5, 1}, {5, 1}, {5, 1}, {5, 1}, {5, 8},
/* Sat */ {5, 1}, {5, 1}, {5, 1}, {5, 1}, {5, 1}, {5, 1}, {5, 1},
};
/**
* Test for set()
*/
void testSet() {
boolean noerror = true ;
Calendar cal = Calendar.getInstance();
int sYear=1998 ;
int eYear=2006 ;
// Loop for FirstDayOfWeek: SUNDAY..SATURDAY
for (int dow = SUNDAY; dow <= SATURDAY; dow++) {
// Loop for MinimalDaysInFirstWeek: 1..7
for (int minDow = 1 ; minDow <= 7 ; minDow++) {
int index = (dow-1 )*7 + (minDow-1 );
cal.clear();
cal.setLenient(true );
cal.setMinimalDaysInFirstWeek(minDow);
cal.setFirstDayOfWeek(dow);
cal.set(YEAR, 2005 );
cal.set(DAY_OF_WEEK, WEDNESDAY);
cal.set(WEEK_OF_YEAR, 22 );
int y = 2005 ;
int m = resultWOYForSetTest2[index][0 ];
int d = resultWOYForSetTest2[index][1 ];
int year = cal.get(YEAR);
int month = cal.get(MONTH);
int date = cal.get(DATE);
if (cal.get(WEEK_OF_YEAR) != 22 ) {
noerror = false ;
errln("Failed : set(WEEK_OF_YEAR=22)" +
" *** get(WEEK_OF_YEAR=" +
cal.get(WEEK_OF_YEAR) + ")" +
", got " + (month+1 )+"/" +date+"/" +year +
", expected " + (m+1 )+"/" +d+"/" +2005 +
", MinFirstDOW=" + minDow +
", FirstDOW=" + dow);
} else if ((year != y) || (month != m) || (date != d)) {
noerror = false ;
errln("Failed : set(WEEK_OF_YEAR=22)" +
" got " + (month+1 )+"/" +date+"/" +year +
", expected " + (m+1 )+"/" +d+"/" +y +
", MinFirstDOW=" + minDow +
", FirstDOW=" + dow);
}
for (int targetYear = sYear; targetYear<= eYear; targetYear++) {
cal.clear();
cal.setLenient(true );
cal.setMinimalDaysInFirstWeek(minDow);
cal.setFirstDayOfWeek(dow);
cal.set(YEAR, targetYear);
cal.set(DAY_OF_WEEK, FRIDAY);
cal.set(MONTH, DECEMBER);
cal.set(WEEK_OF_MONTH, 1 );
y = targetYear;
m = resultWOMForSetTest[targetYear-sYear][index][0 ];
d = resultWOMForSetTest[targetYear-sYear][index][1 ];
year = cal.get(YEAR);
month = cal.get(MONTH);
date = cal.get(DATE);
if ((year != y) || (month != m) || (date != d)) {
noerror = false ;
errln("Failed : set(WEEK_OF_MONTH=1)" +
" got " + (month+1 )+"/" +date+"/" +year +
", expected " + (m+1 )+"/" +d+"/" +y +
", MinFirstDOW=" + minDow +
", FirstDOW=" + dow);
}
cal.clear();
cal.setLenient(true );
cal.setMinimalDaysInFirstWeek(minDow);
cal.setFirstDayOfWeek(dow);
cal.set(YEAR, targetYear);
cal.set(DAY_OF_WEEK, FRIDAY);
cal.set(WEEK_OF_YEAR, 1 );
y = resultWOYForSetTest1[targetYear-sYear][index][0 ];
m = resultWOYForSetTest1[targetYear-sYear][index][1 ];
d = resultWOYForSetTest1[targetYear-sYear][index][2 ];
year = cal.get(YEAR);
month = cal.get(MONTH);
date = cal.get(DATE);
if (cal.get(WEEK_OF_YEAR) != 1 ) {
noerror = false ;
errln("Failed : set(WEEK_OF_YEAR=1)" +
" *** get(WEEK_OF_YEAR=" +
cal.get(WEEK_OF_YEAR) + ")" +
", got " + (month+1 )+"/" +date+"/" +year +
", expected " + (m+1 )+"/" +d+"/" +y +
", MinFirstDOW=" + minDow +
", FirstDOW=" + dow);
} else if ((year != y) || (month != m) || (date != d)) {
noerror = false ;
errln("Failed : set(WEEK_OF_YEAR=1)" +
" got " + (month+1 )+"/" +date+"/" +year +
", expected " + (m+1 )+"/" +d+"/" +y +
", MinFirstDOW=" + minDow +
", FirstDOW=" + dow);
}
}
}
}
if (noerror) {
logln("Passed : set() test" );
}
}
/**
* Test for add()
*/
void testAdd() {
boolean noerror = true ;
Calendar cal = Calendar.getInstance();
// Loop for FirstDayOfWeek: SUNDAY..SATURDAY
for (int dow = SUNDAY; dow <= SATURDAY; dow++) {
// Loop for MinimalDaysInFirstWeek: 1..7
for (int minDow = 1 ; minDow <= 7 ; minDow++) {
int oldWOY, newWOY;
cal.clear();
cal.setLenient(true );
cal.setMinimalDaysInFirstWeek(minDow);
cal.setFirstDayOfWeek(dow);
cal.set(2005 , DECEMBER, 7 );
oldWOY = cal.get(WEEK_OF_YEAR);
for (int cnt = 0 ; cnt < 7 ; cnt++) {
cal.add(WEEK_OF_YEAR, 1 );
}
int year = cal.get(YEAR);
int month = cal.get(MONTH);
int date = cal.get(DATE);
if ((year != 2006 ) || (month != 0 ) || (date != 25 )) {
noerror = false ;
errln("Failed : add(WEEK_OF_YEAR+1)" +
" got " + (month+1 )+"/" +date+"/" +year +
", expected 1/25/2006" +
", MinFirstDOW=" + minDow +
", FirstDOW=" + dow);
}
for (int cnt = 0 ; cnt < 10 ; cnt++) {
cal.add(WEEK_OF_YEAR, -1 );
}
newWOY = cal.get(WEEK_OF_YEAR);
year = cal.get(YEAR);
month = cal.get(MONTH);
date = cal.get(DATE);
if ((oldWOY - newWOY) != 3 ) {
errln("Failed : add(WEEK_OF_YEAR-1)" +
" got " + (month+1 )+"/" +date+"/" +year +
", expected 11/16/2005" +
", MinFirstDOW=" + minDow +
", FirstDOW=" + dow +
", WEEK_OF_YEAR=" + newWOY +
" should be " + (oldWOY-3 ));
} else if ((year != 2005 ) || (month != 10 ) || (date != 16 )) {
errln("Failed : add(-1)" +
" got " + (month+1 )+"/" +date+"/" +year +
", expected 11/16/2005" +
", MinFirstDOW=" + minDow +
", FirstDOW=" + dow);
}
}
}
if (noerror) {
logln("Passed : add() test" );
}
}
/*
* Golden data for roll() test
*/
static final int [] resultWOMForRollTest = {
/* Min = 1 2 3 4 5 6 7 */
/* Sun */ 1, 1, 1, 26, 26, 26, 26,
/* Mon */ 1, 1, 1, 1, 26, 26, 26,
/* Tue */ 31, 31, 31, 31, 31, 24, 24,
/* Wed */ 31, 31, 31, 31, 31, 31, 24,
/* Thu */ 31, 31, 31, 31, 31, 31, 31,
/* Fri */ 1, 31, 31, 31, 31, 31, 31,
/* Sat */ 1, 1, 31, 31, 31, 31, 31,
};
static final int [][] resultWOYForRollTest = {
/* Min = 1 2 3 4 5 6 7 */
/* Sun */ {0,26}, {0,26}, {0,26}, {0,26}, {0,26}, {0,26}, {0,26},
/* Mon */ {1, 2}, {0,26}, {0,26}, {0,26}, {0,26}, {0,26}, {0,26},
/* Tue */ {1, 2}, {1, 2}, {0,26}, {0,26}, {0,26}, {0,26}, {0,26},
/* Wed */ {1, 2}, {1, 2}, {1, 2}, {0,26}, {0,26}, {0,26}, {0,26},
/* Thu */ {0,26}, {0,26}, {0,26}, {0,26}, {0,26}, {1, 2}, {1, 2},
/* Fri */ {0,26}, {0,26}, {0,26}, {0,26}, {0,26}, {0,26}, {1, 2},
/* Sat */ {0,26}, {0,26}, {0,26}, {0,26}, {0,26}, {0,26}, {0,26},
};
/**
* Test for roll()
*/
void testRoll() {
boolean noerror = true ;
Calendar cal = Calendar.getInstance();
// Loop for FirstDayOfWeek: SUNDAY..SATURDAY
for (int dow = SUNDAY; dow <= SATURDAY; dow++) {
// Loop for MinimalDaysInFirstWeek: 1..7
for (int minDow = 1 ; minDow <= 7 ; minDow++) {
int oldWOY, newWOY;
int index = (dow-1 )*7 + (minDow-1 );
cal.clear();
cal.setLenient(true );
cal.setMinimalDaysInFirstWeek(minDow);
cal.setFirstDayOfWeek(dow);
cal.set(2005 , DECEMBER, 12 );
oldWOY = cal.get(WEEK_OF_YEAR);
for (int cnt = 0 ; cnt < 2 ; cnt++) {
cal.roll(WEEK_OF_MONTH, -1 );
}
int y = 2005 ;
int m = DECEMBER;
int d = resultWOMForRollTest[index];
int year = cal.get(YEAR);
int month = cal.get(MONTH);
int date = cal.get(DATE);
if ((year != y) || (month != m) || (date != d)) {
noerror = false ;
errln("Failed : roll(WEEK_OF_MONTH-1)" +
" got " + (month+1 ) + "/" + date + "/" + year +
", expected " + (m+1 ) + "/" + d + "/" + y +
", MinFirstDOW=" + minDow +
", FirstDOW=" + dow);
}
cal.clear();
cal.setLenient(true );
cal.setMinimalDaysInFirstWeek(minDow);
cal.setFirstDayOfWeek(dow);
cal.set(2005 , DECEMBER, 7 );
oldWOY = cal.get(WEEK_OF_YEAR);
for (int cnt = 0 ; cnt < 7 ; cnt++) {
cal.roll(WEEK_OF_YEAR, 1 );
}
y = 2005 ;
m = resultWOYForRollTest[index][0 ];
d = resultWOYForRollTest[index][1 ];
year = cal.get(YEAR);
month = cal.get(MONTH);
date = cal.get(DATE);
if ((year != y) || (month != m) || (date != d)) {
noerror = false ;
errln("Failed : roll(WEEK_OF_YEAR+1)" +
" got " + (month+1 ) + "/" + date + "/" + year +
", expected " + (m+1 ) + "/" + d + "/" + y +
", MinFirstDOW=" + minDow +
", FirstDOW=" + dow);
}
for (int cnt = 0 ; cnt < 10 ; cnt++) {
cal.roll(WEEK_OF_YEAR, -1 );
}
newWOY = cal.get(WEEK_OF_YEAR);
y = 2005 ;
m = NOVEMBER;
d = 16 ;
year = cal.get(YEAR);
month = cal.get(MONTH);
date = cal.get(DATE);
if ((year != y) || (month != m) || (date != d)) {
noerror = false ;
errln("Failed : roll(WEEK_OF_YEAR-1)" +
" got " + (month+1 )+"/" +date+"/" +year +
", expected " + (m+1 )+"/" +d+"/" +y +
", MinFirstDOW=" + minDow +
", FirstDOW=" + dow);
}
}
}
if (noerror) {
logln("Passed : roll() test" );
}
}
}
Messung V0.5 in Prozent C=73 H=78 G=75