From 0ae54f4797e2a5421df915ceb127ca2367f9c8ee Mon Sep 17 00:00:00 2001 From: Tyler Freeman Date: Fri, 3 Mar 2023 17:31:00 +0000 Subject: [PATCH] fix(non linear font scaling): fix test from timing out. Reduce number of fractions tested by an order of magnitude. Instead use fuzzed random numbers to test. Fix: 270054472 Test: atest FrameworksCoreTests:android.content.res.FontScaleConverterFactoryTest Change-Id: Ifffee2e9c33e81152d5e6b9a1b7ad77e925a48c7 --- .../res/FontScaleConverterFactoryTest.kt | 39 +++++++++++++++++-- 1 file changed, 36 insertions(+), 3 deletions(-) diff --git a/core/tests/coretests/src/android/content/res/FontScaleConverterFactoryTest.kt b/core/tests/coretests/src/android/content/res/FontScaleConverterFactoryTest.kt index e48f8a01d7381..a0d8dcf830e87 100644 --- a/core/tests/coretests/src/android/content/res/FontScaleConverterFactoryTest.kt +++ b/core/tests/coretests/src/android/content/res/FontScaleConverterFactoryTest.kt @@ -28,6 +28,7 @@ import kotlin.math.ceil import kotlin.math.floor import org.junit.Test import org.junit.runner.RunWith +import kotlin.random.Random.Default.nextFloat @Presubmit @RunWith(AndroidJUnit4::class) @@ -124,10 +125,12 @@ class FontScaleConverterFactoryTest { @LargeTest @Test fun allFeasibleScalesAndConversionsDoNotCrash() { - generateSequenceOfFractions(-10f..10f, step = 0.01f) - .mapNotNull{ FontScaleConverterFactory.forScale(it) }!! + generateSequenceOfFractions(-10f..10f, step = 0.1f) + .fuzzFractions() + .mapNotNull{ FontScaleConverterFactory.forScale(it) } .flatMap{ table -> - generateSequenceOfFractions(-2000f..2000f, step = 0.01f) + generateSequenceOfFractions(-2000f..2000f, step = 0.1f) + .fuzzFractions() .map{ Pair(table, it) } } .forEach { (table, sp) -> @@ -172,6 +175,30 @@ class FontScaleConverterFactoryTest { assertThat(fractions).doesNotContain(-.35f) } + @Test + fun testFuzzFractions() { + val numFuzzedFractions = 6 + val fractions = generateSequenceOfFractions(-1000f..1000f, step = 0.1f) + .fuzzFractions() + .toList() + fractions.forEach { + assertThat(it).isAtLeast(-1000f) + assertThat(it).isLessThan(1001f) + } + + val numGeneratedFractions = 1000 * 2 * 10 + 1 // Don't forget the 0 in the middle! + assertThat(fractions).hasSize(numGeneratedFractions * numFuzzedFractions) + + assertThat(fractions).contains(100f) + assertThat(fractions).contains(500.1f) + assertThat(fractions).contains(500.2f) + assertThat(fractions).contains(0.2f) + assertThat(fractions).contains(0f) + assertThat(fractions).contains(-10f) + assertThat(fractions).contains(-10f) + assertThat(fractions).contains(-10.3f) + } + companion object { private const val CONVERSION_TOLERANCE = 0.05f } @@ -188,3 +215,9 @@ fun generateSequenceOfFractions( .takeWhile { it <= endInclusive } .map{ it.toFloat() / multiplier } } + +private fun Sequence.fuzzFractions(): Sequence { + return flatMap { i -> + listOf(i, i + 0.01f, i + 0.054f, i + 0.099f, i + nextFloat(), i + nextFloat()) + } +}