• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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