mirror of
https://github.com/acamarata/qibla.git
synced 2026-06-30 19:04:28 +00:00
65 lines
1.9 KiB
JavaScript
65 lines
1.9 KiB
JavaScript
const { describe, it } = require("node:test");
|
|
const assert = require("node:assert/strict");
|
|
const {
|
|
qiblaAngle,
|
|
compassDir,
|
|
compassName,
|
|
qiblaGreatCircle,
|
|
distanceKm,
|
|
KAABA_LAT,
|
|
KAABA_LNG,
|
|
EARTH_RADIUS_KM,
|
|
} = require("./dist/index.cjs");
|
|
|
|
describe("CJS: qiblaAngle", () => {
|
|
it("NYC bearing is ~58° NE", () => {
|
|
const angle = qiblaAngle(40.7128, -74.006);
|
|
assert.ok(angle > 50 && angle < 70);
|
|
});
|
|
it("London bearing is ~119° SE", () => {
|
|
const angle = qiblaAngle(51.5074, -0.1278);
|
|
assert.ok(angle > 110 && angle < 130);
|
|
});
|
|
it("throws for invalid latitude", () => {
|
|
assert.throws(() => qiblaAngle(91, 0), RangeError);
|
|
});
|
|
});
|
|
|
|
describe("CJS: compassDir", () => {
|
|
it("N for 0°", () => assert.strictEqual(compassDir(0), "N"));
|
|
it("NE for 45°", () => assert.strictEqual(compassDir(45), "NE"));
|
|
it("S for 180°", () => assert.strictEqual(compassDir(180), "S"));
|
|
});
|
|
|
|
describe("CJS: compassName", () => {
|
|
it("North for 0°", () => assert.strictEqual(compassName(0), "North"));
|
|
it("Southeast for 135°", () =>
|
|
assert.strictEqual(compassName(135), "Southeast"));
|
|
});
|
|
|
|
describe("CJS: qiblaGreatCircle", () => {
|
|
it("returns 121 points by default", () => {
|
|
assert.strictEqual(qiblaGreatCircle(40.7128, -74.006).length, 121);
|
|
});
|
|
it("single point at Ka'bah", () => {
|
|
assert.strictEqual(qiblaGreatCircle(KAABA_LAT, KAABA_LNG).length, 1);
|
|
});
|
|
});
|
|
|
|
describe("CJS: distanceKm", () => {
|
|
it("NYC to Ka'bah ~9600 km", () => {
|
|
const km = distanceKm(40.7128, -74.006, KAABA_LAT, KAABA_LNG);
|
|
assert.ok(km > 9000 && km < 10500);
|
|
});
|
|
it("symmetric", () => {
|
|
const d1 = distanceKm(40, -74, KAABA_LAT, KAABA_LNG);
|
|
const d2 = distanceKm(KAABA_LAT, KAABA_LNG, 40, -74);
|
|
assert.ok(Math.abs(d1 - d2) < 0.001);
|
|
});
|
|
});
|
|
|
|
describe("CJS: constants", () => {
|
|
it("EARTH_RADIUS_KM is 6371", () => {
|
|
assert.strictEqual(EARTH_RADIUS_KM, 6371);
|
|
});
|
|
});
|