Loosen speed check for first GPS location

As it is often found in a short integration
window with very high Doppler uncertainty.

Bug: 67877519
Merged-In: Ia05359f572f4ea7be81f9d5fe30bd619322bebd3
Test: Verified Pixel still passes VTS
Change-Id: Ia05359f572f4ea7be81f9d5fe30bd619322bebd3
diff --git a/gnss/1.0/vts/functional/VtsHalGnssV1_0TargetTest.cpp b/gnss/1.0/vts/functional/VtsHalGnssV1_0TargetTest.cpp
index 53181f1..c90c53d 100644
--- a/gnss/1.0/vts/functional/VtsHalGnssV1_0TargetTest.cpp
+++ b/gnss/1.0/vts/functional/VtsHalGnssV1_0TargetTest.cpp
@@ -208,10 +208,13 @@
  * CheckLocation:
  * Helper function to vet Location fields
  */
-void CheckLocation(GnssLocation& location, bool checkAccuracies) {
+void CheckLocation(GnssLocation& location, bool checkAccuracies,
+                   bool checkSpeed) {
   EXPECT_TRUE(location.gnssLocationFlags & GnssLocationFlags::HAS_LAT_LONG);
   EXPECT_TRUE(location.gnssLocationFlags & GnssLocationFlags::HAS_ALTITUDE);
-  EXPECT_TRUE(location.gnssLocationFlags & GnssLocationFlags::HAS_SPEED);
+  if (checkSpeed) {
+    EXPECT_TRUE(location.gnssLocationFlags & GnssLocationFlags::HAS_SPEED);
+  }
   EXPECT_TRUE(location.gnssLocationFlags &
               GnssLocationFlags::HAS_HORIZONTAL_ACCURACY);
   // New uncertainties available in O must be provided,
@@ -232,12 +235,15 @@
   EXPECT_LE(location.longitudeDegrees, 180.0);
   EXPECT_GE(location.altitudeMeters, -1000.0);
   EXPECT_LE(location.altitudeMeters, 30000.0);
-  EXPECT_GE(location.speedMetersPerSec, 0.0);
-  EXPECT_LE(location.speedMetersPerSec, 5.0);  // VTS tests are stationary.
+  if (checkSpeed) {
+    // VTS tests are stationary.  5.0m/s max allows for measurement noise.
+    EXPECT_GE(location.speedMetersPerSec, 0.0);
+    EXPECT_LE(location.speedMetersPerSec, 5.0);
 
-  // Non-zero speeds must be reported with an associated bearing
-  if (location.speedMetersPerSec > 0.0) {
-    EXPECT_TRUE(location.gnssLocationFlags & GnssLocationFlags::HAS_BEARING);
+    // Non-zero speeds must be reported with an associated bearing
+    if (location.speedMetersPerSec > 0.0) {
+      EXPECT_TRUE(location.gnssLocationFlags & GnssLocationFlags::HAS_BEARING);
+    }
   }
 
   /*
@@ -299,7 +305,8 @@
     EXPECT_EQ(test->location_called_count_, 1);
   }
   if (test->location_called_count_ > 0) {
-    CheckLocation(test->last_location_, checkAccuracies);
+    // don't require speed on first fix
+    CheckLocation(test->last_location_, checkAccuracies, false /* checkSpeed */ );
     return true;
   }
   return false;
@@ -340,7 +347,7 @@
       EXPECT_EQ(std::cv_status::no_timeout,
           wait(LOCATION_TIMEOUT_SUBSEQUENT_SEC));
       EXPECT_EQ(location_called_count_, i + 1);
-      CheckLocation(last_location_, checkMoreAccuracies);
+      CheckLocation(last_location_, checkMoreAccuracies, true /* checkSpeed */);
     }
   }
 
@@ -450,4 +457,4 @@
   int status = RUN_ALL_TESTS();
   ALOGI("Test result = %d", status);
   return status;
-}
\ No newline at end of file
+}