package bolt import ( "bytes" "flag" "math/rand" "reflect" "testing/quick" "time" ) // testing/quick defaults to 5 iterations and a random seed. // You can override these settings from the command line: // // -quick.count The number of iterations to perform. // -quick.seed The seed to use for randomizing. // -quick.maxitems The maximum number of items to insert into a DB. // -quick.maxksize The maximum size of a key. // -quick.maxvsize The maximum size of a value. // var qcount, qseed, qmaxitems, qmaxksize, qmaxvsize int func init() { flag.IntVar(&qcount, "quick.count", 5, "") flag.IntVar(&qseed, "quick.seed", int(time.Now().UnixNano())%100000, "") flag.IntVar(&qmaxitems, "quick.maxitems", 1000, "") flag.IntVar(&qmaxksize, "quick.maxksize", 1024, "") flag.IntVar(&qmaxvsize, "quick.maxvsize", 1024, "") flag.Parse() warn("seed:", qseed) warnf("quick settings: count=%v, items=%v, ksize=%v, vsize=%v", qcount, qmaxitems, qmaxksize, qmaxvsize) } func qconfig() *quick.Config { return &quick.Config{ MaxCount: qcount, Rand: rand.New(rand.NewSource(int64(qseed))), } } type testdata []testdataitem func (t testdata) Len() int { return len(t) } func (t testdata) Swap(i, j int) { t[i], t[j] = t[j], t[i] } func (t testdata) Less(i, j int) bool { return bytes.Compare(t[i].Key, t[j].Key) == -1 } func (t testdata) Generate(rand *rand.Rand, size int) reflect.Value { n := rand.Intn(qmaxitems-1) + 1 items := make(testdata, n) for i := 0; i < n; i++ { item := &items[i] item.Key = randByteSlice(rand, 1, qmaxksize) item.Value = randByteSlice(rand, 0, qmaxvsize) } return reflect.ValueOf(items) } type revtestdata []testdataitem func (t revtestdata) Len() int { return len(t) } func (t revtestdata) Swap(i, j int) { t[i], t[j] = t[j], t[i] } func (t revtestdata) Less(i, j int) bool { return bytes.Compare(t[i].Key, t[j].Key) == 1 } type testdataitem struct { Key []byte Value []byte } func randByteSlice(rand *rand.Rand, minSize, maxSize int) []byte { n := rand.Intn(maxSize-minSize) + minSize b := make([]byte, n) for i := 0; i < n; i++ { b[i] = byte(rand.Intn(255)) } return b }