variants_x64.phpt 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642
  1. --TEST--
  2. COM: General variant tests
  3. --EXTENSIONS--
  4. com_dotnet
  5. --SKIPIF--
  6. <?php
  7. if (8 != PHP_INT_SIZE) print "skip x64 only";
  8. if ((string) variant_cat(new VARIANT(false), new VARIANT(0.5)) != 'False0.5')
  9. print "skip English locale only";
  10. ?>
  11. --FILE--
  12. <?php
  13. error_reporting(E_ALL);
  14. $v = new VARIANT();
  15. if (VT_EMPTY != variant_get_type($v)) {
  16. echo "VT_EMPTY: bork\n";
  17. }
  18. $values = array(VT_I8 => 42, VT_R8 => 3.5, VT_BSTR => "hello", VT_BOOL => false);
  19. $binary_ops = array('add', 'cat', 'sub', 'mul', 'and', 'div',
  20. 'eqv', 'idiv', 'imp', 'mod', 'or', 'pow', 'xor');
  21. foreach ($values as $t => $val) {
  22. $v = new VARIANT($val);
  23. if ($t != variant_get_type($v)) {
  24. printf("Bork: [%d] %d: %s\n", $t, variant_get_type($v), $val);
  25. print $v . "\n";
  26. }
  27. $results = array();
  28. foreach ($values as $op2) {
  29. echo "--\n";
  30. foreach ($binary_ops as $op) {
  31. try {
  32. echo "$op: " . call_user_func('variant_' . $op, $v, $op2) . "\n";
  33. } catch (com_exception $e) {
  34. echo "$op:\n";
  35. echo "\tvariant_$op($v, $op2)\n";
  36. echo "\texception " . $e->getMessage();
  37. printf("\n\tcode %08x\n\n", $e->getCode());
  38. }
  39. }
  40. }
  41. }
  42. echo "OK!";
  43. ?>
  44. --EXPECT--
  45. --
  46. add: 84
  47. cat: 4242
  48. sub: 0
  49. mul: 1764
  50. and: 42
  51. div: 1
  52. eqv: -1
  53. idiv: 1
  54. imp: -1
  55. mod: 0
  56. or: 42
  57. pow: 1.50130937545297E+68
  58. xor: 0
  59. --
  60. add: 45.5
  61. cat: 423.5
  62. sub: 38.5
  63. mul: 147
  64. and: 0
  65. div: 12
  66. eqv: -47
  67. idiv: 10
  68. imp: -43
  69. mod: 2
  70. or: 46
  71. pow: 480145.116863642
  72. xor: 46
  73. --
  74. add:
  75. variant_add(42, hello)
  76. exception Type mismatch
  77. code 80020005
  78. cat: 42hello
  79. sub:
  80. variant_sub(42, hello)
  81. exception Type mismatch
  82. code 80020005
  83. mul:
  84. variant_mul(42, hello)
  85. exception Type mismatch
  86. code 80020005
  87. and:
  88. variant_and(42, hello)
  89. exception Type mismatch
  90. code 80020005
  91. div:
  92. variant_div(42, hello)
  93. exception Type mismatch
  94. code 80020005
  95. eqv:
  96. variant_eqv(42, hello)
  97. exception Type mismatch
  98. code 80020005
  99. idiv:
  100. variant_idiv(42, hello)
  101. exception Type mismatch
  102. code 80020005
  103. imp:
  104. variant_imp(42, hello)
  105. exception Type mismatch
  106. code 80020005
  107. mod:
  108. variant_mod(42, hello)
  109. exception Type mismatch
  110. code 80020005
  111. or:
  112. variant_or(42, hello)
  113. exception Type mismatch
  114. code 80020005
  115. pow:
  116. variant_pow(42, hello)
  117. exception Type mismatch
  118. code 80020005
  119. xor:
  120. variant_xor(42, hello)
  121. exception Type mismatch
  122. code 80020005
  123. --
  124. add: 42
  125. cat: 42False
  126. sub: 42
  127. mul: 0
  128. and: 0
  129. div:
  130. variant_div(42, )
  131. exception Division by zero
  132. code 80020012
  133. eqv: -43
  134. idiv:
  135. variant_idiv(42, )
  136. exception Division by zero
  137. code 80020012
  138. imp: -43
  139. mod:
  140. variant_mod(42, )
  141. exception Division by zero
  142. code 80020012
  143. or: 42
  144. pow: 1
  145. xor: 42
  146. --
  147. add: 45.5
  148. cat: 3.542
  149. sub: -38.5
  150. mul: 147
  151. and: 0
  152. div: 8.33333333333333E-02
  153. eqv: -47
  154. idiv: 0
  155. imp: -5
  156. mod: 4
  157. or: 46
  158. pow: 7.09345573078604E+22
  159. xor: 46
  160. --
  161. add: 7
  162. cat: 3.53.5
  163. sub: 0
  164. mul: 12.25
  165. and: 4
  166. div: 1
  167. eqv: -1
  168. idiv: 1
  169. imp: -1
  170. mod: 0
  171. or: 4
  172. pow: 80.2117802289664
  173. xor: 0
  174. --
  175. add:
  176. variant_add(3.5, hello)
  177. exception Type mismatch
  178. code 80020005
  179. cat: 3.5hello
  180. sub:
  181. variant_sub(3.5, hello)
  182. exception Type mismatch
  183. code 80020005
  184. mul:
  185. variant_mul(3.5, hello)
  186. exception Type mismatch
  187. code 80020005
  188. and:
  189. variant_and(3.5, hello)
  190. exception Type mismatch
  191. code 80020005
  192. div:
  193. variant_div(3.5, hello)
  194. exception Type mismatch
  195. code 80020005
  196. eqv:
  197. variant_eqv(3.5, hello)
  198. exception Type mismatch
  199. code 80020005
  200. idiv:
  201. variant_idiv(3.5, hello)
  202. exception Type mismatch
  203. code 80020005
  204. imp:
  205. variant_imp(3.5, hello)
  206. exception Type mismatch
  207. code 80020005
  208. mod:
  209. variant_mod(3.5, hello)
  210. exception Type mismatch
  211. code 80020005
  212. or:
  213. variant_or(3.5, hello)
  214. exception Type mismatch
  215. code 80020005
  216. pow:
  217. variant_pow(3.5, hello)
  218. exception Type mismatch
  219. code 80020005
  220. xor:
  221. variant_xor(3.5, hello)
  222. exception Type mismatch
  223. code 80020005
  224. --
  225. add: 3.5
  226. cat: 3.5False
  227. sub: 3.5
  228. mul: 0
  229. and: 0
  230. div:
  231. variant_div(3.5, )
  232. exception Division by zero
  233. code 80020012
  234. eqv: -5
  235. idiv:
  236. variant_idiv(3.5, )
  237. exception Division by zero
  238. code 80020012
  239. imp: -5
  240. mod:
  241. variant_mod(3.5, )
  242. exception Division by zero
  243. code 80020012
  244. or: 4
  245. pow: 1
  246. xor: 4
  247. --
  248. add:
  249. variant_add(hello, 42)
  250. exception Type mismatch
  251. code 80020005
  252. cat: hello42
  253. sub:
  254. variant_sub(hello, 42)
  255. exception Type mismatch
  256. code 80020005
  257. mul:
  258. variant_mul(hello, 42)
  259. exception Type mismatch
  260. code 80020005
  261. and:
  262. variant_and(hello, 42)
  263. exception Type mismatch
  264. code 80020005
  265. div:
  266. variant_div(hello, 42)
  267. exception Type mismatch
  268. code 80020005
  269. eqv:
  270. variant_eqv(hello, 42)
  271. exception Type mismatch
  272. code 80020005
  273. idiv:
  274. variant_idiv(hello, 42)
  275. exception Type mismatch
  276. code 80020005
  277. imp:
  278. variant_imp(hello, 42)
  279. exception Type mismatch
  280. code 80020005
  281. mod:
  282. variant_mod(hello, 42)
  283. exception Type mismatch
  284. code 80020005
  285. or:
  286. variant_or(hello, 42)
  287. exception Type mismatch
  288. code 80020005
  289. pow:
  290. variant_pow(hello, 42)
  291. exception Type mismatch
  292. code 80020005
  293. xor:
  294. variant_xor(hello, 42)
  295. exception Type mismatch
  296. code 80020005
  297. --
  298. add:
  299. variant_add(hello, 3.5)
  300. exception Type mismatch
  301. code 80020005
  302. cat: hello3.5
  303. sub:
  304. variant_sub(hello, 3.5)
  305. exception Type mismatch
  306. code 80020005
  307. mul:
  308. variant_mul(hello, 3.5)
  309. exception Type mismatch
  310. code 80020005
  311. and:
  312. variant_and(hello, 3.5)
  313. exception Type mismatch
  314. code 80020005
  315. div:
  316. variant_div(hello, 3.5)
  317. exception Type mismatch
  318. code 80020005
  319. eqv:
  320. variant_eqv(hello, 3.5)
  321. exception Type mismatch
  322. code 80020005
  323. idiv:
  324. variant_idiv(hello, 3.5)
  325. exception Type mismatch
  326. code 80020005
  327. imp:
  328. variant_imp(hello, 3.5)
  329. exception Type mismatch
  330. code 80020005
  331. mod:
  332. variant_mod(hello, 3.5)
  333. exception Type mismatch
  334. code 80020005
  335. or:
  336. variant_or(hello, 3.5)
  337. exception Type mismatch
  338. code 80020005
  339. pow:
  340. variant_pow(hello, 3.5)
  341. exception Type mismatch
  342. code 80020005
  343. xor:
  344. variant_xor(hello, 3.5)
  345. exception Type mismatch
  346. code 80020005
  347. --
  348. add: hellohello
  349. cat: hellohello
  350. sub:
  351. variant_sub(hello, hello)
  352. exception Type mismatch
  353. code 80020005
  354. mul:
  355. variant_mul(hello, hello)
  356. exception Type mismatch
  357. code 80020005
  358. and:
  359. variant_and(hello, hello)
  360. exception Type mismatch
  361. code 80020005
  362. div:
  363. variant_div(hello, hello)
  364. exception Type mismatch
  365. code 80020005
  366. eqv:
  367. variant_eqv(hello, hello)
  368. exception Type mismatch
  369. code 80020005
  370. idiv:
  371. variant_idiv(hello, hello)
  372. exception Type mismatch
  373. code 80020005
  374. imp:
  375. variant_imp(hello, hello)
  376. exception Type mismatch
  377. code 80020005
  378. mod:
  379. variant_mod(hello, hello)
  380. exception Type mismatch
  381. code 80020005
  382. or:
  383. variant_or(hello, hello)
  384. exception Type mismatch
  385. code 80020005
  386. pow:
  387. variant_pow(hello, hello)
  388. exception Type mismatch
  389. code 80020005
  390. xor:
  391. variant_xor(hello, hello)
  392. exception Type mismatch
  393. code 80020005
  394. --
  395. add:
  396. variant_add(hello, )
  397. exception Type mismatch
  398. code 80020005
  399. cat: helloFalse
  400. sub:
  401. variant_sub(hello, )
  402. exception Type mismatch
  403. code 80020005
  404. mul:
  405. variant_mul(hello, )
  406. exception Type mismatch
  407. code 80020005
  408. and:
  409. variant_and(hello, )
  410. exception Type mismatch
  411. code 80020005
  412. div:
  413. variant_div(hello, )
  414. exception Type mismatch
  415. code 80020005
  416. eqv:
  417. variant_eqv(hello, )
  418. exception Type mismatch
  419. code 80020005
  420. idiv:
  421. variant_idiv(hello, )
  422. exception Type mismatch
  423. code 80020005
  424. imp:
  425. variant_imp(hello, )
  426. exception Type mismatch
  427. code 80020005
  428. mod:
  429. variant_mod(hello, )
  430. exception Type mismatch
  431. code 80020005
  432. or:
  433. variant_or(hello, )
  434. exception Type mismatch
  435. code 80020005
  436. pow:
  437. variant_pow(hello, )
  438. exception Type mismatch
  439. code 80020005
  440. xor:
  441. variant_xor(hello, )
  442. exception Type mismatch
  443. code 80020005
  444. --
  445. add: 42
  446. cat: False42
  447. sub: -42
  448. mul: 0
  449. and: 0
  450. div: 0
  451. eqv: -43
  452. idiv: 0
  453. imp: -1
  454. mod: 0
  455. or: 42
  456. pow: 0
  457. xor: 42
  458. --
  459. add: 3.5
  460. cat: False3.5
  461. sub: -3.5
  462. mul: 0
  463. and: 0
  464. div: 0
  465. eqv: -5
  466. idiv: 0
  467. imp: -1
  468. mod: 0
  469. or: 4
  470. pow: 0
  471. xor: 4
  472. --
  473. add:
  474. variant_add(0, hello)
  475. exception Type mismatch
  476. code 80020005
  477. cat: Falsehello
  478. sub:
  479. variant_sub(0, hello)
  480. exception Type mismatch
  481. code 80020005
  482. mul:
  483. variant_mul(0, hello)
  484. exception Type mismatch
  485. code 80020005
  486. and:
  487. variant_and(0, hello)
  488. exception Type mismatch
  489. code 80020005
  490. div:
  491. variant_div(0, hello)
  492. exception Type mismatch
  493. code 80020005
  494. eqv:
  495. variant_eqv(0, hello)
  496. exception Type mismatch
  497. code 80020005
  498. idiv:
  499. variant_idiv(0, hello)
  500. exception Type mismatch
  501. code 80020005
  502. imp:
  503. variant_imp(0, hello)
  504. exception Type mismatch
  505. code 80020005
  506. mod:
  507. variant_mod(0, hello)
  508. exception Type mismatch
  509. code 80020005
  510. or:
  511. variant_or(0, hello)
  512. exception Type mismatch
  513. code 80020005
  514. pow:
  515. variant_pow(0, hello)
  516. exception Type mismatch
  517. code 80020005
  518. xor:
  519. variant_xor(0, hello)
  520. exception Type mismatch
  521. code 80020005
  522. --
  523. add: 0
  524. cat: FalseFalse
  525. sub: 0
  526. mul: 0
  527. and: 0
  528. div:
  529. variant_div(0, )
  530. exception Out of present range
  531. code 8002000a
  532. eqv: -1
  533. idiv:
  534. variant_idiv(0, )
  535. exception Division by zero
  536. code 80020012
  537. imp: -1
  538. mod:
  539. variant_mod(0, )
  540. exception Division by zero
  541. code 80020012
  542. or: 0
  543. pow: 1
  544. xor: 0
  545. OK!