Skip to content

Commit

Permalink
Embellish random number example, add benchmarks.
Browse files Browse the repository at this point in the history
  • Loading branch information
gmallard committed Feb 17, 2014
1 parent c2986c7 commit bade8cb
Show file tree
Hide file tree
Showing 2 changed files with 59 additions and 4 deletions.
42 changes: 38 additions & 4 deletions rand_between/rand_between.go
Expand Up @@ -19,11 +19,22 @@ func randBetween(min, max int64) int64 {
return br.Add(big.NewInt(min), br).Int64()
}

func randBetween2(min, max int64) int64 {
rt, _ := rand.Int(rand.Reader, big.NewInt(max-min)) // Ignore errors here
return min + rt.Int64()
}

func randBetween3(min, max int64, fact float64) int64 {
rt, _ := rand.Int(rand.Reader, big.NewInt(max-min)) // Ignore errors here
return int64(fact * float64(min+rt.Int64()))
}

func main() {
fmt.Println("Start...")
fmt.Printf("MIN: %d\n", min)
fmt.Printf("MAX: %d\n", max)
for i := 1; i <= 1000000; i++ {
//
fmt.Println("StartT1...")
for i := 1; i <= 100; i++ {
fmt.Printf("Iteration %d\n", i)
r := randBetween(min, max)
fmt.Printf("Result: %d\n", r)
Expand All @@ -32,6 +43,29 @@ func main() {
panic("unexpected results")
}
}

fmt.Println("End...")
fmt.Println("EndT1...")
//
fmt.Println("StartT2...")
for i := 1; i <= 100; i++ {
fmt.Printf("Iteration %d\n", i)
r := randBetween2(min, max)
fmt.Printf("Result: %d\n", r)
if r < min || r > max {
fmt.Printf("Error, unexpected results: %v, %v, %v\n", min, max, r)
panic("unexpected results")
}
}
fmt.Println("EndT2...")
//
fmt.Println("StartT3...")
for i := 1; i <= 100; i++ {
fmt.Printf("Iteration %d\n", i)
r := randBetween3(min, max, 1.0)
fmt.Printf("Result: %d\n", r)
if r < min || r > max {
fmt.Printf("Error, unexpected results: %v, %v, %v\n", min, max, r)
panic("unexpected results")
}
}
fmt.Println("EndT3...")
}
21 changes: 21 additions & 0 deletions rand_between/rb_test.go
@@ -0,0 +1,21 @@
package main

import "testing"

func BenchmarkBetween(b *testing.B) {
for n := 0; n < b.N; n++ {
_ = randBetween(min, max)
}
}

func BenchmarkBetween2(b *testing.B) {
for n := 0; n < b.N; n++ {
_ = randBetween2(min, max)
}
}

func BenchmarkBetween3(b *testing.B) {
for n := 0; n < b.N; n++ {
_ = randBetween3(min, max, 1.0)
}
}

0 comments on commit bade8cb

Please sign in to comment.