feat: Seeder
This commit is contained in:
@@ -19,17 +19,17 @@ const (
|
|||||||
RandomStringSeed SeedType = "RandomString"
|
RandomStringSeed SeedType = "RandomString"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Randomizer struct {
|
type Seeder struct {
|
||||||
seedType SeedType
|
seedType SeedType
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewRandomizer(seedType SeedType) *Randomizer {
|
func NewSeeder(seedType SeedType) *Seeder {
|
||||||
return &Randomizer{
|
return &Seeder{
|
||||||
seedType: seedType,
|
seedType: seedType,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *Randomizer) UnixNano() int64 {
|
func (r *Seeder) UnixNano() int64 {
|
||||||
// 获取当前时间戳
|
// 获取当前时间戳
|
||||||
timestamp := time.Now().UnixNano()
|
timestamp := time.Now().UnixNano()
|
||||||
|
|
||||||
@@ -50,11 +50,11 @@ func (r *Randomizer) UnixNano() int64 {
|
|||||||
return seed
|
return seed
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *Randomizer) MapHash() int64 {
|
func (r *Seeder) MapHash() int64 {
|
||||||
return int64(new(maphash.Hash).Sum64())
|
return int64(new(maphash.Hash).Sum64())
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *Randomizer) CryptoRand() int64 {
|
func (r *Seeder) CryptoRand() int64 {
|
||||||
var b [8]byte
|
var b [8]byte
|
||||||
_, err := cryptoRand.Read(b[:])
|
_, err := cryptoRand.Read(b[:])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -66,7 +66,7 @@ func (r *Randomizer) CryptoRand() int64 {
|
|||||||
|
|
||||||
var Alpha = "abcdefghijkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789"
|
var Alpha = "abcdefghijkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789"
|
||||||
|
|
||||||
func (r *Randomizer) RandomString() int64 {
|
func (r *Seeder) RandomString() int64 {
|
||||||
const size = 8
|
const size = 8
|
||||||
buf := make([]byte, size)
|
buf := make([]byte, size)
|
||||||
for i := 0; i < size; i++ {
|
for i := 0; i < size; i++ {
|
||||||
@@ -77,7 +77,7 @@ func (r *Randomizer) RandomString() int64 {
|
|||||||
return seed
|
return seed
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *Randomizer) Seed() int64 {
|
func (r *Seeder) Seed() int64 {
|
||||||
switch r.seedType {
|
switch r.seedType {
|
||||||
default:
|
default:
|
||||||
fallthrough
|
fallthrough
|
||||||
@@ -94,6 +94,6 @@ func (r *Randomizer) Seed() int64 {
|
|||||||
|
|
||||||
// Seed generates a seed based on the specified SeedType.
|
// Seed generates a seed based on the specified SeedType.
|
||||||
func Seed(seedType SeedType) int64 {
|
func Seed(seedType SeedType) int64 {
|
||||||
randomizer := NewRandomizer(seedType)
|
randomizer := NewSeeder(seedType)
|
||||||
return randomizer.Seed()
|
return randomizer.Seed()
|
||||||
}
|
}
|
||||||
@@ -5,45 +5,45 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestUnixNano(t *testing.T) {
|
func TestUnixNanoSeed(t *testing.T) {
|
||||||
randomizer := NewRandomizer(UnixNanoSeed)
|
seeder := NewSeeder(UnixNanoSeed)
|
||||||
|
|
||||||
var seeds = make(map[int64]bool)
|
var seeds = make(map[int64]bool)
|
||||||
for i := 0; i < 100000; i++ {
|
for i := 0; i < 100000; i++ {
|
||||||
seed := randomizer.Seed()
|
seed := seeder.Seed()
|
||||||
seeds[seed] = true
|
seeds[seed] = true
|
||||||
}
|
}
|
||||||
fmt.Println("UnixNano Seed", len(seeds))
|
fmt.Println("UnixNano Seed", len(seeds))
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestMapHash(t *testing.T) {
|
func TestMapHashSeed(t *testing.T) {
|
||||||
randomizer := NewRandomizer(MapHashSeed)
|
seeder := NewSeeder(MapHashSeed)
|
||||||
|
|
||||||
var seeds = make(map[int64]bool)
|
var seeds = make(map[int64]bool)
|
||||||
for i := 0; i < 100000; i++ {
|
for i := 0; i < 100000; i++ {
|
||||||
seed := randomizer.Seed()
|
seed := seeder.Seed()
|
||||||
seeds[seed] = true
|
seeds[seed] = true
|
||||||
}
|
}
|
||||||
fmt.Println("MapHash Seed", len(seeds))
|
fmt.Println("MapHash Seed", len(seeds))
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestCryptoRand(t *testing.T) {
|
func TestCryptoRandSeed(t *testing.T) {
|
||||||
randomizer := NewRandomizer(CryptoRandSeed)
|
seeder := NewSeeder(CryptoRandSeed)
|
||||||
|
|
||||||
var seeds = make(map[int64]bool)
|
var seeds = make(map[int64]bool)
|
||||||
for i := 0; i < 100000; i++ {
|
for i := 0; i < 100000; i++ {
|
||||||
seed := randomizer.Seed()
|
seed := seeder.Seed()
|
||||||
seeds[seed] = true
|
seeds[seed] = true
|
||||||
}
|
}
|
||||||
fmt.Println("CryptoRand Seed", len(seeds))
|
fmt.Println("CryptoRand Seed", len(seeds))
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestRandomString(t *testing.T) {
|
func TestRandomStringSeed(t *testing.T) {
|
||||||
randomizer := NewRandomizer(RandomStringSeed)
|
seeder := NewSeeder(RandomStringSeed)
|
||||||
|
|
||||||
var seeds = make(map[int64]bool)
|
var seeds = make(map[int64]bool)
|
||||||
for i := 0; i < 100000; i++ {
|
for i := 0; i < 100000; i++ {
|
||||||
seed := randomizer.Seed()
|
seed := seeder.Seed()
|
||||||
seeds[seed] = true
|
seeds[seed] = true
|
||||||
}
|
}
|
||||||
fmt.Println("RandomString Seed", len(seeds))
|
fmt.Println("RandomString Seed", len(seeds))
|
||||||
Reference in New Issue
Block a user