def test_YEAR(self): sample_date_2008 = date.DATE(2008, 5, 7) serial_number_2008 = int(sample_date_2008) self.assertEqual(date.YEAR(serial_number_2008), 2008) sample_date_2010 = date.DATE(2010, 5, 7) serial_number_2010 = int(sample_date_2010) self.assertEqual(date.YEAR(serial_number_2010), 2010)
def test_XIRR_not_converge(self): dates = [date.DATE(2020, 8, 31), date.DATE(2020, 5, 5), date.DATE(2020, 2, 28), date.DATE(2020, 8, 31), date.DATE(2018, 6, 30)] values = [50289.0, -75000.0, 0.0, 0.0, 0.0] self.assertIsInstance( financial.XIRR(values, dates, 0), xlerrors.NumExcelError)
def test_DATEDIF_year(self): start_date = date.DATE(2011, 1, 1) end_date = date.DATE(2011, 12, 31) self.assertEqual(date.DATEDIF(start_date, end_date, 'Y'), 0) start_date = date.DATE(2011, 1, 1) end_date = date.DATE(2012, 12, 31) self.assertEqual(date.DATEDIF(start_date, end_date, 'Y'), 1)
def test_XNPV_rate_lt_minus_one(self): range_00 = func_xltypes.Array( [[-10000, 2750, 4250, 3250, 2750]]) range_01 = func_xltypes.Array([[ date.DATE(2008, 1, 1), date.DATE(2008, 3, 1), date.DATE(2008, 10, 30), date.DATE(2009, 2, 15), date.DATE(2009, 4, 1) ]]) self.assertEqual( financial.XNPV(-1.1, range_00, range_01), float('inf'))
def test_XNPV(self): range_00 = func_xltypes.Array( [[-10000, 2750, 4250, 3250, 2750]]) range_01 = func_xltypes.Array([[ date.DATE(2008, 1, 1), date.DATE(2008, 3, 1), date.DATE(2008, 10, 30), date.DATE(2009, 2, 15), date.DATE(2009, 4, 1) ]]) self.assertAlmostEqual( financial.XNPV(0.09, range_00, range_01), 2086.65, 2)
def test_XIRR(self): range_00 = func_xltypes.Array( [[-10000, 2750, 4250, 3250, 2750]]) range_01 = func_xltypes.Array([[ date.DATE(2008, 1, 1), date.DATE(2008, 3, 1), date.DATE(2008, 10, 30), date.DATE(2009, 2, 15), date.DATE(2009, 4, 1) ]]) self.assertAlmostEqual( financial.XIRR(range_00, range_01, 0.1), 0.373362535)
def test_ISEVEN(self): self.assertFalse(information.ISEVEN(func_xltypes.Number(1))) self.assertTrue(information.ISEVEN(func_xltypes.Number(2))) self.assertFalse(information.ISEVEN(-1)) self.assertTrue(information.ISEVEN(2.5)) self.assertFalse(information.ISEVEN(5)) self.assertTrue(information.ISEVEN(0)) self.assertTrue(information.ISEVEN(date.DATE(2011, 12, 23)))
def test_DATE(self): self.assertEqual(date.DATE(2000, 1, 1), dt(2000, 1, 1)) self.assertEqual(date.DATE(2008, 11, 3), dt(2008, 11, 3)) self.assertEqual(date.DATE(2024, 1, 1), dt(2024, 1, 1)) self.assertEqual(date.DATE(2025, 1, 1), dt(2025, 1, 1)) self.assertEqual(date.DATE(2026, 1, 1), dt(2026, 1, 1)) self.assertEqual(date.DATE(1911, 1, 15), dt(1911, 1, 15))
def test_WEEKDAY_error(self): sample_date = date.DATE(2008, 2, 14) serial_number = int(sample_date) self.assertIsInstance(date.WEEKDAY(serial_number, 0), xlerrors.NumExcelError) self.assertIsInstance(date.WEEKDAY(serial_number, 4), xlerrors.NumExcelError) self.assertIsInstance(date.WEEKDAY(serial_number, 5), xlerrors.NumExcelError) self.assertIsInstance(date.WEEKDAY(serial_number, 6), xlerrors.NumExcelError) self.assertIsInstance(date.WEEKDAY(serial_number, 7), xlerrors.NumExcelError) self.assertIsInstance(date.WEEKDAY(serial_number, 8), xlerrors.NumExcelError) self.assertIsInstance(date.WEEKDAY(serial_number, 9), xlerrors.NumExcelError) self.assertIsInstance(date.WEEKDAY(serial_number, 10), xlerrors.NumExcelError) self.assertIsInstance(date.WEEKDAY(serial_number, 18), xlerrors.NumExcelError)
def test_DATE_not_stricly_positive_day_substracts(self): self.assertEqual(date.DATE(2009, 1, -1), dt(2008, 12, 30))
def test_DATE_not_stricly_positive_month_substracts(self): self.assertEqual(date.DATE(2009, -1, 1), dt(2008, 11, 1))
def test_DATE_result_must_be_positive(self): self.assertIsInstance(date.DATE(1900, 1, -1), xlerrors.NumExcelError)
def test_MONTH(self): sample_date = date.DATE(1911, 4, 15) serial_number = int(sample_date) self.assertEqual(date.MONTH(serial_number), 4)
def test_DATEDIF_M_start_beyond_end(self): start_date = date.DATE(2002, 8, 15) end_date = date.DATE(2001, 6, 1) self.assertIsInstance(date.DATEDIF(start_date, end_date, 'M'), xlerrors.NumExcelError)
def test_DATEDIF_YM(self): start_date = date.DATE(2011, 1, 1) end_date = date.DATE(2011, 12, 31) self.assertEqual(date.DATEDIF(start_date, end_date, 'YM'), 11)
def test_EOMONTH_must_be_greater_than_epoch(self): the_date = date.DATE(1901, 1, 1) self.assertIsInstance(date.EOMONTH(the_date, -24), xlerrors.NumExcelError)
def test_DATE_year_must_be_number(self): self.assertIsInstance(date.DATE('bad', 1, 1), xlerrors.ValueExcelError)
def test_WEEKDAY_return_type_17(self): sample_date = date.DATE(2008, 2, 14) serial_number = int(sample_date) self.assertEqual(date.WEEKDAY(serial_number, 17), 5)
def test_DATE_with_string_components(self): self.assertEqual(date.DATE('2026', '1', '1'), dt(2026, 1, 1))
def test_DATE_with_short_year(self): self.assertEqual(date.DATE(99, 1, 1), dt(1999, 1, 1))
def test_DATE_month_superior_to_12_change_year(self): self.assertEqual(date.DATE(2009, 14, 1), dt(2010, 2, 1))
def test_EOMONTH(self): the_date = date.DATE(2011, 1, 1) target_serial_number = utils.datetime_to_number(dt(2011, 2, 28)) self.assertEqual(date.EOMONTH(the_date, 1), target_serial_number)
def test_DATE_day_superior_to_365_change_year(self): self.assertEqual(date.DATE(2009, 1, 400), dt(2010, 2, 4))
def test_DATE_day_must_be_integer(self): self.assertIsInstance(date.DATE(2000, 1, 'bad'), xlerrors.ValueExcelError)
def test_DATEDIF_MD(self): start_date = date.DATE(2011, 1, 1) end_date = date.DATE(2011, 12, 31) self.assertEqual(date.DATEDIF(start_date, end_date, 'MD'), 30)
def test_DATE_year_must_be_positive(self): self.assertIsInstance(date.DATE(-1, 1, 1), xlerrors.NumExcelError)
def test_DATEDIF_YD(self): start_date = date.DATE(2001, 6, 1) end_date = date.DATE(2002, 8, 15) self.assertEqual(date.DATEDIF(start_date, end_date, 'YD'), 75)
def test_DATE_year_must_have_less_than_10000(self): self.assertIsInstance(date.DATE(10000, 1, 1), xlerrors.NumExcelError)
def test_DATE_month_must_be_number(self): self.assertIsInstance(date.DATE(2000, 'bad', 1), xlerrors.ValueExcelError)
def test_ISOWEEKNUM(self): sample_date = date.DATE(2012, 3, 9) self.assertEqual(date.ISOWEEKNUM(sample_date), 10)