1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
|
// Copyright 2015 Kevin Gillette. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package testdata
import "math/rand"
const (
Small = 32
Large = 64 * 1024
)
func Seq(start, stop, skip int) []int {
n := (stop - start) / skip
s := make([]int, n)
for i := range s {
s[i] = start + (i * skip)
}
return s
}
func Interleave(n, k int) [][]int {
l := n * k
sets := make([][]int, n)
for i := range sets {
sets[i] = Seq(i, i+l, n)
}
return sets
}
func Concat(n, k, gap int) [][]int {
l := k + gap
sets := make([][]int, n)
for i := range sets {
start := i * l
sets[i] = Seq(start, start+k, 1)
}
return sets
}
func Reverse(sets [][]int) [][]int {
n := len(sets)
for i := range sets[:n/2] {
j := n - i - 1
sets[i], sets[j] = sets[j], sets[i]
}
return sets
}
func RevCat(n int, size int) [][]int {
// union, inter: requires most Swap calls, fewest Less calls
return Reverse(Concat(n, size, 0))
}
func Alternate(n int, size int) [][]int {
// union, inter: requires ~most Swap calls, most Less calls
return Interleave(n, size)
}
func Overlap(n int, size int) [][]int {
return Concat(n, size, -size/2)
}
func Rand(n int, size int) [][]int {
rand.Seed(0)
sets := make([][]int, n)
for i := range sets {
start, l := rand.Intn(size), rand.Intn(size)+1
stop := start + l
sets[i] = Seq(start, stop, 1)
}
return sets
}
|