diff --git a/graph/iterator/not_iterator.go b/graph/iterator/not_iterator.go index 3a3a4c4..7a9ea21 100644 --- a/graph/iterator/not_iterator.go +++ b/graph/iterator/not_iterator.go @@ -12,6 +12,7 @@ type Not struct { primaryIt graph.Iterator allIt graph.Iterator result graph.Value + err error runstats graph.IteratorStats } @@ -87,9 +88,16 @@ func (it *Not) Next() bool { return graph.NextLogOut(it, curr, true) } } + if err := graph.Err(it.allIt); err != nil { + it.err = err + } return graph.NextLogOut(it, nil, false) } +func (it *Not) Err() error { + return it.err +} + func (it *Not) Result() graph.Value { return it.result } diff --git a/graph/iterator/not_iterator_test.go b/graph/iterator/not_iterator_test.go index ac63b7c..e63a0a0 100644 --- a/graph/iterator/not_iterator_test.go +++ b/graph/iterator/not_iterator_test.go @@ -1,6 +1,7 @@ package iterator import ( + "errors" "reflect" "testing" ) @@ -42,3 +43,19 @@ func TestNotIteratorBasics(t *testing.T) { } } } + +func TestNotIteratorErr(t *testing.T) { + retErr := errors.New("unique") + allIt := newTestIterator(false, retErr) + + toComplementIt := NewFixed(Identity) + + not := NewNot(toComplementIt, allIt) + + if not.Next() != false { + t.Errorf("Not iterator did not pass through initial 'false'") + } + if not.Err() != retErr { + t.Errorf("Not iterator did not pass through underlying Err") + } +}