#!/usr/bin/env python3 import src.practical_astronomy.pa_datetime as PD import unittest as UT def get_civil_time(hours,minutes,seconds): decimalHours = PD.civil_time_to_decimal_hours(hours,minutes,seconds) return round(decimalHours,8) class test_civil_time(UT.TestCase): def setUp(self): self.hours = 18 self.minutes = 31 self.seconds = 27 self.decimalHours = get_civil_time(self.hours,self.minutes,self.seconds) def test_civil_time_to_decimal_hours(self): print(f"Decimal hours for {self.hours}:{self.minutes}:{self.seconds} is {self.decimalHours}") self.assertEqual(self.decimalHours,18.52416667,"Decimal Hours") def test_decimal_hours_to_civil_time(self): revertHours,revertMinutes,revertSeconds = PD.decimal_hours_to_civil_time(self.decimalHours) print(f"Converting {self.decimalHours} back to Civil Time gives {revertHours}:{revertMinutes}:{revertSeconds}") self.assertEqual(revertHours,18,"Civil Time: Hours") self.assertEqual(revertMinutes,31,"Civil Time: Minutes") self.assertEqual(revertSeconds,27,"Civil Time: Seconds") def test_decimal_time_parts(self): hourPart = PD.decimal_hour_hour(self.decimalHours) minutesPart = PD.decimal_hour_minutes(self.decimalHours) secondsPart = PD.decimal_hour_seconds(self.decimalHours) print(f"The hour part of {self.decimalHours} is {hourPart}") print(f"The minutes part of {self.decimalHours} is {minutesPart}") print(f"The seconds part of {self.decimalHours} is {secondsPart}") self.assertEqual(hourPart,18,"Hour Part") self.assertEqual(minutesPart,31,"Minutes Part") self.assertEqual(secondsPart,27,"Seconds Part") class test_local_civil_time(UT.TestCase): def setUp(self): self.hours = 3 self.minutes = 37 self.seconds = 0 self.isDaylightSavings = True self.zoneCorrection = 4 self.day = 1 self.month = 7 self.year = 2013 def test_local_civil_time_to_universal_time(self): utHours,utMinutes,utSeconds,gwDay,gwMonth,gwYear = PD.local_civil_time_to_universal_time(self.hours,self.minutes,self.seconds,self.isDaylightSavings,self.zoneCorrection,self.day,self.month,self.year) print(f"[LCT]{self.hours}:{self.minutes}:{self.seconds} [DS]{self.isDaylightSavings} [ZC]{self.zoneCorrection} [LD]{self.month}/{self.day}/{self.year} = [UT]{utHours}:{utMinutes}:{utSeconds} [GWD]{gwMonth}/{gwDay}/{gwYear}") self.assertEqual(utHours,22,"UT Hours") self.assertEqual(utMinutes,37,"UT Minutes") self.assertEqual(utSeconds,0,"UT Seconds") self.assertEqual(gwDay,30,"Greenwich Day") self.assertEqual(gwMonth,6,"Greenwich Month") self.assertEqual(gwYear,2013,"Greenwich Year") def test_universal_time_to_local_civil_time(self): utHours,utMinutes,utSeconds,gwDay,gwMonth,gwYear = PD.local_civil_time_to_universal_time(self.hours,self.minutes,self.seconds,self.isDaylightSavings,self.zoneCorrection,self.day,self.month,self.year) revertLCTHours,revertLCTMinutes,revertLCTSeconds,revertDay,revertMonth,revertYear = PD.universal_time_to_local_civil_time(utHours,utMinutes,utSeconds,self.isDaylightSavings,self.zoneCorrection,gwDay,gwMonth,gwYear) print(f"[UT]{utHours}:{utMinutes}:{utSeconds} [DS]{self.isDaylightSavings} [ZC]{self.zoneCorrection} [GWD]{gwMonth}/{gwDay}/{gwYear} = [LCT]{revertLCTHours}:{revertLCTMinutes}:{revertLCTSeconds} [LD]{self.month}/{self.day}/{self.year}") self.assertEqual(revertLCTHours,3,"LCT Hours") self.assertEqual(revertLCTMinutes,37, "LCT Minutes") self.assertEqual(revertLCTSeconds,0, "LCT Seconds") self.assertEqual(revertDay,1,"Local Day") self.assertEqual(revertMonth,7,"Local Month") self.assertEqual(revertYear,2013,"Local Year") class test_sidereal_time_universal_time(UT.TestCase): def setUp(self): self.utHours = 14 self.utMinutes = 36 self.utSeconds = 51.67 self.greenwichDay = 22 self.greenwichMonth = 4 self.greenwichYear = 1980 def test_universal_time_to_greenwich_sidereal_time(self): gstHours,gstMinutes,gstSeconds = PD.universal_time_to_greenwich_sidereal_time(self.utHours,self.utMinutes,self.utSeconds,self.greenwichDay,self.greenwichMonth,self.greenwichYear) print(f"[UT] {self.utHours}:{self.utMinutes}:{self.utSeconds} {self.greenwichMonth}/{self.greenwichDay}/{self.greenwichYear} = [GST] {gstHours}:{gstMinutes}:{gstSeconds}") self.assertEqual(gstHours,4,"GST Hours") self.assertEqual(gstMinutes,40,"GST Minutes") self.assertEqual(gstSeconds,5.23,"GST Seconds") def test_greenwich_sidereal_time_to_universal_time(self): gstHours,gstMinutes,gstSeconds = PD.universal_time_to_greenwich_sidereal_time(self.utHours,self.utMinutes,self.utSeconds,self.greenwichDay,self.greenwichMonth,self.greenwichYear) revertUTHours,revertUTMinutes,revertUTSeconds,statusMessage = PD.greenwich_sidereal_time_to_universal_time(gstHours,gstMinutes,gstSeconds,self.greenwichDay,self.greenwichMonth,self.greenwichYear) print(f"[GST] {gstHours}:{gstMinutes}:{gstSeconds} {self.greenwichMonth}/{self.greenwichDay}/{self.greenwichYear} = [UT] {revertUTHours}:{revertUTMinutes}:{revertUTSeconds} [Status] {statusMessage}") self.assertEqual(revertUTHours,14,"UT Hours") self.assertEqual(revertUTMinutes,36,"UT Minutes") self.assertEqual(revertUTSeconds,51.67,"UT Seconds") self.assertIn(statusMessage,["OK","Warning"],"Status Message") class test_sidereal_time_local_time(UT.TestCase): def setUp(self): self.gstHours = 4 self.gstMinutes = 40 self.gstSeconds = 5.23 self.geographicalLongitude = -64 def test_greenwich_sidereal_time_to_local_sidereal_time(self): lstHours,lstMinutes,lstSeconds = PD.greenwich_sidereal_time_to_local_sidereal_time(self.gstHours,self.gstMinutes,self.gstSeconds,self.geographicalLongitude) print(f"[GST] {self.gstHours}:{self.gstMinutes}:{self.gstSeconds} [LON] {self.geographicalLongitude} = [LST] {lstHours}:{lstMinutes}:{lstSeconds}") self.assertEqual(lstHours,0,"LST Hours") self.assertEqual(lstMinutes,24,"LST Minutes") self.assertEqual(lstSeconds,5.23,"LST Seconds") def test_local_sidereal_time_to_greenwich_sidereal_time(self): lstHours,lstMinutes,lstSeconds = PD.greenwich_sidereal_time_to_local_sidereal_time(self.gstHours,self.gstMinutes,self.gstSeconds,self.geographicalLongitude) revertGSTHours,revertGSTMinutes,revertGSTSeconds = PD.local_sidereal_time_to_greenwich_sidereal_time(lstHours,lstMinutes,lstSeconds,self.geographicalLongitude) print(f"[LST] {lstHours}:{lstMinutes}:{lstSeconds} [LON] {self.geographicalLongitude} = [GST] {revertGSTHours}:{revertGSTMinutes}:{revertGSTSeconds}") self.assertEqual(revertGSTHours,4,"GST Hours") self.assertEqual(revertGSTMinutes,40,"GST Minutes") self.assertEqual(revertGSTSeconds,5.23,"GST Seconds") if __name__ == '__main__': UT.main()