Start on Bind tests

This commit is contained in:
Brandon Dyck 2024-09-13 14:50:12 -06:00
parent 828f804d8c
commit 6277f7bb72
2 changed files with 24 additions and 3 deletions

View File

@ -1,4 +1,3 @@
Test RuneReader Add Sequence parsers (generated)
Test Regexp
Add SPDX tags Add SPDX tags
What's Megaparsec got that we ain't got? What's Megaparsec got that we ain't got?

View File

@ -81,7 +81,29 @@ func TestChoose(t *testing.T) {
} }
func TestBind(t *testing.T) { func TestBind(t *testing.T) {
Todo(t) t.Run("fails without constructing second parser if the first parser fails", Todo)
t.Run("returns an error without constructing second parser if the first returns an error", Todo)
t.Run("fails if the second parser fails", Todo)
t.Run("returns an error if the second parser returns an error", Todo)
t.Run("succeeds if both parsers succeed", rapid.MakeCheck(func(t *rapid.T) {
// s := rapid.SliceOfN(rapid.Byte(), 0, 100)
t.Errorf("TODO")
}))
t.Run("consumption on success", rapid.MakeCheck(func(t *rapid.T) {
makeParser := func(consume bool) gigaparsec.Parser[byte, struct{}] {
return func(s gigaparsec.State[byte]) (gigaparsec.Result[byte, struct{}], error) {
return gigaparsec.Succeed(consume, struct{}{}, s, gigaparsec.MessageOK(0)), nil
}
}
pConsume := rapid.Bool().Draw(t, "pShouldConsume")
qConsume := rapid.Bool().Draw(t, "qShouldConsume")
p := makeParser(pConsume)
q := func(struct{}) gigaparsec.Parser[byte, struct{}] { return makeParser(qConsume) }
result, err := gigaparsec.Bind(p, q)(gigaparsec.MakeState(cursor.NewSlice([]byte{})))
must.NoError(t, err)
must.EqOp(t, pConsume || qConsume, result.Consumed())
}))
} }
func TestReturn(t *testing.T) { func TestReturn(t *testing.T) {