10790
by The Widelands Bunnybot
Python files require python3 explicitly (CB #4529 / GH #6187) |
1 |
#!/usr/bin/env python3
|
6509.5.1
by Nicolai Hähnle
Hack on alternative spritemap generation (via rectangle coverings) |
2 |
|
8939
by Wideland's Bunnybot
Merged lp:~widelands-dev/widelands/appveyor_reenable_glbinding: |
3 |
import make_spritemap |
6509.5.1
by Nicolai Hähnle
Hack on alternative spritemap generation (via rectangle coverings) |
4 |
import numpy as np |
5 |
import os |
|
6 |
import sys |
|
7 |
import unittest |
|
8 |
||
8201
by GunChleoc
Fetched translations and updated catalogues. |
9 |
sys.path.append(os.path.normpath( |
10 |
os.path.dirname(os.path.abspath(__file__)) + '/..')) |
|
6509.5.1
by Nicolai Hähnle
Hack on alternative spritemap generation (via rectangle coverings) |
11 |
|
8201
by GunChleoc
Fetched translations and updated catalogues. |
12 |
|
6509.5.1
by Nicolai Hähnle
Hack on alternative spritemap generation (via rectangle coverings) |
13 |
class TestMinimumAverageCostRectangle(unittest.TestCase): |
14 |
def test_case1(self): |
|
15 |
FRAGMENT_COST = 4 |
|
16 |
bitmask = np.array([ |
|
17 |
[False, False, True], |
|
18 |
[False, False, False], |
|
19 |
[True, False, False], |
|
20 |
[True, False, False] |
|
21 |
])
|
|
8201
by GunChleoc
Fetched translations and updated catalogues. |
22 |
cost, rectangle = make_spritemap.minimum_average_cost_rectangle( |
23 |
bitmask, FRAGMENT_COST=FRAGMENT_COST) |
|
6509.5.1
by Nicolai Hähnle
Hack on alternative spritemap generation (via rectangle coverings) |
24 |
self.assertEqual(rectangle, (2, 0, 4, 1)) |
25 |
self.assertAlmostEqual(cost, (FRAGMENT_COST + 2) / 2.0) |
|
26 |
||
8201
by GunChleoc
Fetched translations and updated catalogues. |
27 |
|
6509.5.1
by Nicolai Hähnle
Hack on alternative spritemap generation (via rectangle coverings) |
28 |
class TestMinimumAverageCostGrow(unittest.TestCase): |
29 |
def test_basic_right(self): |
|
30 |
bitmask = np.array([ |
|
31 |
[False, False, False, False], |
|
32 |
[False, False, False, False], |
|
33 |
[False, True, True, False], |
|
34 |
[False, True, False, False], |
|
35 |
[False, False, False, False], |
|
36 |
])
|
|
8201
by GunChleoc
Fetched translations and updated catalogues. |
37 |
cost, rectangle = make_spritemap.minimum_average_cost_grow( |
38 |
bitmask, (2, 1, 4, 2)) |
|
6509.5.1
by Nicolai Hähnle
Hack on alternative spritemap generation (via rectangle coverings) |
39 |
self.assertEqual(rectangle, (2, 1, 4, 3)) |
40 |
self.assertAlmostEqual(cost, 2.0) |
|
41 |
||
8201
by GunChleoc
Fetched translations and updated catalogues. |
42 |
cost, rectangle = make_spritemap.minimum_average_cost_grow( |
43 |
bitmask, (2, 1, 4, 3)) |
|
6509.5.1
by Nicolai Hähnle
Hack on alternative spritemap generation (via rectangle coverings) |
44 |
self.assertEqual(rectangle, (2, 1, 4, 3)) |
45 |
self.assertEqual(cost, None) |
|
46 |
||
47 |
def test_basic_left(self): |
|
48 |
bitmask = np.array([ |
|
49 |
[False, False, False, False], |
|
50 |
[False, False, False, False], |
|
51 |
[False, True, False, False], |
|
52 |
[True, False, False, False], |
|
53 |
[False, False, False, False], |
|
54 |
])
|
|
8201
by GunChleoc
Fetched translations and updated catalogues. |
55 |
cost, rectangle = make_spritemap.minimum_average_cost_grow( |
56 |
bitmask, (2, 3, 4, 4)) |
|
6509.5.1
by Nicolai Hähnle
Hack on alternative spritemap generation (via rectangle coverings) |
57 |
self.assertEqual(rectangle, (2, 0, 4, 4)) |
58 |
self.assertAlmostEqual(cost, 3.0) |
|
59 |
||
60 |
def test_basic_vertical(self): |
|
61 |
bitmask = np.array([ |
|
62 |
[False, True, False, False], |
|
63 |
[False, False, False, False], |
|
64 |
[False, True, False, False], |
|
65 |
[False, False, False, True], |
|
66 |
[False, False, False, False], |
|
67 |
])
|
|
8201
by GunChleoc
Fetched translations and updated catalogues. |
68 |
cost, rectangle = make_spritemap.minimum_average_cost_grow( |
69 |
bitmask, (3, 1, 4, 2)) |
|
6509.5.1
by Nicolai Hähnle
Hack on alternative spritemap generation (via rectangle coverings) |
70 |
self.assertEqual(rectangle, (2, 1, 4, 2)) |
71 |
self.assertAlmostEqual(cost, 1.0) |
|
72 |
||
73 |
bitmask = np.array([ |
|
74 |
[False, True, False, False], |
|
75 |
[False, False, False, False], |
|
76 |
[False, False, False, False], |
|
77 |
[False, True, False, False], |
|
78 |
[False, False, False, False], |
|
79 |
])
|
|
8201
by GunChleoc
Fetched translations and updated catalogues. |
80 |
cost, rectangle = make_spritemap.minimum_average_cost_grow( |
81 |
bitmask, (2, 1, 3, 2)) |
|
6509.5.1
by Nicolai Hähnle
Hack on alternative spritemap generation (via rectangle coverings) |
82 |
self.assertEqual(rectangle, (2, 1, 4, 2)) |
83 |
self.assertAlmostEqual(cost, 1.0) |
|
84 |
||
85 |
||
86 |
class TestComputeRectangleCovering(unittest.TestCase): |
|
87 |
def test_basic(self): |
|
8201
by GunChleoc
Fetched translations and updated catalogues. |
88 |
"""Tests a case where the optimal solution consists of a single minimum
|
89 |
average cost rectangle."""
|
|
6509.5.1
by Nicolai Hähnle
Hack on alternative spritemap generation (via rectangle coverings) |
90 |
FRAGMENT_COST = 4 |
91 |
bitmask = np.array([ |
|
92 |
[False, False, False, False], |
|
93 |
[False, False, False, False], |
|
94 |
[False, True, True, False], |
|
95 |
[False, True, False, False], |
|
96 |
[False, False, False, False], |
|
97 |
])
|
|
98 |
cost, rectangles = make_spritemap.compute_rectangle_covering( |
|
99 |
bitmask, |
|
100 |
FRAGMENT_COST=FRAGMENT_COST |
|
101 |
)
|
|
102 |
self.assertEqual(cost, FRAGMENT_COST + 4) |
|
103 |
self.assertItemsEqual(rectangles, [(2, 1, 4, 3)]) |
|
104 |
||
105 |
def test_grow(self): |
|
8201
by GunChleoc
Fetched translations and updated catalogues. |
106 |
"""Tests a case where the optimal solution can be found by growing the
|
107 |
initial minimum average cost rectangle."""
|
|
6509.5.1
by Nicolai Hähnle
Hack on alternative spritemap generation (via rectangle coverings) |
108 |
FRAGMENT_COST = 4 |
109 |
bitmask = np.array([ |
|
110 |
[False, False, False, False, False, False], |
|
111 |
[False, False, False, False, False, False], |
|
112 |
[False, True, True, False, False, False], |
|
113 |
[False, True, False, False, False, False], |
|
114 |
[False, True, False, False, False, False], |
|
115 |
[False, True, False, False, False, False], |
|
116 |
[False, False, False, False, False, False], |
|
117 |
])
|
|
118 |
cost, rectangles = make_spritemap.compute_rectangle_covering( |
|
119 |
bitmask, |
|
120 |
FRAGMENT_COST=FRAGMENT_COST |
|
121 |
)
|
|
122 |
self.assertEqual(cost, FRAGMENT_COST + 8) |
|
123 |
self.assertItemsEqual(rectangles, [(2, 1, 6, 3)]) |
|
124 |
||
125 |
def test_nogrow(self): |
|
8201
by GunChleoc
Fetched translations and updated catalogues. |
126 |
"""Similar to test_grow, but tests a situation in which growing the
|
127 |
initial rectangle is in fact not optimal."""
|
|
6509.5.1
by Nicolai Hähnle
Hack on alternative spritemap generation (via rectangle coverings) |
128 |
FRAGMENT_COST = 4 |
129 |
bitmask = np.array([ |
|
130 |
[False, False, False, False, False, False], |
|
131 |
[False, False, False, False, False, False], |
|
132 |
[False, True, True, True, False, False], |
|
133 |
[False, True, False, False, False, False], |
|
134 |
[False, True, False, False, False, False], |
|
135 |
[False, True, False, False, False, False], |
|
136 |
[False, False, False, False, False, False], |
|
137 |
])
|
|
138 |
cost, rectangles = make_spritemap.compute_rectangle_covering( |
|
139 |
bitmask, |
|
140 |
FRAGMENT_COST=FRAGMENT_COST |
|
141 |
)
|
|
142 |
self.assertEqual(cost, 2 * FRAGMENT_COST + 6) |
|
143 |
self.assertItemsEqual(rectangles, [(2, 1, 6, 2), (2, 2, 3, 4)]) |
|
144 |
||
6509.5.2
by Nicolai Hähnle
Iron out some bugs in rectangle covering |
145 |
def test_diag_growth_bug(self): |
8201
by GunChleoc
Fetched translations and updated catalogues. |
146 |
"""Regression test for a silly bug."""
|
6509.5.2
by Nicolai Hähnle
Iron out some bugs in rectangle covering |
147 |
FRAGMENT_COST = 4 |
148 |
bitmask = np.array([ |
|
149 |
[True, False, False, False], |
|
150 |
[False, False, False, False], |
|
151 |
[False, False, False, False], |
|
152 |
[False, False, False, True], |
|
153 |
])
|
|
154 |
cost, rectangles = make_spritemap.compute_rectangle_covering( |
|
155 |
bitmask, |
|
156 |
FRAGMENT_COST=FRAGMENT_COST |
|
157 |
)
|
|
158 |
self.assertEqual(cost, 2 * FRAGMENT_COST + 2) |
|
159 |
self.assertItemsEqual(rectangles, [(0, 0, 1, 1), (3, 3, 4, 4)]) |
|
160 |
||
8939
by Wideland's Bunnybot
Merged lp:~widelands-dev/widelands/appveyor_reenable_glbinding: |
161 |
|
6509.5.1
by Nicolai Hähnle
Hack on alternative spritemap generation (via rectangle coverings) |
162 |
if __name__ == '__main__': |
163 |
unittest.main() |