defmodule Microwaveprop.Propagation.CalibrationTest do use ExUnit.Case, async: true alias Microwaveprop.Propagation.Calibration describe "spearman/2" do test "perfect monotonic correlation is 1.0" do assert_in_delta Calibration.spearman([1, 2, 3, 4, 5], [10, 20, 30, 40, 50]), 1.0, 1.0e-9 end test "perfect inverse correlation is -1.0" do assert_in_delta Calibration.spearman([1, 2, 3, 4, 5], [50, 40, 30, 20, 10]), -1.0, 1.0e-9 end test "uncorrelated input lands near zero" do xs = Enum.to_list(1..100) # constant ys has zero variance; function returns 0.0 by convention. ys = List.duplicate(42, 100) assert Calibration.spearman(xs, ys) == 0.0 end test "returns nil for fewer than 3 pairs" do assert Calibration.spearman([1], [1]) == nil assert Calibration.spearman([1, 2], [3, 4]) == nil end end describe "rmse/2" do test "zero for identical lists" do assert Calibration.rmse([1, 2, 3], [1, 2, 3]) == 0.0 end end end