prop/test/microwaveprop/propagation/grid_test.exs
Graham McIntire 775dff4263
Add CONUS grid definition and propagation score schema
Define 0.125-degree CONUS grid (25-50N, 125-66W) for propagation
scoring and create propagation_scores table with composite unique
index on lat/lon/valid_time/band_mhz for upsert support.
2026-03-30 16:50:06 -05:00

56 lines
1.4 KiB
Elixir

defmodule Microwaveprop.Propagation.GridTest do
use ExUnit.Case, async: true
alias Microwaveprop.Propagation.Grid
describe "conus_points/0" do
test "generates grid at 0.125 degree resolution" do
points = Grid.conus_points()
assert length(points) > 5000
assert length(points) < 100_000
end
test "all points within CONUS bounds" do
Enum.each(Grid.conus_points(), fn {lat, lon} ->
assert lat >= 25.0 and lat <= 50.0
assert lon >= -125.0 and lon <= -66.0
end)
end
test "points are on 0.125 degree grid" do
Enum.each(Grid.conus_points(), fn {lat, lon} ->
assert Float.round(lat * 8, 0) == lat * 8
assert Float.round(lon * 8, 0) == lon * 8
end)
end
test "first point is at SW corner" do
[{lat, lon} | _] = Grid.conus_points()
assert lat == 25.0
assert lon == -125.0
end
test "last point is at NE corner" do
points = Grid.conus_points()
{lat, lon} = List.last(points)
assert lat == 50.0
assert lon == -66.0
end
end
describe "step/0" do
test "returns 0.125" do
assert Grid.step() == 0.125
end
end
describe "bounds/0" do
test "returns CONUS bounding box" do
bounds = Grid.bounds()
assert bounds.lat_min == 25.0
assert bounds.lat_max == 50.0
assert bounds.lon_min == -125.0
assert bounds.lon_max == -66.0
end
end
end