init: v1.0.0
This commit is contained in:
@@ -0,0 +1,104 @@
|
||||
//go:build gmp
|
||||
// +build gmp
|
||||
|
||||
package gmp
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
||||
// Make a n digit number
|
||||
func nDigitNumberGmp(digits int64) *Int {
|
||||
x := NewInt(10)
|
||||
n := NewInt(digits)
|
||||
one := NewInt(1)
|
||||
x.Exp(x, n, nil)
|
||||
x.Sub(x, one)
|
||||
return x
|
||||
}
|
||||
|
||||
func TestPow(t *testing.T) {
|
||||
|
||||
n, _ := NewInt(1).SetString("151787717184422252307365020658866150659139813606887864663574443176328014948429913407344055128026662986925949147541666619511526142491196760869802510776788353419093645990851372578901256051814507665042918937343846064086867942964225457691185973174205523727877484153730596121423900155549117133518141928295347285789", 10)
|
||||
m, _ := NewInt(1).SetString("15178771718442225230736502065886615065913981360688786466357444317632801494842991340734405512802666298692594914754166661951152614249119676086980251077678835341909364599085137257890125605181450766504291893734384606408686794296422545769118597317420552372787748415373059612142390015554911713351814192829534728578", 10)
|
||||
d, _ := NewInt(1).SetString("141787717184422252307365020658866150659139813606887864663574443176328014948429913407344055128026662986925949147541666619511526142491196760869802510776788353419093645990851372578901256051814507665042918937343846064086867942964225457691185973174205523727877484153730596121423900155549117133518141928295347285789", 10)
|
||||
c := NewInt(1)
|
||||
|
||||
cnt := 10000
|
||||
start := time.Now()
|
||||
for i := 0; i < cnt; i++ {
|
||||
c.Exp(m, d, n)
|
||||
}
|
||||
elapsed := time.Since(start)
|
||||
fmt.Printf("Sign %d times\n", cnt)
|
||||
fmt.Printf("Used time: %d ms, %d pcs/s\n", elapsed.Milliseconds(), int(float64(cnt)/float64(elapsed.Milliseconds())*1000))
|
||||
|
||||
}
|
||||
|
||||
func benchmarkGmpAddN(b *testing.B, digits int64) {
|
||||
x := nDigitNumberGmp(digits)
|
||||
y := nDigitNumberGmp(digits)
|
||||
z := NewInt(0)
|
||||
b.ResetTimer()
|
||||
b.StartTimer()
|
||||
for i := b.N - 1; i >= 0; i-- {
|
||||
z.Add(x, y)
|
||||
}
|
||||
}
|
||||
|
||||
func BenchmarkGmpAdd1(b *testing.B) {
|
||||
benchmarkGmpAddN(b, 10)
|
||||
}
|
||||
func BenchmarkGmpAdd10(b *testing.B) {
|
||||
benchmarkGmpAddN(b, 10)
|
||||
}
|
||||
func BenchmarkGmpAdd100(b *testing.B) {
|
||||
benchmarkGmpAddN(b, 100)
|
||||
}
|
||||
func BenchmarkGmpAdd1000(b *testing.B) {
|
||||
benchmarkGmpAddN(b, 1000)
|
||||
}
|
||||
func BenchmarkGmpAdd10000(b *testing.B) {
|
||||
benchmarkGmpAddN(b, 10000)
|
||||
}
|
||||
func BenchmarkGmpAdd100000(b *testing.B) {
|
||||
benchmarkGmpAddN(b, 100000)
|
||||
}
|
||||
func BenchmarkGmpAdd1000000(b *testing.B) {
|
||||
benchmarkGmpAddN(b, 1000000)
|
||||
}
|
||||
|
||||
func benchmarkGmpMulN(b *testing.B, digits int64) {
|
||||
x := nDigitNumberGmp(digits)
|
||||
y := nDigitNumberGmp(digits)
|
||||
z := NewInt(0)
|
||||
b.ResetTimer()
|
||||
b.StartTimer()
|
||||
for i := b.N - 1; i >= 0; i-- {
|
||||
z.Mul(x, y)
|
||||
}
|
||||
}
|
||||
|
||||
func BenchmarkGmpMul1(b *testing.B) {
|
||||
benchmarkGmpMulN(b, 10)
|
||||
}
|
||||
func BenchmarkGmpMul10(b *testing.B) {
|
||||
benchmarkGmpMulN(b, 10)
|
||||
}
|
||||
func BenchmarkGmpMul100(b *testing.B) {
|
||||
benchmarkGmpMulN(b, 100)
|
||||
}
|
||||
func BenchmarkGmpMul1000(b *testing.B) {
|
||||
benchmarkGmpMulN(b, 1000)
|
||||
}
|
||||
func BenchmarkGmpMul10000(b *testing.B) {
|
||||
benchmarkGmpMulN(b, 10000)
|
||||
}
|
||||
func BenchmarkGmpMul100000(b *testing.B) {
|
||||
benchmarkGmpMulN(b, 100000)
|
||||
}
|
||||
func BenchmarkGmpMul1000000(b *testing.B) {
|
||||
benchmarkGmpMulN(b, 1000000)
|
||||
}
|
||||
Reference in New Issue
Block a user