1from fontTools.varLib.builder import buildVarData 2import pytest 3 4 5@pytest.mark.parametrize( 6 "region_indices, items, expected_num_shorts", 7 [ 8 ([], [], 0), 9 ([0], [[1]], 0), 10 ([0], [[128]], 1), 11 ([0, 1, 2], [[128, 1, 2], [3, -129, 5], [6, 7, 8]], 2), 12 ([0, 1, 2], [[0, 128, 2], [3, 4, 5], [6, 7, -129]], 3), 13 ([0], [[32768]], 0x8001), 14 ([0, 1, 2], [[32768, 1, 2], [3, -129, 5], [6, 7, 8]], 0x8001), 15 ([0, 1, 2], [[32768, 1, 2], [3, -32769, 5], [6, 7, 8]], 0x8002), 16 ([0, 1, 2], [[0, 32768, 2], [3, 4, 5], [6, 7, -32769]], 0x8003), 17 ], 18 ids=[ 19 "0_regions_0_deltas", 20 "1_region_1_uint8", 21 "1_region_1_short", 22 "3_regions_2_shorts_ordered", 23 "3_regions_2_shorts_unordered", 24 "1_region_1_long", 25 "3_regions_1_long_ordered", 26 "3_regions_2_longs_ordered", 27 "3_regions_2_longs_unordered", 28 ], 29) 30def test_buildVarData_no_optimize(region_indices, items, expected_num_shorts): 31 data = buildVarData(region_indices, items, optimize=False) 32 33 assert data.ItemCount == len(items) 34 assert data.NumShorts == expected_num_shorts 35 assert data.VarRegionCount == len(region_indices) 36 assert data.VarRegionIndex == region_indices 37 assert data.Item == items 38 39 40@pytest.mark.parametrize( 41 [ 42 "region_indices", 43 "items", 44 "expected_num_shorts", 45 "expected_regions", 46 "expected_items", 47 ], 48 [ 49 ( 50 [0, 1, 2], 51 [[0, 1, 2], [3, 4, 5], [6, 7, 8]], 52 0, 53 [0, 1, 2], 54 [[0, 1, 2], [3, 4, 5], [6, 7, 8]], 55 ), 56 ( 57 [0, 1, 2], 58 [[0, 128, 2], [3, 4, 5], [6, 7, 8]], 59 1, 60 [1, 0, 2], 61 [[128, 0, 2], [4, 3, 5], [7, 6, 8]], 62 ), 63 ( 64 [0, 1, 2], 65 [[0, 1, 128], [3, 4, 5], [6, -129, 8]], 66 2, 67 [1, 2, 0], 68 [[1, 128, 0], [4, 5, 3], [-129, 8, 6]], 69 ), 70 ( 71 [0, 1, 2], 72 [[128, 1, -129], [3, 4, 5], [6, 7, 8]], 73 2, 74 [0, 2, 1], 75 [[128, -129, 1], [3, 5, 4], [6, 8, 7]], 76 ), 77 ( 78 [0, 1, 2], 79 [[0, 1, 128], [3, -129, 5], [256, 7, 8]], 80 3, 81 [0, 1, 2], 82 [[0, 1, 128], [3, -129, 5], [256, 7, 8]], 83 ), 84 ( 85 [0, 1, 2], 86 [[0, 128, 2], [0, 4, 5], [0, 7, 8]], 87 1, 88 [1, 2], 89 [[128, 2], [4, 5], [7, 8]], 90 ), 91 ( 92 [0, 1, 2], 93 [[0, 32768, 2], [3, 4, 5], [6, 7, 8]], 94 0x8001, 95 [1, 0, 2], 96 [[32768, 0, 2], [4, 3, 5], [7, 6, 8]], 97 ), 98 ( 99 [0, 1, 2], 100 [[0, 1, 32768], [3, 4, 5], [6, -32769, 8]], 101 0x8002, 102 [1, 2, 0], 103 [[1, 32768, 0], [4, 5, 3], [-32769, 8, 6]], 104 ), 105 ( 106 [0, 1, 2], 107 [[32768, 1, -32769], [3, 4, 5], [6, 7, 8]], 108 0x8002, 109 [0, 2, 1], 110 [[32768, -32769, 1], [3, 5, 4], [6, 8, 7]], 111 ), 112 ( 113 [0, 1, 2], 114 [[0, 1, 32768], [3, -32769, 5], [65536, 7, 8]], 115 0x8003, 116 [0, 1, 2], 117 [[0, 1, 32768], [3, -32769, 5], [65536, 7, 8]], 118 ), 119 ( 120 [0, 1, 2], 121 [[0, 32768, 2], [0, 4, 5], [0, 7, 8]], 122 0x8001, 123 [1, 2], 124 [[32768, 2], [4, 5], [7, 8]], 125 ), 126 ], 127 ids=[ 128 "0/3_shorts_no_reorder", 129 "1/3_shorts_reorder", 130 "2/3_shorts_reorder", 131 "2/3_shorts_same_row_reorder", 132 "3/3_shorts_no_reorder", 133 "1/3_shorts_1/3_zeroes", 134 "1/3_longs_reorder", 135 "2/3_longs_reorder", 136 "2/3_longs_same_row_reorder", 137 "3/3_longs_no_reorder", 138 "1/3_longs_1/3_zeroes", 139 ], 140) 141def test_buildVarData_optimize( 142 region_indices, items, expected_num_shorts, expected_regions, expected_items 143): 144 data = buildVarData(region_indices, items, optimize=True) 145 146 assert data.ItemCount == len(items) 147 assert data.NumShorts == expected_num_shorts 148 assert data.VarRegionCount == len(expected_regions) 149 assert data.VarRegionIndex == expected_regions 150 assert data.Item == expected_items 151 152 153if __name__ == "__main__": 154 import sys 155 156 sys.exit(pytest.main(sys.argv)) 157