intVal.go 1.4 KB
Newer Older
aaronchen2k2k's avatar
aaronchen2k2k 已提交
1 2 3
package gen

import (
aaronchen2k2k's avatar
aaronchen2k2k 已提交
4
	commonUtils "github.com/easysoft/zendata/src/utils/common"
5
	constant "github.com/easysoft/zendata/src/utils/const"
aaronchen2k2k's avatar
aaronchen2k2k 已提交
6 7
)

aaronchen2k2k's avatar
aaronchen2k2k 已提交
8
func GenerateIntItems(start int64, end int64, step interface{}, rand bool, repeat int) []interface{} {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
9
	if !rand {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
10
		return GenerateIntItemsByStep(start, end, step.(int), repeat)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
11
	} else{
aaronchen2k2k's avatar
aaronchen2k2k 已提交
12
		return GenerateIntItemsRand(start, end, step.(int), repeat)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
13 14
	}
}
aaronchen2k2k's avatar
gen int  
aaronchen2k2k 已提交
15

16
func GenerateIntItemsByStep(start int64, end int64, step int, repeat int) []interface{} {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
17 18
	arr := make([]interface{}, 0)

19
	total := 0
aaronchen2k2k's avatar
aaronchen2k2k 已提交
20
	for i := 0; true; {
21
		val := start + int64(i * step)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
22 23 24
		if (val > end && step > 0) || (val < end && step < 0)  {
			break
		}
25

aaronchen2k2k's avatar
aaronchen2k2k 已提交
26
		for round := 0; round < repeat; round++ {
27 28
			arr = append(arr, val)

aaronchen2k2k's avatar
aaronchen2k2k 已提交
29
			total++
30 31 32
			if total > constant.MaxNumb {
				break
			}
aaronchen2k2k's avatar
aaronchen2k2k 已提交
33 34
		}

35
		if total >= constant.MaxNumb {
36 37
			break
		}
aaronchen2k2k's avatar
aaronchen2k2k 已提交
38
		i++
aaronchen2k2k's avatar
aaronchen2k2k 已提交
39 40
	}

aaronchen2k2k's avatar
gen int  
aaronchen2k2k 已提交
41 42 43
	return arr
}

aaronchen2k2k's avatar
aaronchen2k2k 已提交
44 45 46
func GenerateIntItemsRand(start int64, end int64, step int, repeat int) []interface{} {
	arr := make([]interface{}, 0)

aaronchen2k2k's avatar
aaronchen2k2k 已提交
47
	countInRound := (end - start) / int64(step) + 1
aaronchen2k2k's avatar
aaronchen2k2k 已提交
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
	total := 0
	for i := int64(0); i < countInRound; {
		rand := commonUtils.RandNum64(countInRound)
		if step < 0 {
			rand = rand * -1
		}

		val := start + rand
		for round := 0; round < repeat; round++ {
			arr = append(arr, val)

			total++

			if total > constant.MaxNumb {
				break
			}
		}

		if total > constant.MaxNumb {
			break
		}
		i++
	}

	return arr
}