diff --git a/lib/src/imap.dart b/lib/src/imap.dart index 78631af..3d8d464 100644 --- a/lib/src/imap.dart +++ b/lib/src/imap.dart @@ -364,9 +364,19 @@ class _NonEmptyIMapAVLNode extends _IMapAVLNode { if (o == Ordering.EQ) { return some(current._k); } else if (o == Ordering.LT) { - current = current._left._unsafeGetNonEmpty()!; + final l = current._left._unsafeGetNonEmpty(); + if (l != null) { + current = l; + } else { + return none(); + } } else { - current = current._right._unsafeGetNonEmpty()!; + final r = current._right._unsafeGetNonEmpty(); + if (r != null) { + current = r; + } else { + return none(); + } } } return none(); diff --git a/test/imap_test.dart b/test/imap_test.dart index 6d68a06..f6bf759 100644 --- a/test/imap_test.dart +++ b/test/imap_test.dart @@ -60,6 +60,11 @@ void main() { final m = dynamicM as IMap, int>; return m.keys().all((t) => m.getKey(tuple2(t.value1, 0)) == some(t)); })); + qc.check(forall(complexIMaps, (dynamicM) { + final m = dynamicM as IMap, int>; + return m.keys().any((t) => m.getKey(tuple2(t.value1 + 1, 0)) == none()); + })); + }); test("pair iterable", () => qc.check(forall(intIMaps, (dynamicM) {