PageRenderTime 46ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 0ms

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

#
Java | 603 lines | 482 code | 71 blank | 50 comment | 47 complexity | 732e10a5b8d8175608d6396ec3565b6b MD5 | raw file
Possible License(s): LGPL-2.1, Cube, GPL-3.0, 0BSD, GPL-2.0
  1. import li_boost_shared_ptr.*;
  2. public class li_boost_shared_ptr_runme {
  3. static {
  4. try {
  5. System.loadLibrary("li_boost_shared_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_shared_ptr.setDebug_shared(debug);
  18. // Change loop count to run for a long time to monitor memory
  19. final int loopCount = 1; //5000;
  20. for (int i=0; i<loopCount; i++) {
  21. new li_boost_shared_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 = 100;
  34. while (true) {
  35. System.gc();
  36. System.runFinalization();
  37. try {
  38. java.lang.Thread.sleep(10);
  39. } catch (java.lang.InterruptedException e) {
  40. }
  41. if (--countdown == 0)
  42. break;
  43. if (Klass.getTotal_count() == 1) // Expect 1 instance - the one global variable (GlobalValue)
  44. break;
  45. };
  46. if (Klass.getTotal_count() != 1)
  47. throw new RuntimeException("Klass.total_count=" + Klass.getTotal_count());
  48. int wrapper_count = li_boost_shared_ptr.shared_ptr_wrapper_count();
  49. if (wrapper_count != li_boost_shared_ptr.getNOT_COUNTING())
  50. if (wrapper_count != 1) // Expect 1 instance - the one global variable (GlobalSmartValue)
  51. throw new RuntimeException("shared_ptr wrapper count=" + wrapper_count);
  52. if (debug)
  53. System.out.println("Finished");
  54. }
  55. private void runtest() {
  56. // simple shared_ptr usage - created in C++
  57. {
  58. Klass k = new Klass("me oh my");
  59. String val = k.getValue();
  60. verifyValue("me oh my", val);
  61. verifyCount(1, k);
  62. }
  63. // simple shared_ptr usage - not created in C++
  64. {
  65. Klass k = li_boost_shared_ptr.factorycreate();
  66. String val = k.getValue();
  67. verifyValue("factorycreate", val);
  68. verifyCount(1, k);
  69. }
  70. // pass by shared_ptr
  71. {
  72. Klass k = new Klass("me oh my");
  73. Klass kret = li_boost_shared_ptr.smartpointertest(k);
  74. String val = kret.getValue();
  75. verifyValue("me oh my smartpointertest", val);
  76. verifyCount(2, k);
  77. verifyCount(2, kret);
  78. }
  79. // pass by shared_ptr pointer
  80. {
  81. Klass k = new Klass("me oh my");
  82. Klass kret = li_boost_shared_ptr.smartpointerpointertest(k);
  83. String val = kret.getValue();
  84. verifyValue("me oh my smartpointerpointertest", val);
  85. verifyCount(2, k);
  86. verifyCount(2, kret);
  87. }
  88. // pass by shared_ptr reference
  89. {
  90. Klass k = new Klass("me oh my");
  91. Klass kret = li_boost_shared_ptr.smartpointerreftest(k);
  92. String val = kret.getValue();
  93. verifyValue("me oh my smartpointerreftest", val);
  94. verifyCount(2, k);
  95. verifyCount(2, kret);
  96. }
  97. // pass by shared_ptr pointer reference
  98. {
  99. Klass k = new Klass("me oh my");
  100. Klass kret = li_boost_shared_ptr.smartpointerpointerreftest(k);
  101. String val = kret.getValue();
  102. verifyValue("me oh my smartpointerpointerreftest", val);
  103. verifyCount(2, k);
  104. verifyCount(2, kret);
  105. }
  106. // const pass by shared_ptr
  107. {
  108. Klass k = new Klass("me oh my");
  109. Klass kret = li_boost_shared_ptr.constsmartpointertest(k);
  110. String val = kret.getValue();
  111. verifyValue("me oh my", val);
  112. verifyCount(2, k);
  113. verifyCount(2, kret);
  114. }
  115. // const pass by shared_ptr pointer
  116. {
  117. Klass k = new Klass("me oh my");
  118. Klass kret = li_boost_shared_ptr.constsmartpointerpointertest(k);
  119. String val = kret.getValue();
  120. verifyValue("me oh my", val);
  121. verifyCount(2, k);
  122. verifyCount(2, kret);
  123. }
  124. // const pass by shared_ptr reference
  125. {
  126. Klass k = new Klass("me oh my");
  127. Klass kret = li_boost_shared_ptr.constsmartpointerreftest(k);
  128. String val = kret.getValue();
  129. verifyValue("me oh my", val);
  130. verifyCount(2, k);
  131. verifyCount(2, kret);
  132. }
  133. // pass by value
  134. {
  135. Klass k = new Klass("me oh my");
  136. Klass kret = li_boost_shared_ptr.valuetest(k);
  137. String val = kret.getValue();
  138. verifyValue("me oh my valuetest", val);
  139. verifyCount(1, k);
  140. verifyCount(1, kret);
  141. }
  142. // pass by pointer
  143. {
  144. Klass k = new Klass("me oh my");
  145. Klass kret = li_boost_shared_ptr.pointertest(k);
  146. String val = kret.getValue();
  147. verifyValue("me oh my pointertest", val);
  148. verifyCount(1, k);
  149. verifyCount(1, kret);
  150. }
  151. // pass by reference
  152. {
  153. Klass k = new Klass("me oh my");
  154. Klass kret = li_boost_shared_ptr.reftest(k);
  155. String val = kret.getValue();
  156. verifyValue("me oh my reftest", val);
  157. verifyCount(1, k);
  158. verifyCount(1, kret);
  159. }
  160. // pass by pointer reference
  161. {
  162. Klass k = new Klass("me oh my");
  163. Klass kret = li_boost_shared_ptr.pointerreftest(k);
  164. String val = kret.getValue();
  165. verifyValue("me oh my pointerreftest", val);
  166. verifyCount(1, k);
  167. verifyCount(1, kret);
  168. }
  169. // null tests
  170. {
  171. Klass k = null;
  172. if (li_boost_shared_ptr.smartpointertest(k) != null)
  173. throw new RuntimeException("return was not null");
  174. if (li_boost_shared_ptr.smartpointerpointertest(k) != null)
  175. throw new RuntimeException("return was not null");
  176. if (li_boost_shared_ptr.smartpointerreftest(k) != null)
  177. throw new RuntimeException("return was not null");
  178. if (li_boost_shared_ptr.smartpointerpointerreftest(k) != null)
  179. throw new RuntimeException("return was not null");
  180. if (!li_boost_shared_ptr.nullsmartpointerpointertest(null).equals("null pointer"))
  181. throw new RuntimeException("not null smartpointer pointer");
  182. try { li_boost_shared_ptr.valuetest(k); throw new RuntimeException("Failed to catch null pointer"); } catch (NullPointerException e) {}
  183. if (li_boost_shared_ptr.pointertest(k) != null)
  184. throw new RuntimeException("return was not null");
  185. try { li_boost_shared_ptr.reftest(k); throw new RuntimeException("Failed to catch null pointer"); } catch (NullPointerException e) {}
  186. }
  187. // $owner
  188. {
  189. Klass k = li_boost_shared_ptr.pointerownertest();
  190. String val = k.getValue();
  191. verifyValue("pointerownertest", val);
  192. verifyCount(1, k);
  193. }
  194. {
  195. Klass k = li_boost_shared_ptr.smartpointerpointerownertest();
  196. String val = k.getValue();
  197. verifyValue("smartpointerpointerownertest", val);
  198. verifyCount(1, k);
  199. }
  200. ////////////////////////////////// Derived classes ////////////////////////////////////////
  201. // derived pass by shared_ptr
  202. {
  203. KlassDerived k = new KlassDerived("me oh my");
  204. KlassDerived kret = li_boost_shared_ptr.derivedsmartptrtest(k);
  205. String val = kret.getValue();
  206. verifyValue("me oh my derivedsmartptrtest-Derived", val);
  207. verifyCount(4, k); // includes two extra references for upcasts
  208. verifyCount(4, kret);
  209. }
  210. // derived pass by shared_ptr pointer
  211. {
  212. KlassDerived k = new KlassDerived("me oh my");
  213. KlassDerived kret = li_boost_shared_ptr.derivedsmartptrpointertest(k);
  214. String val = kret.getValue();
  215. verifyValue("me oh my derivedsmartptrpointertest-Derived", val);
  216. verifyCount(4, k); // includes two extra references for upcasts in the proxy classes
  217. verifyCount(4, kret);
  218. }
  219. // derived pass by shared_ptr ref
  220. {
  221. KlassDerived k = new KlassDerived("me oh my");
  222. KlassDerived kret = li_boost_shared_ptr.derivedsmartptrreftest(k);
  223. String val = kret.getValue();
  224. verifyValue("me oh my derivedsmartptrreftest-Derived", val);
  225. verifyCount(4, k); // includes two extra references for upcasts in the proxy classes
  226. verifyCount(4, kret);
  227. }
  228. // derived pass by shared_ptr pointer ref
  229. {
  230. KlassDerived k = new KlassDerived("me oh my");
  231. KlassDerived kret = li_boost_shared_ptr.derivedsmartptrpointerreftest(k);
  232. String val = kret.getValue();
  233. verifyValue("me oh my derivedsmartptrpointerreftest-Derived", val);
  234. verifyCount(4, k); // includes two extra references for upcasts in the proxy classes
  235. verifyCount(4, kret);
  236. }
  237. // derived pass by pointer
  238. {
  239. KlassDerived k = new KlassDerived("me oh my");
  240. KlassDerived kret = li_boost_shared_ptr.derivedpointertest(k);
  241. String val = kret.getValue();
  242. verifyValue("me oh my derivedpointertest-Derived", val);
  243. verifyCount(2, k); // includes an extra reference for the upcast in the proxy class
  244. verifyCount(2, kret);
  245. }
  246. // derived pass by ref
  247. {
  248. KlassDerived k = new KlassDerived("me oh my");
  249. KlassDerived kret = li_boost_shared_ptr.derivedreftest(k);
  250. String val = kret.getValue();
  251. verifyValue("me oh my derivedreftest-Derived", val);
  252. verifyCount(2, k); // includes an extra reference for the upcast in the proxy class
  253. verifyCount(2, kret);
  254. }
  255. ////////////////////////////////// Derived and base class mixed ////////////////////////////////////////
  256. // pass by shared_ptr (mixed)
  257. {
  258. Klass k = new KlassDerived("me oh my");
  259. Klass kret = li_boost_shared_ptr.smartpointertest(k);
  260. String val = kret.getValue();
  261. verifyValue("me oh my smartpointertest-Derived", val);
  262. verifyCount(3, k); // an extra reference for the upcast in the proxy class
  263. verifyCount(3, kret);
  264. }
  265. // pass by shared_ptr pointer (mixed)
  266. {
  267. Klass k = new KlassDerived("me oh my");
  268. Klass kret = li_boost_shared_ptr.smartpointerpointertest(k);
  269. String val = kret.getValue();
  270. verifyValue("me oh my smartpointerpointertest-Derived", val);
  271. verifyCount(3, k); // an extra reference for the upcast in the proxy class
  272. verifyCount(3, kret);
  273. }
  274. // pass by shared_ptr reference (mixed)
  275. {
  276. Klass k = new KlassDerived("me oh my");
  277. Klass kret = li_boost_shared_ptr.smartpointerreftest(k);
  278. String val = kret.getValue();
  279. verifyValue("me oh my smartpointerreftest-Derived", val);
  280. verifyCount(3, k); // an extra reference for the upcast in the proxy class
  281. verifyCount(3, kret);
  282. }
  283. // pass by shared_ptr pointer reference (mixed)
  284. {
  285. Klass k = new KlassDerived("me oh my");
  286. Klass kret = li_boost_shared_ptr.smartpointerpointerreftest(k);
  287. String val = kret.getValue();
  288. verifyValue("me oh my smartpointerpointerreftest-Derived", val);
  289. verifyCount(3, k); // an extra reference for the upcast in the proxy class
  290. verifyCount(3, kret);
  291. }
  292. // pass by value (mixed)
  293. {
  294. Klass k = new KlassDerived("me oh my");
  295. Klass kret = li_boost_shared_ptr.valuetest(k);
  296. String val = kret.getValue();
  297. verifyValue("me oh my valuetest", val); // note slicing
  298. verifyCount(2, k); // an extra reference for the upcast in the proxy class
  299. verifyCount(1, kret);
  300. }
  301. // pass by pointer (mixed)
  302. {
  303. Klass k = new KlassDerived("me oh my");
  304. Klass kret = li_boost_shared_ptr.pointertest(k);
  305. String val = kret.getValue();
  306. verifyValue("me oh my pointertest-Derived", val);
  307. verifyCount(2, k); // an extra reference for the upcast in the proxy class
  308. verifyCount(1, kret);
  309. }
  310. // pass by ref (mixed)
  311. {
  312. Klass k = new KlassDerived("me oh my");
  313. Klass kret = li_boost_shared_ptr.reftest(k);
  314. String val = kret.getValue();
  315. verifyValue("me oh my reftest-Derived", val);
  316. verifyCount(2, k); // an extra reference for the upcast in the proxy class
  317. verifyCount(1, kret);
  318. }
  319. // 3rd derived class
  320. {
  321. Klass k = new Klass3rdDerived("me oh my");
  322. String val = k.getValue();
  323. verifyValue("me oh my-3rdDerived", val);
  324. verifyCount(3, k); // 3 classes in inheritance chain == 3 swigCPtr values
  325. val = li_boost_shared_ptr.test3rdupcast(k);
  326. verifyValue("me oh my-3rdDerived", val);
  327. verifyCount(3, k);
  328. }
  329. ////////////////////////////////// Member variables ////////////////////////////////////////
  330. // smart pointer by value
  331. {
  332. MemberVariables m = new MemberVariables();
  333. Klass k = new Klass("smart member value");
  334. m.setSmartMemberValue(k);
  335. String val = k.getValue();
  336. verifyValue("smart member value", val);
  337. verifyCount(2, k);
  338. Klass kmember = m.getSmartMemberValue();
  339. val = kmember.getValue();
  340. verifyValue("smart member value", val);
  341. verifyCount(3, kmember);
  342. verifyCount(3, k);
  343. m.delete();
  344. verifyCount(2, kmember);
  345. verifyCount(2, k);
  346. }
  347. // smart pointer by pointer
  348. {
  349. MemberVariables m = new MemberVariables();
  350. Klass k = new Klass("smart member pointer");
  351. m.setSmartMemberPointer(k);
  352. String val = k.getValue();
  353. verifyValue("smart member pointer", val);
  354. verifyCount(1, k);
  355. Klass kmember = m.getSmartMemberPointer();
  356. val = kmember.getValue();
  357. verifyValue("smart member pointer", val);
  358. verifyCount(2, kmember);
  359. verifyCount(2, k);
  360. m.delete();
  361. verifyCount(2, kmember);
  362. verifyCount(2, k);
  363. }
  364. // smart pointer by reference
  365. {
  366. MemberVariables m = new MemberVariables();
  367. Klass k = new Klass("smart member reference");
  368. m.setSmartMemberReference(k);
  369. String val = k.getValue();
  370. verifyValue("smart member reference", val);
  371. verifyCount(2, k);
  372. Klass kmember = m.getSmartMemberReference();
  373. val = kmember.getValue();
  374. verifyValue("smart member reference", val);
  375. verifyCount(3, kmember);
  376. verifyCount(3, k);
  377. // The C++ reference refers to SmartMemberValue...
  378. Klass kmemberVal = m.getSmartMemberValue();
  379. val = kmember.getValue();
  380. verifyValue("smart member reference", val);
  381. verifyCount(4, kmemberVal);
  382. verifyCount(4, kmember);
  383. verifyCount(4, k);
  384. m.delete();
  385. verifyCount(3, kmemberVal);
  386. verifyCount(3, kmember);
  387. verifyCount(3, k);
  388. }
  389. // plain by value
  390. {
  391. MemberVariables m = new MemberVariables();
  392. Klass k = new Klass("plain member value");
  393. m.setMemberValue(k);
  394. String val = k.getValue();
  395. verifyValue("plain member value", val);
  396. verifyCount(1, k);
  397. Klass kmember = m.getMemberValue();
  398. val = kmember.getValue();
  399. verifyValue("plain member value", val);
  400. verifyCount(1, kmember);
  401. verifyCount(1, k);
  402. m.delete();
  403. verifyCount(1, kmember);
  404. verifyCount(1, k);
  405. }
  406. // plain by pointer
  407. {
  408. MemberVariables m = new MemberVariables();
  409. Klass k = new Klass("plain member pointer");
  410. m.setMemberPointer(k);
  411. String val = k.getValue();
  412. verifyValue("plain member pointer", val);
  413. verifyCount(1, k);
  414. Klass kmember = m.getMemberPointer();
  415. val = kmember.getValue();
  416. verifyValue("plain member pointer", val);
  417. verifyCount(1, kmember);
  418. verifyCount(1, k);
  419. m.delete();
  420. verifyCount(1, kmember);
  421. verifyCount(1, k);
  422. }
  423. // plain by reference
  424. {
  425. MemberVariables m = new MemberVariables();
  426. Klass k = new Klass("plain member reference");
  427. m.setMemberReference(k);
  428. String val = k.getValue();
  429. verifyValue("plain member reference", val);
  430. verifyCount(1, k);
  431. Klass kmember = m.getMemberReference();
  432. val = kmember.getValue();
  433. verifyValue("plain member reference", val);
  434. verifyCount(1, kmember);
  435. verifyCount(1, k);
  436. m.delete();
  437. verifyCount(1, kmember);
  438. verifyCount(1, k);
  439. }
  440. // null member variables
  441. {
  442. MemberVariables m = new MemberVariables();
  443. // shared_ptr by value
  444. Klass k = m.getSmartMemberValue();
  445. if (k != null)
  446. throw new RuntimeException("expected null");
  447. m.setSmartMemberValue(null);
  448. k = m.getSmartMemberValue();
  449. if (k != null)
  450. throw new RuntimeException("expected null");
  451. verifyCount(0, k);
  452. // plain by value
  453. try { m.setMemberValue(null); throw new RuntimeException("Failed to catch null pointer"); } catch (NullPointerException e) {}
  454. }
  455. ////////////////////////////////// Global variables ////////////////////////////////////////
  456. // smart pointer
  457. {
  458. Klass kglobal = li_boost_shared_ptr.getGlobalSmartValue();
  459. if (kglobal != null)
  460. throw new RuntimeException("expected null");
  461. Klass k = new Klass("smart global value");
  462. li_boost_shared_ptr.setGlobalSmartValue(k);
  463. verifyCount(2, k);
  464. kglobal = li_boost_shared_ptr.getGlobalSmartValue();
  465. String val = kglobal.getValue();
  466. verifyValue("smart global value", val);
  467. verifyCount(3, kglobal);
  468. verifyCount(3, k);
  469. verifyValue("smart global value", li_boost_shared_ptr.getGlobalSmartValue().getValue());
  470. li_boost_shared_ptr.setGlobalSmartValue(null);
  471. }
  472. // plain value
  473. {
  474. Klass kglobal;
  475. Klass k = new Klass("global value");
  476. li_boost_shared_ptr.setGlobalValue(k);
  477. verifyCount(1, k);
  478. kglobal = li_boost_shared_ptr.getGlobalValue();
  479. String val = kglobal.getValue();
  480. verifyValue("global value", val);
  481. verifyCount(1, kglobal);
  482. verifyCount(1, k);
  483. verifyValue("global value", li_boost_shared_ptr.getGlobalValue().getValue());
  484. try { li_boost_shared_ptr.setGlobalValue(null); throw new RuntimeException("Failed to catch null pointer"); } catch (NullPointerException e) {}
  485. }
  486. // plain pointer
  487. {
  488. Klass kglobal = li_boost_shared_ptr.getGlobalPointer();
  489. if (kglobal != null)
  490. throw new RuntimeException("expected null");
  491. Klass k = new Klass("global pointer");
  492. li_boost_shared_ptr.setGlobalPointer(k);
  493. verifyCount(1, k);
  494. kglobal = li_boost_shared_ptr.getGlobalPointer();
  495. String val = kglobal.getValue();
  496. verifyValue("global pointer", val);
  497. verifyCount(1, kglobal);
  498. verifyCount(1, k);
  499. li_boost_shared_ptr.setGlobalPointer(null);
  500. }
  501. // plain reference
  502. {
  503. Klass kglobal;
  504. Klass k = new Klass("global reference");
  505. li_boost_shared_ptr.setGlobalReference(k);
  506. verifyCount(1, k);
  507. kglobal = li_boost_shared_ptr.getGlobalReference();
  508. String val = kglobal.getValue();
  509. verifyValue("global reference", val);
  510. verifyCount(1, kglobal);
  511. verifyCount(1, k);
  512. try { li_boost_shared_ptr.setGlobalReference(null); throw new RuntimeException("Failed to catch null pointer"); } catch (NullPointerException e) {}
  513. }
  514. ////////////////////////////////// Templates ////////////////////////////////////////
  515. {
  516. PairIntDouble pid = new PairIntDouble(10, 20.2);
  517. if (pid.getBaseVal1() != 20 || pid.getBaseVal2() != 40.4)
  518. throw new RuntimeException("Base values wrong");
  519. if (pid.getVal1() != 10 || pid.getVal2() != 20.2)
  520. throw new RuntimeException("Derived Values wrong");
  521. }
  522. }
  523. private void verifyValue(String expected, String got) {
  524. if (!expected.equals(got))
  525. throw new RuntimeException("verify value failed. Expected: " + expected + " Got: " + got);
  526. }
  527. private void verifyCount(int expected, Klass k) {
  528. int got = li_boost_shared_ptr.use_count(k);
  529. if (expected != got)
  530. throw new RuntimeException("verify use_count failed. Expected: " + expected + " Got: " + got);
  531. }
  532. }