-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmem_test.go
87 lines (71 loc) · 1.76 KB
/
mem_test.go
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
80
81
82
83
84
85
86
87
package gg_test
import (
"testing"
"github.com/mitranim/gg"
"github.com/mitranim/gg/gtest"
)
type IniterStrs []string
func (self *IniterStrs) Init() {
if *self != nil {
panic(`redundant init`)
}
*self = []string{`one`, `two`, `three`}
}
func TestMem(t *testing.T) {
defer gtest.Catch(t)
{
// Note: `IniterStr` panics if init is called on a non-zero value.
// This is part of our contract.
var mem gg.Mem[gg.DurSecond, IniterStr, *IniterStr]
test := func() {
testMemZero[IniterStr](&mem)
gtest.Eq(mem.Get(), `inited`)
gtest.Eq(mem.Get(), `inited`)
gtest.Eq(mem.Peek(), `inited`)
gtest.Eq(mem.Peek(), `inited`)
testMemNotZero[IniterStr](&mem)
}
test()
mem.Clear()
test()
}
{
// Note: `IniterStrs` panics if init is called on a non-zero value.
// This is part of our contract.
var mem gg.Mem[gg.DurSecond, IniterStrs, *IniterStrs]
test := func() {
testMemZero[IniterStrs](&mem)
prev := mem.Get()
gtest.Equal(prev, []string{`one`, `two`, `three`})
gtest.SliceIs(mem.Get(), prev)
gtest.SliceIs(mem.Get(), prev)
gtest.NotZero(mem.Timed().Inst)
gtest.NotZero(mem.Timed().Inst)
testMemNotZero[IniterStrs](&mem)
}
test()
prev := mem.Get()
mem.Clear()
test()
next := mem.Get()
gtest.NotSliceIs(next, prev)
}
}
type Peeker[Tar any] interface {
gg.Peeker[Tar]
PeekTimed() gg.Timed[Tar]
}
func testMemZero[Tar any, Mem Peeker[Tar]](mem Mem) {
gtest.Zero(mem.Peek())
gtest.Zero(mem.Peek())
gtest.Zero(mem.PeekTimed())
gtest.Zero(mem.PeekTimed())
}
func testMemNotZero[Tar any, Mem Peeker[Tar]](mem Mem) {
gtest.NotZero(mem.Peek())
gtest.NotZero(mem.Peek())
gtest.NotZero(mem.PeekTimed())
gtest.NotZero(mem.PeekTimed())
gtest.NotZero(mem.PeekTimed().Inst)
gtest.NotZero(mem.PeekTimed().Inst)
}