- Rover.Compute: road/prominence/clearance/clutter/canopy tests (90%) - Rover.Prominence: full unit test suite with mock elev_lookup (100%) - Rover.Elevation: dedup + multi-tile tests (44%) - Rover.LinkMargin: edge cases, negative scores, all modes (57%) - Rover.Location: changeset validation + statuses/0 (100%) - RoverPlanning.Path: changeset validation + statuses/0 (67%) - Pskr.FeatureBin: changeset validation (100%) - Pskr.Mqtt: QoS reject, unknown type, varint overflow, ping/disconnect (97%) - Valkey: not-configured error paths, empty guards (55%) - ScoresController: bad params, time format, missing band tests (81%) - SkewtLive: info/no-profiles state, loading states (29%)
58 lines
1.7 KiB
Elixir
58 lines
1.7 KiB
Elixir
defmodule Microwaveprop.Rover.ElevationTest do
|
|
use ExUnit.Case, async: false
|
|
|
|
alias Microwaveprop.Rover.Elevation
|
|
|
|
setup do
|
|
tmp = Path.join(System.tmp_dir!(), "rover_elev_#{System.unique_integer([:positive])}")
|
|
File.mkdir_p!(tmp)
|
|
prev = Application.get_env(:microwaveprop, :srtm_tiles_dir)
|
|
Application.put_env(:microwaveprop, :srtm_tiles_dir, tmp)
|
|
|
|
on_exit(fn ->
|
|
File.rm_rf!(tmp)
|
|
|
|
if prev do
|
|
Application.put_env(:microwaveprop, :srtm_tiles_dir, prev)
|
|
else
|
|
Application.delete_env(:microwaveprop, :srtm_tiles_dir)
|
|
end
|
|
end)
|
|
|
|
:ok
|
|
end
|
|
|
|
describe "lookup_many/1" do
|
|
test "returns map keyed by {lat, lon}, nil values when no tiles available" do
|
|
points = [{33.0, -96.0}, {30.0, -97.0}]
|
|
result = Elevation.lookup_many(points)
|
|
|
|
assert is_map(result)
|
|
assert Map.has_key?(result, {33.0, -96.0})
|
|
assert Map.has_key?(result, {30.0, -97.0})
|
|
assert result[{33.0, -96.0}] == nil
|
|
assert result[{30.0, -97.0}] == nil
|
|
end
|
|
|
|
test "empty list returns empty map" do
|
|
assert Elevation.lookup_many([]) == %{}
|
|
end
|
|
|
|
test "duplicate points are deduplicated before lookup" do
|
|
points = [{33.0, -96.0}, {33.0, -96.0}, {33.1, -97.0}]
|
|
result = Elevation.lookup_many(points)
|
|
|
|
assert map_size(result) == 2
|
|
end
|
|
|
|
test "points on different tiles each get an entry" do
|
|
# Deliberately far apart to span different SRTM tiles
|
|
points = [{45.0, -120.0}, {30.0, -90.0}]
|
|
result = Elevation.lookup_many(points)
|
|
|
|
assert map_size(result) == 2
|
|
assert result[{45.0, -120.0}] == nil
|
|
assert result[{30.0, -90.0}] == nil
|
|
end
|
|
end
|
|
end
|