varStore_test: shuffle input order to test algorithm is stable

This commit is contained in:
Cosimo Lupo 2025-02-07 11:06:57 +00:00
parent d4565155b8
commit 0068f78b9a

View File

@ -1,4 +1,5 @@
import pytest
import random
from io import StringIO
from fontTools.misc.xmlWriter import XMLWriter
from fontTools.misc.roundTools import noRound
@ -45,6 +46,17 @@ from fontTools.ttLib.tables.otTables import VarStore
[100, 22000, 4000, 173000],
],
),
(
[{}, {"a": 1}, {"b": 1}, {"a": 1, "b": 1}],
[
[random.randint(-128, 127) for _ in range(4)],
[random.randint(-128, 127) for _ in range(4)],
[random.randint(-128, 127) for _ in range(4)],
[random.randint(-32768, 32767) for _ in range(4)],
[random.randint(-32768, 32767) for _ in range(4)],
[random.randint(-32768, 32767) for _ in range(4)],
],
),
],
)
def test_onlineVarStoreBuilder(locations, masterValues):
@ -53,6 +65,8 @@ def test_onlineVarStoreBuilder(locations, masterValues):
builder = OnlineVarStoreBuilder(axisTags)
builder.setModel(model)
varIdxs = []
# shuffle input order to ensure optimizer produces stable results
random.shuffle(masterValues)
for masters in masterValues:
_, varIdx = builder.storeMasters(masters)
varIdxs.append(varIdx)
@ -178,6 +192,7 @@ def test_optimize(numRegions, varData, expectedNumVarData, expectedBytes):
builder = OnlineVarStoreBuilder(axisTags)
builder.setModel(model)
random.shuffle(varData)
for data in varData:
if type(data) is dict:
newData = [0] * numRegions
@ -240,6 +255,7 @@ def test_quantize(quantization, expectedBytes):
builder = OnlineVarStoreBuilder(axisTags)
builder.setModel(model)
random.shuffle(varData)
for data in varData:
builder.storeMasters(data)
@ -268,7 +284,9 @@ def test_optimize_overflow():
builder = OnlineVarStoreBuilder(axisTags)
builder.setModel(model)
for data in range(0, 0xFFFF * 2):
varData = list(range(0, 0xFFFF * 2))
random.shuffle(varData)
for data in varData:
data = [0, data]
builder.storeMasters(data, round=noRound)