mirror of
https://github.com/luxfi/evm.git
synced 2026-09-24 00:27:44 +00:00
51 lines
894 B
Go
51 lines
894 B
Go
// (c) 2020-2020, Lux Industries, Inc. All rights reserved.
|
|
// See the file LICENSE for licensing terms.
|
|
|
|
package utils
|
|
|
|
import (
|
|
"sync"
|
|
"time"
|
|
)
|
|
|
|
// MockableClock implements MockableTimer
|
|
type MockableClock struct {
|
|
mu sync.RWMutex
|
|
time time.Time
|
|
}
|
|
|
|
// NewMockableClock creates a new mockable clock
|
|
func NewMockableClock() MockableTimer {
|
|
return &MockableClock{
|
|
time: time.Now(),
|
|
}
|
|
}
|
|
|
|
// Time returns the current time
|
|
func (c *MockableClock) Time() time.Time {
|
|
c.mu.RLock()
|
|
defer c.mu.RUnlock()
|
|
|
|
if c.time.IsZero() {
|
|
return time.Now()
|
|
}
|
|
return c.time
|
|
}
|
|
|
|
// Set sets the current time
|
|
func (c *MockableClock) Set(t time.Time) {
|
|
c.mu.Lock()
|
|
defer c.mu.Unlock()
|
|
c.time = t
|
|
}
|
|
|
|
// Advance advances the time by duration
|
|
func (c *MockableClock) Advance(d time.Duration) {
|
|
c.mu.Lock()
|
|
defer c.mu.Unlock()
|
|
|
|
if c.time.IsZero() {
|
|
c.time = time.Now()
|
|
}
|
|
c.time = c.time.Add(d)
|
|
} |