ICU-21432 Fix TestInternalMeasureUnitImpl() segfaulting with bad data
diff --git a/icu4c/source/test/intltest/measfmttest.cpp b/icu4c/source/test/intltest/measfmttest.cpp
index e5dfcbb..900cc13 100644
--- a/icu4c/source/test/intltest/measfmttest.cpp
+++ b/icu4c/source/test/intltest/measfmttest.cpp
@@ -4580,7 +4580,9 @@
     assertEquals("mu1 initial identifier", "", mu1.identifier.data());
     assertEquals("mu1 initial complexity", UMEASURE_UNIT_SINGLE, mu1.complexity);
     assertEquals("mu1 initial units length", 1, mu1.singleUnits.length());
-    assertEquals("mu1 initial units[0]", "meter", mu1.singleUnits[0]->getSimpleUnitID());
+    if (mu1.singleUnits.length() > 0) {
+        assertEquals("mu1 initial units[0]", "meter", mu1.singleUnits[0]->getSimpleUnitID());
+    }
 
     // Producing identifier via build(): the std::move() means mu1 gets modified
     // while it also gets assigned to tmp's internal fImpl.
@@ -4589,7 +4591,9 @@
     assertEquals("mu1 post-move-build identifier", "meter", mu1.identifier.data());
     assertEquals("mu1 post-move-build complexity", UMEASURE_UNIT_SINGLE, mu1.complexity);
     assertEquals("mu1 post-move-build units length", 1, mu1.singleUnits.length());
-    assertEquals("mu1 post-move-build units[0]", "meter", mu1.singleUnits[0]->getSimpleUnitID());
+    if (mu1.singleUnits.length() > 0) {
+        assertEquals("mu1 post-move-build units[0]", "meter", mu1.singleUnits[0]->getSimpleUnitID());
+    }
     assertEquals("MeasureUnit tmp identifier", "meter", tmp.getIdentifier());
 
     // This temporary variable is used when forMeasureUnit's first parameter
@@ -4600,7 +4604,9 @@
     assertEquals("tmpMemory identifier", "", tmpMemory.identifier.data());
     assertEquals("tmpMemory complexity", UMEASURE_UNIT_SINGLE, tmpMemory.complexity);
     assertEquals("tmpMemory units length", 1, tmpMemory.singleUnits.length());
-    assertEquals("tmpMemory units[0]", "meter", tmpMemory.singleUnits[0]->getSimpleUnitID());
+    if (mu1.singleUnits.length() > 0) {
+        assertEquals("tmpMemory units[0]", "meter", tmpMemory.singleUnits[0]->getSimpleUnitID());
+    }
     assertEquals("tmpImplRef identifier", "", tmpImplRef.identifier.data());
     assertEquals("tmpImplRef complexity", UMEASURE_UNIT_SINGLE, tmpImplRef.complexity);
 
@@ -4610,17 +4616,21 @@
     assertEquals("mu1 = move(mu2): identifier", "", mu1.identifier.data());
     assertEquals("mu1 = move(mu2): complexity", UMEASURE_UNIT_COMPOUND, mu1.complexity);
     assertEquals("mu1 = move(mu2): units length", 2, mu1.singleUnits.length());
-    assertEquals("mu1 = move(mu2): units[0]", "newton", mu1.singleUnits[0]->getSimpleUnitID());
-    assertEquals("mu1 = move(mu2): units[1]", "meter", mu1.singleUnits[1]->getSimpleUnitID());
+    if (mu1.singleUnits.length() >= 2) {
+        assertEquals("mu1 = move(mu2): units[0]", "newton", mu1.singleUnits[0]->getSimpleUnitID());
+        assertEquals("mu1 = move(mu2): units[1]", "meter", mu1.singleUnits[1]->getSimpleUnitID());
+    }
 
     mu1 = MeasureUnitImpl::forIdentifier("hour-and-minute-and-second", status);
     status.assertSuccess();
     assertEquals("mu1 = HMS: identifier", "", mu1.identifier.data());
     assertEquals("mu1 = HMS: complexity", UMEASURE_UNIT_MIXED, mu1.complexity);
     assertEquals("mu1 = HMS: units length", 3, mu1.singleUnits.length());
-    assertEquals("mu1 = HMS: units[0]", "hour", mu1.singleUnits[0]->getSimpleUnitID());
-    assertEquals("mu1 = HMS: units[1]", "minute", mu1.singleUnits[1]->getSimpleUnitID());
-    assertEquals("mu1 = HMS: units[2]", "second", mu1.singleUnits[2]->getSimpleUnitID());
+    if (mu1.singleUnits.length() >= 3) {
+        assertEquals("mu1 = HMS: units[0]", "hour", mu1.singleUnits[0]->getSimpleUnitID());
+        assertEquals("mu1 = HMS: units[1]", "minute", mu1.singleUnits[1]->getSimpleUnitID());
+        assertEquals("mu1 = HMS: units[2]", "second", mu1.singleUnits[2]->getSimpleUnitID());
+    }
 
     MeasureUnitImpl m2 = MeasureUnitImpl::forIdentifier("", status);
     m2.appendSingleUnit(SingleUnitImpl::forMeasureUnit(MeasureUnit::getMeter(), status), status);
@@ -4628,7 +4638,9 @@
     status.assertSuccess();
     assertEquals("append meter twice: complexity", UMEASURE_UNIT_SINGLE, m2.complexity);
     assertEquals("append meter twice: units length", 1, m2.singleUnits.length());
-    assertEquals("append meter twice: units[0]", "meter", m2.singleUnits[0]->getSimpleUnitID());
+    if (mu1.singleUnits.length() >= 1) {
+        assertEquals("append meter twice: units[0]", "meter", m2.singleUnits[0]->getSimpleUnitID());
+    }
     assertEquals("append meter twice: identifier", "square-meter",
                  std::move(m2).build(status).getIdentifier());
 
@@ -4638,8 +4650,12 @@
     status.assertSuccess();
     assertEquals("append meter & centimeter: complexity", UMEASURE_UNIT_COMPOUND, mcm.complexity);
     assertEquals("append meter & centimeter: units length", 2, mcm.singleUnits.length());
-    assertEquals("append meter & centimeter: units[0]", "meter", mcm.singleUnits[0]->getSimpleUnitID());
-    assertEquals("append meter & centimeter: units[1]", "meter", mcm.singleUnits[1]->getSimpleUnitID());
+    if (mu1.singleUnits.length() >= 2) {
+        assertEquals("append meter & centimeter: units[0]", "meter",
+                     mcm.singleUnits[0]->getSimpleUnitID());
+        assertEquals("append meter & centimeter: units[1]", "meter",
+                     mcm.singleUnits[1]->getSimpleUnitID());
+    }
     assertEquals("append meter & centimeter: identifier", "centimeter-meter",
                  std::move(mcm).build(status).getIdentifier());
 
@@ -4647,7 +4663,9 @@
     status.assertSuccess();
     assertEquals("meter-square-meter: complexity", UMEASURE_UNIT_SINGLE, m2m.complexity);
     assertEquals("meter-square-meter: units length", 1, m2m.singleUnits.length());
-    assertEquals("meter-square-meter: units[0]", "meter", m2m.singleUnits[0]->getSimpleUnitID());
+    if (mu1.singleUnits.length() >= 1) {
+        assertEquals("meter-square-meter: units[0]", "meter", m2m.singleUnits[0]->getSimpleUnitID());
+    }
     assertEquals("meter-square-meter: identifier", "cubic-meter",
                  std::move(m2m).build(status).getIdentifier());
 }