]> Cypherpunks repositories - gostls13.git/commitdiff
Minor fixes and additions to the GMP wrapping.
authorAdam Langley <agl@golang.org>
Wed, 14 Oct 2009 17:56:19 +0000 (10:56 -0700)
committerAdam Langley <agl@golang.org>
Wed, 14 Oct 2009 17:56:19 +0000 (10:56 -0700)
R=rsc
APPROVED=rsc
DELTA=12  (11 added, 0 deleted, 1 changed)
OCL=35715
CL=35715

misc/cgo/gmp/gmp.go

index 5cda6dc73923f75f1210335bbe11a37521534663..a31f7407cd014be2b13d8751fc078017eaabbcbf 100644 (file)
@@ -197,6 +197,9 @@ func (z *Int) SetString(s string, base int) os.Error {
 
 // String returns the decimal representation of z.
 func (z *Int) String() string {
+       if z == nil {
+               return "nil";
+       }
        z.doinit();
        p := C.mpz_get_str(nil, 10, &z.i[0]);
        s := C.GoString(p);
@@ -253,7 +256,7 @@ func (z *Int) Div(x, y *Int) *Int {
 }
 
 // Mod sets z = x % y and returns z.
-// XXX Unlike in Go, the result is always positive.
+// Like the result of the Go % operator, z has the same sign as x.
 func (z *Int) Mod(x, y *Int) *Int {
        x.doinit();
        y.doinit();
@@ -361,3 +364,11 @@ func GcdInt(d, x, y, a, b *Int) {
        b.doinit();
        C.mpz_gcdext(&d.i[0], &x.i[0], &y.i[0], &a.i[0], &b.i[0]);
 }
+
+// ProbablyPrime performs n Miller-Rabin tests to check whether z is prime.
+// If it returns true, z is prime with probability 1 - 1/4^n.
+// If it returns false, z is not prime.
+func (z *Int) ProbablyPrime(n int) bool {
+       z.doinit();
+       return int(C.mpz_probab_prime_p(&z.i[0], C.int(n))) > 0;
+}