krz/moonrise

Night-sky companion for iPhone, Apple Watch and Vision Pro: what's up tonight, the Moon, planets, launches and missions, and a Library of the solar system. SwiftUI app with a Cloudflare Workers backend. astronomy cloudflare-workers ios night-sky space swiftui visionos watchos

Packages/MoonriseKit/Tests/SkyEngineTests/GeomagneticTests.swift

b327e0d6e7ab67511c5bade3f3c3a93834f6e9ca
moonrise/Packages/MoonriseKit/Tests/SkyEngineTests/GeomagneticTests.swift history · blame · raw

36 lines · 1408 bytes

 1import Testing
 2@testable import SkyEngine
 3
 4@Test func chicagoIsAboutFiftyOneDegreesGeomagnetic() {
 5    let m = Geomagnetic.latitude(chicago)
 6    #expect(m > 49 && m < 53, "\(m)")
 7    #expect(Geomagnetic.band(chicago) == 50)
 8}
 9
10@Test func southernBandsAreNegative() {
11    // Hobart, Tasmania: the dipole model gives about 49.6° S, so the 45–50° S band.
12    let hobart = Observer(latitude: -42.88, longitude: 147.33)
13    let m = Geomagnetic.latitude(hobart)
14    #expect(m < -45 && m > -55, "\(m)")
15    #expect(Geomagnetic.band(hobart) == -50)
16}
17
18@Test func poleIsNinety() {
19    let pole = Observer(latitude: Geomagnetic.poleLatitude, longitude: Geomagnetic.poleLongitude)
20    #expect(abs(Geomagnetic.latitude(pole) - 90) < 1e-6)
21}
22
23@Test func ovalMatchesServer() {
24    // server/src/aurora.ts: ovalEdge(5) = 56.3, visibleFrom(5) = 50.3.
25    #expect(abs(Geomagnetic.ovalEdge(kp: 5) - 56.3) < 1e-9)
26    #expect(abs(Geomagnetic.visibleFrom(kp: 5) - 50.3) < 1e-9)
27}
28
29@Test func kpNeeded() {
30    let kp = Geomagnetic.kpNeeded(chicago)
31    #expect(kp > 4 && kp < 5.5, "\(kp)")
32    #expect(abs(Geomagnetic.visibleFrom(kp: kp) - Geomagnetic.latitude(chicago)) < 1e-9)
33    #expect(Geomagnetic.kpNeeded(Observer(latitude: -42.88, longitude: 147.33)) < 6)
34    #expect(Geomagnetic.kpNeeded(Observer(latitude: 0, longitude: -80)) > 9)
35    #expect(Geomagnetic.kpNeeded(Observer(latitude: 69.6, longitude: 18.9)) == 0)
36}