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