overloading.phpt 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321
  1. --TEST--
  2. GMP operator overloading
  3. --EXTENSIONS--
  4. gmp
  5. --FILE--
  6. <?php
  7. $a = gmp_init(42);
  8. $b = gmp_init(17);
  9. var_dump($a + $b);
  10. var_dump($a + 17);
  11. var_dump(42 + $b);
  12. var_dump($a - $b);
  13. var_dump($a - 17);
  14. var_dump(42 - $b);
  15. var_dump($a * $b);
  16. var_dump($a * 17);
  17. var_dump(42 * $b);
  18. var_dump($a / $b);
  19. var_dump($a / 17);
  20. var_dump(42 / $b);
  21. try {
  22. var_dump($a / 0);
  23. } catch (\DivisionByZeroError $e) {
  24. echo $e->getMessage() . \PHP_EOL;
  25. }
  26. var_dump($a % $b);
  27. var_dump($a % 17);
  28. var_dump(42 % $b);
  29. try {
  30. var_dump($a % 0);
  31. } catch (\DivisionByZeroError $e) {
  32. echo $e->getMessage() . \PHP_EOL;
  33. }
  34. var_dump($a ** $b);
  35. var_dump($a ** 17);
  36. var_dump(42 ** $b);
  37. var_dump($a | $b);
  38. var_dump($a | 17);
  39. var_dump(42 | $b);
  40. var_dump($a & $b);
  41. var_dump($a & 17);
  42. var_dump(42 & $b);
  43. var_dump($a ^ $b);
  44. var_dump($a ^ 17);
  45. var_dump(42 ^ $b);
  46. var_dump($a << $b);
  47. var_dump($a << 17);
  48. var_dump(42 << $b);
  49. var_dump($a >> 2);
  50. var_dump(-$a >> 2);
  51. try {
  52. $a << -1;
  53. } catch (ValueError $exception) {
  54. echo $exception->getMessage() . "\n";
  55. }
  56. try {
  57. $a >> -1;
  58. } catch (ValueError $exception) {
  59. echo $exception->getMessage() . "\n";
  60. }
  61. var_dump(~$a);
  62. var_dump(-$a);
  63. var_dump(+$a);
  64. var_dump($a == $b);
  65. var_dump($a != $b);
  66. var_dump($a < $b);
  67. var_dump($a <= $b);
  68. var_dump($a > $b);
  69. var_dump($a >= $b);
  70. var_dump($a == $a);
  71. var_dump($a != $a);
  72. var_dump($a == 42);
  73. var_dump($a != 42);
  74. var_dump($a < 42);
  75. var_dump($a <= 42);
  76. var_dump($a > 42);
  77. var_dump($a >= 42);
  78. try {
  79. var_dump($a == new stdClass);
  80. } catch (\TypeError $e) {
  81. echo $e->getMessage() . \PHP_EOL;
  82. }
  83. $a += 1;
  84. var_dump($a);
  85. $a -= 1;
  86. var_dump($a);
  87. var_dump(++$a);
  88. var_dump($a++);
  89. var_dump($a);
  90. var_dump(--$a);
  91. var_dump($a--);
  92. var_dump($a);
  93. // Test operator that was not overloaded
  94. var_dump($a . $b);
  95. var_dump($a . '17');
  96. var_dump('42' . $b);
  97. $a .= '17';
  98. var_dump($a);
  99. ?>
  100. --EXPECT--
  101. object(GMP)#3 (1) {
  102. ["num"]=>
  103. string(2) "59"
  104. }
  105. object(GMP)#3 (1) {
  106. ["num"]=>
  107. string(2) "59"
  108. }
  109. object(GMP)#3 (1) {
  110. ["num"]=>
  111. string(2) "59"
  112. }
  113. object(GMP)#3 (1) {
  114. ["num"]=>
  115. string(2) "25"
  116. }
  117. object(GMP)#3 (1) {
  118. ["num"]=>
  119. string(2) "25"
  120. }
  121. object(GMP)#3 (1) {
  122. ["num"]=>
  123. string(2) "25"
  124. }
  125. object(GMP)#3 (1) {
  126. ["num"]=>
  127. string(3) "714"
  128. }
  129. object(GMP)#3 (1) {
  130. ["num"]=>
  131. string(3) "714"
  132. }
  133. object(GMP)#3 (1) {
  134. ["num"]=>
  135. string(3) "714"
  136. }
  137. object(GMP)#3 (1) {
  138. ["num"]=>
  139. string(1) "2"
  140. }
  141. object(GMP)#3 (1) {
  142. ["num"]=>
  143. string(1) "2"
  144. }
  145. object(GMP)#3 (1) {
  146. ["num"]=>
  147. string(1) "2"
  148. }
  149. Division by zero
  150. object(GMP)#4 (1) {
  151. ["num"]=>
  152. string(1) "8"
  153. }
  154. object(GMP)#4 (1) {
  155. ["num"]=>
  156. string(1) "8"
  157. }
  158. object(GMP)#4 (1) {
  159. ["num"]=>
  160. string(1) "8"
  161. }
  162. Modulo by zero
  163. object(GMP)#3 (1) {
  164. ["num"]=>
  165. string(28) "3937657486715347520027492352"
  166. }
  167. object(GMP)#3 (1) {
  168. ["num"]=>
  169. string(28) "3937657486715347520027492352"
  170. }
  171. object(GMP)#3 (1) {
  172. ["num"]=>
  173. string(28) "3937657486715347520027492352"
  174. }
  175. object(GMP)#3 (1) {
  176. ["num"]=>
  177. string(2) "59"
  178. }
  179. object(GMP)#3 (1) {
  180. ["num"]=>
  181. string(2) "59"
  182. }
  183. object(GMP)#3 (1) {
  184. ["num"]=>
  185. string(2) "59"
  186. }
  187. object(GMP)#3 (1) {
  188. ["num"]=>
  189. string(1) "0"
  190. }
  191. object(GMP)#3 (1) {
  192. ["num"]=>
  193. string(1) "0"
  194. }
  195. object(GMP)#3 (1) {
  196. ["num"]=>
  197. string(1) "0"
  198. }
  199. object(GMP)#3 (1) {
  200. ["num"]=>
  201. string(2) "59"
  202. }
  203. object(GMP)#3 (1) {
  204. ["num"]=>
  205. string(2) "59"
  206. }
  207. object(GMP)#3 (1) {
  208. ["num"]=>
  209. string(2) "59"
  210. }
  211. object(GMP)#3 (1) {
  212. ["num"]=>
  213. string(7) "5505024"
  214. }
  215. object(GMP)#3 (1) {
  216. ["num"]=>
  217. string(7) "5505024"
  218. }
  219. object(GMP)#3 (1) {
  220. ["num"]=>
  221. string(7) "5505024"
  222. }
  223. object(GMP)#3 (1) {
  224. ["num"]=>
  225. string(2) "10"
  226. }
  227. object(GMP)#5 (1) {
  228. ["num"]=>
  229. string(3) "-11"
  230. }
  231. Shift must be greater than or equal to 0
  232. Shift must be greater than or equal to 0
  233. object(GMP)#5 (1) {
  234. ["num"]=>
  235. string(3) "-43"
  236. }
  237. object(GMP)#5 (1) {
  238. ["num"]=>
  239. string(3) "-42"
  240. }
  241. object(GMP)#5 (1) {
  242. ["num"]=>
  243. string(2) "42"
  244. }
  245. bool(false)
  246. bool(true)
  247. bool(false)
  248. bool(false)
  249. bool(true)
  250. bool(true)
  251. bool(true)
  252. bool(false)
  253. bool(true)
  254. bool(false)
  255. bool(false)
  256. bool(true)
  257. bool(false)
  258. bool(true)
  259. Number must be of type GMP|string|int, stdClass given
  260. object(GMP)#4 (1) {
  261. ["num"]=>
  262. string(2) "43"
  263. }
  264. object(GMP)#1 (1) {
  265. ["num"]=>
  266. string(2) "42"
  267. }
  268. object(GMP)#4 (1) {
  269. ["num"]=>
  270. string(2) "43"
  271. }
  272. object(GMP)#4 (1) {
  273. ["num"]=>
  274. string(2) "43"
  275. }
  276. object(GMP)#1 (1) {
  277. ["num"]=>
  278. string(2) "44"
  279. }
  280. object(GMP)#4 (1) {
  281. ["num"]=>
  282. string(2) "43"
  283. }
  284. object(GMP)#4 (1) {
  285. ["num"]=>
  286. string(2) "43"
  287. }
  288. object(GMP)#1 (1) {
  289. ["num"]=>
  290. string(2) "42"
  291. }
  292. string(4) "4217"
  293. string(4) "4217"
  294. string(4) "4217"
  295. string(4) "4217"