util: remove broken rand
Juan Batiz-Benet committed
Oct 30, 2014 at 04:14 UTC
cb22b62a9b6cbc31e8bc7ccde504ea6beae34120
4 files changed
+15
-22
pin/pin_test.go
+1
-1
@@ -12,7 +12,7 @@ import (
12
func randNode() (*mdag.Node, util.Key) {
13
nd := new(mdag.Node)
14
nd.Data = make([]byte, 32)
15
- util.NewFastRand().Read(nd.Data)
15
+ util.NewTimeSeededRand().Read(nd.Data)
16
k, _ := nd.Key()
17
return nd, k
18
}
unixfs/io/dagmodifier_test.go
+4
-4
@@ -28,7 +28,7 @@ func getMockDagServ(t *testing.T) mdag.DAGService {
28
func getNode(t *testing.T, dserv mdag.DAGService, size int64) ([]byte, *mdag.Node) {
29
dw := NewDagWriter(dserv, &chunk.SizeSplitter{500})
30
31
- n, err := io.CopyN(dw, u.NewFastRand(), size)
31
+ n, err := io.CopyN(dw, u.NewTimeSeededRand(), size)
32
if err != nil {
33
t.Fatal(err)
34
}
@@ -58,7 +58,7 @@ func getNode(t *testing.T, dserv mdag.DAGService, size int64) ([]byte, *mdag.Nod
58
59
func testModWrite(t *testing.T, beg, size uint64, orig []byte, dm *DagModifier) []byte {
60
newdata := make([]byte, size)
61
- r := u.NewFastRand()
61
+ r := u.NewTimeSeededRand()
62
r.Read(newdata)
63
64
if size+beg > uint64(len(orig)) {
@@ -160,7 +160,7 @@ func TestMultiWrite(t *testing.T) {
160
}
161
162
data := make([]byte, 4000)
163
- u.NewFastRand().Read(data)
163
+ u.NewTimeSeededRand().Read(data)
164
165
for i := 0; i < len(data); i++ {
166
n, err := dagmod.WriteAt(data[i:i+1], uint64(i))
@@ -201,7 +201,7 @@ func TestMultiWriteCoal(t *testing.T) {
201
}
202
203
data := make([]byte, 4000)
204
- u.NewFastRand().Read(data)
204
+ u.NewTimeSeededRand().Read(data)
205
206
for i := 0; i < len(data); i++ {
207
n, err := dagmod.WriteAt(data[:i+1], 0)
util/util.go
+9
-16
@@ -97,28 +97,21 @@ func (bcr *byteChanReader) Read(b []byte) (int, error) {
97
}
98
99
type randGen struct {
100
- src rand.Source
100
+ rand.Rand
101
}
102
103
-func NewFastRand() io.Reader {
104
- return &randGen{rand.NewSource(time.Now().UnixNano())}
103
+func NewTimeSeededRand() io.Reader {
104
+ src := rand.NewSource(time.Now().UnixNano())
105
+ return &randGen{
106
+ Rand: *rand.New(src),
107
+ }
108
}
109
110
func (r *randGen) Read(p []byte) (n int, err error) {
108
- todo := len(p)
109
- offset := 0
110
- for {
111
- val := int64(r.src.Int63())
112
- for i := 0; i < 8; i++ {
113
- p[offset] = byte(val & 0xff)
114
- todo--
115
- if todo == 0 {
116
- return len(p), nil
117
- }
118
- offset++
119
- val >>= 8
120
- }
111
+ for i := 0; i < len(p); i++ {
112
+ p[i] = byte(r.Rand.Intn(255))
113
}
114
+ return len(p), nil
115
}
116
117
// GetenvBool is the way to check an env var as a boolean
util/util_test.go
+1
-1
@@ -31,7 +31,7 @@ func TestKey(t *testing.T) {
31
32
func TestByteChanReader(t *testing.T) {
33
data := make([]byte, 1024*1024)
34
- r := NewFastRand()
34
+ r := NewTimeSeededRand()
35
r.Read(data)
36
dch := make(chan []byte, 8)
37