import unittest import datetime import pandas as pd import sys sys.path.append('..') from analytics.utils import * from analytics.tranche_functions import cds_accrued from pyisda.date import roll_date as roll_date_c, cds_accrued as cds_accrued_c, previous_twentieth class TestStartDate(unittest.TestCase): def test_previous_twentieth(self): self.assertEqual(previous_twentieth(datetime.date(2016, 9, 20)), datetime.date(2016, 9, 20)) self.assertEqual(previous_twentieth(datetime.date(2016, 6, 10)), datetime.date(2016, 3, 21)) self.assertEqual(previous_twentieth(datetime.date(2016, 6, 10), False), datetime.date(2016, 3, 20)) self.assertEqual(previous_twentieth(datetime.date(2016, 10, 15)), datetime.date(2016, 9, 20)) self.assertEqual(previous_twentieth(datetime.date(2016, 12, 20)), datetime.date(2016, 12, 20)) self.assertEqual(previous_twentieth(datetime.date(2017, 3, 19)), datetime.date(2016, 12, 20)) def test_previous_twentieth_timestamp(self): self.assertEqual(previous_twentieth(pd.Timestamp('2016-09-20')), datetime.date(2016, 9, 20)) self.assertEqual(previous_twentieth(pd.Timestamp('2016-10-15')), datetime.date(2016, 9, 20)) self.assertEqual(previous_twentieth(pd.Timestamp('2016-12-20')), datetime.date(2016, 12, 20)) self.assertEqual(previous_twentieth(pd.Timestamp('2017-03-19')), datetime.date(2016, 12, 20)) class TestEndDate(unittest.TestCase): def test_enddate(self): self.assertEqual(roll_date(datetime.date(2016, 9, 20), 5), datetime.date(2021, 12, 20)) self.assertEqual(roll_date(datetime.date(2016, 10, 15), 5), datetime.date(2021, 12, 20)) self.assertEqual(roll_date(datetime.date(2017, 3, 19), 5), datetime.date(2021, 12, 20)) self.assertEqual(roll_date(datetime.date(2017, 3, 20), 5), datetime.date(2022, 6, 20)) def test_enddate_pre2015(self): self.assertEqual(roll_date(datetime.date(2014, 9, 20), 5), datetime.date(2019, 12, 20)) self.assertEqual(roll_date(datetime.date(2014, 10, 15), 5), datetime.date(2019, 12, 20)) self.assertEqual(roll_date(datetime.date(2015, 3, 19), 5), datetime.date(2020, 3, 20)) self.assertEqual(roll_date(datetime.date(2015, 3, 20), 5), datetime.date(2020, 6, 20)) self.assertEqual(roll_date(datetime.date(2015, 12, 19), 5), datetime.date(2020, 12, 20)) self.assertEqual(roll_date(datetime.date(2015, 12, 20), 5), datetime.date(2020, 12, 20)) class TestEndDateC(unittest.TestCase): roll_date_c = lambda d, t: TDate_to_pydate(end_dates(pydate_to_TDate(d), t)) def test_enddate(self): self.assertEqual(roll_date_c(datetime.date(2016, 9, 20), 5), datetime.date(2021, 12, 20)) self.assertEqual(roll_date_c(datetime.date(2016, 10, 15), 5), datetime.date(2021, 12, 20)) self.assertEqual(roll_date_c(datetime.date(2017, 3, 19), 5), datetime.date(2021, 12, 20)) self.assertEqual(roll_date_c(datetime.date(2017, 3, 20), 5), datetime.date(2022, 6, 20)) def test_enddate_pre2015(self): self.assertEqual(roll_date_c(datetime.date(2014, 9, 20), 5), datetime.date(2019, 12, 20)) self.assertEqual(roll_date_c(datetime.date(2014, 10, 15), 5), datetime.date(2019, 12, 20)) self.assertEqual(roll_date_c(datetime.date(2015, 3, 19), 5), datetime.date(2020, 3, 20)) self.assertEqual(roll_date_c(datetime.date(2015, 3, 20), 5), datetime.date(2020, 6, 20)) self.assertEqual(roll_date_c(datetime.date(2015, 12, 19), 5), datetime.date(2020, 12, 20)) self.assertEqual(roll_date_c(datetime.date(2015, 12, 20), 5), datetime.date(2020, 12, 20)) class TestCdsAccrued(unittest.TestCase): def test_cdsaccrued(self): self.assertAlmostEqual(cds_accrued(datetime.date(2016, 4, 1), 100), cds_accrued_c(datetime.date(2016, 4, 1), 100)) self.assertAlmostEqual(cds_accrued(datetime.date(2016, 3, 21), 100), 0.2777777777777778) self.assertAlmostEqual(cds_accrued(datetime.date(2016, 3, 18), 100), 24.72222222222222) #buggy #self.assertAlmostEqual(cds_accrued(datetime.date(2016, 9, 19), 100), 0.) def test_cdsaccrued_c(self): self.assertAlmostEqual(cds_accrued_c(datetime.date(2016, 4, 1), 100), 3.3333333333333) self.assertAlmostEqual(cds_accrued_c(datetime.date(2016, 3, 21), 100), 0.27777777777777) self.assertAlmostEqual(cds_accrued_c(datetime.date(2016, 3, 18), 100), 24.72222222222) self.assertAlmostEqual(cds_accrued_c(datetime.date(2016, 9, 19), 100), 0.) if __name__=="__main__": unittest.main()