public void DateTimeColumn_Basic() { DateTime[] samples = new DateTime[] { DateTime.UtcNow, DateTime.UtcNow.AddDays(-10), DateTime.MinValue.ToUniversalTime(), DateTime.MaxValue.ToUniversalTime() }; DateTimeColumn column = new DateTimeColumn(); Assert.AreEqual(0, column.Count); Verify.Exception <ArgumentOutOfRangeException>(() => { DateTime value = column[0]; }); // Set values and verify they are read back consistently (all UTC) for (int i = 0; i < samples.Length; ++i) { column.Add(); column[i] = samples[i]; Assert.AreEqual(samples[i], column[i]); } Assert.AreEqual(samples.Length, column.Count); // Add a local time value and verify it's UTC when it comes back DateTime localTime = new DateTime(2017, 3, 7, 10, 26, 56, DateTimeKind.Local); column.Add(); column[column.Count - 1] = localTime; Assert.AreEqual(localTime.ToUniversalTime(), column[column.Count - 1]); // Round-Trip the column DateTimeColumn readColumn = new DateTimeColumn(); Verify.RoundTrip <DateTimeColumn>(column, readColumn); Assert.AreEqual(column.Count, readColumn.Count); for (int i = 0; i < column.Count; ++i) { Assert.AreEqual(column[i], readColumn[i]); } // Verify clear works column.Clear(); Assert.AreEqual(0, column.Count); Verify.Exception <ArgumentOutOfRangeException>(() => { DateTime value = column[0]; }); // Verify SetCount works column.SetCount(2); Assert.AreEqual(2, column.Count); Assert.AreEqual(DateTime.MinValue, column[1]); }