]> granicus.if.org Git - php/commitdiff
add GMP_VERSION constant
authorAntony Dovgal <tony2001@php.net>
Wed, 25 Apr 2007 18:09:08 +0000 (18:09 +0000)
committerAntony Dovgal <tony2001@php.net>
Wed, 25 Apr 2007 18:09:08 +0000 (18:09 +0000)
add test
do not allow zero operand in gmp_divexact()

ext/gmp/gmp.c
ext/gmp/tests/011.phpt [new file with mode: 0644]

index ef1f44214bce78df847a536fbf004228f1d7e646..c213f6dfe7431fe1e5cd6c613d2fd6e33ab0e119 100644 (file)
@@ -396,6 +396,7 @@ ZEND_MODULE_STARTUP_D(gmp)
        REGISTER_LONG_CONSTANT("GMP_ROUND_ZERO", GMP_ROUND_ZERO, CONST_CS | CONST_PERSISTENT);
        REGISTER_LONG_CONSTANT("GMP_ROUND_PLUSINF", GMP_ROUND_PLUSINF, CONST_CS | CONST_PERSISTENT);
        REGISTER_LONG_CONSTANT("GMP_ROUND_MINUSINF", GMP_ROUND_MINUSINF, CONST_CS | CONST_PERSISTENT);
+       REGISTER_STRING_CONSTANT("GMP_VERSION", (char *)gmp_version, CONST_CS | CONST_PERSISTENT);
 
        mp_set_memory_functions(gmp_emalloc, gmp_erealloc, gmp_efree);
 
@@ -422,6 +423,7 @@ ZEND_MODULE_INFO_D(gmp)
 {
        php_info_print_table_start();
        php_info_print_table_row(2, "gmp support", "enabled");
+       php_info_print_table_row(2, "GMP version", gmp_version);
        php_info_print_table_end();
 }
 /* }}} */
@@ -1011,7 +1013,13 @@ ZEND_FUNCTION(gmp_mod)
    Divide a by b using exact division algorithm */
 ZEND_FUNCTION(gmp_divexact)
 {
-       gmp_binary_op(mpz_divexact);
+       zval **a_arg, **b_arg;
+
+       if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &a_arg, &b_arg) == FAILURE){
+               WRONG_PARAM_COUNT;
+       }
+       
+       gmp_zval_binary_ui_op_ex(return_value, a_arg, b_arg, mpz_divexact, NULL, 0, 1 TSRMLS_CC);
 }
 /* }}} */
 
diff --git a/ext/gmp/tests/011.phpt b/ext/gmp/tests/011.phpt
new file mode 100644 (file)
index 0000000..a6fb7c8
--- /dev/null
@@ -0,0 +1,52 @@
+--TEST--
+gmp_divexact() tests (OK to fail with GMP =< 4.2.1)
+--FILE--
+<?php
+
+$r = gmp_divexact("233", "23345555555555555555555555");
+var_dump(gmp_strval($r));
+
+$r = gmp_divexact("233", "0");
+var_dump(gmp_strval($r));
+
+$r = gmp_divexact("100", "10");
+var_dump(gmp_strval($r));
+
+$r = gmp_divexact("1024", "2");
+var_dump(gmp_strval($r));
+
+$n = gmp_init("10000000000000000000");
+$r = gmp_divexact($n, "2");
+var_dump(gmp_strval($r));
+
+$r = gmp_divexact($n, "50");
+var_dump(gmp_strval($r));
+
+$n1 = gmp_init("-100000000000000000000000000");
+$r = gmp_divexact($n1, $n);
+var_dump(gmp_strval($r));
+
+echo "Done\n";
+?>
+--EXPECTF--    
+string(1) "0"
+
+Warning: gmp_divexact(): Zero operand not allowed in %s on line %d
+string(1) "0"
+string(2) "10"
+string(3) "512"
+string(19) "5000000000000000000"
+string(18) "200000000000000000"
+string(9) "-10000000"
+Done
+--UEXPECTF--
+unicode(1) "0"
+
+Warning: gmp_divexact(): Zero operand not allowed in %s on line %d
+unicode(1) "0"
+unicode(2) "10"
+unicode(3) "512"
+unicode(19) "5000000000000000000"
+unicode(18) "200000000000000000"
+unicode(9) "-10000000"
+Done