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);
}