import static org.junit.jupiter.api.Assertions.*;

import java.util.Calendar;
import java.util.GregorianCalendar;

import org.junit.jupiter.api.Test;

public class APCalendarTest
{
    @Test
    public void testNumberOfLeapYears()
    {
        assertEquals(13, APCalendar.numberOfLeapYears(2000, 2050));
    }

    @Test
    public void testDayOfWeekAgainstExamples()
    {
        assertEquals(6, APCalendar.dayOfWeek(1, 5, 2019));
        assertEquals(4, APCalendar.dayOfWeek(1, 10, 2019));
    }

    @Test
    public void testDayOfWeekAgainstMore()
    {
        assertEquals(3, APCalendar.dayOfWeek(3, 1, 2017));
        assertEquals(2, APCalendar.dayOfWeek(3, 1, 2016));
        assertEquals(5, APCalendar.dayOfWeek(5, 17, 2019));
    }

    @Test
    public void testDayOfWeekWithEveryDayIn1990Through2020()
    {
        for(int year = 1990; year <= 2020; year++)
        {
            GregorianCalendar gc = new GregorianCalendar(year, Calendar.JANUARY, 1);

            while(gc.get(Calendar.YEAR) == year)
            {
                final int month = gc.get(Calendar.MONTH) + 1;
                final int day = gc.get(Calendar.DAY_OF_MONTH);
                
                assertEquals(gc.get(Calendar.DAY_OF_WEEK) - 1,
                        APCalendar.dayOfWeek(month, day, year));

                gc.add(Calendar.DAY_OF_YEAR, 1);
            }
        }
    }
}
