01: import junit.framework.*;
02: 
03: /**
04:    A class to test the Day class with JUnit.
05: */
06: public class DayTest extends TestCase
07: {
08:    /**
09:       This test tests the addDays method with positive 
10:       parameters.
11:    */
12:    public void testAdd()
13:    {
14:       for (int i = 1; i <= MAX_DAYS; i = i * INCREMENT)
15:       {
16:          Day d1 = new Day(1970, 1, 1);
17:          Day d2 = d1.addDays(i);
18:          assert d2.daysFrom(d1) == i;      
19:       }
20:    }
21: 
22:    /**
23:       This test tests the addDays method with negative 
24:       parameters.
25:    */
26:    public void testAddNegative()
27:    {
28:       for (int i = 1; i <= MAX_DAYS; i = i * INCREMENT)
29:       {
30:          Day d1 = new Day(1970, 1, 1);
31:          Day d2 = d1.addDays(-i);
32:          assert d1.daysFrom(d2) == i;      
33:       }
34:    }
35: 
36:    /**
37:       This test tests the daysFrom method.
38:    */
39:    public void testDaysFrom()
40:    {
41:       Day d1 = new Day(1970, 1, 1);
42:       Day d2 = new Day(2001, 1, 1);
43:       int n = d1.daysFrom(d2);
44:       Day d3 = d2.addDays(n);
45:       assert d1.getYear() == d3.getYear();      
46:       assert d1.getMonth() == d3.getMonth();      
47:       assert d1.getDate() == d3.getDate();      
48:    }
49: 
50:    /**
51:       This test tests arithmetic around the Gregorian
52:       calendar change.
53:    */
54:    public void testGregorianBoundary()
55:    {
56:       Day d1 = new Day(1580, 1, 1);
57:       Day d2 = d1.addDays(MAX_DAYS);
58:       Day d3 = d2.addDays(-MAX_DAYS);
59:       assert d3.daysFrom(d1) == 0;      
60:    }
61: 
62:    private static final int MAX_DAYS = 10000;
63:    private static final int INCREMENT = 10;
64: }
65: