| 173 | } |
| 174 | |
| 175 | func BenchmarkStringBigint20(b *testing.B) { |
| 176 | mkstring := func(charSetStr string, size int) (string, error) { |
| 177 | charSet := []rune(charSetStr) |
| 178 | |
| 179 | var buf strings.Builder |
| 180 | buf.Grow(size) |
| 181 | |
| 182 | bi := big.NewInt(int64(size)) |
| 183 | for i := 0; i < size; i++ { |
| 184 | num, err := rand.Int(rand.Reader, bi) |
| 185 | if err != nil { |
| 186 | return "", err |
| 187 | } |
| 188 | |
| 189 | _, _ = buf.WriteRune(charSet[num.Uint64()%uint64(len(charSet))]) |
| 190 | } |
| 191 | |
| 192 | return buf.String(), nil |
| 193 | } |
| 194 | |
| 195 | b.SetBytes(20) |
| 196 | b.ReportAllocs() |
| 197 | for i := 0; i < b.N; i++ { |
| 198 | _, _ = mkstring(cryptorand.Default, 20) |
| 199 | } |
| 200 | } |
| 201 | |
| 202 | func BenchmarkStringRuneCast(b *testing.B) { |
| 203 | s := strings.Repeat("0", 20) |