Skip to content

Commit

Permalink
Merge pull request #84 from observerly/feature/dusk/GetLunarPhase
Browse files Browse the repository at this point in the history
feat: Added GetLunarPhase().
  • Loading branch information
michealroberts authored Apr 23, 2022
2 parents 131d998 + 9d44cda commit e1a7c13
Show file tree
Hide file tree
Showing 3 changed files with 210 additions and 102 deletions.
205 changes: 103 additions & 102 deletions coverage.txt
Original file line number Diff line number Diff line change
@@ -1,90 +1,12 @@
mode: atomic
github.com/observerly/dusk/pkg/dusk/lawrence.go:15.59,24.12 3 1
github.com/observerly/dusk/pkg/dusk/lawrence.go:28.2,28.11 1 1
github.com/observerly/dusk/pkg/dusk/lawrence.go:24.12,26.3 1 0
github.com/observerly/dusk/pkg/dusk/lawrence.go:37.62,50.11 5 12
github.com/observerly/dusk/pkg/dusk/lawrence.go:54.2,54.10 1 12
github.com/observerly/dusk/pkg/dusk/lawrence.go:50.11,52.3 1 12
github.com/observerly/dusk/pkg/dusk/lawrence.go:64.78,80.11 7 2
github.com/observerly/dusk/pkg/dusk/lawrence.go:85.2,92.3 3 2
github.com/observerly/dusk/pkg/dusk/lawrence.go:80.11,82.3 1 2
github.com/observerly/dusk/pkg/dusk/lawrence.go:101.82,111.12 5 0
github.com/observerly/dusk/pkg/dusk/lawrence.go:116.2,121.3 2 0
github.com/observerly/dusk/pkg/dusk/lawrence.go:111.12,113.3 1 0
github.com/observerly/dusk/pkg/dusk/lawrence.go:130.62,144.2 5 24
github.com/observerly/dusk/pkg/dusk/lawrence.go:152.58,160.2 3 14
github.com/observerly/dusk/pkg/dusk/lawrence.go:170.70,178.14 3 13
github.com/observerly/dusk/pkg/dusk/lawrence.go:182.2,182.11 1 13
github.com/observerly/dusk/pkg/dusk/lawrence.go:178.14,180.3 1 0
github.com/observerly/dusk/pkg/dusk/lunar.go:17.47,22.11 2 2908
github.com/observerly/dusk/pkg/dusk/lunar.go:26.2,26.10 1 2908
github.com/observerly/dusk/pkg/dusk/lunar.go:22.11,24.3 1 16
github.com/observerly/dusk/pkg/dusk/lunar.go:35.64,46.2 4 24
github.com/observerly/dusk/pkg/dusk/lunar.go:54.64,82.2 12 7
github.com/observerly/dusk/pkg/dusk/lunar.go:90.82,101.12 4 8
github.com/observerly/dusk/pkg/dusk/lunar.go:105.2,105.11 1 8
github.com/observerly/dusk/pkg/dusk/lunar.go:101.12,103.3 1 8
github.com/observerly/dusk/pkg/dusk/lunar.go:114.87,121.2 3 7
github.com/observerly/dusk/pkg/dusk/lunar.go:130.48,135.11 2 1450
github.com/observerly/dusk/pkg/dusk/lunar.go:139.2,139.10 1 1450
github.com/observerly/dusk/pkg/dusk/lunar.go:135.11,137.3 1 5
github.com/observerly/dusk/pkg/dusk/lunar.go:149.45,154.11 2 1457
github.com/observerly/dusk/pkg/dusk/lunar.go:158.2,158.10 1 1457
github.com/observerly/dusk/pkg/dusk/lunar.go:154.11,156.3 1 7
github.com/observerly/dusk/pkg/dusk/lunar.go:167.54,188.2 10 1
github.com/observerly/dusk/pkg/dusk/lunar.go:197.52,202.11 2 1457
github.com/observerly/dusk/pkg/dusk/lunar.go:206.2,206.10 1 1457
github.com/observerly/dusk/pkg/dusk/lunar.go:202.11,204.3 1 7
github.com/observerly/dusk/pkg/dusk/lunar.go:216.64,221.11 2 7
github.com/observerly/dusk/pkg/dusk/lunar.go:225.2,225.10 1 7
github.com/observerly/dusk/pkg/dusk/lunar.go:221.11,223.3 1 0
github.com/observerly/dusk/pkg/dusk/lunar.go:234.52,239.11 2 7
github.com/observerly/dusk/pkg/dusk/lunar.go:243.2,243.10 1 7
github.com/observerly/dusk/pkg/dusk/lunar.go:239.11,241.3 1 4
github.com/observerly/dusk/pkg/dusk/lunar.go:253.61,258.12 2 1452
github.com/observerly/dusk/pkg/dusk/lunar.go:262.2,262.11 1 1452
github.com/observerly/dusk/pkg/dusk/lunar.go:258.12,260.3 1 1442
github.com/observerly/dusk/pkg/dusk/lunar.go:274.76,276.2 1 1
github.com/observerly/dusk/pkg/dusk/lunar.go:287.76,289.2 1 1
github.com/observerly/dusk/pkg/dusk/lunar.go:297.61,302.2 2 11
github.com/observerly/dusk/pkg/dusk/lunar.go:312.79,317.2 2 11
github.com/observerly/dusk/pkg/dusk/lunar.go:328.94,333.2 2 10
github.com/observerly/dusk/pkg/dusk/lunar.go:341.74,366.2 10 6
github.com/observerly/dusk/pkg/dusk/lunar.go:376.70,405.20 15 1449
github.com/observerly/dusk/pkg/dusk/lunar.go:423.2,423.20 1 1449
github.com/observerly/dusk/pkg/dusk/lunar.go:438.2,442.3 1 1449
github.com/observerly/dusk/pkg/dusk/lunar.go:405.20,410.14 3 86940
github.com/observerly/dusk/pkg/dusk/lunar.go:411.10,413.21 2 46368
github.com/observerly/dusk/pkg/dusk/lunar.go:414.14,416.25 2 31878
github.com/observerly/dusk/pkg/dusk/lunar.go:417.14,419.26 2 8694
github.com/observerly/dusk/pkg/dusk/lunar.go:423.20,428.14 3 86940
github.com/observerly/dusk/pkg/dusk/lunar.go:429.10,430.21 1 49266
github.com/observerly/dusk/pkg/dusk/lunar.go:431.14,432.25 1 34776
github.com/observerly/dusk/pkg/dusk/lunar.go:433.14,434.26 1 2898
github.com/observerly/dusk/pkg/dusk/lunar.go:614.53,616.2 1 2
github.com/observerly/dusk/pkg/dusk/lunar.go:631.93,641.2 4 1
github.com/observerly/dusk/pkg/dusk/lunar.go:653.103,658.2 2 1
github.com/observerly/dusk/pkg/dusk/lunar.go:669.85,675.13 2 1
github.com/observerly/dusk/pkg/dusk/lunar.go:679.2,679.12 1 1
github.com/observerly/dusk/pkg/dusk/lunar.go:675.13,677.3 1 0
github.com/observerly/dusk/pkg/dusk/lunar.go:692.103,701.11 4 1
github.com/observerly/dusk/pkg/dusk/lunar.go:706.2,706.11 1 1
github.com/observerly/dusk/pkg/dusk/lunar.go:711.2,711.14 1 1
github.com/observerly/dusk/pkg/dusk/lunar.go:701.11,703.3 1 1
github.com/observerly/dusk/pkg/dusk/lunar.go:706.11,708.3 1 0
github.com/observerly/dusk/pkg/dusk/lunar.go:722.139,731.16 4 1
github.com/observerly/dusk/pkg/dusk/lunar.go:735.2,737.39 2 1
github.com/observerly/dusk/pkg/dusk/lunar.go:754.2,754.35 1 1
github.com/observerly/dusk/pkg/dusk/lunar.go:731.16,733.3 1 0
github.com/observerly/dusk/pkg/dusk/lunar.go:737.39,752.3 5 1440
github.com/observerly/dusk/pkg/dusk/astrometry.go:12.52,16.12 2 1444
github.com/observerly/dusk/pkg/dusk/astrometry.go:20.2,20.11 1 1444
github.com/observerly/dusk/pkg/dusk/astrometry.go:16.12,18.3 1 364
github.com/observerly/dusk/pkg/dusk/coordinates.go:52.108,71.12 10 1444
github.com/observerly/dusk/pkg/dusk/coordinates.go:75.2,78.3 1 1444
github.com/observerly/dusk/pkg/dusk/coordinates.go:71.12,73.3 1 520
github.com/observerly/dusk/pkg/dusk/coordinates.go:91.149,106.2 6 1442
github.com/observerly/dusk/pkg/dusk/epoch.go:31.48,36.2 2 4472
github.com/observerly/dusk/pkg/dusk/utils.go:15.34,17.2 1 7
github.com/observerly/dusk/pkg/dusk/utils.go:26.55,31.12 2 1448
github.com/observerly/dusk/pkg/dusk/utils.go:35.2,35.11 1 1448
github.com/observerly/dusk/pkg/dusk/utils.go:31.12,33.3 1 0
github.com/observerly/dusk/pkg/dusk/utils.go:47.84,49.2 1 4
github.com/observerly/dusk/pkg/dusk/utils.go:60.84,62.2 1 1448
github.com/observerly/dusk/pkg/dusk/utils.go:72.85,74.2 1 1
github.com/observerly/dusk/pkg/dusk/epoch.go:31.48,36.2 2 4475
github.com/observerly/dusk/pkg/dusk/epoch.go:43.45,45.2 1 70
github.com/observerly/dusk/pkg/dusk/epoch.go:53.60,65.13 6 1446
github.com/observerly/dusk/pkg/dusk/epoch.go:69.2,81.13 5 1446
Expand All @@ -94,8 +16,8 @@ github.com/observerly/dusk/pkg/dusk/epoch.go:81.13,83.3 1 1
github.com/observerly/dusk/pkg/dusk/epoch.go:94.74,102.11 4 1445
github.com/observerly/dusk/pkg/dusk/epoch.go:106.2,106.17 1 1445
github.com/observerly/dusk/pkg/dusk/epoch.go:102.11,104.3 1 0
github.com/observerly/dusk/pkg/dusk/epoch.go:115.65,126.2 4 32
github.com/observerly/dusk/pkg/dusk/epoch.go:134.76,142.2 3 69
github.com/observerly/dusk/pkg/dusk/epoch.go:115.65,126.2 4 33
github.com/observerly/dusk/pkg/dusk/epoch.go:134.76,142.2 3 71
github.com/observerly/dusk/pkg/dusk/epoch.go:150.73,158.2 3 2917
github.com/observerly/dusk/pkg/dusk/epoch.go:167.62,178.2 3 6
github.com/observerly/dusk/pkg/dusk/epoch.go:186.73,201.12 6 4
Expand All @@ -104,23 +26,40 @@ github.com/observerly/dusk/pkg/dusk/epoch.go:201.12,203.3 1 4
github.com/observerly/dusk/pkg/dusk/epoch.go:214.77,236.12 10 3
github.com/observerly/dusk/pkg/dusk/epoch.go:240.2,240.11 1 3
github.com/observerly/dusk/pkg/dusk/epoch.go:236.12,238.3 1 0
github.com/observerly/dusk/pkg/dusk/epoch.go:250.70,255.2 2 30
github.com/observerly/dusk/pkg/dusk/solar.go:21.45,24.2 1 1478
github.com/observerly/dusk/pkg/dusk/solar.go:33.50,36.2 1 28
github.com/observerly/dusk/pkg/dusk/solar.go:45.62,48.2 1 27
github.com/observerly/dusk/pkg/dusk/epoch.go:250.70,255.2 2 31
github.com/observerly/dusk/pkg/dusk/lawrence.go:15.59,24.12 3 1
github.com/observerly/dusk/pkg/dusk/lawrence.go:28.2,28.11 1 1
github.com/observerly/dusk/pkg/dusk/lawrence.go:24.12,26.3 1 0
github.com/observerly/dusk/pkg/dusk/lawrence.go:37.62,50.11 5 13
github.com/observerly/dusk/pkg/dusk/lawrence.go:54.2,54.10 1 13
github.com/observerly/dusk/pkg/dusk/lawrence.go:50.11,52.3 1 13
github.com/observerly/dusk/pkg/dusk/lawrence.go:64.78,80.11 7 2
github.com/observerly/dusk/pkg/dusk/lawrence.go:85.2,92.3 3 2
github.com/observerly/dusk/pkg/dusk/lawrence.go:80.11,82.3 1 2
github.com/observerly/dusk/pkg/dusk/lawrence.go:101.82,111.12 5 0
github.com/observerly/dusk/pkg/dusk/lawrence.go:116.2,121.3 2 0
github.com/observerly/dusk/pkg/dusk/lawrence.go:111.12,113.3 1 0
github.com/observerly/dusk/pkg/dusk/lawrence.go:130.62,144.2 5 24
github.com/observerly/dusk/pkg/dusk/lawrence.go:152.58,160.2 3 14
github.com/observerly/dusk/pkg/dusk/lawrence.go:170.70,178.14 3 13
github.com/observerly/dusk/pkg/dusk/lawrence.go:182.2,182.11 1 13
github.com/observerly/dusk/pkg/dusk/lawrence.go:178.14,180.3 1 0
github.com/observerly/dusk/pkg/dusk/solar.go:21.45,24.2 1 1479
github.com/observerly/dusk/pkg/dusk/solar.go:33.50,36.2 1 29
github.com/observerly/dusk/pkg/dusk/solar.go:45.62,48.2 1 28
github.com/observerly/dusk/pkg/dusk/solar.go:58.74,60.2 1 24
github.com/observerly/dusk/pkg/dusk/solar.go:71.46,73.2 1 25
github.com/observerly/dusk/pkg/dusk/solar.go:81.47,86.11 2 1452
github.com/observerly/dusk/pkg/dusk/solar.go:90.2,90.10 1 1452
github.com/observerly/dusk/pkg/dusk/solar.go:86.11,88.3 1 10
github.com/observerly/dusk/pkg/dusk/solar.go:106.110,112.2 2 24
github.com/observerly/dusk/pkg/dusk/solar.go:123.142,151.2 12 23
github.com/observerly/dusk/pkg/dusk/trigonometry.go:10.30,12.2 1 114817
github.com/observerly/dusk/pkg/dusk/trigonometry.go:14.30,16.2 1 18870
github.com/observerly/dusk/pkg/dusk/trigonometry.go:10.30,12.2 1 114823
github.com/observerly/dusk/pkg/dusk/trigonometry.go:14.30,16.2 1 18874
github.com/observerly/dusk/pkg/dusk/trigonometry.go:18.44,20.2 1 86941
github.com/observerly/dusk/pkg/dusk/trigonometry.go:22.30,24.2 1 1453
github.com/observerly/dusk/pkg/dusk/trigonometry.go:26.31,28.2 1 2922
github.com/observerly/dusk/pkg/dusk/trigonometry.go:30.31,32.2 1 1469
github.com/observerly/dusk/pkg/dusk/trigonometry.go:30.31,32.2 1 1470
github.com/observerly/dusk/pkg/dusk/trigonometry.go:34.31,36.2 1 1445
github.com/observerly/dusk/pkg/dusk/trigonometry.go:38.36,40.2 1 10
github.com/observerly/dusk/pkg/dusk/twilight.go:38.163,49.16 5 9
Expand All @@ -129,10 +68,72 @@ github.com/observerly/dusk/pkg/dusk/twilight.go:49.16,51.3 1 0
github.com/observerly/dusk/pkg/dusk/twilight.go:69.139,74.2 2 3
github.com/observerly/dusk/pkg/dusk/twilight.go:85.142,90.2 2 3
github.com/observerly/dusk/pkg/dusk/twilight.go:101.146,106.2 2 3
github.com/observerly/dusk/pkg/dusk/utils.go:15.34,17.2 1 7
github.com/observerly/dusk/pkg/dusk/utils.go:26.55,31.12 2 1448
github.com/observerly/dusk/pkg/dusk/utils.go:35.2,35.11 1 1448
github.com/observerly/dusk/pkg/dusk/utils.go:31.12,33.3 1 0
github.com/observerly/dusk/pkg/dusk/utils.go:47.84,49.2 1 4
github.com/observerly/dusk/pkg/dusk/utils.go:60.84,62.2 1 1448
github.com/observerly/dusk/pkg/dusk/utils.go:72.85,74.2 1 1
github.com/observerly/dusk/pkg/dusk/astrometry.go:12.52,16.12 2 1444
github.com/observerly/dusk/pkg/dusk/astrometry.go:20.2,20.11 1 1444
github.com/observerly/dusk/pkg/dusk/astrometry.go:16.12,18.3 1 364
github.com/observerly/dusk/pkg/dusk/coordinates.go:52.108,71.12 10 1444
github.com/observerly/dusk/pkg/dusk/coordinates.go:75.2,78.3 1 1444
github.com/observerly/dusk/pkg/dusk/coordinates.go:71.12,73.3 1 520
github.com/observerly/dusk/pkg/dusk/coordinates.go:91.149,106.2 6 1442
github.com/observerly/dusk/pkg/dusk/lunar.go:27.47,32.11 2 2908
github.com/observerly/dusk/pkg/dusk/lunar.go:36.2,36.10 1 2908
github.com/observerly/dusk/pkg/dusk/lunar.go:32.11,34.3 1 16
github.com/observerly/dusk/pkg/dusk/lunar.go:45.64,56.2 4 25
github.com/observerly/dusk/pkg/dusk/lunar.go:64.64,92.2 12 7
github.com/observerly/dusk/pkg/dusk/lunar.go:100.82,111.12 4 8
github.com/observerly/dusk/pkg/dusk/lunar.go:115.2,115.11 1 8
github.com/observerly/dusk/pkg/dusk/lunar.go:111.12,113.3 1 8
github.com/observerly/dusk/pkg/dusk/lunar.go:124.87,131.2 3 7
github.com/observerly/dusk/pkg/dusk/lunar.go:140.48,145.11 2 1450
github.com/observerly/dusk/pkg/dusk/lunar.go:149.2,149.10 1 1450
github.com/observerly/dusk/pkg/dusk/lunar.go:145.11,147.3 1 5
github.com/observerly/dusk/pkg/dusk/lunar.go:159.45,164.11 2 1457
github.com/observerly/dusk/pkg/dusk/lunar.go:168.2,168.10 1 1457
github.com/observerly/dusk/pkg/dusk/lunar.go:164.11,166.3 1 7
github.com/observerly/dusk/pkg/dusk/lunar.go:177.54,198.2 10 1
github.com/observerly/dusk/pkg/dusk/lunar.go:207.52,212.11 2 1457
github.com/observerly/dusk/pkg/dusk/lunar.go:216.2,216.10 1 1457
github.com/observerly/dusk/pkg/dusk/lunar.go:212.11,214.3 1 7
github.com/observerly/dusk/pkg/dusk/lunar.go:226.64,231.11 2 7
github.com/observerly/dusk/pkg/dusk/lunar.go:235.2,235.10 1 7
github.com/observerly/dusk/pkg/dusk/lunar.go:231.11,233.3 1 0
github.com/observerly/dusk/pkg/dusk/lunar.go:244.52,249.11 2 7
github.com/observerly/dusk/pkg/dusk/lunar.go:253.2,253.10 1 7
github.com/observerly/dusk/pkg/dusk/lunar.go:249.11,251.3 1 4
github.com/observerly/dusk/pkg/dusk/lunar.go:263.61,268.12 2 1452
github.com/observerly/dusk/pkg/dusk/lunar.go:272.2,272.11 1 1452
github.com/observerly/dusk/pkg/dusk/lunar.go:268.12,270.3 1 1442
github.com/observerly/dusk/pkg/dusk/lunar.go:284.76,286.2 1 1
github.com/observerly/dusk/pkg/dusk/lunar.go:297.76,299.2 1 1
github.com/observerly/dusk/pkg/dusk/lunar.go:307.61,312.2 2 11
github.com/observerly/dusk/pkg/dusk/lunar.go:322.79,327.2 2 11
github.com/observerly/dusk/pkg/dusk/lunar.go:338.94,343.2 2 10
github.com/observerly/dusk/pkg/dusk/lunar.go:351.74,376.2 10 6
github.com/observerly/dusk/pkg/dusk/lunar.go:386.70,415.20 15 1449
github.com/observerly/dusk/pkg/dusk/lunar.go:433.2,433.20 1 1449
github.com/observerly/dusk/pkg/dusk/lunar.go:448.2,452.3 1 1449
github.com/observerly/dusk/pkg/dusk/lunar.go:415.20,420.14 3 86940
github.com/observerly/dusk/pkg/dusk/lunar.go:421.10,423.21 2 46368
github.com/observerly/dusk/pkg/dusk/lunar.go:424.14,426.25 2 31878
github.com/observerly/dusk/pkg/dusk/lunar.go:427.14,429.26 2 8694
github.com/observerly/dusk/pkg/dusk/lunar.go:433.20,438.14 3 86940
github.com/observerly/dusk/pkg/dusk/lunar.go:439.10,440.21 1 49266
github.com/observerly/dusk/pkg/dusk/lunar.go:441.14,442.25 1 34776
github.com/observerly/dusk/pkg/dusk/lunar.go:443.14,444.26 1 2898
github.com/observerly/dusk/pkg/dusk/lunar.go:624.53,626.2 1 2
github.com/observerly/dusk/pkg/dusk/lunar.go:641.93,651.2 4 1
github.com/observerly/dusk/pkg/dusk/lunar.go:663.103,668.2 2 1
github.com/observerly/dusk/pkg/dusk/lunar.go:679.85,685.13 2 1
github.com/observerly/dusk/pkg/dusk/lunar.go:689.2,689.12 1 1
github.com/observerly/dusk/pkg/dusk/lunar.go:685.13,687.3 1 0
github.com/observerly/dusk/pkg/dusk/lunar.go:702.103,711.11 4 1
github.com/observerly/dusk/pkg/dusk/lunar.go:716.2,716.11 1 1
github.com/observerly/dusk/pkg/dusk/lunar.go:721.2,721.14 1 1
github.com/observerly/dusk/pkg/dusk/lunar.go:711.11,713.3 1 1
github.com/observerly/dusk/pkg/dusk/lunar.go:716.11,718.3 1 0
github.com/observerly/dusk/pkg/dusk/lunar.go:732.139,741.16 4 1
github.com/observerly/dusk/pkg/dusk/lunar.go:745.2,747.39 2 1
github.com/observerly/dusk/pkg/dusk/lunar.go:764.2,764.35 1 1
github.com/observerly/dusk/pkg/dusk/lunar.go:741.16,743.3 1 0
github.com/observerly/dusk/pkg/dusk/lunar.go:747.39,762.3 5 1440
github.com/observerly/dusk/pkg/dusk/lunar.go:767.93,795.2 11 1
50 changes: 50 additions & 0 deletions pkg/dusk/lunar.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,16 @@ import (
tzm "github.com/zsefvlol/timezonemapper"
)

type LunarPhase struct {
Age float64
Angle float64
Days float64
Fraction float64
Illumination float64
}

var LUNAR_MONTH_IN_DAYS = 29.53059

/*
GetLunarMeanLongitude()
Expand Down Expand Up @@ -753,3 +763,43 @@ func GetLunarHorizontalCoordinatesForDay(datetime time.Time, longitude float64,

return horizontalCoordinates, nil
}

/*
GetLunarPhase
@param datetime - the datetime of the observer (in UTC)
@param longitude - is the longitude (west is negative, east is positive) in degrees of some observer on Earth
@param geocentric ecliptic coordinate of type EclipticCoordinate { λ, β, Λ }
@returns the lunar phase parameters, age (in degrees), the phase angle, the age (in days), the fraction and the illuminated percentage.
@see p.179 of Lawrence, J.L. 2015. Celestial Calculations - A Gentle Introduction To Computational Astronomy. Cambridge, Ma: The MIT Press
*/
func GetLunarPhase(datetime time.Time, longitude float64, ec EclipticCoordinate) LunarPhase {
var J float64 = GetMeanSolarTime(datetime, longitude)

var Msol float64 = GetSolarMeanAnomaly(J)

var C float64 = GetSolarEquationOfCenter(Msol)

var λ float64 = GetSolarEclipticLongitude(Msol, C)

var M float64 = GetLunarMeanAnomalyLawrence(datetime)

var d float64 = acosx(cosx(ec.λ-λ) * cosx(ec.β))

var PA float64 = 180 - d - 0.1468*((1-0.0549*sinx(M))/(1-0.0167*sinx(M)))*sinx(d)

var K float64 = 100 * ((1 + cosx(PA)) / 2)

var F float64 = (1 - cosx(d)) / 2

var days float64 = (F * LUNAR_MONTH_IN_DAYS)

return LunarPhase{
Age: d,
Angle: PA,
Days: days,
Fraction: F,
Illumination: K,
}
}
57 changes: 57 additions & 0 deletions pkg/dusk/lunar_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -471,3 +471,60 @@ func TestGetLunarHorizontalCoordinatesForDay(t *testing.T) {
t.Errorf("there is not enough horizontal coordinates for the day, expected 1440")
}
}

func TestGetLunarPhase(t *testing.T) {
// Date of observation:
var datetime time.Time = time.Date(2015, 1, 1, 0, 0, 0, 0, time.UTC)

got := GetLunarPhase(datetime, 78, EclipticCoordinate{λ: 50.279952, β: -2.981288, Δ: 0})

var age float64 = 129.966690

var angle float64 = 49.924934

var days float64 = 24.24562692920683

var fraction float64 = 0.82

var illumination float64 = 82

if math.Abs(got.Age-age) > 0.1 {
t.Errorf("got %f, wanted %f", got.Age, age)
}

if got.Age < 0 || got.Age > 360 {
t.Errorf("got %f, wanted a Lunar age (in degrees) to be between 0° and 360°", got.Age)
}

if math.Abs(got.Angle-angle) > 0.1 {
t.Errorf("got %f, wanted %f", got.Angle, angle)
}

if got.Angle < 0 || got.Angle > 360 {
t.Errorf("got %f, wanted a Lunar phase angle to be between 0° and 360°", got.Angle)
}

if math.Abs(got.Days-days) > 0.1 {
t.Errorf("got %f, wanted %f", got.Days, days)
}

if got.Days < 0 || got.Days > LUNAR_MONTH_IN_DAYS {
t.Errorf("got %f, wanted a Lunar age (in days) to be between 0 and 29.5 days", got.Angle)
}

if math.Abs(got.Fraction-fraction) > 0.1 {
t.Errorf("got %f, wanted %f", got.Fraction, fraction)
}

if got.Fraction < 0 || got.Fraction > 1 {
t.Errorf("got %f, but wanted an phase fraction value to be between 0 and 1", got.Fraction)
}

if math.Abs(got.Illumination-illumination) > 0.2 {
t.Errorf("got %f, wanted %f", got.Illumination, illumination)
}

if got.Illumination < 0 || got.Illumination > 100 {
t.Errorf("got %f, but wanted an illumination value to be between 0 and 100%%", got.Illumination)
}
}

0 comments on commit e1a7c13

Please sign in to comment.