public void NpgsqlDateConstructors()
{
NpgsqlDate date;
DateTime dateTime;
System.Globalization.Calendar calendar = new System.Globalization.GregorianCalendar();
date = new NpgsqlDate();
Assert.AreEqual(1, date.Day);
Assert.AreEqual(DayOfWeek.Monday, date.DayOfWeek);
Assert.AreEqual(1, date.DayOfYear);
Assert.AreEqual(false, date.IsLeapYear);
Assert.AreEqual(1, date.Month);
Assert.AreEqual(1, date.Year);
dateTime = new DateTime(2009, 5, 31);
date = new NpgsqlDate(dateTime);
Assert.AreEqual(dateTime.Day, date.Day);
Assert.AreEqual(dateTime.DayOfWeek, date.DayOfWeek);
Assert.AreEqual(dateTime.DayOfYear, date.DayOfYear);
Assert.AreEqual(calendar.IsLeapYear(2009), date.IsLeapYear);
Assert.AreEqual(dateTime.Month, date.Month);
Assert.AreEqual(dateTime.Year, date.Year);
//Console.WriteLine(new DateTime(2009, 5, 31).Ticks);
//Console.WriteLine((new DateTime(2009, 5, 31) - new DateTime(1, 1, 1)).TotalDays);
// 2009-5-31
dateTime = new DateTime(633793248000000000); // ticks since 1 Jan 1
date = new NpgsqlDate(733557); // days since 1 Jan 1
Assert.AreEqual(dateTime.Day, date.Day);
Assert.AreEqual(dateTime.DayOfWeek, date.DayOfWeek);
Assert.AreEqual(dateTime.DayOfYear, date.DayOfYear);
Assert.AreEqual(calendar.IsLeapYear(2009), date.IsLeapYear);
Assert.AreEqual(dateTime.Month, date.Month);
Assert.AreEqual(dateTime.Year, date.Year);
// copy previous value. should get same result
date = new NpgsqlDate(date);
Assert.AreEqual(dateTime.Day, date.Day);
Assert.AreEqual(dateTime.DayOfWeek, date.DayOfWeek);
Assert.AreEqual(dateTime.DayOfYear, date.DayOfYear);
Assert.AreEqual(calendar.IsLeapYear(2009), date.IsLeapYear);
Assert.AreEqual(dateTime.Month, date.Month);
Assert.AreEqual(dateTime.Year, date.Year);
#if NET6_0_OR_GREATER
date = new NpgsqlDate(new DateOnly(2012, 3, 4));
Assert.That(date.Year, Is.EqualTo(2012));
Assert.That(date.Month, Is.EqualTo(3));
Assert.That(date.Day, Is.EqualTo(4));
#endif
}