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