Result is failed by default
This commit is contained in:
parent
0a149acf46
commit
7c7d0fef9b
1
TODO.txt
1
TODO.txt
@ -1,4 +1,3 @@
|
|||||||
Result should be Failed by default
|
|
||||||
Test RuneReader
|
Test RuneReader
|
||||||
Test Regexp
|
Test Regexp
|
||||||
Add SPDX tags
|
Add SPDX tags
|
||||||
|
@ -10,23 +10,23 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type Result[In, Out any] struct {
|
type Result[In, Out any] struct {
|
||||||
consumed, failed bool
|
consumed, succeeded bool
|
||||||
value Out
|
value Out
|
||||||
next State[In]
|
next State[In]
|
||||||
message Message
|
message Message
|
||||||
}
|
}
|
||||||
|
|
||||||
func Fail[In, Out any](consumed bool, msg Message) Result[In, Out] {
|
func Fail[In, Out any](consumed bool, msg Message) Result[In, Out] {
|
||||||
return Result[In, Out]{
|
return Result[In, Out]{
|
||||||
consumed: consumed,
|
consumed: consumed,
|
||||||
failed: true,
|
succeeded: false,
|
||||||
message: msg,
|
message: msg,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r Result[In, Out]) Failed() (ok, consumed bool, msg Message) {
|
func (r Result[In, Out]) Failed() (failed, consumed bool, msg Message) {
|
||||||
ok = r.failed
|
failed = !r.succeeded
|
||||||
if ok {
|
if failed {
|
||||||
consumed = r.consumed
|
consumed = r.consumed
|
||||||
msg = r.message
|
msg = r.message
|
||||||
}
|
}
|
||||||
@ -35,17 +35,17 @@ func (r Result[In, Out]) Failed() (ok, consumed bool, msg Message) {
|
|||||||
|
|
||||||
func Succeed[In, Out any](consumed bool, value Out, next State[In], msg Message) Result[In, Out] {
|
func Succeed[In, Out any](consumed bool, value Out, next State[In], msg Message) Result[In, Out] {
|
||||||
return Result[In, Out]{
|
return Result[In, Out]{
|
||||||
failed: false,
|
succeeded: true,
|
||||||
value: value,
|
value: value,
|
||||||
consumed: consumed,
|
consumed: consumed,
|
||||||
next: next,
|
next: next,
|
||||||
message: msg,
|
message: msg,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r Result[In, Out]) Succeeded() (ok, consumed bool, value Out, next State[In], msg Message) {
|
func (r Result[In, Out]) Succeeded() (succeeded, consumed bool, value Out, next State[In], msg Message) {
|
||||||
ok = !r.failed
|
succeeded = r.succeeded
|
||||||
if ok {
|
if succeeded {
|
||||||
consumed = r.consumed
|
consumed = r.consumed
|
||||||
value = r.value
|
value = r.value
|
||||||
next = r.next
|
next = r.next
|
||||||
|
@ -56,8 +56,10 @@ func TestSlice(t *testing.T) {
|
|||||||
r := ptest.ErrReaderAt(expectedErr)
|
r := ptest.ErrReaderAt(expectedErr)
|
||||||
c := cursor.NewReaderAt(r)
|
c := cursor.NewReaderAt(r)
|
||||||
s := rapid.SliceOfN(rapid.Byte(), 0, 100).Draw(t, "s")
|
s := rapid.SliceOfN(rapid.Byte(), 0, 100).Draw(t, "s")
|
||||||
_, err := gigaparsec.Slice(s)(gigaparsec.MakeState(c))
|
result, err := gigaparsec.Slice(s)(gigaparsec.MakeState(c))
|
||||||
|
failed, _, _ := result.Failed()
|
||||||
test.ErrorIs(t, err, expectedErr)
|
test.ErrorIs(t, err, expectedErr)
|
||||||
|
test.True(t, failed)
|
||||||
}))
|
}))
|
||||||
t.Run("succeeds when contents match", rapid.MakeCheck(func(t *rapid.T) {
|
t.Run("succeeds when contents match", rapid.MakeCheck(func(t *rapid.T) {
|
||||||
input := rapid.SliceOfN(rapid.Byte(), 1, -1).Draw(t, "input")
|
input := rapid.SliceOfN(rapid.Byte(), 1, -1).Draw(t, "input")
|
||||||
|
Loading…
Reference in New Issue
Block a user