guohanghui's picture
Upload 303 files
84f2155 verified
Raw
History Blame Contribute Delete
8.21 kB
#!/usr/bin/env python3
import src.practical_astronomy.pa_sun as PS
import unittest as UT
class test_approximate_position_of_sun(UT.TestCase):
def setUp(self):
self.lct_hours = 0
self.lct_minutes = 0
self.lct_seconds = 0
self.local_day = 27
self.local_month = 7
self.local_year = 2003
self.is_daylight_saving = False
self.zone_correction = 0
def test_approximate_position_of_sun(self):
sun_ra_hour,sun_ra_min,sun_ra_sec,sun_dec_deg,sun_dec_min,sun_dec_sec = PS.approximate_position_of_sun(self.lct_hours, self.lct_minutes, self.lct_seconds, self.local_day, self.local_month, self.local_year, self.is_daylight_saving, self.zone_correction)
print(f"Approximate position of the sun: [Local Time] {self.lct_hours}:{self.lct_minutes}:{self.lct_seconds} [Local Day] {self.local_month}/{self.local_day}/{self.local_year} [DST] {self.is_daylight_saving} [Zone Correction] {self.zone_correction} = [Sun] [RA] {sun_ra_hour}:{sun_ra_min}:{sun_ra_sec} [Dec] {sun_dec_deg}d {sun_dec_min}m {sun_dec_sec}s")
self.assertEqual(sun_ra_hour,8,"Sun RA Hour")
self.assertEqual(sun_ra_min,23,"Sun RA Minutes")
self.assertEqual(sun_ra_sec,33.73,"Sun RA Seconds")
self.assertEqual(sun_dec_deg,19,"Sun Dec Degrees")
self.assertEqual(sun_dec_min,21,"Sun Dec Minutes")
self.assertEqual(sun_dec_sec,14.33,"Sun Dec Seconds")
class test_precise_position_of_sun(UT.TestCase):
def setUp(self):
self.lct_hours = 0
self.lct_minutes = 0
self.lct_seconds = 0
self.local_day = 27
self.local_month = 7
self.local_year = 1988
self.is_daylight_saving = False
self.zone_correction = 0
def test_precise_position_of_sun(self):
sun_ra_hour,sun_ra_min,sun_ra_sec,sun_dec_deg,sun_dec_min,sun_dec_sec = PS.precise_position_of_sun(self.lct_hours, self.lct_minutes, self.lct_seconds, self.local_day, self.local_month, self.local_year, self.is_daylight_saving, self.zone_correction)
print(f"Precise position of the sun: [Local Time] {self.lct_hours}:{self.lct_minutes}:{self.lct_seconds} [Local Day] {self.local_month}/{self.local_day}/{self.local_year} [DST] {self.is_daylight_saving} [Zone Correction] {self.zone_correction} = [Sun] [RA] {sun_ra_hour}:{sun_ra_min}:{sun_ra_sec} [Dec] {sun_dec_deg}d {sun_dec_min}m {sun_dec_sec}s")
self.assertEqual(sun_ra_hour,8,"Sun RA Hour")
self.assertEqual(sun_ra_min,26,"Sun RA Minutes")
self.assertEqual(sun_ra_sec,3.83,"Sun RA Seconds")
self.assertEqual(sun_dec_deg,19,"Sun Dec Degrees")
self.assertEqual(sun_dec_min,12,"Sun Dec Minutes")
self.assertEqual(sun_dec_sec,49.72,"Sun Dec Seconds")
class test_sun_distance_and_angular_size(UT.TestCase):
def setUp(self):
self.lct_hours = 0
self.lct_minutes = 0
self.lct_seconds = 0
self.local_day = 27
self.local_month = 7
self.local_year = 1988
self.is_daylight_saving = False
self.zone_correction = 0
def test_sun_distance_and_angular_size(self):
sun_dist_km,sun_ang_size_deg,sun_ang_size_min,sun_ang_size_sec = PS.sun_distance_and_angular_size(self.lct_hours, self.lct_minutes, self.lct_seconds, self.local_day, self.local_month, self.local_year, self.is_daylight_saving, self.zone_correction)
print(f"Sun's distance and angular size: [Local Time] {self.lct_hours}:{self.lct_minutes}:{self.lct_seconds} [Local Day] {self.local_month}/{self.local_day}/{self.local_year} [DST] {self.is_daylight_saving} [Zone Correction] {self.zone_correction} = [Sun] [Dist km] {sun_dist_km} [Angular size] {sun_ang_size_deg}d {sun_ang_size_min}m {sun_ang_size_sec}s")
self.assertEqual(sun_dist_km,151920100,"Sun Distance in km")
self.assertEqual(sun_ang_size_deg,0,"Sun Angular Size Degrees")
self.assertEqual(sun_ang_size_min,31,"Sun Angular Size Minutes")
self.assertEqual(sun_ang_size_sec,29.93,"Sun Angular Size Seconds")
class test_sunrise_and_sunset(UT.TestCase):
def setUp(self):
self.local_day = 10
self.local_month = 3
self.local_year = 1986
self.is_daylight_saving = False
self.zone_correction = -5
self.geographical_long_deg = -71.05
self.geographical_lat_deg = 42.37
def test_sunrise_and_sunset(self):
local_sunrise_hour,local_sunrise_minute,local_sunset_hour,local_sunset_minute,azimuth_of_sunrise_deg,azimuth_of_sunset_deg,status = PS.sunrise_and_sunset(self.local_day, self.local_month, self.local_year, self.is_daylight_saving, self.zone_correction, self.geographical_long_deg, self.geographical_lat_deg)
print(f"Sunrise and sunset: [Local date] {self.local_month}/{self.local_day}/{self.local_year} [DST?] {self.is_daylight_saving} [TZ Correction] {self.zone_correction} [Lat/Long] {self.geographical_lat_deg}/{self.geographical_long_deg} = [Sunrise] [time] {local_sunrise_hour}:{local_sunrise_minute} [Azimuth] {azimuth_of_sunrise_deg}, [Sunset] [time] {local_sunset_hour}:{local_sunset_minute} [Azimuth] {azimuth_of_sunset_deg}, [Status] {status}")
self.assertEqual(local_sunrise_hour,6,"Local Sunrise Hour")
self.assertEqual(local_sunrise_minute,5,"Local Sunrise Minute")
self.assertEqual(local_sunset_hour,17,"Local Sunset Hour")
self.assertEqual(local_sunset_minute,45,"Local Sunset Minute")
self.assertEqual(azimuth_of_sunrise_deg,94.83,"Azimuth of Sunrise (degrees)")
self.assertEqual(azimuth_of_sunset_deg,265.43,"Azimuth of Sunset (degrees)")
self.assertEqual(status,"OK","Status of Calculation")
class test_morning_and_evening_twilight(UT.TestCase):
def setUp(self):
self.local_day = 7
self.local_month = 9
self.local_year = 1979
self.is_daylight_saving = False
self.zone_correction = 0
self.geographical_long_deg = 0
self.geographical_lat_deg = 52
self.twilight_type = "A"
def test_morning_and_evening_twilight(self):
am_twilight_begins_hour,am_twilight_begins_min,pm_twilight_ends_hour,pm_twilight_ends_min,status = PS.morning_and_evening_twilight(self.local_day, self.local_month, self.local_year, self.is_daylight_saving, self.zone_correction, self.geographical_long_deg, self.geographical_lat_deg, self.twilight_type)
print(f"Morning and evening twilight: [Local date] {self.local_month}/{self.local_day}/{self.local_year} [DST?] {self.is_daylight_saving} [TZ Correction] {self.zone_correction} [Lat/Long] {self.geographical_lat_deg}/{self.geographical_long_deg} [Twilight Type] {self.twilight_type} = [AM Twilight Begins] {am_twilight_begins_hour}:{am_twilight_begins_min} [PM Twilight Ends] {pm_twilight_ends_hour}:{pm_twilight_ends_min}, [Status] {status}")
self.assertEqual(am_twilight_begins_hour,3,"AM Twilight Begins (hour)")
self.assertEqual(am_twilight_begins_min,17,"AM Twilight Begins (minute)")
self.assertEqual(pm_twilight_ends_hour,20,"PM Twilight Ends (hour)")
self.assertEqual(pm_twilight_ends_min,37,"PM Twilight Ends (minute)")
self.assertEqual(status,"OK","Status of Calculation")
class test_equation_of_time(UT.TestCase):
def setUp(self):
self.gwdate_day = 27
self.gwdate_month = 7
self.gwdate_year = 2010
def test_equation_of_time(self):
equation_of_time_min, equation_of_time_sec = PS.equation_of_time(self.gwdate_day,self.gwdate_month,self.gwdate_year)
print(f"Equation of Time: [Greenwich Date] {self.gwdate_month}/{self.gwdate_day}/{self.gwdate_year} = [Equation of Time] {equation_of_time_min}:{equation_of_time_sec}")
self.assertEqual(equation_of_time_min,6,"Equation of Time (min)")
self.assertEqual(equation_of_time_sec,31.52,"Equation of Time (sec)")
class test_solar_elongation(UT.TestCase):
def setUp(self):
self.ra_hour = 10
self.ra_min = 6
self.ra_sec = 45
self.dec_deg = 11
self.dec_min = 57
self.dec_sec = 27
self.gwdate_day = 27.8333333
self.gwdate_month = 7
self.gwdate_year = 2010
def test_solar_elongation(self):
solar_elongation_deg = PS.solar_elongation(self.ra_hour,self.ra_min,self.ra_sec,self.dec_deg,self.dec_min,self.dec_sec,self.gwdate_day,self.gwdate_month,self.gwdate_year)
print(f"Solar elongation: [Right Ascension] {self.ra_hour}:{self.ra_min}:{self.ra_sec} [Declination] {self.dec_deg}d {self.dec_min}m {self.dec_sec}s [Greenwich Date] {self.gwdate_month}/{self.gwdate_day}/{self.gwdate_year} = [Solar Elongation (degrees)] {solar_elongation_deg}")
self.assertEqual(solar_elongation_deg,24.78,"Solar Elongation (degrees)")
if __name__ == '__main__':
UT.main()