PageRenderTime 46ms CodeModel.GetById 14ms RepoModel.GetById 1ms app.codeStats 0ms

/tags/rel-1-3-29/SWIG/Examples/test-suite/perl5/overload_simple_runme.pl

#
Perl | 191 lines | 94 code | 72 blank | 25 comment | 1 complexity | a104ce68281c6f43dc8ad3a667a4fbfa MD5 | raw file
Possible License(s): LGPL-2.1, Cube, GPL-3.0, 0BSD, GPL-2.0
  1. #!/usr/bin/perl -w
  2. use overload_simple;
  3. use vars qw/$DOWARN/;
  4. use strict;
  5. use Test::More tests => 71;
  6. pass("loaded");
  7. my $f = new overload_simple::Foo();
  8. isa_ok($f, "overload_simple::Foo");
  9. my $b = new overload_simple::Bar();
  10. isa_ok($b, "overload_simple::Bar");
  11. my $v = overload_simple::malloc_void(32);
  12. isa_ok($v, "_p_void");
  13. #
  14. # Silence warnings about bad types
  15. #
  16. BEGIN { $SIG{'__WARN__'} = sub { warn $_[0] if $DOWARN } }
  17. #
  18. #these tests should 'fail'
  19. #
  20. eval { overload_simple::fint("l") };
  21. ok($@, "fint(int) - int");
  22. eval { overload_simple::fint("3.5") };
  23. ok($@, "fint(int) - double");
  24. eval { overload_simple::fdouble("l") };
  25. ok($@, "fint(double) - int");
  26. eval { overload_simple::fdouble("1.5/2.0") };
  27. ok($@, "fint(double) - double");
  28. #
  29. #enable the warnings again
  30. #
  31. $DOWARN =1;
  32. #
  33. # 'simple' dispatch (no overload) of int and double arguments
  34. #
  35. is(overload_simple::fint(3), "fint:int", "fint(int) - int");
  36. is(overload_simple::fint("1"), "fint:int", "fint(int) - string int");
  37. is(overload_simple::fint(3.0), "fint:int", "fint(int) - double");
  38. is(overload_simple::fint("3.0"), "fint:int", "fint(int) - string double");
  39. # old bad case that now works
  40. my $n = 3;
  41. $n = $n + 1;
  42. is(overload_simple::fint($n), "fint:int", "fint(int) - int var");
  43. is(overload_simple::fint(4/2), "fint:int", "fint(int) - divide int denom");
  44. is(overload_simple::fint(4/2.0), "fint:int", "fint(int) - divide double denom");
  45. is(overload_simple::fdouble(3), "fdouble:double", "fdouble(double) - int");
  46. is(overload_simple::fdouble("3"), "fdouble:double", "fdouble(double) - string int");
  47. is(overload_simple::fdouble(3.0), "fdouble:double", "fdouble(double) - double");
  48. is(overload_simple::fdouble("3.0"), "fdouble:double", "fdouble(double) - string doubl");
  49. #
  50. # Overload between int and double
  51. #
  52. is(overload_simple::num(3), "num:int", "num(int) - int");
  53. is(overload_simple::num("3"), "num:int", "num(int) - string int");
  54. is(overload_simple::num(3.0), "num:double", "num(int) - double");
  55. is(overload_simple::num("3.0"), "num:double", "num(int) - string double");
  56. #
  57. # Overload between int, double, char * and many types.
  58. #
  59. is(overload_simple::foo(3), "foo:int", "foo:int - int");
  60. is(overload_simple::foo(3.0), "foo:double", "foo:double - double");
  61. is(overload_simple::foo("3"), "foo:char *", "foo:char * - string int");
  62. is(overload_simple::foo("3.0"), "foo:char *", "foo:char * - string double");
  63. is(overload_simple::foo("hello"), "foo:char *", "foo:char * string");
  64. is(overload_simple::foo($f), "foo:Foo *", "foo:Foo *");
  65. is(overload_simple::foo($b), "foo:Bar *", "foo:Bar *");
  66. is(overload_simple::foo($v), "foo:void *", "foo:void *");
  67. is(overload_simple::blah(3), "blah:double", "blah:double");
  68. is(overload_simple::blah("hello"), "blah:char *", "blah:char *");
  69. my $s = new overload_simple::Spam();
  70. is($s->foo(3), "foo:int", "Spam::foo:int");
  71. is($s->foo(3.0), "foo:double", "Spam::foo(double)");
  72. is($s->foo("hello"), "foo:char *", "Spam::foo:char *");
  73. is($s->foo($f), "foo:Foo *", "Spam::foo(Foo *)");
  74. is($s->foo($b), "foo:Bar *", "Spam::foo(Bar *)");
  75. is($s->foo($v), "foo:void *", "Spam::foo(void *)");
  76. is(overload_simple::Spam::bar(3), "bar:int", "Spam::bar(int)");
  77. is(overload_simple::Spam::bar(3.0), "bar:double", "Spam::bar(double)");
  78. is(overload_simple::Spam::bar("hello"), "bar:char *", "Spam::bar(char *)");
  79. is(overload_simple::Spam::bar($f), "bar:Foo *", "Spam::bar(Foo *)");
  80. is(overload_simple::Spam::bar($b), "bar:Bar *", "Spam::bar(Bar *)");
  81. is(overload_simple::Spam::bar($v), "bar:void *", "Spam::bar(void *)");
  82. # Test constructors
  83. $s = new overload_simple::Spam();
  84. isa_ok($s, "overload_simple::Spam");
  85. is($s->{type}, "none", "Spam()");
  86. $s = new overload_simple::Spam(3);
  87. isa_ok($s, "overload_simple::Spam");
  88. is($s->{type}, "int", "Spam(int)");
  89. $s = new overload_simple::Spam(3.0);
  90. isa_ok($s, "overload_simple::Spam");
  91. is($s->{type}, "double", "Spam(double)");
  92. $s = new overload_simple::Spam("hello");
  93. isa_ok($s, "overload_simple::Spam");
  94. is($s->{type}, "char *", "Spam(char *)");
  95. $s = new overload_simple::Spam($f);
  96. isa_ok($s, "overload_simple::Spam");
  97. is($s->{type}, "Foo *", "Spam(Foo *)");
  98. $s = new overload_simple::Spam($b);
  99. isa_ok($s, "overload_simple::Spam");
  100. is($s->{type}, "Bar *", "Spam(Bar *)");
  101. $s = new overload_simple::Spam($v);
  102. isa_ok($s, "overload_simple::Spam");
  103. is($s->{type}, "void *", "Spam(void *)");
  104. #
  105. # Combine dispatch
  106. #
  107. is(overload_simple::fid(3, 3.0), "fid:intdouble", "fid(int,double)");
  108. is(overload_simple::fid(3.0, 3), "fid:doubleint", "fid(double,int)");
  109. is(overload_simple::fid(3.0, 3.0), "fid:doubledouble", "fid(double,double)");
  110. is(overload_simple::fid(3, 3), "fid:intint", "fid(int,int)");
  111. # with strings now
  112. is(overload_simple::fid(3, "3.0"), "fid:intdouble", "fid(int,double)");
  113. is(overload_simple::fid("3", 3.0), "fid:intdouble", "fid(int,double)");
  114. is(overload_simple::fid("3", "3.0"), "fid:intdouble", "fid(int,double)");
  115. is(overload_simple::fid(3.0, "3"), "fid:doubleint", "fid(double,int)");
  116. is(overload_simple::fid("3.0", "3.0"), "fid:doubledouble", "fid:doubledouble");
  117. is(overload_simple::fid("3", 3), "fid:intint", "fid:fid(int,int)");
  118. isnt(overload_simple::fbool(0), overload_simple::fbool(1), "fbool(bool)");
  119. is(2, overload_simple::fbool(2), "fbool(int)");