1from fontTools.varLib.builder import buildVarData 2import pytest 3 4 5@pytest.mark.parametrize("region_indices, items, expected_num_shorts", [ 6 ([], [], 0), 7 ([0], [[1]], 0), 8 ([0], [[128]], 1), 9 ([0, 1, 2], [[128, 1, 2], [3, -129, 5], [6, 7, 8]], 2), 10 ([0, 1, 2], [[0, 128, 2], [3, 4, 5], [6, 7, -129]], 3), 11 ([0], [[32768]], 0x8001), 12 ([0, 1, 2], [[32768, 1, 2], [3, -129, 5], [6, 7, 8]], 0x8001), 13 ([0, 1, 2], [[32768, 1, 2], [3, -32769, 5], [6, 7, 8]], 0x8002), 14 ([0, 1, 2], [[0, 32768, 2], [3, 4, 5], [6, 7, -32769]], 0x8003), 15], ids=[ 16 "0_regions_0_deltas", 17 "1_region_1_uint8", 18 "1_region_1_short", 19 "3_regions_2_shorts_ordered", 20 "3_regions_2_shorts_unordered", 21 "1_region_1_long", 22 "3_regions_1_long_ordered", 23 "3_regions_2_longs_ordered", 24 "3_regions_2_longs_unordered", 25]) 26def test_buildVarData_no_optimize(region_indices, items, expected_num_shorts): 27 data = buildVarData(region_indices, items, optimize=False) 28 29 assert data.ItemCount == len(items) 30 assert data.NumShorts == expected_num_shorts 31 assert data.VarRegionCount == len(region_indices) 32 assert data.VarRegionIndex == region_indices 33 assert data.Item == items 34 35 36@pytest.mark.parametrize([ 37 "region_indices", "items", "expected_num_shorts", 38 "expected_regions", "expected_items" 39], [ 40 ([0, 1, 2], [[0, 1, 2], [3, 4, 5], [6, 7, 8]], 0, 41 [0, 1, 2], [[0, 1, 2], [3, 4, 5], [6, 7, 8]]), 42 ([0, 1, 2], [[0, 128, 2], [3, 4, 5], [6, 7, 8]], 1, 43 [1, 0, 2], [[128, 0, 2], [4, 3, 5], [7, 6, 8]]), 44 ([0, 1, 2], [[0, 1, 128], [3, 4, 5], [6, -129, 8]], 2, 45 [1, 2, 0], [[1, 128, 0], [4, 5, 3], [-129, 8, 6]]), 46 ([0, 1, 2], [[128, 1, -129], [3, 4, 5], [6, 7, 8]], 2, 47 [0, 2, 1], [[128, -129, 1], [3, 5, 4], [6, 8, 7]]), 48 ([0, 1, 2], [[0, 1, 128], [3, -129, 5], [256, 7, 8]], 3, 49 [0, 1, 2], [[0, 1, 128], [3, -129, 5], [256, 7, 8]]), 50 ([0, 1, 2], [[0, 128, 2], [0, 4, 5], [0, 7, 8]], 1, 51 [1, 2], [[128, 2], [4, 5], [7, 8]]), 52 ([0, 1, 2], [[0, 32768, 2], [3, 4, 5], [6, 7, 8]], 0x8001, 53 [1, 0, 2], [[32768, 0, 2], [4, 3, 5], [7, 6, 8]]), 54 ([0, 1, 2], [[0, 1, 32768], [3, 4, 5], [6, -32769, 8]], 0x8002, 55 [1, 2, 0], [[1, 32768, 0], [4, 5, 3], [-32769, 8, 6]]), 56 ([0, 1, 2], [[32768, 1, -32769], [3, 4, 5], [6, 7, 8]], 0x8002, 57 [0, 2, 1], [[32768, -32769, 1], [3, 5, 4], [6, 8, 7]]), 58 ([0, 1, 2], [[0, 1, 32768], [3, -32769, 5], [65536, 7, 8]], 0x8003, 59 [0, 1, 2], [[0, 1, 32768], [3, -32769, 5], [65536, 7, 8]]), 60 ([0, 1, 2], [[0, 32768, 2], [0, 4, 5], [0, 7, 8]], 0x8001, 61 [1, 2], [[32768, 2], [4, 5], [7, 8]]), 62], ids=[ 63 "0/3_shorts_no_reorder", 64 "1/3_shorts_reorder", 65 "2/3_shorts_reorder", 66 "2/3_shorts_same_row_reorder", 67 "3/3_shorts_no_reorder", 68 "1/3_shorts_1/3_zeroes", 69 "1/3_longs_reorder", 70 "2/3_longs_reorder", 71 "2/3_longs_same_row_reorder", 72 "3/3_longs_no_reorder", 73 "1/3_longs_1/3_zeroes", 74]) 75def test_buildVarData_optimize( 76 region_indices, items, expected_num_shorts, expected_regions, 77 expected_items): 78 data = buildVarData(region_indices, items, optimize=True) 79 80 assert data.ItemCount == len(items) 81 assert data.NumShorts == expected_num_shorts 82 assert data.VarRegionCount == len(expected_regions) 83 assert data.VarRegionIndex == expected_regions 84 assert data.Item == expected_items 85 86 87if __name__ == "__main__": 88 import sys 89 sys.exit(pytest.main(sys.argv)) 90