PageRenderTime 50ms CodeModel.GetById 19ms RepoModel.GetById 1ms app.codeStats 0ms

/trunk/Examples/test-suite/java/li_boost_intrusive_ptr_runme.java

#
Java | 701 lines | 579 code | 71 blank | 51 comment | 71 complexity | 352a5cfe6611dfc08fed391d32a93e90 MD5 | raw file
Possible License(s): LGPL-2.1, Cube, GPL-3.0, 0BSD, GPL-2.0
  1. import li_boost_intrusive_ptr.*;
  2. public class li_boost_intrusive_ptr_runme {
  3. static {
  4. try {
  5. System.loadLibrary("li_boost_intrusive_ptr");
  6. } catch (UnsatisfiedLinkError e) {
  7. System.err.println("Native code library failed to load. See the chapter on Dynamic Linking Problems in the SWIG Java documentation for help.\n" + e);
  8. System.exit(1);
  9. }
  10. }
  11. // Debugging flag
  12. public final static boolean debug = false;
  13. public static void main(String argv[])
  14. {
  15. if (debug)
  16. System.out.println("Started");
  17. li_boost_intrusive_ptr.setDebug_shared(debug);
  18. // Change loop count to run for a long time to monitor memory
  19. final int loopCount = 5000; //5000;
  20. for (int i=0; i<loopCount; i++) {
  21. new li_boost_intrusive_ptr_runme().runtest();
  22. System.gc();
  23. System.runFinalization();
  24. try {
  25. if (i%100 == 0) {
  26. java.lang.Thread.sleep(1); // give some time to the lower priority finalizer thread
  27. }
  28. } catch (java.lang.InterruptedException e) {
  29. }
  30. }
  31. if (debug)
  32. System.out.println("Nearly finished");
  33. int countdown = 50;
  34. while (true) {
  35. System.gc();
  36. System.runFinalization();
  37. try {
  38. java.lang.Thread.sleep(100);
  39. } catch (java.lang.InterruptedException e) {
  40. }
  41. if (--countdown == 0)
  42. break;
  43. if (Klass.getTotal_count() == 1 && KlassWithoutRefCount.getTotal_count() == 0 &&
  44. li_boost_intrusive_ptr.getTotal_IgnoredRefCountingBase_count() == 0 &&
  45. KlassDerived.getTotal_count() == 0 && KlassDerivedDerived.getTotal_count() == 1)
  46. // Expect 1 Klass instance - the one global variable (GlobalValue)
  47. break;
  48. };
  49. if (Klass.getTotal_count() != 1)
  50. throw new RuntimeException("Klass.total_count=" + Klass.getTotal_count());
  51. if (KlassWithoutRefCount.getTotal_count() != 0)
  52. throw new RuntimeException("KlassWithoutRefCount.total_count=" + KlassWithoutRefCount.getTotal_count());
  53. if (li_boost_intrusive_ptr.getTotal_IgnoredRefCountingBase_count() != 0)
  54. throw new RuntimeException("IgnoredRefCountingBase.total_count=" + li_boost_intrusive_ptr.getTotal_IgnoredRefCountingBase_count());
  55. if (KlassDerived.getTotal_count() != 0)
  56. throw new RuntimeException("KlassDerived.total_count=" + KlassDerived.getTotal_count());
  57. if (KlassDerivedDerived.getTotal_count() != 0)
  58. throw new RuntimeException("KlassDerivedDerived.total_count=" + KlassDerivedDerived.getTotal_count());
  59. int wrapper_count = li_boost_intrusive_ptr.intrusive_ptr_wrapper_count();
  60. if (wrapper_count != li_boost_intrusive_ptr.getNOT_COUNTING())
  61. if (wrapper_count != 1) // Expect 1 instance - the one global variable (GlobalSmartValue)
  62. throw new RuntimeException("shared_ptr wrapper count=" + wrapper_count);
  63. if (debug)
  64. System.out.println("Finished");
  65. }
  66. private void runtest() {
  67. // simple shared_ptr usage - created in C++
  68. {
  69. Klass k = new Klass("me oh my");
  70. String val = k.getValue();
  71. verifyValue("me oh my", val);
  72. verifyCount(1, k);
  73. }
  74. // simple shared_ptr usage - not created in C++
  75. {
  76. Klass k = li_boost_intrusive_ptr.factorycreate();
  77. String val = k.getValue();
  78. verifyValue("factorycreate", val);
  79. verifyCount(1, k);
  80. }
  81. // pass by shared_ptr
  82. {
  83. Klass k = new Klass("me oh my");
  84. Klass kret = li_boost_intrusive_ptr.smartpointertest(k);
  85. String val = kret.getValue();
  86. verifyValue("me oh my smartpointertest", val);
  87. verifyCount(1, k);
  88. verifyIntrusiveCount(2, k);
  89. verifyCount(1, kret);
  90. verifyIntrusiveCount(2, kret);
  91. }
  92. // pass by shared_ptr pointer
  93. {
  94. Klass k = new Klass("me oh my");
  95. Klass kret = li_boost_intrusive_ptr.smartpointerpointertest(k);
  96. String val = kret.getValue();
  97. verifyValue("me oh my smartpointerpointertest", val);
  98. verifyCount(1, k);
  99. verifyIntrusiveCount(2, k);
  100. verifyCount(1, kret);
  101. verifyIntrusiveCount(2, kret);
  102. }
  103. // pass by shared_ptr reference
  104. {
  105. Klass k = new Klass("me oh my");
  106. Klass kret = li_boost_intrusive_ptr.smartpointerreftest(k);
  107. String val = kret.getValue();
  108. verifyValue("me oh my smartpointerreftest", val);
  109. verifyCount(1, k);
  110. verifyIntrusiveCount(2, k);
  111. verifyCount(1, kret);
  112. verifyIntrusiveCount(2, kret);
  113. }
  114. // pass by shared_ptr pointer reference
  115. {
  116. Klass k = new Klass("me oh my");
  117. Klass kret = li_boost_intrusive_ptr.smartpointerpointerreftest(k);
  118. String val = kret.getValue();
  119. verifyValue("me oh my smartpointerpointerreftest", val);
  120. verifyCount(1, k);
  121. verifyIntrusiveCount(2, k);
  122. verifyCount(1, kret);
  123. verifyIntrusiveCount(2, kret);
  124. }
  125. // const pass by shared_ptr
  126. {
  127. Klass k = new Klass("me oh my");
  128. Klass kret = li_boost_intrusive_ptr.constsmartpointertest(k);
  129. String val = kret.getValue();
  130. verifyValue("me oh my", val);
  131. verifyCount(1, k);
  132. verifyIntrusiveCount(2, k);
  133. verifyCount(1, kret);
  134. verifyIntrusiveCount(2, kret);
  135. }
  136. // const pass by shared_ptr pointer
  137. {
  138. Klass k = new Klass("me oh my");
  139. Klass kret = li_boost_intrusive_ptr.constsmartpointerpointertest(k);
  140. String val = kret.getValue();
  141. verifyValue("me oh my", val);
  142. verifyCount(1, k);
  143. verifyIntrusiveCount(2, k);
  144. verifyCount(1, kret);
  145. verifyIntrusiveCount(2, kret);
  146. }
  147. // const pass by shared_ptr reference
  148. {
  149. Klass k = new Klass("me oh my");
  150. Klass kret = li_boost_intrusive_ptr.constsmartpointerreftest(k);
  151. String val = kret.getValue();
  152. verifyValue("me oh my", val);
  153. verifyCount(1, k);
  154. verifyIntrusiveCount(2, k);
  155. verifyCount(1, kret);
  156. verifyIntrusiveCount(2, kret);
  157. }
  158. // pass by value
  159. {
  160. Klass k = new Klass("me oh my");
  161. Klass kret = li_boost_intrusive_ptr.valuetest(k);
  162. String val = kret.getValue();
  163. verifyValue("me oh my valuetest", val);
  164. verifyCount(1, k);
  165. verifyCount(1, kret);
  166. }
  167. // pass by pointer
  168. {
  169. Klass k = new Klass("me oh my");
  170. Klass kret = li_boost_intrusive_ptr.pointertest(k);
  171. String val = kret.getValue();
  172. verifyValue("me oh my pointertest", val);
  173. verifyCount(1, k);
  174. verifyCount(1, kret);
  175. }
  176. // pass by reference
  177. {
  178. Klass k = new Klass("me oh my");
  179. Klass kret = li_boost_intrusive_ptr.reftest(k);
  180. String val = kret.getValue();
  181. verifyValue("me oh my reftest", val);
  182. verifyCount(1, k);
  183. verifyCount(1, kret);
  184. }
  185. // pass by pointer reference
  186. {
  187. Klass k = new Klass("me oh my");
  188. Klass kret = li_boost_intrusive_ptr.pointerreftest(k);
  189. String val = kret.getValue();
  190. verifyValue("me oh my pointerreftest", val);
  191. verifyCount(1, k);
  192. verifyCount(1, kret);
  193. }
  194. // null tests
  195. {
  196. Klass k = null;
  197. if (li_boost_intrusive_ptr.smartpointertest(k) != null)
  198. throw new RuntimeException("return was not null");
  199. if (li_boost_intrusive_ptr.smartpointerpointertest(k) != null)
  200. throw new RuntimeException("return was not null");
  201. if (li_boost_intrusive_ptr.smartpointerreftest(k) != null)
  202. throw new RuntimeException("return was not null");
  203. if (li_boost_intrusive_ptr.smartpointerpointerreftest(k) != null)
  204. throw new RuntimeException("return was not null");
  205. if (!li_boost_intrusive_ptr.nullsmartpointerpointertest(null).equals("null pointer"))
  206. throw new RuntimeException("not null smartpointer pointer");
  207. try { li_boost_intrusive_ptr.valuetest(k); throw new RuntimeException("Failed to catch null pointer"); } catch (NullPointerException e) {}
  208. if (li_boost_intrusive_ptr.pointertest(k) != null)
  209. throw new RuntimeException("return was not null");
  210. try { li_boost_intrusive_ptr.reftest(k); throw new RuntimeException("Failed to catch null pointer"); } catch (NullPointerException e) {}
  211. }
  212. // $owner
  213. {
  214. Klass k = li_boost_intrusive_ptr.pointerownertest();
  215. String val = k.getValue();
  216. verifyValue("pointerownertest", val);
  217. verifyCount(1, k);
  218. }
  219. {
  220. Klass k = li_boost_intrusive_ptr.smartpointerpointerownertest();
  221. String val = k.getValue();
  222. verifyValue("smartpointerpointerownertest", val);
  223. verifyCount(1, k);
  224. }
  225. ////////////////////////////////// Derived classes ////////////////////////////////////////
  226. // derived access to base class which cannot be wrapped in an intrusive_ptr
  227. {
  228. KlassWithoutRefCount k = new KlassDerived("me oh my");
  229. verifyValue("this class cannot be wrapped by intrusive_ptrs but we can still use it", k.getSpecialValueFromUnwrappableClass());
  230. }
  231. // derived pass by shared_ptr
  232. {
  233. KlassDerived k = new KlassDerived("me oh my");
  234. KlassDerived kret = li_boost_intrusive_ptr.derivedsmartptrtest(k);
  235. String val = kret.getValue();
  236. verifyValue("me oh my derivedsmartptrtest-Derived", val);
  237. verifyIntrusiveCount(2, k);
  238. verifyCount(2, k); // includes extra reference for upcast
  239. verifyIntrusiveCount(2, kret);
  240. verifyCount(2, kret);
  241. }
  242. // derived pass by shared_ptr pointer
  243. {
  244. KlassDerived k = new KlassDerived("me oh my");
  245. KlassDerived kret = li_boost_intrusive_ptr.derivedsmartptrpointertest(k);
  246. String val = kret.getValue();
  247. verifyValue("me oh my derivedsmartptrpointertest-Derived", val);
  248. verifyIntrusiveCount(2, k);
  249. verifyCount(2, k); // includes extra reference for upcast
  250. verifyIntrusiveCount(2, kret);
  251. verifyCount(2, kret);
  252. }
  253. // derived pass by shared_ptr ref
  254. {
  255. KlassDerived k = new KlassDerived("me oh my");
  256. KlassDerived kret = li_boost_intrusive_ptr.derivedsmartptrreftest(k);
  257. String val = kret.getValue();
  258. verifyValue("me oh my derivedsmartptrreftest-Derived", val);
  259. verifyIntrusiveCount(2, k);
  260. verifyCount(2, k); // includes extra reference for upcast
  261. verifyIntrusiveCount(2, kret);
  262. verifyCount(2, kret);
  263. }
  264. // derived pass by shared_ptr pointer ref
  265. {
  266. KlassDerived k = new KlassDerived("me oh my");
  267. KlassDerived kret = li_boost_intrusive_ptr.derivedsmartptrpointerreftest(k);
  268. String val = kret.getValue();
  269. verifyValue("me oh my derivedsmartptrpointerreftest-Derived", val);
  270. verifyIntrusiveCount(2, k);
  271. verifyCount(2, k); // includes extra reference for upcast
  272. verifyIntrusiveCount(2, kret);
  273. verifyCount(2, kret);
  274. }
  275. // derived pass by pointer
  276. {
  277. KlassDerived k = new KlassDerived("me oh my");
  278. verifyCount(2, k); // includes an extra reference for the upcast in the proxy class
  279. KlassDerived kret = li_boost_intrusive_ptr.derivedpointertest(k);
  280. verifyCount(2, kret);
  281. String val = kret.getValue();
  282. verifyValue("me oh my derivedpointertest-Derived", val);
  283. verifyIntrusiveCount(1, k); //one shared_ptr has a null deleter
  284. verifyCount(2, k); // includes extra reference for upcast
  285. verifyIntrusiveCount(1, kret); //one shared_ptr has a null deleter
  286. verifyCount(2, kret);
  287. }
  288. // derived pass by ref
  289. {
  290. KlassDerived k = new KlassDerived("me oh my");
  291. verifyCount(2, k); // includes an extra reference for the upcast in the proxy class
  292. KlassDerived kret = li_boost_intrusive_ptr.derivedreftest(k);
  293. verifyCount(2, kret);
  294. String val = kret.getValue();
  295. verifyValue("me oh my derivedreftest-Derived", val);
  296. verifyIntrusiveCount(1, k); //one shared_ptr has a null deleter
  297. verifyCount(2, k); // includes extra reference for upcast
  298. verifyIntrusiveCount(1, kret); //one shared_ptr has a null deleter
  299. verifyCount(2, kret);
  300. }
  301. ////////////////////////////////// Derived and base class mixed ////////////////////////////////////////
  302. // pass by shared_ptr (mixed)
  303. {
  304. KlassDerived k = new KlassDerivedDerived("me oh my");
  305. KlassDerived kret = li_boost_intrusive_ptr.derivedsmartptrtest(k);
  306. String val = kret.getValue();
  307. verifyValue("me oh my derivedsmartptrtest-DerivedDerived", val);
  308. verifyIntrusiveCount(2, k);
  309. verifyCount(3, k); // an extra reference for the upcast in the proxy class
  310. verifyIntrusiveCount(2, kret);
  311. verifyCount(2, kret);
  312. }
  313. // pass by shared_ptr pointer (mixed)
  314. {
  315. KlassDerived k = new KlassDerivedDerived("me oh my");
  316. KlassDerived kret = li_boost_intrusive_ptr.derivedsmartptrpointertest(k);
  317. String val = kret.getValue();
  318. verifyValue("me oh my derivedsmartptrpointertest-DerivedDerived", val);
  319. verifyIntrusiveCount(2, k);
  320. verifyCount(3, k); // an extra reference for the upcast in the proxy class
  321. verifyIntrusiveCount(2, kret);
  322. verifyCount(2, kret);
  323. }
  324. // pass by shared_ptr reference (mixed)
  325. {
  326. KlassDerived k = new KlassDerivedDerived("me oh my");
  327. KlassDerived kret = li_boost_intrusive_ptr.derivedsmartptrreftest(k);
  328. String val = kret.getValue();
  329. verifyValue("me oh my derivedsmartptrreftest-DerivedDerived", val);
  330. verifyIntrusiveCount(2, k);
  331. verifyCount(3, k); // an extra reference for the upcast in the proxy class
  332. verifyIntrusiveCount(2, kret);
  333. verifyCount(2, kret);
  334. }
  335. // pass by shared_ptr pointer reference (mixed)
  336. {
  337. KlassDerived k = new KlassDerivedDerived("me oh my");
  338. KlassDerived kret = li_boost_intrusive_ptr.derivedsmartptrpointerreftest(k);
  339. String val = kret.getValue();
  340. verifyValue("me oh my derivedsmartptrpointerreftest-DerivedDerived", val);
  341. verifyIntrusiveCount(2, k);
  342. verifyCount(3, k); // an extra reference for the upcast in the proxy class
  343. verifyIntrusiveCount(2, kret);
  344. verifyCount(2, kret);
  345. }
  346. // pass by value (mixed)
  347. {
  348. KlassDerived k = new KlassDerivedDerived("me oh my");
  349. KlassDerived kret = li_boost_intrusive_ptr.derivedvaluetest(k);
  350. String val = kret.getValue();
  351. verifyValue("me oh my derivedvaluetest-Derived", val); // note slicing
  352. verifyIntrusiveCount(1, k);
  353. verifyCount(3, k); // an extra reference for the upcast in the proxy class
  354. verifyIntrusiveCount(1, kret);
  355. verifyCount(2, kret);
  356. }
  357. // pass by pointer (mixed)
  358. {
  359. KlassDerived k = new KlassDerivedDerived("me oh my");
  360. KlassDerived kret = li_boost_intrusive_ptr.derivedpointertest(k);
  361. String val = kret.getValue();
  362. verifyValue("me oh my derivedpointertest-DerivedDerived", val);
  363. verifyIntrusiveCount(1, k); //one shared_ptr has a null deleter
  364. verifyCount(3, k); // an extra reference for the upcast in the proxy class
  365. verifyIntrusiveCount(1, kret); //one shared_ptr has a null deleter
  366. verifyCount(2, kret);
  367. }
  368. // pass by ref (mixed)
  369. {
  370. KlassDerived k = new KlassDerivedDerived("me oh my");
  371. KlassDerived kret = li_boost_intrusive_ptr.derivedreftest(k);
  372. String val = kret.getValue();
  373. verifyValue("me oh my derivedreftest-DerivedDerived", val);
  374. verifyIntrusiveCount(1, k); //one shared_ptr has a null deleter
  375. verifyCount(3, k); // an extra reference for the upcast in the proxy class
  376. verifyIntrusiveCount(1, kret); //one shared_ptr has a null deleter
  377. verifyCount(2, kret);
  378. }
  379. ////////////////////////////////// Member variables ////////////////////////////////////////
  380. // smart pointer by value
  381. {
  382. MemberVariables m = new MemberVariables();
  383. Klass k = new Klass("smart member value");
  384. m.setSmartMemberValue(k);
  385. String val = k.getValue();
  386. verifyValue("smart member value", val);
  387. verifyIntrusiveCount(2, k);
  388. verifyCount(1, k);
  389. Klass kmember = m.getSmartMemberValue();
  390. val = kmember.getValue();
  391. verifyValue("smart member value", val);
  392. verifyIntrusiveCount(3, kmember);
  393. verifyIntrusiveCount(3, k);
  394. verifyCount(1, k);
  395. verifyCount(1, kmember);
  396. m.delete();
  397. verifyIntrusiveCount(2, kmember);
  398. verifyIntrusiveCount(2, k);
  399. }
  400. // smart pointer by pointer
  401. {
  402. MemberVariables m = new MemberVariables();
  403. Klass k = new Klass("smart member pointer");
  404. m.setSmartMemberPointer(k);
  405. String val = k.getValue();
  406. verifyValue("smart member pointer", val);
  407. verifyCount(1, k);
  408. verifyIntrusiveCount(2, k);
  409. Klass kmember = m.getSmartMemberPointer();
  410. val = kmember.getValue();
  411. verifyValue("smart member pointer", val);
  412. verifyIntrusiveCount(3, kmember);
  413. verifyCount(1, kmember);
  414. verifyIntrusiveCount(3, k);
  415. verifyCount(1, k);
  416. m.delete();
  417. verifyIntrusiveCount(2, kmember);
  418. verifyCount(1, kmember);
  419. verifyIntrusiveCount(2, k);
  420. verifyCount(1, k);
  421. }
  422. // smart pointer by reference
  423. {
  424. MemberVariables m = new MemberVariables();
  425. Klass k = new Klass("smart member reference");
  426. m.setSmartMemberReference(k);
  427. String val = k.getValue();
  428. verifyValue("smart member reference", val);
  429. verifyIntrusiveCount(2, k);
  430. verifyCount(1, k);
  431. Klass kmember = m.getSmartMemberReference();
  432. val = kmember.getValue();
  433. verifyValue("smart member reference", val);
  434. verifyIntrusiveCount(3, kmember);
  435. verifyCount(1, kmember);
  436. verifyIntrusiveCount(3, k);
  437. verifyCount(1, k);
  438. // The C++ reference refers to SmartMemberValue...
  439. m.setSmartMemberValue(k);
  440. Klass kmemberVal = m.getSmartMemberValue();
  441. val = kmember.getValue();
  442. verifyValue("smart member reference", val);
  443. verifyIntrusiveCount(5, kmemberVal);
  444. verifyCount(1, kmemberVal);
  445. verifyIntrusiveCount(5, kmember);
  446. verifyCount(1, kmember);
  447. verifyIntrusiveCount(5, k);
  448. verifyCount(1, k);
  449. m.delete();
  450. verifyIntrusiveCount(3, kmemberVal);
  451. verifyCount(1, kmemberVal);
  452. verifyIntrusiveCount(3, kmember);
  453. verifyCount(1, kmember);
  454. verifyIntrusiveCount(3, k);
  455. verifyCount(1, k);
  456. }
  457. //plain by value
  458. {
  459. MemberVariables m = new MemberVariables();
  460. Klass k = new Klass("plain member value");
  461. m.setMemberValue(k);
  462. String val = k.getValue();
  463. verifyValue("plain member value", val);
  464. verifyCount(1, k);
  465. Klass kmember = m.getMemberValue();
  466. val = kmember.getValue();
  467. verifyValue("plain member value", val);
  468. verifyCount(1, kmember);
  469. verifyCount(1, k);
  470. m.delete();
  471. verifyCount(1, kmember);
  472. verifyCount(1, k);
  473. }
  474. //plain by pointer
  475. {
  476. MemberVariables m = new MemberVariables();
  477. Klass k = new Klass("plain member pointer");
  478. m.setMemberPointer(k);
  479. String val = k.getValue();
  480. verifyValue("plain member pointer", val);
  481. verifyCount(1, k);
  482. Klass kmember = m.getMemberPointer();
  483. val = kmember.getValue();
  484. verifyValue("plain member pointer", val);
  485. verifyCount(1, kmember);
  486. verifyCount(1, k);
  487. m.delete();
  488. verifyCount(1, kmember);
  489. verifyCount(1, k);
  490. }
  491. //plain by reference
  492. {
  493. MemberVariables m = new MemberVariables();
  494. Klass k = new Klass("plain member reference");
  495. m.setMemberReference(k);
  496. String val = k.getValue();
  497. verifyValue("plain member reference", val);
  498. verifyCount(1, k);
  499. Klass kmember = m.getMemberReference();
  500. val = kmember.getValue();
  501. verifyValue("plain member reference", val);
  502. verifyCount(1, kmember);
  503. verifyCount(1, k);
  504. m.delete();
  505. verifyCount(1, kmember);
  506. verifyCount(1, k);
  507. }
  508. //null member variables
  509. {
  510. MemberVariables m = new MemberVariables();
  511. // shared_ptr by value
  512. Klass k = m.getSmartMemberValue();
  513. if (k != null)
  514. throw new RuntimeException("expected null");
  515. m.setSmartMemberValue(null);
  516. k = m.getSmartMemberValue();
  517. if (k != null)
  518. throw new RuntimeException("expected null");
  519. verifyCount(0, k);
  520. // plain by value
  521. try { m.setMemberValue(null); throw new RuntimeException("Failed to catch null pointer"); } catch (NullPointerException e) {}
  522. }
  523. }
  524. private void toIgnore() {
  525. ////////////////////////////////// Global variables ////////////////////////////////////////
  526. // smart pointer
  527. {
  528. Klass kglobal = li_boost_intrusive_ptr.getGlobalSmartValue();
  529. if (kglobal != null)
  530. throw new RuntimeException("expected null");
  531. Klass k = new Klass("smart global value");
  532. li_boost_intrusive_ptr.setGlobalSmartValue(k);
  533. verifyIntrusiveCount(2, k);
  534. verifyCount(1, k);
  535. kglobal = li_boost_intrusive_ptr.getGlobalSmartValue();
  536. String val = kglobal.getValue();
  537. verifyValue("smart global value", val);
  538. verifyIntrusiveCount(3, kglobal);
  539. verifyCount(1, kglobal);
  540. verifyIntrusiveCount(3, k);
  541. verifyCount(1, k);
  542. verifyValue("smart global value", li_boost_intrusive_ptr.getGlobalSmartValue().getValue());
  543. li_boost_intrusive_ptr.setGlobalSmartValue(null);
  544. }
  545. // plain value
  546. {
  547. Klass kglobal;
  548. Klass k = new Klass("global value");
  549. li_boost_intrusive_ptr.setGlobalValue(k);
  550. verifyCount(1, k);
  551. kglobal = li_boost_intrusive_ptr.getGlobalValue();
  552. String val = kglobal.getValue();
  553. verifyValue("global value", val);
  554. verifyCount(1, kglobal);
  555. verifyCount(1, k);
  556. verifyValue("global value", li_boost_intrusive_ptr.getGlobalValue().getValue());
  557. try { li_boost_intrusive_ptr.setGlobalValue(null); throw new RuntimeException("Failed to catch null pointer"); } catch (NullPointerException e) {}
  558. }
  559. //plain pointer
  560. {
  561. Klass kglobal = li_boost_intrusive_ptr.getGlobalPointer();
  562. if (kglobal != null)
  563. throw new RuntimeException("expected null");
  564. Klass k = new Klass("global pointer");
  565. li_boost_intrusive_ptr.setGlobalPointer(k);
  566. verifyCount(1, k);
  567. kglobal = li_boost_intrusive_ptr.getGlobalPointer();
  568. String val = kglobal.getValue();
  569. verifyValue("global pointer", val);
  570. verifyCount(1, kglobal);
  571. verifyCount(1, k);
  572. li_boost_intrusive_ptr.setGlobalPointer(null);
  573. }
  574. // plain reference
  575. {
  576. Klass kglobal;
  577. Klass k = new Klass("global reference");
  578. li_boost_intrusive_ptr.setGlobalReference(k);
  579. verifyCount(1, k);
  580. kglobal = li_boost_intrusive_ptr.getGlobalReference();
  581. String val = kglobal.getValue();
  582. verifyValue("global reference", val);
  583. verifyCount(1, kglobal);
  584. verifyCount(1, k);
  585. try { li_boost_intrusive_ptr.setGlobalReference(null); throw new RuntimeException("Failed to catch null pointer"); } catch (NullPointerException e) {}
  586. }
  587. ////////////////////////////////// Templates ////////////////////////////////////////
  588. {
  589. PairIntDouble pid = new PairIntDouble(10, 20.2);
  590. if (pid.getBaseVal1() != 20 || pid.getBaseVal2() != 40.4)
  591. throw new RuntimeException("Base values wrong");
  592. if (pid.getVal1() != 10 || pid.getVal2() != 20.2)
  593. throw new RuntimeException("Derived Values wrong");
  594. }
  595. }
  596. private void verifyValue(String expected, String got) {
  597. if (!expected.equals(got))
  598. throw new RuntimeException("verify value failed. Expected: " + expected + " Got: " + got);
  599. }
  600. private void verifyCount(int expected, Klass k) {
  601. int got = li_boost_intrusive_ptr.use_count(k);
  602. if (expected != got)
  603. throw new RuntimeException("verify use_count failed. Expected: " + expected + " Got: " + got);
  604. }
  605. private void verifyCount(int expected, KlassDerived kd) {
  606. int got = li_boost_intrusive_ptr.use_count(kd);
  607. if (expected != got)
  608. throw new RuntimeException("verify use_count failed. Expected: " + expected + " Got: " + got);
  609. }
  610. private void verifyCount(int expected, KlassDerivedDerived kdd) {
  611. int got = li_boost_intrusive_ptr.use_count(kdd);
  612. if (expected != got)
  613. throw new RuntimeException("verify use_count failed. Expected: " + expected + " Got: " + got);
  614. }
  615. private void verifyIntrusiveCount(int expected, Klass k) {
  616. int got = k.use_count();
  617. if (expected != got)
  618. throw new RuntimeException("verify use_count failed. Expected: " + expected + " Got: " + got);
  619. }
  620. private void verifyIntrusiveCount(int expected, KlassDerived kd) {
  621. int got = kd.use_count();
  622. if (expected != got)
  623. throw new RuntimeException("verify use_count failed. Expected: " + expected + " Got: " + got);
  624. }
  625. private void verifyIntrusiveCount(int expected, KlassDerivedDerived kdd) {
  626. int got = kdd.use_count();
  627. if (expected != got)
  628. throw new RuntimeException("verify use_count failed. Expected: " + expected + " Got: " + got);
  629. }
  630. }