File: time_test.go

package info (click to toggle)
golang-github-lucas-clemente-quic-go 0.55.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 4,376 kB
  • sloc: sh: 54; makefile: 14
file content (79 lines) | stat: -rw-r--r-- 1,707 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
package monotime

import (
	"testing"
	"time"

	"github.com/quic-go/quic-go/internal/synctest"

	"github.com/stretchr/testify/require"
)

func TestTimeRelations(t *testing.T) {
	t1 := Now()
	require.Equal(t, t1, t1)
	require.False(t, t1.IsZero())

	t2 := t1.Add(time.Second)

	require.False(t, t1.Equal(t2))
	require.False(t, t2.Equal(t1))

	require.True(t, t2.After(t1))
	require.False(t, t1.After(t2))
	require.False(t, t2.Before(t1))

	require.Equal(t, t2.Sub(t1), time.Second)
	require.Equal(t, t1.Sub(t2), -time.Second)
}

func TestSince(t *testing.T) {
	synctest.Test(t, func(t *testing.T) {
		t1 := Now()
		time.Sleep(time.Second)
		require.Equal(t, Since(t1), time.Second)
		require.Equal(t, Now().Sub(t1), time.Second)
		time.Sleep(time.Minute)
		require.Equal(t, Since(t1), time.Minute+time.Second)
		require.Equal(t, Now().Sub(t1), time.Minute+time.Second)
	})
}

func TestUntil(t *testing.T) {
	synctest.Test(t, func(t *testing.T) {
		t1 := Now().Add(time.Minute)
		require.Equal(t, Until(t1), time.Minute)
		require.Equal(t, t1.Sub(Now()), time.Minute)
		time.Sleep(15 * time.Second)
		require.Equal(t, Until(t1), 45*time.Second)
		require.Equal(t, t1.Sub(Now()), 45*time.Second)
	})
}

func TestConversions(t *testing.T) {
	t1 := Now()
	t1Time := t1.ToTime()
	require.Equal(t, FromTime(t1Time), t1)
	require.Zero(t, t1Time.Sub(t1.ToTime()))

	var zeroTime time.Time
	require.Zero(t, FromTime(zeroTime))
	require.Zero(t, FromTime(zeroTime))

	var zero Time
	require.True(t, zero.ToTime().IsZero())
}

func BenchmarkNow(b *testing.B) {
	b.Run("Now", func(b *testing.B) {
		for b.Loop() {
			_ = Now()
		}
	})

	b.Run("time.Now", func(b *testing.B) {
		for b.Loop() {
			_ = time.Now()
		}
	})
}