41 lines
1.3 KiB
Elixir
41 lines
1.3 KiB
Elixir
defmodule Microwaveprop.Rover.HilltopTest do
|
|
use ExUnit.Case, async: true
|
|
|
|
alias Microwaveprop.Rover.Hilltop
|
|
|
|
test "snap/2 returns the highest sampled SRTM point inside the cell" do
|
|
cell_center = {33.0, -96.0}
|
|
|
|
# Stub elev lookup: highest elevation NE of cell center.
|
|
elev_lookup = fn points ->
|
|
Map.new(points, fn {lat, lon} ->
|
|
elev = round((lat - 33.0) * 1000 + (lon + 96.0) * 1000)
|
|
{{lat, lon}, elev}
|
|
end)
|
|
end
|
|
|
|
{lat, lon, elev} = Hilltop.snap(cell_center, elev_lookup: elev_lookup)
|
|
|
|
# Best point should be the corner with the largest +lat, +lon offsets
|
|
# (NE corner of the sample grid).
|
|
assert lat > 33.0
|
|
assert lon > -96.0
|
|
assert is_integer(elev)
|
|
assert elev > 0
|
|
end
|
|
|
|
test "snap/2 returns nil when SRTM lookup yields no values" do
|
|
elev_lookup = fn points -> Map.new(points, fn p -> {p, nil} end) end
|
|
|
|
assert Hilltop.snap({33.0, -96.0}, elev_lookup: elev_lookup) == nil
|
|
end
|
|
|
|
test "snap/2 stays within the requested half-degree radius" do
|
|
elev_lookup = fn points -> Map.new(points, fn p -> {p, 100} end) end
|
|
|
|
{lat, lon, _} = Hilltop.snap({33.0, -96.0}, elev_lookup: elev_lookup, half_deg: 0.0625)
|
|
|
|
assert_in_delta lat, 33.0, 0.0625 + 1.0e-6
|
|
assert_in_delta lon, -96.0, 0.0625 + 1.0e-6
|
|
end
|
|
end
|