xref: /aosp_15_r20/external/fonttools/Tests/varLib/iup_test.py (revision e1fe3e4ad2793916b15cccdc4a7da52a7e1dd0e9)
1*e1fe3e4aSElliott Hughesimport fontTools.varLib.iup as iup
2*e1fe3e4aSElliott Hughesimport sys
3*e1fe3e4aSElliott Hughesimport pytest
4*e1fe3e4aSElliott Hughes
5*e1fe3e4aSElliott Hughes
6*e1fe3e4aSElliott Hughesclass IupTest:
7*e1fe3e4aSElliott Hughes    # -----
8*e1fe3e4aSElliott Hughes    # Tests
9*e1fe3e4aSElliott Hughes    # -----
10*e1fe3e4aSElliott Hughes
11*e1fe3e4aSElliott Hughes    @pytest.mark.parametrize(
12*e1fe3e4aSElliott Hughes        "delta, coords, forced",
13*e1fe3e4aSElliott Hughes        [
14*e1fe3e4aSElliott Hughes            ([(0, 0)], [(1, 2)], set()),
15*e1fe3e4aSElliott Hughes            ([(0, 0), (0, 0), (0, 0)], [(1, 2), (3, 2), (2, 3)], set()),
16*e1fe3e4aSElliott Hughes            (
17*e1fe3e4aSElliott Hughes                [(1, 1), (-1, 1), (-1, -1), (1, -1)],
18*e1fe3e4aSElliott Hughes                [(0, 0), (2, 0), (2, 2), (0, 2)],
19*e1fe3e4aSElliott Hughes                set(),
20*e1fe3e4aSElliott Hughes            ),
21*e1fe3e4aSElliott Hughes            (
22*e1fe3e4aSElliott Hughes                [
23*e1fe3e4aSElliott Hughes                    (-1, 0),
24*e1fe3e4aSElliott Hughes                    (-1, 0),
25*e1fe3e4aSElliott Hughes                    (-1, 0),
26*e1fe3e4aSElliott Hughes                    (-1, 0),
27*e1fe3e4aSElliott Hughes                    (-1, 0),
28*e1fe3e4aSElliott Hughes                    (0, 0),
29*e1fe3e4aSElliott Hughes                    (0, 0),
30*e1fe3e4aSElliott Hughes                    (0, 0),
31*e1fe3e4aSElliott Hughes                    (0, 0),
32*e1fe3e4aSElliott Hughes                    (0, 0),
33*e1fe3e4aSElliott Hughes                    (0, 0),
34*e1fe3e4aSElliott Hughes                    (-1, 0),
35*e1fe3e4aSElliott Hughes                ],
36*e1fe3e4aSElliott Hughes                [
37*e1fe3e4aSElliott Hughes                    (-35, -152),
38*e1fe3e4aSElliott Hughes                    (-86, -101),
39*e1fe3e4aSElliott Hughes                    (-50, -65),
40*e1fe3e4aSElliott Hughes                    (0, -116),
41*e1fe3e4aSElliott Hughes                    (51, -65),
42*e1fe3e4aSElliott Hughes                    (86, -99),
43*e1fe3e4aSElliott Hughes                    (35, -151),
44*e1fe3e4aSElliott Hughes                    (87, -202),
45*e1fe3e4aSElliott Hughes                    (51, -238),
46*e1fe3e4aSElliott Hughes                    (-1, -187),
47*e1fe3e4aSElliott Hughes                    (-53, -239),
48*e1fe3e4aSElliott Hughes                    (-88, -205),
49*e1fe3e4aSElliott Hughes                ],
50*e1fe3e4aSElliott Hughes                {11},
51*e1fe3e4aSElliott Hughes            ),
52*e1fe3e4aSElliott Hughes            (
53*e1fe3e4aSElliott Hughes                [
54*e1fe3e4aSElliott Hughes                    (0, 0),
55*e1fe3e4aSElliott Hughes                    (1, 0),
56*e1fe3e4aSElliott Hughes                    (2, 0),
57*e1fe3e4aSElliott Hughes                    (2, 0),
58*e1fe3e4aSElliott Hughes                    (0, 0),
59*e1fe3e4aSElliott Hughes                    (1, 0),
60*e1fe3e4aSElliott Hughes                    (3, 0),
61*e1fe3e4aSElliott Hughes                    (3, 0),
62*e1fe3e4aSElliott Hughes                    (2, 0),
63*e1fe3e4aSElliott Hughes                    (2, 0),
64*e1fe3e4aSElliott Hughes                    (0, 0),
65*e1fe3e4aSElliott Hughes                    (0, 0),
66*e1fe3e4aSElliott Hughes                    (-1, 0),
67*e1fe3e4aSElliott Hughes                    (-1, 0),
68*e1fe3e4aSElliott Hughes                    (-1, 0),
69*e1fe3e4aSElliott Hughes                    (-3, 0),
70*e1fe3e4aSElliott Hughes                    (-1, 0),
71*e1fe3e4aSElliott Hughes                    (0, 0),
72*e1fe3e4aSElliott Hughes                    (0, 0),
73*e1fe3e4aSElliott Hughes                    (-2, 0),
74*e1fe3e4aSElliott Hughes                    (-2, 0),
75*e1fe3e4aSElliott Hughes                    (-1, 0),
76*e1fe3e4aSElliott Hughes                    (-1, 0),
77*e1fe3e4aSElliott Hughes                    (-1, 0),
78*e1fe3e4aSElliott Hughes                    (-4, 0),
79*e1fe3e4aSElliott Hughes                ],
80*e1fe3e4aSElliott Hughes                [
81*e1fe3e4aSElliott Hughes                    (330, 65),
82*e1fe3e4aSElliott Hughes                    (401, 65),
83*e1fe3e4aSElliott Hughes                    (499, 117),
84*e1fe3e4aSElliott Hughes                    (549, 225),
85*e1fe3e4aSElliott Hughes                    (549, 308),
86*e1fe3e4aSElliott Hughes                    (549, 422),
87*e1fe3e4aSElliott Hughes                    (549, 500),
88*e1fe3e4aSElliott Hughes                    (497, 600),
89*e1fe3e4aSElliott Hughes                    (397, 648),
90*e1fe3e4aSElliott Hughes                    (324, 648),
91*e1fe3e4aSElliott Hughes                    (271, 648),
92*e1fe3e4aSElliott Hughes                    (200, 620),
93*e1fe3e4aSElliott Hughes                    (165, 570),
94*e1fe3e4aSElliott Hughes                    (165, 536),
95*e1fe3e4aSElliott Hughes                    (165, 473),
96*e1fe3e4aSElliott Hughes                    (252, 407),
97*e1fe3e4aSElliott Hughes                    (355, 407),
98*e1fe3e4aSElliott Hughes                    (396, 407),
99*e1fe3e4aSElliott Hughes                    (396, 333),
100*e1fe3e4aSElliott Hughes                    (354, 333),
101*e1fe3e4aSElliott Hughes                    (249, 333),
102*e1fe3e4aSElliott Hughes                    (141, 268),
103*e1fe3e4aSElliott Hughes                    (141, 203),
104*e1fe3e4aSElliott Hughes                    (141, 131),
105*e1fe3e4aSElliott Hughes                    (247, 65),
106*e1fe3e4aSElliott Hughes                ],
107*e1fe3e4aSElliott Hughes                {5, 15, 24},
108*e1fe3e4aSElliott Hughes            ),
109*e1fe3e4aSElliott Hughes        ],
110*e1fe3e4aSElliott Hughes    )
111*e1fe3e4aSElliott Hughes    def test_forced_set(self, delta, coords, forced):
112*e1fe3e4aSElliott Hughes        f = iup._iup_contour_bound_forced_set(delta, coords)
113*e1fe3e4aSElliott Hughes        assert forced == f
114*e1fe3e4aSElliott Hughes
115*e1fe3e4aSElliott Hughes        chain1, costs1 = iup._iup_contour_optimize_dp(delta, coords, f)
116*e1fe3e4aSElliott Hughes        chain2, costs2 = iup._iup_contour_optimize_dp(delta, coords, set())
117*e1fe3e4aSElliott Hughes
118*e1fe3e4aSElliott Hughes        assert chain1 == chain2, f
119*e1fe3e4aSElliott Hughes        assert costs1 == costs2, f
120*e1fe3e4aSElliott Hughes
121*e1fe3e4aSElliott Hughes
122*e1fe3e4aSElliott Hughesif __name__ == "__main__":
123*e1fe3e4aSElliott Hughes    sys.exit(pytest.main(sys.argv))
124