1
0
mirror of https://github.com/charlienet/go-mixed.git synced 2025-07-17 16:12:42 +08:00
Files
go-mixed/idGenerator/genterator_test.go
2023-11-03 15:48:14 +08:00

149 lines
2.9 KiB
Go

package idgenerator_test
import (
"sync"
"testing"
idgenerator "github.com/charlienet/go-mixed/idGenerator"
"github.com/charlienet/go-mixed/redis"
"github.com/charlienet/go-mixed/sets"
"github.com/charlienet/go-mixed/tests"
)
func TestGenerator(t *testing.T) {
tests.RunOnRedis(t, func(rdb redis.Client) {
generator, err := idgenerator.New(
idgenerator.WithDecimalFormater(idgenerator.YYYYMMDDHHmmss, 1, 1),
idgenerator.WithRedis("idgen_test", rdb))
if err != nil {
t.Fatal(err)
}
for i := 0; i < 20; i++ {
t.Log(generator.Next())
}
})
}
func TestDecimalGenerator(t *testing.T) {
tests.RunOnDefaultRedis(t, func(rdb redis.Client) {
generator, err := idgenerator.New(
idgenerator.WithDecimalFormater(idgenerator.YYYYMMDDHHmmss, 3, 1),
idgenerator.WithRedis("idgen_test", rdb))
if err != nil {
t.Fatal(err)
}
for i := 0; i < 200; i++ {
t.Log(generator.Next())
}
})
}
func TestDecimalMonth(t *testing.T) {
tests.RunOnDefaultRedis(t, func(rdb redis.Client) {
generator, err := idgenerator.New(
idgenerator.WithDecimalFormater(idgenerator.YYYYMMDD, 2, 1),
idgenerator.WithRedis("idgen_test", rdb))
if err != nil {
t.Fatal(err)
}
for i := 0; i < 105; i++ {
t.Log(generator.Next())
}
})
}
func TestParallelCreate(t *testing.T) {
tests.RunOnDefaultRedis(t, func(rdb redis.Client) {
var wg sync.WaitGroup
wg.Add(2)
go func() {
defer wg.Done()
g1, err := idgenerator.New(
idgenerator.WithDecimalFormater(idgenerator.YYYYMMDDHHmmss, 3, 1),
idgenerator.WithRedis("idgen_testcccc", rdb))
if err != nil {
panic(err)
}
_ = g1.Next().Int64()
}()
go func() {
defer wg.Done()
g2, err := idgenerator.New(
idgenerator.WithDecimalFormater(idgenerator.YYYYMMDDHHmmss, 3, 1),
idgenerator.WithRedis("idgen_testcccc", rdb))
if err != nil {
panic(err)
}
_ = g2.Next().Int64()
}()
wg.Wait()
})
}
func TestParallel(t *testing.T) {
set := sets.NewHashSet[int64]().Sync()
_ = set
f := func() {
tests.RunOnDefaultRedis(t, func(rdb redis.Client) {
generator, err := idgenerator.New(
idgenerator.WithDecimalFormater(idgenerator.YYYYMMDDHHmmss, 3, 1),
idgenerator.WithRedis("idgen_testcccc", rdb))
if err != nil {
t.Fatal(err)
}
defer generator.Close()
generator.Next()
for i := 0; i < 50000; i++ {
id := generator.Next().Int64()
if set.Contains(id) {
panic("生成重复")
}
set.Add(id)
}
})
}
var wg sync.WaitGroup
for i := 0; i < 6; i++ {
wg.Add(1)
go func() {
defer wg.Done()
f()
}()
}
wg.Wait()
}
func BenchmarkGenerator(b *testing.B) {
tests.RunOnDefaultRedis(b, func(rdb redis.Client) {
b.Run("bbb", func(b *testing.B) {
generator, err := idgenerator.New(
idgenerator.WithDecimalFormater(idgenerator.YYYYMMDDHHmmss, 3, 1),
idgenerator.WithRedis("idgen_test", rdb))
if err != nil {
b.Fatal(err)
}
for i := 0; i < 999; i++ {
generator.Next()
}
})
})
}