Fix self-test for JitterVerification test case

This CL is to fix a bug caused by a recent change in JitterVerification.
The bug triggers a failure in JitterVerificationTest, which affects more devices
than JitterVerification.

Related bugs:
  * b/24367328
  * b/24373707

Change-Id: Ia68a00724e61759dd11b7ab067071f58462fcb01
diff --git a/tests/tests/hardware/src/android/hardware/cts/helpers/SensorCtsHelper.java b/tests/tests/hardware/src/android/hardware/cts/helpers/SensorCtsHelper.java
index a69dc54..9cb3710 100644
--- a/tests/tests/hardware/src/android/hardware/cts/helpers/SensorCtsHelper.java
+++ b/tests/tests/hardware/src/android/hardware/cts/helpers/SensorCtsHelper.java
@@ -40,6 +40,9 @@
     /**
      * Get percentiles using nearest rank algorithm.
      *
+     * @param percentiles List of percentiles interested. Its range is 0 to 1, instead of in %.
+     *        The value will be internally bounded.
+     *
      * @throws IllegalArgumentException if the collection or percentiles is null or empty
      */
     public static <TValue extends Comparable<? super TValue>> List<TValue> getPercentileValue(
@@ -55,7 +58,9 @@
         List<TValue> percentileValues = new ArrayList<TValue>();
         for (float p : percentiles) {
             // zero-based array index
-            int arrayIndex = (int) Math.round(arrayCopy.size() * p + .5) - 1;
+            int arrayIndex = (int) Math.round(arrayCopy.size() * p - .5f);
+            // bound the index to avoid out of range error
+            arrayIndex = Math.min(Math.max(arrayIndex, 0), arrayCopy.size() - 1);
             percentileValues.add(arrayCopy.get(arrayIndex));
         }
         return percentileValues;
diff --git a/tests/tests/hardware/src/android/hardware/cts/helpers/sensorverification/JitterVerification.java b/tests/tests/hardware/src/android/hardware/cts/helpers/sensorverification/JitterVerification.java
index d9ee5b8..9d36f37 100644
--- a/tests/tests/hardware/src/android/hardware/cts/helpers/sensorverification/JitterVerification.java
+++ b/tests/tests/hardware/src/android/hardware/cts/helpers/sensorverification/JitterVerification.java
@@ -16,8 +16,6 @@
 
 package android.hardware.cts.helpers.sensorverification;
 
-import junit.framework.Assert;
-
 import android.content.Context;
 import android.content.pm.PackageManager;
 
@@ -34,6 +32,7 @@
 import java.util.ArrayList;
 import java.util.LinkedList;
 import java.util.List;
+import junit.framework.Assert;
 
 /**
  * A {@link ISensorVerification} which verifies that the sensor jitter is in an acceptable range.
diff --git a/tests/tests/hardware/src/android/hardware/cts/helpers/sensorverification/JitterVerificationTest.java b/tests/tests/hardware/src/android/hardware/cts/helpers/sensorverification/JitterVerificationTest.java
index 79c3b65..d8e1586 100644
--- a/tests/tests/hardware/src/android/hardware/cts/helpers/sensorverification/JitterVerificationTest.java
+++ b/tests/tests/hardware/src/android/hardware/cts/helpers/sensorverification/JitterVerificationTest.java
@@ -66,7 +66,8 @@
         } catch (AssertionError e) {
             // Expected;
         }
-        verifyStats(stats, false, 50); // 500 us range divide by 1ms requested sample time x 100%
+        verifyStats(stats, false, 25); // 500 us range (250 us in single-sided sense)
+                                       // divide by 1ms requested sample time x 100%
     }
 
     public void testCalculateDelta() {
@@ -74,48 +75,48 @@
         JitterVerification verification = getVerification(1, timestamps);
         List<Long> deltaValues = verification.getDeltaValues();
         assertEquals(4, deltaValues.size());
-        assertEquals(1, deltaValues.get(0).doubleValue());
-        assertEquals(1, deltaValues.get(1).doubleValue());
-        assertEquals(1, deltaValues.get(2).doubleValue());
-        assertEquals(1, deltaValues.get(3).doubleValue());
+        assertEquals(1, deltaValues.get(0).longValue());
+        assertEquals(1, deltaValues.get(1).longValue());
+        assertEquals(1, deltaValues.get(2).longValue());
+        assertEquals(1, deltaValues.get(3).longValue());
 
         timestamps = new long[]{0, 0, 2, 4, 4};
         verification = getVerification(1, timestamps);
         deltaValues = verification.getDeltaValues();
         assertEquals(4, deltaValues.size());
-        assertEquals(0, deltaValues.get(0).doubleValue());
-        assertEquals(2, deltaValues.get(1).doubleValue());
-        assertEquals(2, deltaValues.get(2).doubleValue());
-        assertEquals(0, deltaValues.get(3).doubleValue());
+        assertEquals(0, deltaValues.get(0).longValue());
+        assertEquals(2, deltaValues.get(1).longValue());
+        assertEquals(2, deltaValues.get(2).longValue());
+        assertEquals(0, deltaValues.get(3).longValue());
 
         timestamps = new long[]{0, 1, 4, 9, 16};
         verification = getVerification(1, timestamps);
         deltaValues = verification.getDeltaValues();
         assertEquals(4, deltaValues.size());
-        assertEquals(1, deltaValues.get(0).doubleValue());
-        assertEquals(3, deltaValues.get(1).doubleValue());
-        assertEquals(5, deltaValues.get(2).doubleValue());
-        assertEquals(7, deltaValues.get(3).doubleValue());
+        assertEquals(1, deltaValues.get(0).longValue());
+        assertEquals(3, deltaValues.get(1).longValue());
+        assertEquals(5, deltaValues.get(2).longValue());
+        assertEquals(7, deltaValues.get(3).longValue());
     }
 
-    private static JitterVerification getVerification(int threshold, long ... timestamps) {
+    private static JitterVerification getVerification(int marginPercent, long ... timestamps) {
         Collection<TestSensorEvent> events = new ArrayList<>(timestamps.length);
         for (long timestamp : timestamps) {
             events.add(new TestSensorEvent(null, timestamp, 0, null));
         }
         long samplePeriodNs = 1000*1000; //1000Hz
-        long jitterThresholdNs = 20*1000; // 2%
+        long jitterThresholdNs = 20*1000; // 2% of that
 
         JitterVerification verification =
-                new JitterVerification(threshold, jitterThresholdNs, samplePeriodNs);
+                new JitterVerification(marginPercent/100.0f, jitterThresholdNs, samplePeriodNs);
         verification.addSensorEvents(events);
         return verification;
     }
 
-    private void verifyStats(SensorStats stats, boolean passed, double normalizedRange) {
+    private void verifyStats(SensorStats stats, boolean passed, double percentageJitter) {
         assertEquals(passed, stats.getValue(JitterVerification.PASSED_KEY));
         assertEquals(
-                normalizedRange,
+                percentageJitter,
                 (Double) stats.getValue(SensorStats.JITTER_95_PERCENTILE_PERCENT_KEY),
                 0.01);
     }