Skip to content

Commit

Permalink
fix: Should properly look for element when removing (#29)
Browse files Browse the repository at this point in the history
  • Loading branch information
spydon authored Apr 16, 2024
1 parent cf77183 commit ed2d5a3
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 4 deletions.
6 changes: 3 additions & 3 deletions lib/ordered_set.dart
Original file line number Diff line number Diff line change
Expand Up @@ -79,8 +79,8 @@ class OrderedSet<E> extends IterableMixin<E> {
/// added.
bool add(E e) {
final elementSet = {e};
var added = false;
final isRootSet = added = _backingSet.add(elementSet);
var added = _backingSet.add(elementSet);
final isRootSet = added;
if (!isRootSet) {
added = _backingSet.lookup(elementSet)!.add(e);
}
Expand Down Expand Up @@ -137,7 +137,7 @@ class OrderedSet<E> extends IterableMixin<E> {
/// set.removeWhere((a) => a == e);
///
bool remove(E e) {
var bucket = _backingSet.lookup([e]);
var bucket = _backingSet.lookup({e});
if (bucket == null || !bucket.contains(e)) {
// We need a fallback in case [e] has changed and it's no longer found by
// lookup. Note: changing priorities will leave the splay set on an
Expand Down
12 changes: 11 additions & 1 deletion test/ordered_set_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -320,14 +320,24 @@ void main() {

test('sorts after remove', () {
final orderedSet = OrderedSet<int>();
// The initial elements must be in order.
// The initial elements must be in order to reproduce the issue.
orderedSet.addAll([1, 3, 4]);
expect(orderedSet.toList().join(), '134');
expect(orderedSet.remove(4), true);
expect(orderedSet.toList().join(), '13');
expect(orderedSet.add(2), true);
expect(orderedSet.toList().join(), '123');
});

test('correct order after remove', () {
final set = OrderedSet<int>();
set.add(10);
set.add(9);
set.remove(10);
set.add(11);
set.add(8);
expect(set.toList(), [8, 9, 11]);
});
});

group('rebalancing', () {
Expand Down

0 comments on commit ed2d5a3

Please sign in to comment.