/* * Copyright (c) 2007, 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 6452848 * @summary Make sure that the resolution of (WEKK_OF_MONTH + * DAY_OF_WEEK) and (DAY_OF_WEEK_IN_MONTH + DAY_OF_WEEK) works as * specified in the API. * @key randomness
*/
publicclass ResolutionTest { static Random rand = new Random();
publicstaticvoid main(String[] args) { for (int year = 1995; year < 2011; year++) { for (int month = JANUARY; month <= DECEMBER; month++) { for (int dow = SUNDAY; dow <= SATURDAY; dow++) {
test(year, month, dow);
}
}
}
}
staticvoid test(int year, int month, int dow) {
Calendar cal = new GregorianCalendar(year, month, 1); int max = cal.getActualMaximum(DAY_OF_MONTH);
ArrayList<Integer> list = new ArrayList<Integer>(); for (int d = 1; d <= max; d++) {
cal.clear();
cal.set(year, month, d); if (cal.get(DAY_OF_WEEK) == dow) {
list.add(d);
}
} for (int i = 0; i < 100; i++) { int nth = rand.nextInt(list.size()); // 0-based int day = list.get(nth);
nth++; // 1-based
testDayOfWeekInMonth(year, month, nth, dow, day);
}
// Put WEEK_OF_MONTH-DAY_OF_MONTH pairs
list = new ArrayList<Integer>(); for (int d = 1; d <= max; d++) {
cal.clear();
cal.set(year, month, d); if (cal.get(DAY_OF_WEEK) == dow) {
list.add(cal.get(WEEK_OF_MONTH));
list.add(d);
}
} for (int i = 0; i < list.size(); i++) { int nth = list.get(i++); int day = list.get(i);
testWeekOfMonth(year, month, nth, dow, day);
}
}
static Koyomi cal = new Koyomi();
staticvoid testDayOfWeekInMonth(int year, int month, int nth, int dow, int expected) { // don't call clear() here
cal.set(YEAR, year);
cal.set(MONTH, month); // Set DAY_OF_WEEK_IN_MONTH before DAY_OF_WEEK
cal.set(DAY_OF_WEEK_IN_MONTH, nth);
cal.set(DAY_OF_WEEK, dow); if (!cal.checkDate(year, month, expected)) { thrownew RuntimeException(String.format("DOWIM: year=%d, month=%d, nth=%d, dow=%d:%s%n",
year, month+1, nth, dow, cal.getMessage()));
}
}
staticvoid testWeekOfMonth(int year, int month, int nth, int dow, int expected) { // don't call clear() here
cal.set(YEAR, year);
cal.set(MONTH, month); // Set WEEK_OF_MONTH before DAY_OF_WEEK
cal.set(WEEK_OF_MONTH, nth);
cal.set(DAY_OF_WEEK, dow); if (!cal.checkDate(year, month, expected)) { thrownew RuntimeException(String.format("WOM: year=%d, month=%d, nth=%d, dow=%d:%s%n",
year, month+1, nth, dow, cal.getMessage()));
}
}
}
¤ Dauer der Verarbeitung: 0.10 Sekunden
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.