From f9709d15badb06216519bc1bd3fbf86ebef75b95 Mon Sep 17 00:00:00 2001
From: Peter Powers <pmpowers@usgs.gov>
Date: Mon, 30 Sep 2024 13:55:39 -0600
Subject: [PATCH] test mag curve sum equals total

---
 .../earthquake/nshmp/model/LoaderTests.java   | 22 +++++++++++++++++++
 1 file changed, 22 insertions(+)

diff --git a/src/test/java/gov/usgs/earthquake/nshmp/model/LoaderTests.java b/src/test/java/gov/usgs/earthquake/nshmp/model/LoaderTests.java
index d54fe784..9c14ce19 100644
--- a/src/test/java/gov/usgs/earthquake/nshmp/model/LoaderTests.java
+++ b/src/test/java/gov/usgs/earthquake/nshmp/model/LoaderTests.java
@@ -14,6 +14,7 @@ import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.util.Arrays;
+import java.util.Collection;
 import java.util.EnumMap;
 import java.util.List;
 import java.util.Map;
@@ -33,6 +34,7 @@ import gov.usgs.earthquake.nshmp.calc.HazardCalcs;
 import gov.usgs.earthquake.nshmp.calc.HazardExport;
 import gov.usgs.earthquake.nshmp.calc.Site;
 import gov.usgs.earthquake.nshmp.calc.Sites;
+import gov.usgs.earthquake.nshmp.data.MutableXySequence;
 import gov.usgs.earthquake.nshmp.data.XySequence;
 import gov.usgs.earthquake.nshmp.geo.Location;
 import gov.usgs.earthquake.nshmp.gmm.Gmm;
@@ -135,6 +137,12 @@ class LoaderTests {
         }
         assertCurveEquals(magExpecteds.get(m), magActuals.get(m), tol);
       }
+
+      // Check that actual magnitude curves sum to expected total curve for IMT
+      XySequence magCombinedActual = combineMagCurves(
+          actuals.curves().get(imt),
+          actuals.magCurves().get(imt).values());
+      assertCurveEquals(totalExpected, magCombinedActual, tol);
     }
   }
 
@@ -285,6 +293,20 @@ class LoaderTests {
         .toArray();
   }
 
+  /* --- mag hazard testing --- */
+  private static XySequence combineMagCurves(
+      XySequence model,
+      Collection<MutableXySequence> curves) {
+
+    MutableXySequence xyOut = MutableXySequence.emptyCopyOf(model);
+    for (XySequence curve : curves) {
+      if (curve != null) {
+        xyOut.add(curve);
+      }
+    }
+    return xyOut;
+  }
+
   public static void main(String[] args) throws IOException {
     model = ModelLoader.load(MODEL_PATH);
     List<Site> sites = Sites.fromCsv(SITES_PATH, model.siteData(), OptionalDouble.empty());
-- 
GitLab