unit test for short normsubpaths
[PyX/mjg.git] / test / unit / test_path.py
blob5ead011d53e7c5771ca5c488b2adbf74a615edb6
1 import sys
2 if sys.path[0] != "../..":
3 sys.path.insert(0, "../..")
5 import unittest
7 from pyx import *
8 from pyx.path import *
10 epsilon = 1e-5
11 def isEqual(l1, l2):
12 return abs(unit.topt(l1-l2))<epsilon
15 class NormpathTestCase(unittest.TestCase):
16 def testsplit(self):
17 p = path(moveto(0,0), lineto(1,0), moveto(2,0), lineto(3,0))
18 np = normpath(p)
20 # one split parameter
21 sp = np.split([0])
22 assert len(sp)==2 and sp[0] is None and isEqual(sp[1].arclen(), 2)
24 sp = np.split([0.5])
25 assert len(sp)==2 and isEqual(sp[0].arclen(), 0.5) and isEqual(sp[1].arclen(), 1.5)
27 sp = np.split([1])
28 assert len(sp)==2 and isEqual(sp[0].arclen(), 1) and isEqual(sp[1].arclen(), 1)
30 sp = np.split([1.5])
31 assert len(sp)==2 and isEqual(sp[0].arclen(), 1.5) and isEqual(sp[1].arclen(), 0.5)
33 sp = np.split([2])
34 assert len(sp)==2 and isEqual(sp[0].arclen(), 2) and sp[1] is None
36 # two split parameters
37 sp = np.split([0, 0.5])
38 assert len(sp)==3 and sp[0] is None and isEqual(sp[1].arclen(), 0.5) and isEqual(sp[2].arclen(), 1.5)
40 sp = np.split([0, 1])
41 assert len(sp)==3 and sp[0] is None and isEqual(sp[1].arclen(), 1) and isEqual(sp[2].arclen(), 1)
43 sp = np.split([0, 1.5])
44 assert len(sp)==3 and sp[0] is None and isEqual(sp[1].arclen(), 1.5) and isEqual(sp[2].arclen(), 0.5)
46 sp = np.split([0, 2])
47 assert len(sp)==3 and sp[0] is None and isEqual(sp[1].arclen(), 2) and sp[2] is None
49 sp = np.split([0.5, 1])
50 assert len(sp)==3 and isEqual(sp[0].arclen(), 0.5) and isEqual(sp[1].arclen(), 0.5) and isEqual(sp[2].arclen(), 1)
52 sp = np.split([0.5, 1.5])
53 assert len(sp)==3 and isEqual(sp[0].arclen(), 0.5) and isEqual(sp[1].arclen(), 1) and isEqual(sp[2].arclen(), 0.5)
55 sp = np.split([0.5, 2])
56 assert len(sp)==3 and isEqual(sp[0].arclen(), 0.5) and isEqual(sp[1].arclen(), 1.5) and sp[2] is None
58 sp = np.split([1, 1.5])
59 assert len(sp)==3 and isEqual(sp[0].arclen(), 1) and isEqual(sp[1].arclen(), 0.5) and isEqual(sp[2].arclen(), 0.5)
61 sp = np.split([1, 2])
62 assert len(sp)==3 and isEqual(sp[0].arclen(), 1) and isEqual(sp[1].arclen(), 1) and sp[2] is None
64 sp = np.split([1.5, 2])
65 assert len(sp)==3 and isEqual(sp[0].arclen(), 1.5) and isEqual(sp[1].arclen(), 0.5) and sp[2] is None
67 # three split parameters
68 sp = np.split([0, 0.5, 1])
69 assert len(sp)==4 and sp[0] is None and isEqual(sp[1].arclen(), 0.5) and isEqual(sp[2].arclen(), 0.5) and isEqual(sp[3].arclen(), 1)
71 sp = np.split([0, 0.5, 1.5])
72 assert len(sp)==4 and sp[0] is None and isEqual(sp[1].arclen(), 0.5) and isEqual(sp[2].arclen(), 1) and isEqual(sp[3].arclen(), 0.5)
74 sp = np.split([0, 0.5, 2])
75 assert len(sp)==4 and sp[0] is None and isEqual(sp[1].arclen(), 0.5) and isEqual(sp[2].arclen(), 1.5) and sp[3] is None
77 sp = np.split([0, 1, 1.5])
78 assert len(sp)==4 and sp[0] is None and isEqual(sp[1].arclen(), 1) and isEqual(sp[2].arclen(), 0.5) and isEqual(sp[3].arclen(), 0.5)
80 sp = np.split([0, 1, 2])
81 assert len(sp)==4 and sp[0] is None and isEqual(sp[1].arclen(), 1) and isEqual(sp[2].arclen(), 1) and sp[3] is None
84 sp = np.split([0, 1.5, 2])
85 assert len(sp)==4 and sp[0] is None and isEqual(sp[1].arclen(), 1.5) and isEqual(sp[2].arclen(), 0.5) and sp[3] is None
87 sp = np.split([0.5, 1, 1.5])
88 assert len(sp)==4 and isEqual(sp[0].arclen(), 0.5) and isEqual(sp[1].arclen(), 0.5) and isEqual(sp[2].arclen(), 0.5) and isEqual(sp[3].arclen(), 0.5)
90 sp = np.split([0.5, 1.5, 2])
91 assert len(sp)==4 and isEqual(sp[0].arclen(), 0.5) and isEqual(sp[1].arclen(), 1) and isEqual(sp[2].arclen(), 0.5) and sp[3] is None
93 sp = np.split([1, 1.5, 2])
94 assert len(sp)==4 and isEqual(sp[0].arclen(), 1) and isEqual(sp[1].arclen(), 0.5) and isEqual(sp[2].arclen(), 0.5) and sp[3] is None
97 # four split parameters
98 sp = np.split([0, 0.5, 1, 1.5])
99 assert len(sp)==5 and sp[0] is None and isEqual(sp[1].arclen(), 0.5) and isEqual(sp[2].arclen(), 0.5) and isEqual(sp[3].arclen(), 0.5) and isEqual(sp[4].arclen(), 0.5)
101 sp = np.split([0, 0.5, 1, 2])
102 assert len(sp)==5 and sp[0] is None and isEqual(sp[1].arclen(), 0.5) and isEqual(sp[2].arclen(), 0.5) and isEqual(sp[3].arclen(), 1) and sp[4] is None
104 sp = np.split([0, 0.5, 1.5, 2])
105 assert len(sp)==5 and sp[0] is None and isEqual(sp[1].arclen(), 0.5) and isEqual(sp[2].arclen(), 1) and isEqual(sp[3].arclen(), 0.5) and sp[4] is None
107 sp = np.split([0, 1, 1.5, 2])
108 assert len(sp)==5 and sp[0] is None and isEqual(sp[1].arclen(), 1) and isEqual(sp[2].arclen(), 0.5) and isEqual(sp[3].arclen(), 0.5) and sp[4] is None
110 sp = np.split([0.5, 1, 1.5, 2])
111 assert len(sp)==5 and isEqual(sp[0].arclen(), 0.5) and isEqual(sp[1].arclen(), 0.5) and isEqual(sp[2].arclen(), 0.5) and isEqual(sp[3].arclen(), 0.5) and sp[4] is None
114 # five split parameters
115 sp = np.split([0, 0.5, 1, 1.5, 2])
116 assert len(sp)==6 and sp[0] is None and isEqual(sp[1].arclen(), 0.5) and isEqual(sp[2].arclen(), 0.5) and isEqual(sp[3].arclen(), 0.5) and isEqual(sp[4].arclen(), 0.5) and sp[5] is None
118 def testshortnormsubpath(self):
119 sp = normsubpath(epsilon=1)
120 sp.append(normline(0,0, 0.5, 0))
121 sp.append(normline(0.5,0, 1.5, 0))
123 sp.append(normline(1.5,0, 1.5, 0.3))
124 sp.append(normline(1.5,0.3, 1.5, 0.6))
125 sp.append(normline(1.5,0.6, 1.5, 0.9))
126 sp.append(normline(1.5,0.9, 1.5, 1.2))
128 sp.append(normline(1.2, 1.5, 1.3, 1.6))
129 sp.append(normcurve(1.3, 1.6, 1.4, 1.7, 1.3, 1.7, 1.3, 1.8))
130 sp.append(normcurve(1.3, 1.8, 2.4, 2.7, 3.3, 3.7, 1.4, 1.8))
132 self.failUnlessEqual(str(sp), "subpath(open, [normline(0, 0, 1.5, 0), normline(1.5, 0, 1.5, 1.2), normcurve(1.5, 1.2, 2.4, 2.7, 3.3, 3.7, 1.4, 1.8)])")
135 if __name__ == "__main__":
136 unittest.main()