Annotation of embedaddon/php/ext/com_dotnet/tests/variants.phpt, revision 1.1.1.2

1.1       misho       1: --TEST--
                      2: COM: General variant tests
                      3: --SKIPIF--
                      4: <?php # vim:ft=php
                      5: if (!extension_loaded("com_dotnet")) print "skip COM/.Net support not present"; ?>
                      6: --FILE--
1.1.1.2 ! misho       7: <?php // $Id$
1.1       misho       8: error_reporting(E_ALL);
                      9: 
                     10: $v = new VARIANT();
                     11: if (VT_EMPTY != variant_get_type($v)) {
                     12:        echo "VT_EMPTY: bork\n";
                     13: }
                     14: 
                     15: $values = array(VT_I4 => 42, VT_R8 => 3.5, VT_BSTR => "hello", VT_BOOL => false);
                     16: $binary_ops = array('add', 'cat', 'sub', 'mul', 'and', 'div',
                     17:        'eqv', 'idiv', 'imp', 'mod', 'or', 'pow', 'xor');
                     18: 
                     19: foreach ($values as $t => $val) {
                     20:        $v = new VARIANT($val);
                     21:        if ($t != variant_get_type($v)) {
                     22:                printf("Bork: [%d] %d: %s\n", $t, variant_get_type($v), $val);
                     23:                print $v . "\n";
                     24:        }
                     25:        $results = array();
                     26: 
                     27:        foreach ($values as $op2) {
                     28:                echo "--\n";
                     29:                foreach ($binary_ops as $op) {
                     30:                        try {
                     31:                                echo "$op: " . call_user_func('variant_' . $op, $v, $op2) . "\n";
                     32:                        } catch (com_exception $e) {
                     33:                                echo "$op:\n";
                     34:                                echo "\tvariant_$op($v, $op2)\n";
                     35:                                echo "\texception " . $e->getMessage();
                     36:                                printf("\tcode %08x\n\n", $e->getCode());
                     37:                        }
                     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: 
                     79: cat: 42hello
                     80: sub:
                     81:        variant_sub(42, hello)
                     82:        exception Type mismatch.
                     83:        code 80020005
                     84: 
                     85: mul:
                     86:        variant_mul(42, hello)
                     87:        exception Type mismatch.
                     88:        code 80020005
                     89: 
                     90: and:
                     91:        variant_and(42, hello)
                     92:        exception Type mismatch.
                     93:        code 80020005
                     94: 
                     95: div:
                     96:        variant_div(42, hello)
                     97:        exception Type mismatch.
                     98:        code 80020005
                     99: 
                    100: eqv:
                    101:        variant_eqv(42, hello)
                    102:        exception Type mismatch.
                    103:        code 80020005
                    104: 
                    105: idiv:
                    106:        variant_idiv(42, hello)
                    107:        exception Type mismatch.
                    108:        code 80020005
                    109: 
                    110: imp:
                    111:        variant_imp(42, hello)
                    112:        exception Type mismatch.
                    113:        code 80020005
                    114: 
                    115: mod:
                    116:        variant_mod(42, hello)
                    117:        exception Type mismatch.
                    118:        code 80020005
                    119: 
                    120: or:
                    121:        variant_or(42, hello)
                    122:        exception Type mismatch.
                    123:        code 80020005
                    124: 
                    125: pow:
                    126:        variant_pow(42, hello)
                    127:        exception Type mismatch.
                    128:        code 80020005
                    129: 
                    130: xor:
                    131:        variant_xor(42, hello)
                    132:        exception Type mismatch.
                    133:        code 80020005
                    134: 
                    135: --
                    136: add: 42
                    137: cat: 42False
                    138: sub: 42
                    139: mul: 0
                    140: and: 0
                    141: div:
                    142:        variant_div(42, )
                    143:        exception Division by zero.
                    144:        code 80020012
                    145: 
                    146: eqv: -43
                    147: idiv:
                    148:        variant_idiv(42, )
                    149:        exception Division by zero.
                    150:        code 80020012
                    151: 
                    152: imp: -43
                    153: mod:
                    154:        variant_mod(42, )
                    155:        exception Division by zero.
                    156:        code 80020012
                    157: 
                    158: or: 42
                    159: pow: 1
                    160: xor: 42
                    161: --
                    162: add: 45.5
                    163: cat: 3.542
                    164: sub: -38.5
                    165: mul: 147
                    166: and: 0
                    167: div: 8.33333333333333E-02
                    168: eqv: -47
                    169: idiv: 0
                    170: imp: -5
                    171: mod: 4
                    172: or: 46
                    173: pow: 7.09345573078604E+22
                    174: xor: 46
                    175: --
                    176: add: 7
                    177: cat: 3.53.5
                    178: sub: 0
                    179: mul: 12.25
                    180: and: 4
                    181: div: 1
                    182: eqv: -1
                    183: idiv: 1
                    184: imp: -1
                    185: mod: 0
                    186: or: 4
                    187: pow: 80.2117802289664
                    188: xor: 0
                    189: --
                    190: add:
                    191:        variant_add(3.5, hello)
                    192:        exception Type mismatch.
                    193:        code 80020005
                    194: 
                    195: cat: 3.5hello
                    196: sub:
                    197:        variant_sub(3.5, hello)
                    198:        exception Type mismatch.
                    199:        code 80020005
                    200: 
                    201: mul:
                    202:        variant_mul(3.5, hello)
                    203:        exception Type mismatch.
                    204:        code 80020005
                    205: 
                    206: and:
                    207:        variant_and(3.5, hello)
                    208:        exception Type mismatch.
                    209:        code 80020005
                    210: 
                    211: div:
                    212:        variant_div(3.5, hello)
                    213:        exception Type mismatch.
                    214:        code 80020005
                    215: 
                    216: eqv:
                    217:        variant_eqv(3.5, hello)
                    218:        exception Type mismatch.
                    219:        code 80020005
                    220: 
                    221: idiv:
                    222:        variant_idiv(3.5, hello)
                    223:        exception Type mismatch.
                    224:        code 80020005
                    225: 
                    226: imp:
                    227:        variant_imp(3.5, hello)
                    228:        exception Type mismatch.
                    229:        code 80020005
                    230: 
                    231: mod:
                    232:        variant_mod(3.5, hello)
                    233:        exception Type mismatch.
                    234:        code 80020005
                    235: 
                    236: or:
                    237:        variant_or(3.5, hello)
                    238:        exception Type mismatch.
                    239:        code 80020005
                    240: 
                    241: pow:
                    242:        variant_pow(3.5, hello)
                    243:        exception Type mismatch.
                    244:        code 80020005
                    245: 
                    246: xor:
                    247:        variant_xor(3.5, hello)
                    248:        exception Type mismatch.
                    249:        code 80020005
                    250: 
                    251: --
                    252: add: 3.5
                    253: cat: 3.5False
                    254: sub: 3.5
                    255: mul: 0
                    256: and: 0
                    257: div:
                    258:        variant_div(3.5, )
                    259:        exception Division by zero.
                    260:        code 80020012
                    261: 
                    262: eqv: -5
                    263: idiv:
                    264:        variant_idiv(3.5, )
                    265:        exception Division by zero.
                    266:        code 80020012
                    267: 
                    268: imp: -5
                    269: mod:
                    270:        variant_mod(3.5, )
                    271:        exception Division by zero.
                    272:        code 80020012
                    273: 
                    274: or: 4
                    275: pow: 1
                    276: xor: 4
                    277: --
                    278: add:
                    279:        variant_add(hello, 42)
                    280:        exception Type mismatch.
                    281:        code 80020005
                    282: 
                    283: cat: hello42
                    284: sub:
                    285:        variant_sub(hello, 42)
                    286:        exception Type mismatch.
                    287:        code 80020005
                    288: 
                    289: mul:
                    290:        variant_mul(hello, 42)
                    291:        exception Type mismatch.
                    292:        code 80020005
                    293: 
                    294: and:
                    295:        variant_and(hello, 42)
                    296:        exception Type mismatch.
                    297:        code 80020005
                    298: 
                    299: div:
                    300:        variant_div(hello, 42)
                    301:        exception Type mismatch.
                    302:        code 80020005
                    303: 
                    304: eqv:
                    305:        variant_eqv(hello, 42)
                    306:        exception Type mismatch.
                    307:        code 80020005
                    308: 
                    309: idiv:
                    310:        variant_idiv(hello, 42)
                    311:        exception Type mismatch.
                    312:        code 80020005
                    313: 
                    314: imp:
                    315:        variant_imp(hello, 42)
                    316:        exception Type mismatch.
                    317:        code 80020005
                    318: 
                    319: mod:
                    320:        variant_mod(hello, 42)
                    321:        exception Type mismatch.
                    322:        code 80020005
                    323: 
                    324: or:
                    325:        variant_or(hello, 42)
                    326:        exception Type mismatch.
                    327:        code 80020005
                    328: 
                    329: pow:
                    330:        variant_pow(hello, 42)
                    331:        exception Type mismatch.
                    332:        code 80020005
                    333: 
                    334: xor:
                    335:        variant_xor(hello, 42)
                    336:        exception Type mismatch.
                    337:        code 80020005
                    338: 
                    339: --
                    340: add:
                    341:        variant_add(hello, 3.5)
                    342:        exception Type mismatch.
                    343:        code 80020005
                    344: 
                    345: cat: hello3.5
                    346: sub:
                    347:        variant_sub(hello, 3.5)
                    348:        exception Type mismatch.
                    349:        code 80020005
                    350: 
                    351: mul:
                    352:        variant_mul(hello, 3.5)
                    353:        exception Type mismatch.
                    354:        code 80020005
                    355: 
                    356: and:
                    357:        variant_and(hello, 3.5)
                    358:        exception Type mismatch.
                    359:        code 80020005
                    360: 
                    361: div:
                    362:        variant_div(hello, 3.5)
                    363:        exception Type mismatch.
                    364:        code 80020005
                    365: 
                    366: eqv:
                    367:        variant_eqv(hello, 3.5)
                    368:        exception Type mismatch.
                    369:        code 80020005
                    370: 
                    371: idiv:
                    372:        variant_idiv(hello, 3.5)
                    373:        exception Type mismatch.
                    374:        code 80020005
                    375: 
                    376: imp:
                    377:        variant_imp(hello, 3.5)
                    378:        exception Type mismatch.
                    379:        code 80020005
                    380: 
                    381: mod:
                    382:        variant_mod(hello, 3.5)
                    383:        exception Type mismatch.
                    384:        code 80020005
                    385: 
                    386: or:
                    387:        variant_or(hello, 3.5)
                    388:        exception Type mismatch.
                    389:        code 80020005
                    390: 
                    391: pow:
                    392:        variant_pow(hello, 3.5)
                    393:        exception Type mismatch.
                    394:        code 80020005
                    395: 
                    396: xor:
                    397:        variant_xor(hello, 3.5)
                    398:        exception Type mismatch.
                    399:        code 80020005
                    400: 
                    401: --
                    402: add: hellohello
                    403: cat: hellohello
                    404: sub:
                    405:        variant_sub(hello, hello)
                    406:        exception Type mismatch.
                    407:        code 80020005
                    408: 
                    409: mul:
                    410:        variant_mul(hello, hello)
                    411:        exception Type mismatch.
                    412:        code 80020005
                    413: 
                    414: and:
                    415:        variant_and(hello, hello)
                    416:        exception Type mismatch.
                    417:        code 80020005
                    418: 
                    419: div:
                    420:        variant_div(hello, hello)
                    421:        exception Type mismatch.
                    422:        code 80020005
                    423: 
                    424: eqv:
                    425:        variant_eqv(hello, hello)
                    426:        exception Type mismatch.
                    427:        code 80020005
                    428: 
                    429: idiv:
                    430:        variant_idiv(hello, hello)
                    431:        exception Type mismatch.
                    432:        code 80020005
                    433: 
                    434: imp:
                    435:        variant_imp(hello, hello)
                    436:        exception Type mismatch.
                    437:        code 80020005
                    438: 
                    439: mod:
                    440:        variant_mod(hello, hello)
                    441:        exception Type mismatch.
                    442:        code 80020005
                    443: 
                    444: or:
                    445:        variant_or(hello, hello)
                    446:        exception Type mismatch.
                    447:        code 80020005
                    448: 
                    449: pow:
                    450:        variant_pow(hello, hello)
                    451:        exception Type mismatch.
                    452:        code 80020005
                    453: 
                    454: xor:
                    455:        variant_xor(hello, hello)
                    456:        exception Type mismatch.
                    457:        code 80020005
                    458: 
                    459: --
                    460: add:
                    461:        variant_add(hello, )
                    462:        exception Type mismatch.
                    463:        code 80020005
                    464: 
                    465: cat: helloFalse
                    466: sub:
                    467:        variant_sub(hello, )
                    468:        exception Type mismatch.
                    469:        code 80020005
                    470: 
                    471: mul:
                    472:        variant_mul(hello, )
                    473:        exception Type mismatch.
                    474:        code 80020005
                    475: 
                    476: and:
                    477:        variant_and(hello, )
                    478:        exception Type mismatch.
                    479:        code 80020005
                    480: 
                    481: div:
                    482:        variant_div(hello, )
                    483:        exception Type mismatch.
                    484:        code 80020005
                    485: 
                    486: eqv:
                    487:        variant_eqv(hello, )
                    488:        exception Type mismatch.
                    489:        code 80020005
                    490: 
                    491: idiv:
                    492:        variant_idiv(hello, )
                    493:        exception Type mismatch.
                    494:        code 80020005
                    495: 
                    496: imp:
                    497:        variant_imp(hello, )
                    498:        exception Type mismatch.
                    499:        code 80020005
                    500: 
                    501: mod:
                    502:        variant_mod(hello, )
                    503:        exception Type mismatch.
                    504:        code 80020005
                    505: 
                    506: or:
                    507:        variant_or(hello, )
                    508:        exception Type mismatch.
                    509:        code 80020005
                    510: 
                    511: pow:
                    512:        variant_pow(hello, )
                    513:        exception Type mismatch.
                    514:        code 80020005
                    515: 
                    516: xor:
                    517:        variant_xor(hello, )
                    518:        exception Type mismatch.
                    519:        code 80020005
                    520: 
                    521: --
                    522: add: 42
                    523: cat: False42
                    524: sub: -42
                    525: mul: 0
                    526: and: 0
                    527: div: 0
                    528: eqv: -43
                    529: idiv: 0
                    530: imp: -1
                    531: mod: 0
                    532: or: 42
                    533: pow: 0
                    534: xor: 42
                    535: --
                    536: add: 3.5
                    537: cat: False3.5
                    538: sub: -3.5
                    539: mul: 0
                    540: and: 0
                    541: div: 0
                    542: eqv: -5
                    543: idiv: 0
                    544: imp: -1
                    545: mod: 0
                    546: or: 4
                    547: pow: 0
                    548: xor: 4
                    549: --
                    550: add:
                    551:        variant_add(0, hello)
                    552:        exception Type mismatch.
                    553:        code 80020005
                    554: 
                    555: cat: Falsehello
                    556: sub:
                    557:        variant_sub(0, hello)
                    558:        exception Type mismatch.
                    559:        code 80020005
                    560: 
                    561: mul:
                    562:        variant_mul(0, hello)
                    563:        exception Type mismatch.
                    564:        code 80020005
                    565: 
                    566: and:
                    567:        variant_and(0, hello)
                    568:        exception Type mismatch.
                    569:        code 80020005
                    570: 
                    571: div:
                    572:        variant_div(0, hello)
                    573:        exception Type mismatch.
                    574:        code 80020005
                    575: 
                    576: eqv:
                    577:        variant_eqv(0, hello)
                    578:        exception Type mismatch.
                    579:        code 80020005
                    580: 
                    581: idiv:
                    582:        variant_idiv(0, hello)
                    583:        exception Type mismatch.
                    584:        code 80020005
                    585: 
                    586: imp:
                    587:        variant_imp(0, hello)
                    588:        exception Type mismatch.
                    589:        code 80020005
                    590: 
                    591: mod:
                    592:        variant_mod(0, hello)
                    593:        exception Type mismatch.
                    594:        code 80020005
                    595: 
                    596: or:
                    597:        variant_or(0, hello)
                    598:        exception Type mismatch.
                    599:        code 80020005
                    600: 
                    601: pow:
                    602:        variant_pow(0, hello)
                    603:        exception Type mismatch.
                    604:        code 80020005
                    605: 
                    606: xor:
                    607:        variant_xor(0, hello)
                    608:        exception Type mismatch.
                    609:        code 80020005
                    610: 
                    611: --
                    612: add: 0
                    613: cat: FalseFalse
                    614: sub: 0
                    615: mul: 0
                    616: and: 0
                    617: div:
                    618:        variant_div(0, )
                    619:        exception Out of present range.
                    620:        code 8002000a
                    621: 
                    622: eqv: -1
                    623: idiv:
                    624:        variant_idiv(0, )
                    625:        exception Division by zero.
                    626:        code 80020012
                    627: 
                    628: imp: -1
                    629: mod:
                    630:        variant_mod(0, )
                    631:        exception Division by zero.
                    632:        code 80020012
                    633: 
                    634: or: 0
                    635: pow: 1
                    636: xor: 0
                    637: OK!

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>