package snowflake

import (
	"sync"
	"testing"

	"github.com/tursom/GoCollections/util/time"
)

func Test_snowflake_Close(t *testing.T) {
	s := New(0)
	s.Close()
	s.Close()
}

func Test_snowflake_New(t *testing.T) {
	s := New(1)

	ticker := time.NewTicker(time.Millisecond)
	defer ticker.Stop()

	var wg sync.WaitGroup

	for i := 0; i < 16; i++ {
		wg.Add(1)
		go func() {
			old := s.New()
			for i := 0; i < 10_000_000; i++ {
				n := s.New()
				if n <= old {
					panic(n)
				}
				old = n
			}

			wg.Done()
		}()
	}

	wg.Wait()
}