Files
wazero/internal/gojs/values/values_test.go
2023-07-05 16:56:18 +08:00

52 lines
1.2 KiB
Go

package values
import (
"testing"
"github.com/tetratelabs/wazero/internal/gojs/goos"
"github.com/tetratelabs/wazero/internal/testing/require"
)
func Test_Values(t *testing.T) {
t.Parallel()
vs := NewValues()
err := require.CapturePanic(func() {
_ = vs.Get(goos.NextID)
})
require.Contains(t, err.Error(), "is out of range 0")
v1 := "foo"
id1 := vs.Increment(v1)
v2 := "bar"
id2 := vs.Increment(v2)
require.Equal(t, goos.NextID, id1)
require.Equal(t, v1, vs.Get(id1))
// Second value should be at a sequential position
require.Equal(t, id1+1, id2)
require.Equal(t, v2, vs.Get(id2))
// Incrementing the ref count should return the same ID
require.Equal(t, id1, vs.Increment(v1))
require.Equal(t, v1, vs.Get(id1))
// Decrement and we should still get the value
vs.Decrement(id1)
require.Equal(t, v1, vs.Get(id1))
// Decrement again, and we should panic, as go should never attempt to
// get a value it already decremented to zero.
vs.Decrement(id1)
err = require.CapturePanic(func() {
_ = vs.Get(id1)
})
require.Contains(t, err.Error(), "was nil")
// Since the ID is no longer in use, we should be able to revive it.
require.Equal(t, id1, vs.Increment(v1))
require.Equal(t, v1, vs.Get(id1))
}