forked from OffchainLabs/nitro
-
Notifications
You must be signed in to change notification settings - Fork 13
/
queue_test.go
59 lines (48 loc) · 1.19 KB
/
queue_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
// Copyright 2021-2022, Offchain Labs, Inc.
// For license information, see https://github.com/nitro/blob/master/LICENSE
package arbos
import (
"testing"
"github.com/offchainlabs/nitro/arbos/arbosState"
"github.com/offchainlabs/nitro/arbos/storage"
"github.com/offchainlabs/nitro/arbos/util"
)
func TestQueue(t *testing.T) {
state, statedb := arbosState.NewArbosMemoryBackedArbOSState()
sto := state.BackingStorage().OpenCachedSubStorage([]byte{})
Require(t, storage.InitializeQueue(sto))
q := storage.OpenQueue(sto)
stateBefore := statedb.IntermediateRoot(false)
empty := func() bool {
empty, err := q.IsEmpty()
Require(t, err)
return empty
}
if !empty() {
Fail(t)
}
val0 := uint64(853139508)
for i := uint64(0); i < 150; i++ {
val := util.UintToHash(val0 + i)
Require(t, q.Put(val))
if empty() {
Fail(t)
}
}
for i := uint64(0); i < 150; i++ {
val := util.UintToHash(val0 + i)
res, err := q.Get()
Require(t, err)
if res.Big().Cmp(val.Big()) != 0 {
Fail(t)
}
}
if !empty() {
Fail(t)
}
cleared, err := q.Shift()
Require(t, err)
if !cleared || stateBefore != statedb.IntermediateRoot(false) {
Fail(t, "Emptying & shifting didn't clear the state")
}
}