MySQL 5.6.14 Source Code Document
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
myapi_test.cpp
1 /*
2  Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
3 
4  This program is free software; you can redistribute it and/or modify
5  it under the terms of the GNU General Public License as published by
6  the Free Software Foundation; version 2 of the License.
7 
8  This program is distributed in the hope that it will be useful,
9  but WITHOUT ANY WARRANTY; without even the implied warranty of
10  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11  GNU General Public License for more details.
12 
13  You should have received a copy of the GNU General Public License
14  along with this program; if not, write to the Free Software
15  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
16 */
17 /*
18  * myapi_test.cpp
19  */
20 
21 #include <assert.h> // not using namespaces yet
22 #include <stdio.h> // not using namespaces yet
23 
24 #include "myapi.hpp"
25 #include "helpers.hpp"
26 
27 void
28 test0()
29 {
30  printf("\ntesting basic function: f0() ...\n");
31 
32  f0();
33 }
34 
35 // primitive types, by value in, out
36 void
37 test1()
38 {
39  printf("\ntesting primitive type functions: fxx(0) ...\n");
40 
41  f11(0);
42  f12(0);
43  f13(0);
44  f14(0);
45  f15(0);
46  f16(0);
47  f17(0);
48  f18(0);
49  f19(0);
50  f20(0);
51  f21(0);
52  f22(0);
53  f23(0);
54  f24(0);
55  f25(0);
56 
57  f31(0);
58  f32(0);
59  f33(0);
60  f34(0);
61  f35(0);
62  f36(0);
63  f37(0);
64  f38(0);
65  f39(0);
66  f40(0);
67  f41(0);
68  f42(0);
69  f43(0);
70  f44(0);
71  f45(0);
72 }
73 
74 void
75 test2()
76 {
77  printf("\ntesting basic functions: f1xx(f0xx()) ...\n");
78 
79  for (int i = 0; i < 2; i++) {
80  f111(f011());
81  f112(f012());
82  f113(f013());
83  f114(f014());
84  f115(f015());
85  f116(f016());
86  f117(f017());
87  f118(f018());
88  f121(f021());
89  f122(f022());
90  f123(f023());
91  f124(f024());
92 
93  f131(f031());
94  f132(f032());
95  f133(f033());
96  f134(f034());
97  f135(f035());
98  f136(f036());
99  f137(f037());
100  f138(f038());
101  f141(f041());
102  f142(f042());
103  f143(f043());
104  f144(f044());
105  }
106 }
107 
108 void
109 test3()
110 {
111  printf("\ntesting basic functions: f3xx(f2xx()) ...\n");
112 
113  for (int i = 0; i < 2; i++) {
114  f311(f211());
115  f312(f212());
116  f313(f213());
117  f314(f214());
118  f315(f215());
119  f316(f216());
120  f317(f217());
121  f318(f218());
122  f321(f221());
123  f322(f222());
124  f323(f223());
125  f324(f224());
126 
127  f331(f231());
128  f332(f232());
129  f333(f233());
130  f334(f234());
131  f335(f235());
132  f336(f236());
133  f337(f237());
134  f338(f238());
135  f341(f241());
136  f342(f242());
137  f343(f243());
138  f344(f244());
139  }
140 }
141 
142 void
143 test4()
144 {
145  printf("\ntesting basic functions: f5xx(f4xx()) ...\n");
146 
147  for (int i = 0; i < 2; i++) {
148  f511(f411());
149  f512(f412());
150  f513(f413());
151  f514(f414());
152  f515(f415());
153  f516(f416());
154  f517(f417());
155  f518(f418());
156  f521(f421());
157  f522(f422());
158  f523(f423());
159  f524(f424());
160 
161  f531(f431());
162  f532(f432());
163  f533(f433());
164  f534(f434());
165  f535(f435());
166  f536(f436());
167  f537(f437());
168  f538(f438());
169  f541(f441());
170  f542(f442());
171  f543(f443());
172  f544(f444());
173 
174  f551(f451());
175  f552(f452());
176  f553(f453());
177  f554(f454());
178  f555(f455());
179  f556(f456());
180  f557(f457());
181  f558(f458());
182  f561(f461());
183  f562(f462());
184  f563(f463());
185  f564(f464());
186 
187  f571(f471());
188  f572(f472());
189  f573(f473());
190  f574(f474());
191  f575(f475());
192  f576(f476());
193  f577(f477());
194  f578(f478());
195  f581(f481());
196  f582(f482());
197  f583(f483());
198  f584(f484());
199  }
200 }
201 
202 void
203 test5()
204 {
205  printf("\ntesting basic functions: f7xx(f6xx()) ...\n");
206 
207  for (int i = 0; i < 2; i++) {
208  f711(f611());
209  f712(f612());
210  f713(f613());
211  f714(f614());
212  f715(f615());
213  f716(f616());
214  f717(f617());
215  f718(f618());
216  f721(f621());
217  f722(f622());
218  f723(f623());
219  f724(f624());
220 
221  f731(f631());
222  f732(f632());
223  f733(f633());
224  f734(f634());
225  f735(f635());
226  f736(f636());
227  f737(f637());
228  f738(f638());
229  f741(f641());
230  f742(f642());
231  f743(f643());
232  f744(f644());
233 
234  f751(f651());
235  f752(f652());
236  f753(f653());
237  f754(f654());
238  f755(f655());
239  f756(f656());
240  f757(f657());
241  f758(f658());
242  f761(f661());
243  f762(f662());
244  f763(f663());
245  f764(f664());
246 
247  f771(f671());
248  f772(f672());
249  f773(f673());
250  f774(f674());
251  f775(f675());
252  f776(f676());
253  f777(f677());
254  f778(f678());
255  f781(f681());
256  f782(f682());
257  f783(f683());
258  f784(f684());
259  }
260 }
261 
262 void
263 test6()
264 {
265  printf("\ntesting instance wrappers: ...\n");
266  int n;
267 
268  printf("\ncalling A...\n");
269  A * a = new A();
270  printf("... new A() = %p\n", &a);
271  delete new A(5);
272  printf("... delete new A(int)\n");
273  n = A::f0s();
274  printf("... A::f0s() = %d\n", n);
275  assert (n == 10);
276  n = a->f0s();
277  printf("... a->f0s() = %d\n", n);
278  assert (n == 10);
279  n = a->f0n();
280  printf("... a->f0n() = %d\n", n);
281  assert (n == 11);
282  n = a->f0v();
283  printf("... a->f0v() = %d\n", n);
284  assert (n == 12);
285 
286  printf("\nA::take_ptr(A::deliver_ptr())...\n");
287  A::take_ptr(A::deliver_ptr());
288 
289  printf("\nA::take_null_ptr(A::deliver_null_ptr())...\n");
290  A::take_null_ptr(A::deliver_null_ptr());
291 
292  printf("\nA::take_ref(A::deliver_ref())...\n");
293  A::take_ref(A::deliver_ref());
294 
295  printf("\nA::take_null_ref(A::deliver_null_ref())...\n");
296  A::take_null_ref(A::deliver_null_ref());
297 
298  printf("\nA::print(A *)...\n");
299  A::print(a);
300 
301 
302  printf("\naccessing A...\n");
303  n = ++A::d0s;
304  printf("... ++A::d0s = %d\n", n);
305  assert (n == 11);
306  n = A::d0sc;
307  printf("... A::d0sc = %d\n", n);
308  assert (n == -10);
309  n = ++a->d0s;
310  printf("... ++a->d0s = %d\n", n);
311  assert (n == 12);
312  n = a->d0sc;
313  printf("... a->d0sc = %d\n", n);
314  assert (n == -10);
315  n = ++a->d0;
316  printf("... ++a->d0 = %d\n", n);
317  assert (n == 12);
318  n = a->d0c;
319  printf("... a->d0c = %d\n", n);
320  assert (n == -11);
321 
322  printf("\ncalling B0...\n");
323  B0 & b0b0 = *a->newB0();
324  printf("... a->newB0() = %p\n", &b0b0);
325  n = B0::f0s();
326  printf("... B0::f0s() = %d\n", n);
327  assert (n == 20);
328  n = b0b0.f0s();
329  printf("... b0b0.f0s() = %d\n", n);
330  assert (n == 20);
331  n = b0b0.f0n();
332  printf("... b0b0.f0n() = %d\n", n);
333  assert (n == 21);
334  n = b0b0.f0v();
335  printf("... b0b0.f0v() = %d\n", n);
336  assert (n == 22);
337  a->del(b0b0);
338  printf("... a->del(b0b0)\n");
339 
340  printf("\naccessing B0...\n");
341  B0 & b0 = *a->newB0();
342  printf("... a->newB0() = %p\n", &b0);
343  n = ++B0::d0s;
344  printf("... ++B0::d0s = %d\n", n);
345  assert (n == 21);
346  n = B0::d0sc;
347  printf("... B0::d0sc = %d\n", n);
348  assert (n == -20);
349  n = ++b0.d0s;
350  printf("... ++b0.d0s = %d\n", n);
351  assert (n == 22);
352  n = b0.d0sc;
353  printf("... b0.d0sc = %d\n", n);
354  assert (n == -20);
355  n = ++b0.d0;
356  printf("... ++b0.d0 = %d\n", n);
357  assert (n == 22);
358  n = b0.d0c;
359  printf("... b0.d0c = %d\n", n);
360  assert (n == -21);
361  a->del(b0);
362  printf("... a->del(b0)\n");
363 
364  printf("\ncalling B1...\n");
365  B1 & b1b1 = *a->newB1();
366  B0 & b0b1 = b1b1;
367  printf("... a->newB1() = %p\n", &b0b1);
368  n = B1::f0s();
369  printf("... B1::f0s() = %d\n", n);
370  assert (n == 30);
371  n = b0b1.f0s();
372  printf("... b0b1.f0s() = %d\n", n);
373  assert (n == 20);
374  n = b0b1.f0n();
375  printf("... b0b1.f0n() = %d\n", n);
376  assert (n == 21);
377  n = b0b1.f0v();
378  printf("... b0b1.f0v() = %d\n", n);
379  assert (n == 32);
380  a->del(b1b1);
381  printf("... a->del(b1b1)\n");
382 
383  printf("\naccessing B1...\n");
384  B1 & b1 = *a->newB1();
385  printf("... a->newB1() = %p\n", &b1);
386  n = ++B1::d0s;
387  printf("... ++B1::d0s = %d\n", n);
388  assert (n == 31);
389  n = B1::d0sc;
390  printf("... B1::d0sc = %d\n", n);
391  assert (n == -30);
392  n = ++b1.d0s;
393  printf("... ++b1.d0s = %d\n", n);
394  assert (n == 32);
395  n = b1.d0sc;
396  printf("... b1.d0sc = %d\n", n);
397  assert (n == -30);
398  n = ++b1.d0;
399  printf("... ++b1.d0 = %d\n", n);
400  assert (n == 32);
401  n = b1.d0c;
402  printf("... b1.d0c = %d\n", n);
403  assert (n == -31);
404  a->del(b1);
405  printf("... a->del(b1)\n");
406 
407  printf("\ndelete A...\n");
408  delete a;
409 };
410 
411 void
412 test7()
413 {
414  printf("\ntesting string/byte array functions: sxxx(sxxx) ...\n");
415 
416  s110(s010());
417  s110(s012());
418  s112(s012());
419 
420  s110(s030());
421  s110(s032());
422  s112(s032());
423 
424  s130(s030());
425  s130(s032());
426  s132(s032());
427 
428  s150(s050());
429  s150(s052());
430  s152(s052());
431 
432  s150(s070());
433  s150(s072());
434  s152(s072());
435 
436  s170(s070());
437  s170(s072());
438  s172(s072());
439 
440  s310(s210());
441  s310(s212());
442  s312(s212());
443 
444  s310(s230());
445  s310(s232());
446  s312(s232());
447 
448  s330(s230());
449  s330(s232());
450  s332(s232());
451 
452  s350(s250());
453  s350(s252());
454  s352(s252());
455 
456  s350(s270());
457  s350(s272());
458  s352(s272());
459 
460  s370(s270());
461  s370(s272());
462  s372(s272());
463 }
464 
465 void
466 test8()
467 {
468  printf("\ntesting n-ary array functions: g(), h() ...\n");
469  int32_t n;
470 
471  printf("\ncreating A...\n");
472  A * a = new A();
473  const A * ac = a;
474 
475  h0();
476 
477  h1(1);
478 
479  h2(1, 2);
480 
481  h3(1, 2, 3);
482 
483  n = h0r();
484  assert(n == 0);
485 
486  n = h1r(1);
487  assert(n == 1);
488 
489  n = h2r(1, 2);
490  assert(n == 3);
491 
492  n = h3r(1, 2, 3);
493  assert(n == 6);
494 
495  ac->g0c();
496 
497  ac->g1c(1);
498 
499  ac->g2c(1, 2);
500 
501  ac->g3c(1, 2, 3);
502 
503  a->g0();
504 
505  a->g1(1);
506 
507  a->g2(1, 2);
508 
509  a->g3(1, 2, 3);
510 
511  n = ac->g0rc();
512  assert(n == 0);
513 
514  n = ac->g1rc(1);
515  assert(n == 1);
516 
517  n = ac->g2rc(1, 2);
518  assert(n == 3);
519 
520  n = ac->g3rc(1, 2, 3);
521  assert(n == 6);
522 
523  n = a->g0r();
524  assert(n == 0);
525 
526  n = a->g1r(1);
527  assert(n == 1);
528 
529  n = a->g2r(1, 2);
530  assert(n == 3);
531 
532  n = a->g3r(1, 2, 3);
533  assert(n == 6);
534 
535  printf("delete A...\n");
536  delete a;
537 }
538 
539 void
540 test9()
541 {
542  printf("\ntesting const & inheritance: ...\n");
543 
544  C0 & c0 = *C0::c;
545  const C0 & c0c = *C0::cc;
546  C1 & c1 = *C1::c;
547  const C1 & c1c = *C1::cc;
548 
549  // for debugging
550  if (false) {
551  printf("\nc0.print()... c0c.print()...\n");
552  c0.print();
553  c1.print();
554 
555  printf("\nc1.print()... c1c.print()...\n");
556  c0c.print();
557  c1c.print();
558  }
559 
560  printf("\nc0.check(c0.id);\n");
561  c0.check(c0.id);
562 
563  printf("\nc0c.check(c0c.id);\n");
564  c0c.check(c0c.id);
565 
566  printf("\nc1.check(c1.id);\n");
567  c1.check(c1.id);
568 
569  printf("\nc1c.check(c1c.id);\n");
570  c1c.check(c1c.id);
571 
572  // C0 -> C0
573  printf("\nc0c.take_C0Cp(c0c.deliver_C0Cp())...\n");
574  c0c.take_C0Cp(c0c.deliver_C0Cp());
575 
576  printf("\nc0c.take_C0Cr(c0c.deliver_C0Cr())...\n");
577  c0c.take_C0Cr(c0c.deliver_C0Cr());
578 
579  printf("\nc0c.take_C0Cp(c0.deliver_C0p())...\n");
580  c0c.take_C0Cp(c0.deliver_C0p());
581 
582  printf("\nc0c.take_C0Cr(c0.deliver_C0r())...\n");
583  c0c.take_C0Cr(c0.deliver_C0r());
584 
585  printf("\nc0.take_C0p(c0.deliver_C0p())...\n");
586  c0.take_C0p(c0.deliver_C0p());
587 
588  printf("\nc0.take_C0r(c0.deliver_C0r())...\n");
589  c0.take_C0r(c0.deliver_C0r());
590 
591  // C1 -> C0
592  printf("\nc0c.take_C0Cp(c1c.deliver_C1Cp())...\n");
593  c0c.take_C0Cp(c1c.deliver_C1Cp());
594 
595  printf("\nc0c.take_C0Cr(c1c.deliver_C1Cr())...\n");
596  c0c.take_C0Cr(c1c.deliver_C1Cr());
597 
598  printf("\nc0c.take_C0Cp(c1.deliver_C1p())...\n");
599  c0c.take_C0Cp(c1.deliver_C1p());
600 
601  printf("\nc0c.take_C0Cr(c1.deliver_C1r())...\n");
602  c0c.take_C0Cr(c1.deliver_C1r());
603 
604  printf("\nc0.take_C0p(c1.deliver_C1p())...\n");
605  c0.take_C0p(c1.deliver_C1p());
606 
607  printf("\nc0.take_C0r(c1.deliver_C1r())...\n");
608  c0.take_C0r(c1.deliver_C1r());
609 
610  // C0 -> C1
611  printf("\nc1c.take_C1Cp(c1c.deliver_C1Cp())...\n");
612  c1c.take_C1Cp(c1c.deliver_C1Cp());
613 
614  printf("\nc1c.take_C1Cr(c1c.deliver_C1Cr())...\n");
615  c1c.take_C1Cr(c1c.deliver_C1Cr());
616 
617  printf("\nc1c.take_C1Cp(c1.deliver_C1p())...\n");
618  c1c.take_C1Cp(c1.deliver_C1p());
619 
620  printf("\nc1c.take_C1Cr(c1.deliver_C1r())...\n");
621  c1c.take_C1Cr(c1.deliver_C1r());
622 
623  printf("\nc1.take_C1p(c1.deliver_C1p())...\n");
624  c1.take_C1p(c1.deliver_C1p());
625 
626  printf("\nc1.take_C1r(c1.deliver_C1r())...\n");
627  c1.take_C1r(c1.deliver_C1r());
628 }
629 
630 void
631 test10()
632 {
633  printf("\ntesting object array functions ...\n\n");
634 
635  printf("\ndelete[] (new C0[0])\n");
636  C0 * c0a0 = new C0[0];
637  assert(c0a0 != NULL);
638  delete[] c0a0;
639 
640  const int n = 3;
641  C0 * c0a = new C0[n];
642  const C0 * c0ca = c0a;
643  C1 * c1a = new C1[n];
644  const C1 * c1ca = c1a;
645 
646  // for debugging
647  //for (int i = 0; i < n; i++) {
648  for (int i = 0; i < 0; i++) {
649  printf("\nc0a[i].print()\n");
650  c0a[i].print();
651 
652  printf("\nc0ca[i].print()\n");
653  c0ca[i].print();
654 
655  printf("\nc1a[i].print()\n");
656  c1a[i].print();
657 
658  printf("\nc1ca[i].print()\n");
659  c1ca[i].print();
660  }
661 
662  for (int i = 0; i < n; i++) {
663  printf("\nc0a[i].check(c0a[i].id)\n");
664  c0a[i].check(c0a[i].id);
665 
666  printf("\nc0ca[i].check(c0ca[i].id)\n");
667  c0ca[i].check(c0ca[i].id);
668 
669  printf("\nc1a[i].check(c1a[i].id)\n");
670  c1a[i].check(c1a[i].id);
671 
672  printf("\nc1ca[i].check(c1ca[i].id)\n");
673  c1ca[i].check(c1ca[i].id);
674  }
675 
676  printf("\nC0::hash(c0a, n) == C0::hash(C0::pass(c0a), n)...\n");
677  assert(C0::hash(c0a, n) == C0::hash(C0::pass(c0a), n));
678 
679  printf("\nC0::hash(c0ca, n) == C0::hash(C0::pass(c0ca), n)...\n");
680  assert(C0::hash(c0ca, n) == C0::hash(C0::pass(c0ca), n));
681 
682  printf("\nC1::hash(c1a, n) == C1::hash(C1::pass(c1a), n)...\n");
683  assert(C1::hash(c1a, n) == C1::hash(C1::pass(c1a), n));
684 
685  printf("\nC1::hash(c1ca, n) == C1::hash(C1::pass(c1ca), n)...\n");
686  assert(C1::hash(c1ca, n) == C1::hash(C1::pass(c1ca), n));
687 
688  delete[] c1a;
689  delete[] c0a;
690 }
691 
692 void
693 test11()
694 {
695  printf("\ntesting function dispatch ...\n\n");
696 
697  assert(D0::sub()->f_d0() == 20);
698  assert(D0::sub()->f_nv() == 31);
699  assert(D0::sub()->f_v() == 32);
700 
701  assert(D1::sub()->f_d0() == 20);
702  assert(D1::sub()->f_d1() == 30);
703  assert(D1::sub()->f_nv() == 31);
704  assert(D1::sub()->f_v() == 42);
705 
706  assert(D2::sub() == NULL);
707 }
708 
709 template< typename E, void (F)(E) >
710 inline void call(E e)
711 {
712  (F)(e);
713 }
714 
715 template< typename E, E (F)() >
716 inline E call()
717 {
718  return (F)();
719 }
720 
721 void
722 test12()
723 {
724  printf("\ntesting enums: ...\n");
725 
726  // EE enums
727  printf("\nE::take_EE1(E::deliver_EE1())...\n");
728  E::take_EE1(E::deliver_EE1());
729 
730  printf("\ncall< E::EE, E::deliver_EE1 >()...\n");
731  E::EE e = call< E::EE, E::deliver_EE1 >();
732  assert(e == E::EE1);
733 
734  printf("\ncall< E::EE, E::take_EE1 >(e)...\n");
735  call< E::EE, E::take_EE1 >(e);
736 
737  printf("\nE::take_EE1c(E::deliver_EE1c())...\n");
738  E::take_EE1c(E::deliver_EE1c());
739 
740  printf("\ncall< E::EE, E::deliver_EE1c >()...\n");
741  const E::EE ec = call< const E::EE, E::deliver_EE1c >();
742  assert(ec == E::EE1);
743 
744  printf("\ncall< E::EE, E::take_EE1c >(e)...\n");
745  call< const E::EE, E::take_EE1c >(ec);
746 }
747 
748 int
749 main(int argc, const char* argv[])
750 {
751  printf("\n--> main()\n");
752  (void)argc; (void)argv;
753 
754  myapi_init();
755 
756  if (true) {
757  test0();
758  test1();
759  test2();
760  test3();
761  test4();
762  test5();
763  test6();
764  test7();
765  test8();
766  test9();
767  test10();
768  test11();
769  test12();
770  } else {
771  test12();
772  }
773 
774  myapi_finit();
775 
776  printf("\n<-- main()\n");
777  return 0;
778 }