summaryrefslogtreecommitdiff
path: root/state_test.go
diff options
context:
space:
mode:
authorAdam Scarr <adam@vektah.net>2017-08-06 23:32:10 +1000
committerAdam Scarr <adam@vektah.net>2017-08-06 23:32:10 +1000
commit666ea93dba377f267a2c8ecf97378a420db18383 (patch)
tree5efee0b6e4ccf44b854d9bb65e4e6fa5e7f86548 /state_test.go
parent9d7779e8ca5404f26abbd8cce0314d9cee967bba (diff)
Eliminate a bunch of allocations
Diffstat (limited to 'state_test.go')
-rw-r--r--state_test.go45
1 files changed, 45 insertions, 0 deletions
diff --git a/state_test.go b/state_test.go
new file mode 100644
index 0000000..fe04a58
--- /dev/null
+++ b/state_test.go
@@ -0,0 +1,45 @@
+package parsec
+
+import (
+ "testing"
+
+ "github.com/stretchr/testify/require"
+)
+
+func TestState_Advance(t *testing.T) {
+ ps := InputString("fooo")
+ require.Equal(t, 0, ps.Pos)
+ ps.Advance(2)
+ require.Equal(t, 2, ps.Pos)
+ ps.Advance(1)
+ require.Equal(t, 3, ps.Pos)
+}
+
+func TestState_Get(t *testing.T) {
+ ps := InputString("fooo")
+ require.Equal(t, "fooo", ps.Get())
+ ps.Advance(1)
+ require.Equal(t, "ooo", ps.Get())
+ ps.Advance(4)
+ require.Equal(t, "", ps.Get())
+ ps.Advance(10)
+ require.Equal(t, "", ps.Get())
+}
+
+func TestState_Errors(t *testing.T) {
+ ps := InputString("fooo")
+
+ ps.ErrorHere("hello")
+ require.Equal(t, "offset 0: Expected hello", ps.Error.Error())
+ require.Equal(t, 0, ps.Error.Pos())
+ require.True(t, ps.Errored())
+
+ ps.ClearError()
+ require.False(t, ps.Errored())
+
+ ps.Advance(2)
+ ps.ErrorHere("hello2")
+ require.Equal(t, "offset 2: Expected hello2", ps.Error.Error())
+ require.Equal(t, 2, ps.Error.Pos())
+ require.True(t, ps.Errored())
+}