PageRenderTime 65ms CodeModel.GetById 12ms RepoModel.GetById 0ms app.codeStats 0ms

/trunk/Examples/test-suite/python/li_boost_shared_ptr_runme.py

#
Python | 544 lines | 400 code | 89 blank | 55 comment | 32 complexity | 2f876b42912dd477efd5ea49d4bfc704 MD5 | raw file
Possible License(s): LGPL-2.1, Cube, GPL-3.0, 0BSD, GPL-2.0
  1. import li_boost_shared_ptr
  2. import gc
  3. debug = False
  4. # simple shared_ptr usage - created in C++
  5. class li_boost_shared_ptr_runme:
  6. def main(self):
  7. if (debug):
  8. print "Started"
  9. li_boost_shared_ptr.cvar.debug_shared = debug
  10. # Change loop count to run for a long time to monitor memory
  11. loopCount = 1 #5000
  12. for i in range (0,loopCount):
  13. self.runtest()
  14. # Expect 1 instance - the one global variable (GlobalValue)
  15. if (li_boost_shared_ptr.Klass.getTotal_count() != 1):
  16. raise RuntimeError("Klass.total_count=%s" % li_boost_shared_ptr.Klass.getTotal_count())
  17. wrapper_count = li_boost_shared_ptr.shared_ptr_wrapper_count()
  18. if (wrapper_count != li_boost_shared_ptr.NOT_COUNTING):
  19. # Expect 1 instance - the one global variable (GlobalSmartValue)
  20. if (wrapper_count != 1):
  21. raise RuntimeError("shared_ptr wrapper count=%s" % wrapper_count)
  22. if (debug):
  23. print "Finished"
  24. def runtest(self):
  25. # simple shared_ptr usage - created in C++
  26. k = li_boost_shared_ptr.Klass("me oh my")
  27. val = k.getValue()
  28. self.verifyValue("me oh my", val)
  29. self.verifyCount(1, k)
  30. # simple shared_ptr usage - not created in C++
  31. k = li_boost_shared_ptr.factorycreate()
  32. val = k.getValue()
  33. self.verifyValue("factorycreate", val)
  34. self.verifyCount(1, k)
  35. # pass by shared_ptr
  36. k = li_boost_shared_ptr.Klass("me oh my")
  37. kret = li_boost_shared_ptr.smartpointertest(k)
  38. val = kret.getValue()
  39. self.verifyValue("me oh my smartpointertest", val)
  40. self.verifyCount(2, k)
  41. self.verifyCount(2, kret)
  42. # pass by shared_ptr pointer
  43. k = li_boost_shared_ptr.Klass("me oh my")
  44. kret = li_boost_shared_ptr.smartpointerpointertest(k)
  45. val = kret.getValue()
  46. self.verifyValue("me oh my smartpointerpointertest", val)
  47. self.verifyCount(2, k)
  48. self.verifyCount(2, kret)
  49. # pass by shared_ptr reference
  50. k = li_boost_shared_ptr.Klass("me oh my")
  51. kret = li_boost_shared_ptr.smartpointerreftest(k)
  52. val = kret.getValue()
  53. self.verifyValue("me oh my smartpointerreftest", val)
  54. self.verifyCount(2, k)
  55. self.verifyCount(2, kret)
  56. # pass by shared_ptr pointer reference
  57. k = li_boost_shared_ptr.Klass("me oh my")
  58. kret = li_boost_shared_ptr.smartpointerpointerreftest(k)
  59. val = kret.getValue()
  60. self.verifyValue("me oh my smartpointerpointerreftest", val)
  61. self.verifyCount(2, k)
  62. self.verifyCount(2, kret)
  63. # const pass by shared_ptr
  64. k = li_boost_shared_ptr.Klass("me oh my")
  65. kret = li_boost_shared_ptr.constsmartpointertest(k)
  66. val = kret.getValue()
  67. self.verifyValue("me oh my", val)
  68. self.verifyCount(2, k)
  69. self.verifyCount(2, kret)
  70. # const pass by shared_ptr pointer
  71. k = li_boost_shared_ptr.Klass("me oh my")
  72. kret = li_boost_shared_ptr.constsmartpointerpointertest(k)
  73. val = kret.getValue()
  74. self.verifyValue("me oh my", val)
  75. self.verifyCount(2, k)
  76. self.verifyCount(2, kret)
  77. # const pass by shared_ptr reference
  78. k = li_boost_shared_ptr.Klass("me oh my")
  79. kret = li_boost_shared_ptr.constsmartpointerreftest(k)
  80. val = kret.getValue()
  81. self.verifyValue("me oh my", val)
  82. self.verifyCount(2, k)
  83. self.verifyCount(2, kret)
  84. # pass by value
  85. k = li_boost_shared_ptr.Klass("me oh my")
  86. kret = li_boost_shared_ptr.valuetest(k)
  87. val = kret.getValue()
  88. self.verifyValue("me oh my valuetest", val)
  89. self.verifyCount(1, k)
  90. self.verifyCount(1, kret)
  91. # pass by pointer
  92. k = li_boost_shared_ptr.Klass("me oh my")
  93. kret = li_boost_shared_ptr.pointertest(k)
  94. val = kret.getValue()
  95. self.verifyValue("me oh my pointertest", val)
  96. self.verifyCount(1, k)
  97. self.verifyCount(1, kret)
  98. # pass by reference
  99. k = li_boost_shared_ptr.Klass("me oh my")
  100. kret = li_boost_shared_ptr.reftest(k)
  101. val = kret.getValue()
  102. self.verifyValue("me oh my reftest", val)
  103. self.verifyCount(1, k)
  104. self.verifyCount(1, kret)
  105. # pass by pointer reference
  106. k = li_boost_shared_ptr.Klass("me oh my")
  107. kret = li_boost_shared_ptr.pointerreftest(k)
  108. val = kret.getValue()
  109. self.verifyValue("me oh my pointerreftest", val)
  110. self.verifyCount(1, k)
  111. self.verifyCount(1, kret)
  112. # null tests
  113. k = None
  114. if (li_boost_shared_ptr.smartpointertest(k) != None):
  115. raise RuntimeError("return was not null")
  116. if (li_boost_shared_ptr.smartpointerpointertest(k) != None):
  117. raise RuntimeError("return was not null")
  118. if (li_boost_shared_ptr.smartpointerreftest(k) != None):
  119. raise RuntimeError("return was not null")
  120. if (li_boost_shared_ptr.smartpointerpointerreftest(k) != None):
  121. raise RuntimeError("return was not null")
  122. if (li_boost_shared_ptr.nullsmartpointerpointertest(None) != "null pointer"):
  123. raise RuntimeError("not null smartpointer pointer")
  124. try:
  125. li_boost_shared_ptr.valuetest(k)
  126. raise RuntimeError("Failed to catch null pointer")
  127. except ValueError:
  128. pass
  129. if (li_boost_shared_ptr.pointertest(k) != None):
  130. raise RuntimeError("return was not null")
  131. try:
  132. li_boost_shared_ptr.reftest(k)
  133. raise RuntimeError("Failed to catch null pointer")
  134. except ValueError:
  135. pass
  136. # $owner
  137. k = li_boost_shared_ptr.pointerownertest()
  138. val = k.getValue()
  139. self.verifyValue("pointerownertest", val)
  140. self.verifyCount(1, k)
  141. k = li_boost_shared_ptr.smartpointerpointerownertest()
  142. val = k.getValue()
  143. self.verifyValue("smartpointerpointerownertest", val)
  144. self.verifyCount(1, k)
  145. # //////////////////////////////// Derived class ////////////////////////////////////////
  146. # derived pass by shared_ptr
  147. k = li_boost_shared_ptr.KlassDerived("me oh my")
  148. kret = li_boost_shared_ptr.derivedsmartptrtest(k)
  149. val = kret.getValue()
  150. self.verifyValue("me oh my derivedsmartptrtest-Derived", val)
  151. self.verifyCount(2, k)
  152. self.verifyCount(2, kret)
  153. # derived pass by shared_ptr pointer
  154. k = li_boost_shared_ptr.KlassDerived("me oh my")
  155. kret = li_boost_shared_ptr.derivedsmartptrpointertest(k)
  156. val = kret.getValue()
  157. self.verifyValue("me oh my derivedsmartptrpointertest-Derived", val)
  158. self.verifyCount(2, k)
  159. self.verifyCount(2, kret)
  160. # derived pass by shared_ptr ref
  161. k = li_boost_shared_ptr.KlassDerived("me oh my")
  162. kret = li_boost_shared_ptr.derivedsmartptrreftest(k)
  163. val = kret.getValue()
  164. self.verifyValue("me oh my derivedsmartptrreftest-Derived", val)
  165. self.verifyCount(2, k)
  166. self.verifyCount(2, kret)
  167. # derived pass by shared_ptr pointer ref
  168. k = li_boost_shared_ptr.KlassDerived("me oh my")
  169. kret = li_boost_shared_ptr.derivedsmartptrpointerreftest(k)
  170. val = kret.getValue()
  171. self.verifyValue("me oh my derivedsmartptrpointerreftest-Derived", val)
  172. self.verifyCount(2, k)
  173. self.verifyCount(2, kret)
  174. # derived pass by pointer
  175. k = li_boost_shared_ptr.KlassDerived("me oh my")
  176. kret = li_boost_shared_ptr.derivedpointertest(k)
  177. val = kret.getValue()
  178. self.verifyValue("me oh my derivedpointertest-Derived", val)
  179. self.verifyCount(1, k)
  180. self.verifyCount(1, kret)
  181. # derived pass by ref
  182. k = li_boost_shared_ptr.KlassDerived("me oh my")
  183. kret = li_boost_shared_ptr.derivedreftest(k)
  184. val = kret.getValue()
  185. self.verifyValue("me oh my derivedreftest-Derived", val)
  186. self.verifyCount(1, k)
  187. self.verifyCount(1, kret)
  188. # //////////////////////////////// Derived and base class mixed ////////////////////////////////////////
  189. # pass by shared_ptr (mixed)
  190. k = li_boost_shared_ptr.KlassDerived("me oh my")
  191. kret = li_boost_shared_ptr.smartpointertest(k)
  192. val = kret.getValue()
  193. self.verifyValue("me oh my smartpointertest-Derived", val)
  194. self.verifyCount(2, k)
  195. self.verifyCount(2, kret)
  196. # pass by shared_ptr pointer (mixed)
  197. k = li_boost_shared_ptr.KlassDerived("me oh my")
  198. kret = li_boost_shared_ptr.smartpointerpointertest(k)
  199. val = kret.getValue()
  200. self.verifyValue("me oh my smartpointerpointertest-Derived", val)
  201. self.verifyCount(2, k)
  202. self.verifyCount(2, kret)
  203. # pass by shared_ptr reference (mixed)
  204. k = li_boost_shared_ptr.KlassDerived("me oh my")
  205. kret = li_boost_shared_ptr.smartpointerreftest(k)
  206. val = kret.getValue()
  207. self.verifyValue("me oh my smartpointerreftest-Derived", val)
  208. self.verifyCount(2, k)
  209. self.verifyCount(2, kret)
  210. # pass by shared_ptr pointer reference (mixed)
  211. k = li_boost_shared_ptr.KlassDerived("me oh my")
  212. kret = li_boost_shared_ptr.smartpointerpointerreftest(k)
  213. val = kret.getValue()
  214. self.verifyValue("me oh my smartpointerpointerreftest-Derived", val)
  215. self.verifyCount(2, k)
  216. self.verifyCount(2, kret)
  217. # pass by value (mixed)
  218. k = li_boost_shared_ptr.KlassDerived("me oh my")
  219. kret = li_boost_shared_ptr.valuetest(k)
  220. val = kret.getValue()
  221. self.verifyValue("me oh my valuetest", val) # note slicing
  222. self.verifyCount(1, k)
  223. self.verifyCount(1, kret)
  224. # pass by pointer (mixed)
  225. k = li_boost_shared_ptr.KlassDerived("me oh my")
  226. kret = li_boost_shared_ptr.pointertest(k)
  227. val = kret.getValue()
  228. self.verifyValue("me oh my pointertest-Derived", val)
  229. self.verifyCount(1, k)
  230. self.verifyCount(1, kret)
  231. # pass by ref (mixed)
  232. k = li_boost_shared_ptr.KlassDerived("me oh my")
  233. kret = li_boost_shared_ptr.reftest(k)
  234. val = kret.getValue()
  235. self.verifyValue("me oh my reftest-Derived", val)
  236. self.verifyCount(1, k)
  237. self.verifyCount(1, kret)
  238. # //////////////////////////////// Overloading tests ////////////////////////////////////////
  239. # Base class
  240. k = li_boost_shared_ptr.Klass("me oh my")
  241. self.verifyValue(li_boost_shared_ptr.overload_rawbyval(k), "rawbyval")
  242. self.verifyValue(li_boost_shared_ptr.overload_rawbyref(k), "rawbyref")
  243. self.verifyValue(li_boost_shared_ptr.overload_rawbyptr(k), "rawbyptr")
  244. self.verifyValue(li_boost_shared_ptr.overload_rawbyptrref(k), "rawbyptrref")
  245. self.verifyValue(li_boost_shared_ptr.overload_smartbyval(k), "smartbyval")
  246. self.verifyValue(li_boost_shared_ptr.overload_smartbyref(k), "smartbyref")
  247. self.verifyValue(li_boost_shared_ptr.overload_smartbyptr(k), "smartbyptr")
  248. self.verifyValue(li_boost_shared_ptr.overload_smartbyptrref(k), "smartbyptrref")
  249. # Derived class
  250. k = li_boost_shared_ptr.KlassDerived("me oh my")
  251. self.verifyValue(li_boost_shared_ptr.overload_rawbyval(k), "rawbyval")
  252. self.verifyValue(li_boost_shared_ptr.overload_rawbyref(k), "rawbyref")
  253. self.verifyValue(li_boost_shared_ptr.overload_rawbyptr(k), "rawbyptr")
  254. self.verifyValue(li_boost_shared_ptr.overload_rawbyptrref(k), "rawbyptrref")
  255. self.verifyValue(li_boost_shared_ptr.overload_smartbyval(k), "smartbyval")
  256. self.verifyValue(li_boost_shared_ptr.overload_smartbyref(k), "smartbyref")
  257. self.verifyValue(li_boost_shared_ptr.overload_smartbyptr(k), "smartbyptr")
  258. self.verifyValue(li_boost_shared_ptr.overload_smartbyptrref(k), "smartbyptrref")
  259. # 3rd derived class
  260. k = li_boost_shared_ptr.Klass3rdDerived("me oh my")
  261. val = k.getValue()
  262. self.verifyValue("me oh my-3rdDerived", val)
  263. self.verifyCount(1, k)
  264. val = li_boost_shared_ptr.test3rdupcast(k)
  265. self.verifyValue("me oh my-3rdDerived", val)
  266. self.verifyCount(1, k)
  267. # //////////////////////////////// Member variables ////////////////////////////////////////
  268. # smart pointer by value
  269. m = li_boost_shared_ptr.MemberVariables()
  270. k = li_boost_shared_ptr.Klass("smart member value")
  271. m.SmartMemberValue = k
  272. val = k.getValue()
  273. self.verifyValue("smart member value", val)
  274. self.verifyCount(2, k)
  275. kmember = m.SmartMemberValue
  276. val = kmember.getValue()
  277. self.verifyValue("smart member value", val)
  278. self.verifyCount(3, kmember)
  279. self.verifyCount(3, k)
  280. del m
  281. self.verifyCount(2, kmember)
  282. self.verifyCount(2, k)
  283. # smart pointer by pointer
  284. m = li_boost_shared_ptr.MemberVariables()
  285. k = li_boost_shared_ptr.Klass("smart member pointer")
  286. m.SmartMemberPointer = k
  287. val = k.getValue()
  288. self.verifyValue("smart member pointer", val)
  289. self.verifyCount(1, k)
  290. kmember = m.SmartMemberPointer
  291. val = kmember.getValue()
  292. self.verifyValue("smart member pointer", val)
  293. self.verifyCount(2, kmember)
  294. self.verifyCount(2, k)
  295. del m
  296. self.verifyCount(2, kmember)
  297. self.verifyCount(2, k)
  298. # smart pointer by reference
  299. m = li_boost_shared_ptr.MemberVariables()
  300. k = li_boost_shared_ptr.Klass("smart member reference")
  301. m.SmartMemberReference = k
  302. val = k.getValue()
  303. self.verifyValue("smart member reference", val)
  304. self.verifyCount(2, k)
  305. kmember = m.SmartMemberReference
  306. val = kmember.getValue()
  307. self.verifyValue("smart member reference", val)
  308. self.verifyCount(3, kmember)
  309. self.verifyCount(3, k)
  310. # The C++ reference refers to SmartMemberValue...
  311. kmemberVal = m.SmartMemberValue
  312. val = kmember.getValue()
  313. self.verifyValue("smart member reference", val)
  314. self.verifyCount(4, kmemberVal)
  315. self.verifyCount(4, kmember)
  316. self.verifyCount(4, k)
  317. del m
  318. self.verifyCount(3, kmemberVal)
  319. self.verifyCount(3, kmember)
  320. self.verifyCount(3, k)
  321. # plain by value
  322. m = li_boost_shared_ptr.MemberVariables()
  323. k = li_boost_shared_ptr.Klass("plain member value")
  324. m.MemberValue = k
  325. val = k.getValue()
  326. self.verifyValue("plain member value", val)
  327. self.verifyCount(1, k)
  328. kmember = m.MemberValue
  329. val = kmember.getValue()
  330. self.verifyValue("plain member value", val)
  331. self.verifyCount(1, kmember)
  332. self.verifyCount(1, k)
  333. del m
  334. self.verifyCount(1, kmember)
  335. self.verifyCount(1, k)
  336. # plain by pointer
  337. m = li_boost_shared_ptr.MemberVariables()
  338. k = li_boost_shared_ptr.Klass("plain member pointer")
  339. m.MemberPointer = k
  340. val = k.getValue()
  341. self.verifyValue("plain member pointer", val)
  342. self.verifyCount(1, k)
  343. kmember = m.MemberPointer
  344. val = kmember.getValue()
  345. self.verifyValue("plain member pointer", val)
  346. self.verifyCount(1, kmember)
  347. self.verifyCount(1, k)
  348. del m
  349. self.verifyCount(1, kmember)
  350. self.verifyCount(1, k)
  351. # plain by reference
  352. m = li_boost_shared_ptr.MemberVariables()
  353. k = li_boost_shared_ptr.Klass("plain member reference")
  354. m.MemberReference = k
  355. val = k.getValue()
  356. self.verifyValue("plain member reference", val)
  357. self.verifyCount(1, k)
  358. kmember = m.MemberReference
  359. val = kmember.getValue()
  360. self.verifyValue("plain member reference", val)
  361. self.verifyCount(1, kmember)
  362. self.verifyCount(1, k)
  363. del m
  364. self.verifyCount(1, kmember)
  365. self.verifyCount(1, k)
  366. # null member variables
  367. m = li_boost_shared_ptr.MemberVariables()
  368. # shared_ptr by value
  369. k = m.SmartMemberValue
  370. if (k != None):
  371. raise RuntimeError("expected null")
  372. m.SmartMemberValue = None
  373. k = m.SmartMemberValue
  374. if (k != None):
  375. raise RuntimeError("expected null")
  376. self.verifyCount(0, k)
  377. # plain by value
  378. try:
  379. m.MemberValue = None
  380. raise RuntimeError("Failed to catch null pointer")
  381. except ValueError:
  382. pass
  383. # ////////////////////////////////// Global variables ////////////////////////////////////////
  384. # smart pointer
  385. kglobal = li_boost_shared_ptr.cvar.GlobalSmartValue
  386. if (kglobal != None):
  387. raise RuntimeError("expected null")
  388. k = li_boost_shared_ptr.Klass("smart global value")
  389. li_boost_shared_ptr.cvar.GlobalSmartValue = k
  390. self.verifyCount(2, k)
  391. kglobal = li_boost_shared_ptr.cvar.GlobalSmartValue
  392. val = kglobal.getValue()
  393. self.verifyValue("smart global value", val)
  394. self.verifyCount(3, kglobal)
  395. self.verifyCount(3, k)
  396. self.verifyValue("smart global value", li_boost_shared_ptr.cvar.GlobalSmartValue.getValue())
  397. li_boost_shared_ptr.cvar.GlobalSmartValue = None
  398. # plain value
  399. k = li_boost_shared_ptr.Klass("global value")
  400. li_boost_shared_ptr.cvar.GlobalValue = k
  401. self.verifyCount(1, k)
  402. kglobal = li_boost_shared_ptr.cvar.GlobalValue
  403. val = kglobal.getValue()
  404. self.verifyValue("global value", val)
  405. self.verifyCount(1, kglobal)
  406. self.verifyCount(1, k)
  407. self.verifyValue("global value", li_boost_shared_ptr.cvar.GlobalValue.getValue())
  408. try:
  409. li_boost_shared_ptr.cvar.GlobalValue = None
  410. raise RuntimeError("Failed to catch null pointer")
  411. except ValueError:
  412. pass
  413. # plain pointer
  414. kglobal = li_boost_shared_ptr.cvar.GlobalPointer
  415. if (kglobal != None):
  416. raise RuntimeError("expected null")
  417. k = li_boost_shared_ptr.Klass("global pointer")
  418. li_boost_shared_ptr.cvar.GlobalPointer = k
  419. self.verifyCount(1, k)
  420. kglobal = li_boost_shared_ptr.cvar.GlobalPointer
  421. val = kglobal.getValue()
  422. self.verifyValue("global pointer", val)
  423. self.verifyCount(1, kglobal)
  424. self.verifyCount(1, k)
  425. li_boost_shared_ptr.cvar.GlobalPointer = None
  426. # plain reference
  427. kglobal
  428. k = li_boost_shared_ptr.Klass("global reference")
  429. li_boost_shared_ptr.cvar.GlobalReference = k
  430. self.verifyCount(1, k)
  431. kglobal = li_boost_shared_ptr.cvar.GlobalReference
  432. val = kglobal.getValue()
  433. self.verifyValue("global reference", val)
  434. self.verifyCount(1, kglobal)
  435. self.verifyCount(1, k)
  436. try:
  437. li_boost_shared_ptr.cvar.GlobalReference = None
  438. raise RuntimeError("Failed to catch null pointer")
  439. except ValueError:
  440. pass
  441. # ////////////////////////////////// Templates ////////////////////////////////////////
  442. pid = li_boost_shared_ptr.PairIntDouble(10, 20.2)
  443. if (pid.baseVal1 != 20 or pid.baseVal2 != 40.4):
  444. raise RuntimeError("Base values wrong")
  445. if (pid.val1 != 10 or pid.val2 != 20.2):
  446. raise RuntimeError("Derived Values wrong")
  447. def verifyValue(self, expected, got):
  448. if (expected != got):
  449. raise RuntimeError("verify value failed. Expected: ", expected, " Got: ", got)
  450. def verifyCount(self, expected, k):
  451. got = li_boost_shared_ptr.use_count(k)
  452. if (expected != got):
  453. raise RuntimeError("verify use_count failed. Expected: ", expected, " Got: ", got)
  454. runme = li_boost_shared_ptr_runme()
  455. runme.main()