Advertisement
Guest User

Untitled

a guest
Mar 10th, 2014
171
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 1.09 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4.     "fmt"
  5.     "math/rand"
  6.     "time"
  7. )
  8.  
  9. const chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890 abcdefghijklmnopqrstuvwxyz" +
  10.     "~!@#$%^&*()-_+={}[]\\|<,>.?/\"';:`"
  11.  
  12. const Maxlen = 1024
  13.  
  14. func RandStrings(N int) []string {
  15.     r := make([]string, N)
  16.     ri := 0
  17.     buf := make([]byte, Maxlen)
  18.     known := map[string]bool{}
  19.  
  20.     for i := 0; i < N; i++ {
  21.     retry:
  22.         l := rand.Intn(Maxlen)
  23.         for j := 0; j < l; j++ {
  24.             buf[j] = chars[rand.Intn(len(chars))]
  25.         }
  26.         s := string(buf[0:l])
  27.         if known[s] {
  28.             goto retry
  29.         }
  30.         known[s] = true
  31.         r[ri] = s
  32.         ri++
  33.     }
  34.     return r
  35. }
  36.  
  37. func timeTrack(start time.Time, name string, num int, dbtype string) {
  38.     elapsed := time.Since(start)
  39.     fmt.Println(name, elapsed, "throughput:", int64(float64(num)/(elapsed.Seconds())), "/sec\n")
  40. }
  41.  
  42. func runbench(t string, n int) {
  43.     defer timeTrack(time.Now(), fmt.Sprintf("%d strings, type %s", n, t), n, t)
  44.     for i := 0; i < n; i++ {
  45.         r := RandStrings(2)
  46.         _ = r
  47.     }
  48. }
  49.  
  50. func main() {
  51.     iter := 64000000
  52.     incr := 1000
  53.     for i := incr; i < iter+1; i = incr {
  54.         runbench("t", i)
  55.         incr = 2 * i
  56.     }
  57. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement