vise/go/state/state_test.go

149 lines
2.6 KiB
Go
Raw Normal View History

2023-03-31 11:52:04 +02:00
package state
import (
"testing"
)
func TestNewStateFlags(t *testing.T) {
2023-03-31 14:06:59 +02:00
st := NewState(5)
2023-03-31 11:52:04 +02:00
if len(st.Flags) != 1 {
t.Errorf("invalid state flag length: %v", len(st.Flags))
}
2023-03-31 14:06:59 +02:00
st = NewState(8)
2023-03-31 11:52:04 +02:00
if len(st.Flags) != 1 {
t.Errorf("invalid state flag length: %v", len(st.Flags))
}
2023-03-31 14:06:59 +02:00
st = NewState(17)
2023-03-31 11:52:04 +02:00
if len(st.Flags) != 3 {
t.Errorf("invalid state flag length: %v", len(st.Flags))
}
}
func TestNewStateCache(t *testing.T) {
2023-03-31 14:06:59 +02:00
st := NewState(17)
2023-03-31 11:52:04 +02:00
if st.CacheSize != 0 {
t.Errorf("cache size not 0")
}
st = st.WithCacheSize(102525)
if st.CacheSize != 102525 {
t.Errorf("cache size not 102525")
}
}
2023-03-31 11:59:55 +02:00
func TestStateCacheUse(t *testing.T) {
2023-03-31 14:06:59 +02:00
st := NewState(17)
2023-03-31 13:56:11 +02:00
st = st.WithCacheSize(10)
2023-03-31 16:03:54 +02:00
st.Down("foo")
err := st.Add("bar", "baz", 0)
2023-03-31 13:56:11 +02:00
if err != nil {
t.Error(err)
}
2023-03-31 16:03:54 +02:00
err = st.Add("inky", "pinky", 0)
2023-03-31 13:56:11 +02:00
if err != nil {
t.Error(err)
}
2023-03-31 16:03:54 +02:00
err = st.Add("blinky", "clyde", 0)
2023-03-31 13:56:11 +02:00
if err == nil {
t.Errorf("expected capacity error")
}
2023-03-31 11:59:55 +02:00
}
2023-03-31 14:06:59 +02:00
2023-03-31 16:03:54 +02:00
func TestStateDownUp(t *testing.T) {
2023-03-31 14:06:59 +02:00
st := NewState(17)
2023-03-31 16:03:54 +02:00
st.Down("one")
err := st.Add("foo", "bar", 0)
2023-03-31 14:06:59 +02:00
if err != nil {
t.Error(err)
}
2023-03-31 16:03:54 +02:00
err = st.Add("baz", "xyzzy", 0)
2023-03-31 14:06:59 +02:00
if err != nil {
t.Error(err)
}
if st.CacheUseSize != 8 {
t.Errorf("expected cache use size 8 got %v", st.CacheUseSize)
}
2023-03-31 16:03:54 +02:00
err = st.Up()
2023-03-31 14:06:59 +02:00
if err != nil {
t.Error(err)
}
2023-03-31 16:03:54 +02:00
err = st.Up()
2023-03-31 16:24:29 +02:00
if err != nil {
t.Error(err)
}
err = st.Up()
2023-03-31 14:06:59 +02:00
if err == nil {
t.Errorf("expected out of top frame error")
}
}
2023-03-31 15:04:08 +02:00
func TestStateReset(t *testing.T) {
st := NewState(17)
2023-03-31 16:03:54 +02:00
st.Down("one")
err := st.Add("foo", "bar", 0)
2023-03-31 15:04:08 +02:00
if err != nil {
t.Error(err)
}
2023-03-31 16:03:54 +02:00
err = st.Add("baz", "xyzzy", 0)
2023-03-31 15:04:08 +02:00
if err != nil {
t.Error(err)
}
2023-03-31 16:03:54 +02:00
st.Down("two")
st.Down("three")
2023-03-31 15:04:08 +02:00
st.Reset()
if st.CacheUseSize != 0 {
t.Errorf("expected cache use size 0, got %v", st.CacheUseSize)
}
if st.Depth() != 1 {
t.Errorf("expected depth 1, got %v", st.Depth())
}
}
func TestStateLoadDup(t *testing.T) {
st := NewState(17)
2023-03-31 16:03:54 +02:00
st.Down("one")
err := st.Add("foo", "bar", 0)
2023-03-31 15:04:08 +02:00
if err != nil {
t.Error(err)
}
2023-03-31 16:03:54 +02:00
st.Down("two")
err = st.Add("foo", "baz", 0)
2023-03-31 15:04:08 +02:00
if err == nil {
t.Errorf("expected fail on duplicate load")
}
}
2023-03-31 21:42:13 +02:00
func TestStateCurrentSize(t *testing.T) {
st := NewState(17)
st.Down("one")
err := st.Add("foo", "bar", 0)
if err != nil {
t.Error(err)
}
st.Down("two")
err = st.Add("bar", "xyzzy", 10)
if err != nil {
t.Error(err)
}
err = st.Map("bar")
if err != nil {
t.Error(err)
}
err = st.Add("baz", "inkypinkyblinkyclyde", 40)
if err != nil {
t.Error(err)
}
err = st.Map("baz")
if err != nil {
t.Error(err)
}
l, c := st.Size()
if l != 25 {
t.Errorf("expected actual length 25, got %v", l)
}
if c != 50 {
t.Errorf("expected actual length 50, got %v", c)
}
}