func NewBucketWithClock(fillInterval time.Duration, capacity int64, clock Clock) *Bucket {
	return NewBucketWithQuantumAndClock(fillInterval, capacity, 1, clock)
}
NewBucketWithClock is identical to NewBucket but injects a testable clock
interface.
package ratelimit
import (
	"math"
	"strconv"
	"sync"
	"time"
)
type Bucket struct {
	clock Clock
	startTime time.Time
	capacity int64
	quantum int64
	fillInterval time.Duration
	mu sync.Mutex
	availableTokens int64
	latestTick int64
}
func NewBucket(fillInterval time.Duration, capacity int64) *Bucket {
	return NewBucketWithClock(fillInterval, capacity, nil)
}