summaryrefslogtreecommitdiff
path: root/ext/gmp
diff options
context:
space:
mode:
authorAntony Dovgal <tony2001@php.net>2006-07-18 14:54:32 +0000
committerAntony Dovgal <tony2001@php.net>2006-07-18 14:54:32 +0000
commit9e905c3de77d3004071ad2c202ef86dc52eae892 (patch)
treebac796d8d54df9ee4f9eb01b43f673a5cfa09bd5 /ext/gmp
parent9ccbb28696be46c5236a387e0548ecc5a4000dae (diff)
downloadphp-git-9e905c3de77d3004071ad2c202ef86dc52eae892.tar.gz
MFH: add gmp_nextprime()
patch by ants dot aasma at gmail dot com
Diffstat (limited to 'ext/gmp')
-rw-r--r--ext/gmp/gmp.c14
-rw-r--r--ext/gmp/php_gmp.h1
-rw-r--r--ext/gmp/tests/gmp_nextprime.phpt40
3 files changed, 55 insertions, 0 deletions
diff --git a/ext/gmp/gmp.c b/ext/gmp/gmp.c
index 3e723e6f4f..e97977a77c 100644
--- a/ext/gmp/gmp.c
+++ b/ext/gmp/gmp.c
@@ -260,6 +260,11 @@ ZEND_BEGIN_ARG_INFO(arginfo_gmp_scan1, 0)
ZEND_ARG_INFO(0, start)
ZEND_END_ARG_INFO()
+static
+ZEND_BEGIN_ARG_INFO(arginfo_gmp_nextprime, 0)
+ ZEND_ARG_INFO(0, a)
+ZEND_END_ARG_INFO()
+
/* }}} */
ZEND_DECLARE_MODULE_GLOBALS(gmp)
@@ -307,6 +312,7 @@ zend_function_entry gmp_functions[] = {
ZEND_FE(gmp_scan1, arginfo_gmp_scan1)
ZEND_FE(gmp_popcount, arginfo_gmp_popcount)
ZEND_FE(gmp_hamdist, arginfo_gmp_hamdist)
+ ZEND_FE(gmp_nextprime, arginfo_gmp_nextprime)
{NULL, NULL, NULL} /* Must be the last line in gmp_functions[] */
};
/* }}} */
@@ -1424,6 +1430,14 @@ ZEND_FUNCTION(gmp_com)
}
/* }}} */
+/* {{{ proto resource gmp_nextprime(resource a)
+ Finds next prime of a */
+ZEND_FUNCTION(gmp_nextprime)
+{
+ gmp_unary_op(mpz_nextprime);
+}
+/* }}} */
+
/* {{{ proto resource gmp_xor(resource a, resource b)
Calculates logical exclusive OR of a and b */
ZEND_FUNCTION(gmp_xor)
diff --git a/ext/gmp/php_gmp.h b/ext/gmp/php_gmp.h
index 7ad54723f1..5af3615973 100644
--- a/ext/gmp/php_gmp.h
+++ b/ext/gmp/php_gmp.h
@@ -75,6 +75,7 @@ ZEND_FUNCTION(gmp_scan0);
ZEND_FUNCTION(gmp_scan1);
ZEND_FUNCTION(gmp_popcount);
ZEND_FUNCTION(gmp_hamdist);
+ZEND_FUNCTION(gmp_nextprime);
ZEND_BEGIN_MODULE_GLOBALS(gmp)
zend_bool rand_initialized;
diff --git a/ext/gmp/tests/gmp_nextprime.phpt b/ext/gmp/tests/gmp_nextprime.phpt
new file mode 100644
index 0000000000..84d945b3fc
--- /dev/null
+++ b/ext/gmp/tests/gmp_nextprime.phpt
@@ -0,0 +1,40 @@
+--TEST--
+gmp_nextprime()
+--SKIPIF--
+<?php if (!extension_loaded("gmp")) print "skip"; ?>
+--FILE--
+<?php
+
+$n = gmp_nextprime(-1);
+var_dump(gmp_strval($n));
+$n = gmp_nextprime(0);
+var_dump(gmp_strval($n));
+$n = gmp_nextprime(-1000);
+var_dump(gmp_strval($n));
+$n = gmp_nextprime(1000);
+var_dump(gmp_strval($n));
+$n = gmp_nextprime(100000);
+var_dump(gmp_strval($n));
+$n = gmp_nextprime(array());
+var_dump(gmp_strval($n));
+$n = gmp_nextprime("");
+var_dump(gmp_strval($n));
+$n = gmp_nextprime(new stdclass());
+var_dump(gmp_strval($n));
+
+echo "Done\n";
+?>
+--EXPECTF--
+string(1) "2"
+string(1) "2"
+string(4) "-997"
+string(4) "1009"
+string(6) "100003"
+
+Warning: gmp_nextprime(): Unable to convert variable to GMP - wrong type in %s on line %d
+string(1) "0"
+string(1) "0"
+
+Warning: gmp_nextprime(): Unable to convert variable to GMP - wrong type in %s on line %d
+string(1) "0"
+Done