def test_attributes(self): test = dt(2019) self.assertEqual(test.year, 2019) test = dt(2019, 9, 18, 23) self.assertEqual(test.year, 2019) self.assertEqual(test.month, 9) self.assertEqual(test.day, 18) self.assertEqual(test.hour, 23)
def test_contains(self): r1 = dt_range(dt(2010), dt(2019)) self.assertFalse(r1.contains(dt_range('2007-2009'))) self.assertFalse(r1.contains(dt_range('2009-2011'))) self.assertTrue(r1.contains(dt_range('2011-2018'))) self.assertTrue(r1.contains(dt_range('2011-2019'))) self.assertFalse(r1.contains(dt_range('2009-2021'))) self.assertFalse(r1.contains(dt_range('2015-2021'))) self.assertFalse(r1.contains(dt_range('2020-2021')))
def test_overlaps(self): r1 = dt_range(dt(2010), dt(2019)) self.assertFalse(r1.overlaps(dt_range('2007-2009'))) self.assertTrue(r1.overlaps(dt_range('2009-2011'))) self.assertTrue(r1.overlaps(dt_range('2011-2018'))) self.assertTrue(r1.overlaps(dt_range('2011-2019'))) self.assertTrue(r1.overlaps(dt_range('2009-2021'))) self.assertTrue(r1.overlaps(dt_range('2015-2021'))) self.assertFalse(r1.overlaps(dt_range('2020-2021'))) self.assertFalse(r1 in dt_range('2007-2009')) self.assertTrue(r1 in dt_range('2009-2011')) self.assertTrue(r1 in dt_range('2011-2019'))
def test_is_static(self): dtr = dt_range('19800101-19901231') dt0 = dt('2019-09-18') self.assertTrue(FXDateMin.is_static) self.assertTrue(FXDateMax.is_static) self.assertTrue(FXDateRange.is_static) self.assertFalse(dt0.is_static) self.assertFalse(dtr.is_static)
def test_incr_decr(self): test = dt(2019) args = (test.lower, test.precision) self.assertEqual(test.increment(*args), datetime.datetime(2020, 1, 1)) self.assertEqual(test.decrement(*args), datetime.datetime(2018, 1, 1)) test = dt(2019, 1) args = (test.lower, test.precision) self.assertEqual(test.increment(*args), datetime.datetime(2019, 2, 1)) self.assertEqual(test.decrement(*args), datetime.datetime(2018, 12, 1)) # leap year test = dt(2020, 2, 28) args = (test.lower, test.precision) self.assertEqual(test.increment(*args), datetime.datetime(2020, 2, 29)) test = dt(2020, 3, 1, 0) args = (test.lower, test.precision) self.assertEqual(test.decrement(*args), datetime.datetime(2020, 2, 29, 23))
def test_input_range_parsing(self): dtr1 = dt_range('20190101', '20190131') dtr2 = dt_range('20190201', '20190228') dtr3 = dt_range('20190301', '20190331') self.assertEqual(dt_range.from_contiguous_span(dtr1, dtr2, dtr3), dt_range(dt(2019, 1, 1), dt(2019, 3, 31))) self.assertEqual(dt_range.from_contiguous_span(dtr3, dtr1, dtr2), dt_range(dt(2019, 1, 1), dt(2019, 3, 31))) with self.assertRaises(ValueError): _ = dt_range.from_contiguous_span(dtr3, dtr1) with self.assertRaises(ValueError): _ = dt_range.from_contiguous_span(dtr1, dt_range('20190214', '20190215')) with self.assertRaises(ValueError): _ = dt_range.from_contiguous_span(dtr1, dtr2, dtr3, dt_range('20190214', '20190215')) with self.assertRaises(ValueError): _ = dt_range.from_contiguous_span(dtr3, dtr1, dt_range('20181214', '20190215'), dtr2)
def test_minmax(self): test = [ dt(2019, 2), dt(2019, 9), dt(2018), dt(2019), dt(2019, 1, 1, 12) ] self.assertEqual(max(test), dt(2019, 9)) self.assertEqual(min(test), dt(2018))
def test_string_parsing(self): self.assertEqual(dt('2019'), datetime.datetime(2019, 1, 1)) self.assertEqual(dt('2019').precision, 1) self.assertEqual(dt('2019091814'), datetime.datetime(2019, 9, 18, 14)) self.assertEqual(dt('2019091814').precision, 4) self.assertEqual(dt('2019-09-18'), datetime.datetime(2019, 9, 18)) self.assertEqual(dt('2019-09-18').precision, 3)
def test_contain(self): dtr = dt_range('19800101-19901231') dt0 = dt('2019-09-18') self.assertTrue(dtr in FXDateRange) self.assertTrue(dt0 in FXDateRange) self.assertTrue(FXDateRange.contains(dtr)) self.assertTrue(FXDateRange.contains(dt0)) self.assertTrue(FXDateRange.overlaps(dtr)) self.assertTrue(FXDateRange.overlaps(dt0)) self.assertFalse(dtr.contains(FXDateRange)) self.assertTrue(dtr.overlaps(FXDateRange)) with self.assertRaises(FXDateException): _ = (dtr.intersection(FXDateRange)) with self.assertRaises(FXDateException): _ = (FXDateRange.intersection(dtr))
def test_span(self): dtr1 = dt_range('20190101', '20190131') dtr2 = dt_range('20190201', '20190228') dt0 = dt('2019-09-18') self.assertEqual(dt_range.from_contiguous_span(FXDateRange), FXDateRange) with self.assertRaises(FXDateException): _ = dt_range.from_contiguous_span(FXDateRange, FXDateRange) with self.assertRaises(FXDateException): _ = dt_range.from_contiguous_span(dtr1, FXDateRange, dtr2) with self.assertRaises(FXDateException): _ = dt_range.from_contiguous_span(dtr1, dtr2, FXDateRange) with self.assertRaises(FXDateException): _ = dt_range.from_date_span(FXDateMin, FXDateMax) with self.assertRaises(FXDateException): _ = dt_range.from_date_span(dt0, FXDateMax)
def test_compare(self): dtr = dt_range('19800101-19901231') dt0 = dt('2019-09-18') with self.assertRaises(FXDateException): _ = (dt0 > FXDateMin) with self.assertRaises(FXDateException): _ = (dt0 <= FXDateMax) with self.assertRaises(FXDateException): _ = (dtr > FXDateMin) with self.assertRaises(FXDateException): _ = (dtr <= FXDateMax) with self.assertRaises(FXDateException): _ = (FXDateMin <= FXDateMax) with self.assertRaises(FXDateException): _ = (dtr <= FXDateRange) self.assertTrue(dtr != FXDateRange) self.assertTrue(dt0 != FXDateMax)
def test_init(self): self.assertEqual(dt(2019), datetime.datetime(2019, 1, 1)) self.assertEqual(dt(2019).precision, 1) self.assertEqual(dt(2019, 9, 18), datetime.datetime(2019, 9, 18)) self.assertEqual(dt(2019, 9, 18).precision, 3)
def test_input_list_parsing(self): self.assertEqual( dt_range.from_date_span(dt(2015), dt(2010), dt(2019), dt(2017)), dt_range(2010, 2019)) self.assertEqual(dt_range(['20100201', '20190918']), dt_range('20100201', '20190918'))
def test_init_coerce(self): self.assertEqual(dt(datetime.datetime(2019, 1, 1), 1), dt(2019)) self.assertEqual(dt(datetime.datetime(2019, 5, 1), 2), dt(2019, 5)) self.assertEqual(dt(datetime.datetime(2019, 5, 18), 2), dt(2019, 5))
def test_comparisons_coerce(self): self.assertTrue(dt(2018) <= datetime.date(2019, 1, 1)) self.assertTrue(dt(2019, 9) >= datetime.date(2018, 12, 25))
def test_comparisons_parent(self): self.assertTrue(dt(2018) < datetime.datetime(2019, 1, 1)) self.assertTrue(dt(2019, 9) > datetime.datetime(2018, 12, 25, 23))
def test_comparisons_same(self): self.assertTrue(dt(2018) < dt(2019)) self.assertTrue(dt(2019, 9) > dt(2018)) self.assertTrue(dt(2019, 9) > dt(2019)) self.assertTrue(dt(2019, 1) >= dt(2019)) self.assertTrue(dt(2019, 1, 1, 12) <= dt(2019, 2))
def test_string_output_iso(self): self.assertEqual(dt('1850').isoformat(), '1850-01-01 00:00:00')
def test_string_output_pre1900(self): self.assertEqual('{}'.format(dt('1850')), '1850') self.assertEqual(dt('185009182359').format(precision=4), '1850091823')
def test_string_output(self): self.assertEqual('{}'.format(dt('2019')), '2019') self.assertEqual('{}'.format(dt('20190918')), '20190918')
def test_init_epoch(self): # Make sure we're not doing platform-dependent stuff that breaks # outside of 1970-2038 self.assertEqual(dt(1850), datetime.datetime(1850, 1, 1)) self.assertEqual(dt(1850).precision, 1) self.assertEqual(dt(2112, 9, 18), datetime.datetime(2112, 9, 18)) self.assertEqual(dt(2112, 9, 18).precision, 3) self.assertEqual(dt(datetime.datetime(1850, 1, 1), 1), dt(1850)) self.assertEqual(dt(datetime.datetime(1850, 5, 1), 2), dt(1850, 5)) self.assertEqual(dt(datetime.datetime(1850, 5, 18), 2), dt(1850, 5)) self.assertEqual(dt(datetime.datetime(2112, 1, 1), 1), dt(2112)) self.assertEqual(dt(datetime.datetime(2112, 5, 1), 2), dt(2112, 5)) self.assertEqual(dt(datetime.datetime(2112, 5, 18), 2), dt(2112, 5))
def test_input_string_parsing(self): self.assertEqual(dt_range(2010, 2019), dt_range(dt(2010), dt(2019))) self.assertEqual(dt_range('20100201', '20190918'), dt_range(dt(2010, 2, 1), dt(2019, 9, 18)))