|
20 | 20 | # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
21 | 21 |
|
22 | 22 |
|
| 23 | +import gc |
| 24 | +import random |
23 | 25 | import unittest
|
24 |
| -from PyKDL import * |
25 | 26 | from math import *
|
26 |
| -import random |
| 27 | + |
| 28 | +import psutil |
| 29 | +from PyKDL import * |
| 30 | + |
27 | 31 |
|
28 | 32 | class KinfamTestFunctions(unittest.TestCase):
|
29 | 33 |
|
@@ -143,12 +147,37 @@ def testFkPosAndIkPos(self):
|
143 | 147 | self.assertEqual(q,q_solved)
|
144 | 148 |
|
145 | 149 |
|
| 150 | +class KinfamTestTree(unittest.TestCase): |
| 151 | + |
| 152 | + def setUp(self): |
| 153 | + self.tree = Tree() |
| 154 | + self.tree.addSegment(Segment(Joint(Joint.RotZ), |
| 155 | + Frame(Vector(0.0, 0.0, 0.0))), "foo") |
| 156 | + self.tree.addSegment(Segment(Joint(Joint.None), |
| 157 | + Frame(Vector(0.0, 0.0, 0.0))), "bar") |
| 158 | + |
| 159 | + def testTreeGetChainMemLeak(self): |
| 160 | + """ test for the memory leak in Tree.getChain described in issue #211 """ |
| 161 | + process = psutil.Process() |
| 162 | + self.tree.getChain("foo", "bar") |
| 163 | + gc.collect() |
| 164 | + mem_before = process.memory_info().vms |
| 165 | + # needs at least 2000 iterations on my system to cause a detectable |
| 166 | + # difference in memory usage |
| 167 | + for _ in xrange(10000): |
| 168 | + self.tree.getChain("foo", "bar") |
| 169 | + gc.collect() |
| 170 | + mem_after = process.memory_info().vms |
| 171 | + self.assertEqual(mem_before, mem_after) |
| 172 | + |
| 173 | + |
146 | 174 | def suite():
|
147 | 175 | suite = unittest.TestSuite()
|
148 | 176 | suite.addTest(KinfamTestFunctions('testFkPosAndJac'))
|
149 | 177 | suite.addTest(KinfamTestFunctions('testFkVelAndJac'))
|
150 | 178 | suite.addTest(KinfamTestFunctions('testFkVelAndIkVel'))
|
151 | 179 | suite.addTest(KinfamTestFunctions('testFkPosAndIkPos'))
|
| 180 | + suite.addTest(KinfamTestTree('testTreeGetChainMemLeak')) |
152 | 181 | return suite
|
153 | 182 |
|
154 | 183 |
|
|
0 commit comments