PageRenderTime 47ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 0ms

/trunk/Examples/test-suite/perl5/primitive_types_runme.pl

#
Perl | 275 lines | 140 code | 39 blank | 96 comment | 0 complexity | 56db6f7b59adb483e5d234329f376486 MD5 | raw file
Possible License(s): LGPL-2.1, Cube, GPL-3.0, 0BSD, GPL-2.0
  1. use strict;
  2. use warnings;
  3. use Test::More tests => 51;
  4. BEGIN { use_ok('primitive_types') }
  5. require_ok('primitive_types');
  6. primitive_types::var_init();
  7. # assigning globals calls
  8. $primitive_types::var_bool = $primitive_types::sct_bool;
  9. $primitive_types::var_schar = $primitive_types::sct_schar;
  10. $primitive_types::var_uchar = $primitive_types::sct_uchar;
  11. $primitive_types::var_int = $primitive_types::sct_int;
  12. $primitive_types::var_uint = $primitive_types::sct_uint;
  13. $primitive_types::var_short = $primitive_types::sct_short;
  14. $primitive_types::var_ushort = $primitive_types::sct_ushort;
  15. $primitive_types::var_long = $primitive_types::sct_long;
  16. $primitive_types::var_ulong = $primitive_types::sct_ulong;
  17. $primitive_types::var_llong = $primitive_types::sct_llong;
  18. $primitive_types::var_ullong = $primitive_types::sct_ullong;
  19. $primitive_types::var_char = $primitive_types::sct_char;
  20. $primitive_types::var_pchar = $primitive_types::sct_pchar;
  21. $primitive_types::var_pcharc = $primitive_types::sct_pcharc;
  22. $primitive_types::var_pint = $primitive_types::sct_pint;
  23. $primitive_types::var_sizet = $primitive_types::sct_sizet;
  24. $primitive_types::var_hello = $primitive_types::sct_hello;
  25. $primitive_types::var_myint = $primitive_types::sct_myint;
  26. $primitive_types::var_namet = $primitive_types::def_namet;
  27. $primitive_types::var_parami = $primitive_types::sct_parami;
  28. $primitive_types::var_paramd = $primitive_types::sct_paramd;
  29. $primitive_types::var_paramc = $primitive_types::sct_paramc;
  30. ok(primitive_types::v_check(), "v_check");
  31. #def pyerror(name, val, cte):
  32. # print "bad val/cte", name, val, cte
  33. # raise RuntimeError
  34. # pass
  35. is($primitive_types::var_bool, $primitive_types::cct_bool, "bool");
  36. is($primitive_types::var_schar, $primitive_types::cct_schar, "schar");
  37. is($primitive_types::var_uchar, $primitive_types::cct_uchar, "uchar");
  38. is($primitive_types::var_int, $primitive_types::cct_int, "int");
  39. is($primitive_types::var_uint, $primitive_types::cct_uint, "uint");
  40. is($primitive_types::var_short, $primitive_types::cct_short, "short");
  41. is($primitive_types::var_ushort, $primitive_types::cct_ushort, "ushort");
  42. is($primitive_types::var_long, $primitive_types::cct_long, "long");
  43. is($primitive_types::var_ulong, $primitive_types::cct_ulong, "ulong");
  44. is($primitive_types::var_llong, $primitive_types::cct_llong, "llong");
  45. is($primitive_types::var_ullong, $primitive_types::cct_ullong, "ullong");
  46. is($primitive_types::var_char, $primitive_types::cct_char, "char");
  47. is($primitive_types::var_pchar, $primitive_types::cct_pchar, "pchar");
  48. is($primitive_types::var_pcharc, $primitive_types::cct_pcharc, "pchar");
  49. is($primitive_types::var_pint, $primitive_types::cct_pint, "pint");
  50. is($primitive_types::var_sizet, $primitive_types::cct_sizet, "sizet");
  51. is($primitive_types::var_hello, $primitive_types::cct_hello, "hello");
  52. is($primitive_types::var_myint, $primitive_types::cct_myint, "myint");
  53. is($primitive_types::var_namet, $primitive_types::def_namet, "name");
  54. #class PyTest (TestDirector):
  55. # def __init__(self):
  56. # TestDirector.__init__(self)
  57. # pass
  58. # def ident(self, x):
  59. # return x
  60. #
  61. # def vval_bool(self, x): return self.ident(x)
  62. # def vval_schar(self, x): return self.ident(x)
  63. # def vval_uchar(self, x): return self.ident(x)
  64. # def vval_int(self, x): return self.ident(x)
  65. # def vval_uint(self, x): return self.ident(x)
  66. # def vval_short(self, x): return self.ident(x)
  67. # def vval_ushort(self, x): return self.ident(x)
  68. # def vval_long(self, x): return self.ident(x)
  69. # def vval_ulong(self, x): return self.ident(x)
  70. # def vval_llong(self, x): return self.ident(x)
  71. # def vval_ullong(self, x): return self.ident(x)
  72. # def vval_float(self, x): return self.ident(x)
  73. # def vval_double(self, x): return self.ident(x)
  74. # def vval_char(self, x): return self.ident(x)
  75. # def vval_pchar(self, x): return self.ident(x)
  76. # def vval_pcharc(self, x): return self.ident(x)
  77. # def vval_pint(self, x): return self.ident(x)
  78. # def vval_sizet(self, x): return self.ident(x)
  79. # def vval_hello(self, x): return self.ident(x)
  80. # def vval_myint(self, x): return self.ident(x)
  81. #
  82. # def vref_bool(self, x): return self.ident(x)
  83. # def vref_schar(self, x): return self.ident(x)
  84. # def vref_uchar(self, x): return self.ident(x)
  85. # def vref_int(self, x): return self.ident(x)
  86. # def vref_uint(self, x): return self.ident(x)
  87. # def vref_short(self, x): return self.ident(x)
  88. # def vref_ushort(self, x): return self.ident(x)
  89. # def vref_long(self, x): return self.ident(x)
  90. # def vref_ulong(self, x): return self.ident(x)
  91. # def vref_llong(self, x): return self.ident(x)
  92. # def vref_ullong(self, x): return self.ident(x)
  93. # def vref_float(self, x): return self.ident(x)
  94. # def vref_double(self, x): return self.ident(x)
  95. # def vref_char(self, x): return self.ident(x)
  96. # def vref_pchar(self, x): return self.ident(x)
  97. # def vref_pcharc(self, x): return self.ident(x)
  98. # def vref_pint(self, x): return self.ident(x)
  99. # def vref_sizet(self, x): return self.ident(x)
  100. # def vref_hello(self, x): return self.ident(x)
  101. # def vref_myint(self, x): return self.ident(x)
  102. #
  103. # pass
  104. my $t = primitive_types::Test->new();
  105. #p = PyTest()
  106. #
  107. #
  108. # internal call check
  109. #if t.c_check() != p.c_check():
  110. # raise RuntimeError, "bad director"
  111. #
  112. #p.var_bool = p.stc_bool
  113. #p.var_schar = p.stc_schar
  114. #p.var_uchar = p.stc_uchar
  115. #p.var_int = p.stc_int
  116. #p.var_uint = p.stc_uint
  117. #p.var_short = p.stc_short
  118. #p.var_ushort = p.stc_ushort
  119. #p.var_long = p.stc_long
  120. #p.var_ulong = p.stc_ulong
  121. #p.var_llong = p.stc_llong
  122. #p.var_ullong = p.stc_ullong
  123. #p.var_char = p.stc_char
  124. #p.var_pchar = sct_pchar
  125. #p.var_pcharc = sct_pcharc
  126. #p.var_pint = sct_pint
  127. #p.var_sizet = sct_sizet
  128. #p.var_hello = sct_hello
  129. #p.var_myint = sct_myint
  130. #p.var_namet = def_namet
  131. #p.var_parami = sct_parami
  132. #p.var_paramd = sct_paramd
  133. #p.var_paramc = sct_paramc
  134. #
  135. #p.v_check()
  136. $t->{var_bool} = $primitive_types::Test::stc_bool;
  137. $t->{var_schar} = $primitive_types::Test::stc_schar;
  138. $t->{var_uchar} = $primitive_types::Test::stc_uchar;
  139. $t->{var_int} = $primitive_types::Test::stc_int;
  140. $t->{var_uint} = $primitive_types::Test::stc_uint;
  141. $t->{var_short} = $primitive_types::Test::stc_short;
  142. $t->{var_ushort} = $primitive_types::Test::stc_ushort;
  143. $t->{var_long} = $primitive_types::Test::stc_long;
  144. $t->{var_ulong} = $primitive_types::Test::stc_ulong;
  145. $t->{var_llong} = $primitive_types::Test::stc_llong;
  146. $t->{var_ullong} = $primitive_types::Test::stc_ullong;
  147. $t->{var_char} = $primitive_types::Test::stc_char;
  148. $t->{var_pchar} = $primitive_types::sct_pchar;
  149. $t->{var_pcharc} = $primitive_types::sct_pcharc;
  150. $t->{var_pint} = $primitive_types::sct_pint;
  151. $t->{var_sizet} = $primitive_types::sct_sizet;
  152. $t->{var_hello} = $primitive_types::sct_hello;
  153. $t->{var_myint} = $primitive_types::sct_myint;
  154. $t->{var_namet} = $primitive_types::def_namet;
  155. $t->{var_parami} = $primitive_types::sct_parami;
  156. $t->{var_paramd} = $primitive_types::sct_paramd;
  157. $t->{var_paramc} = $primitive_types::sct_paramc;
  158. ok($t->v_check(), 'v_check');
  159. is($primitive_types::def_namet, "ho\0la", "namet");
  160. $t->{var_namet} = $primitive_types::def_namet;
  161. is($t->{var_namet}, $primitive_types::def_namet, "namet");
  162. $t->{var_namet} = 'holac';
  163. is($t->{var_namet}, 'holac', "namet");
  164. $t->{var_namet} = 'hol';
  165. is($t->{var_namet}, 'hol', "namet");
  166. $primitive_types::var_char = "\0";
  167. is($primitive_types::var_char, "\0", "char '0' case");
  168. $primitive_types::var_char = 0;
  169. is($primitive_types::var_char, "\0", "char '0' case");
  170. $primitive_types::var_namet = "\0";
  171. is($primitive_types::var_namet, '', "char '\\0' case");
  172. $primitive_types::var_namet = '';
  173. is($primitive_types::var_namet, '', "char empty case");
  174. $primitive_types::var_pchar = undef;
  175. is($primitive_types::var_pchar, undef, "undef case");
  176. $primitive_types::var_pchar = '';
  177. is($primitive_types::var_pchar, '', "char empty case");
  178. $primitive_types::var_pcharc = undef;
  179. is($primitive_types::var_pcharc, undef, "undef case");
  180. $primitive_types::var_pcharc = '';
  181. is($primitive_types::var_pcharc, '', "char empty case");
  182. #
  183. # creating a raw char*
  184. #
  185. my $pc = primitive_types::new_pchar(5);
  186. primitive_types::pchar_setitem($pc, 0, 'h');
  187. primitive_types::pchar_setitem($pc, 1, 'o');
  188. primitive_types::pchar_setitem($pc, 2, 'l');
  189. primitive_types::pchar_setitem($pc, 3, 'a');
  190. primitive_types::pchar_setitem($pc, 4, 0);
  191. $primitive_types::var_pchar = $pc;
  192. is($primitive_types::var_pchar, "hola", "pointer case");
  193. $primitive_types::var_namet = $pc;
  194. is($primitive_types::var_namet, "hola", "pointer case");
  195. primitive_types::delete_pchar($pc);
  196. #
  197. # Now when things should fail
  198. #
  199. {
  200. my $orig = $t->{var_uchar};
  201. eval { $t->{var_uchar} = 10000 };
  202. like($@, qr/\bOverflowError\b/, "uchar typemap");
  203. is($orig, $t->{var_uchar}, "uchar typemap");
  204. }
  205. {
  206. my $orig = $t->{var_char};
  207. #eval { $t->{var_char} = "23" }; Perl will gladly make a number out of that
  208. eval { $t->{var_char} = "twenty-three" };
  209. like($@, qr/\bTypeError\b/, "char typemap");
  210. is($orig, $t->{var_char}, "char typemap");
  211. }
  212. {
  213. my $orig = $t->{var_uint};
  214. eval { $t->{var_uint} = -1 };
  215. like($@, qr/\bOverflowError\b/, "uint typemap");
  216. is($orig, $t->{var_uint}, "uint typemap");
  217. }
  218. {
  219. my $orig = $t->{var_namet};
  220. eval { $t->{var_namet} = '123456' };
  221. like($@, qr/\bTypeError\b/, "namet typemap");
  222. is($orig, $t->{var_namet}, "namet typemap");
  223. }
  224. #t2 = p.vtest(t)
  225. #if t.var_namet != t2.var_namet:
  226. # raise RuntimeError, "bad SWIGTYPE* typemap"
  227. is($primitive_types::fixsize, "ho\0la\0\0\0", "FIXSIZE typemap");
  228. $primitive_types::fixsize = 'ho';
  229. is($primitive_types::fixsize, "ho\0\0\0\0\0\0", "FIXSIZE typemap");
  230. my $f = primitive_types::Foo->new(3);
  231. my $f1 = primitive_types::fptr_val($f);
  232. my $f2 = primitive_types::fptr_ref($f);
  233. is($f1->{_a}, $f2->{_a}, "const ptr& typemap");
  234. is(primitive_types::char_foo(1,3), 3, "int typemap");
  235. is(primitive_types::char_foo(1,"hello"), "hello", "char* typemap");
  236. is(primitive_types::SetPos(1,3), 4, "int typemap");